diff --git a/.dockerignore b/.dockerignore
new file mode 100644
index 0000000..a258671
--- /dev/null
+++ b/.dockerignore
@@ -0,0 +1,20 @@
+# Docker build context is the repo root (projects reference each other via ProjectReference),
+# so keep the context small and free of local build artifacts.
+
+**/node_modules
+**/bin
+**/obj
+**/publish
+**/.vs
+**/.vscode-test
+**/*.vsix
+**/local.settings.json
+
+durablefunctionsmonitor-vscodeext/backend
+durablefunctionsmonitor-vscodeext/custom-backends
+durablefunctionsmonitor-vscodeext/out
+durablefunctionsmonitor.react/node_modules
+
+.git
+.github
+readme
diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml
new file mode 100644
index 0000000..66f6673
--- /dev/null
+++ b/.github/workflows/build.yml
@@ -0,0 +1,138 @@
+name: build
+
+# Reusable build. Produces the NuGet packages and the VSIX, but never publishes anything.
+# Called by pr-build.yml, main-build.yml and publish-nuget.yml.
+
+on:
+ workflow_call:
+ inputs:
+ version:
+ description: 'Full package version to stamp (e.g. 6.9.0 or 6.9.0-preview.42)'
+ required: true
+ type: string
+ package-id-prefix:
+ description: 'Prefix applied to every package id, including the trailing dot. Empty = upstream ids.'
+ required: false
+ default: ''
+ type: string
+
+jobs:
+ build:
+ runs-on: ubuntu-22.04
+
+ steps:
+ - uses: actions/checkout@v4
+
+ - name: create ArtifactStagingDirectory folder
+ run: mkdir drop
+
+ # Building and copying React
+
+ - name: npm install durablefunctionsmonitor.react
+ run: npm install -legacy-peer-deps
+ working-directory: durablefunctionsmonitor.react
+ - name: npm build durablefunctionsmonitor.react
+ run: npm run build
+ working-directory: durablefunctionsmonitor.react
+
+ - name: copy statics to durablefunctionsmonitor.dotnetisolated/DfmStatics
+ run: |
+ rm -rf durablefunctionsmonitor.dotnetisolated/DfmStatics
+ cp -r durablefunctionsmonitor.react/build durablefunctionsmonitor.dotnetisolated/DfmStatics
+
+ # Building and testing .NET
+
+ - name: Setup .NET
+ uses: actions/setup-dotnet@v4
+ with:
+ dotnet-version: 8.0.x
+
+ - name: dotnet test tests/durablefunctionsmonitor.dotnetisolated.core.tests
+ run: dotnet test tests/durablefunctionsmonitor.dotnetisolated.core.tests/*.csproj -c Release
+
+ - name: copy durablefunctionsmonitor.dotnetisolated to ArtifactStagingDirectory
+ run: cp -r durablefunctionsmonitor.dotnetisolated drop/durablefunctionsmonitor.dotnetisolated
+
+ - name: dotnet publish durablefunctionsmonitor.dotnetisolated
+ run: dotnet publish durablefunctionsmonitor.dotnetisolated -c Release -p:Version=${{ inputs.version }} --output drop/durablefunctionsmonitor.dotnetisolated/output
+ - name: dotnet publish dotnetIsolated-mssql
+ run: dotnet publish custom-backends/dotnetIsolated-mssql -c Release -p:Version=${{ inputs.version }} --output drop/dotnetIsolated-mssql/output
+ - name: dotnet publish dotnetIsolated-netherite
+ run: dotnet publish custom-backends/dotnetIsolated-netherite -c Release -p:Version=${{ inputs.version }} --output drop/dotnetIsolated-netherite/output
+
+ # Building nuget packages
+
+ - name: copy LICENSE.txt into each publish output
+ run: |
+ for d in durablefunctionsmonitor.dotnetisolated dotnetIsolated-mssql dotnetIsolated-netherite; do
+ cp durablefunctionsmonitor.dotnetisolated/LICENSE.txt drop/$d/output/
+ done
+
+ - name: Install latest nuget.exe
+ uses: nuget/setup-nuget@v4
+
+ - name: pack nuget packages
+ env:
+ VERSION: ${{ inputs.version }}
+ PREFIX: ${{ inputs.package-id-prefix }}
+ run: |
+ set -euo pipefail
+ pack () {
+ local dir="$1" base_id="$2"
+ local id="${PREFIX}${base_id}"
+ echo "::group::pack $id $VERSION"
+ nuget pack "drop/$dir/output/nuspec.nuspec" \
+ -Properties "id=$id;version=$VERSION" \
+ -OutputDirectory drop/packages
+ echo "::endgroup::"
+ }
+ pack durablefunctionsmonitor.dotnetisolated DurableFunctionsMonitor.DotNetIsolated
+ pack dotnetIsolated-mssql DurableFunctionsMonitor.DotNetIsolated.MsSql
+ pack dotnetIsolated-netherite DurableFunctionsMonitor.DotNetIsolated.Netherite
+ ls -la drop/packages
+
+ # Building the vscode extension.
+ # Custom backends ship as published binaries, because they reference
+ # durablefunctionsmonitor.dotnetisolated.* by project and cannot be built from the VSIX itself.
+
+ - name: copy dotnetisolated to durablefunctionsmonitor-vscodeext/backend
+ run: cp -r drop/durablefunctionsmonitor.dotnetisolated/output durablefunctionsmonitor-vscodeext/backend
+
+ - name: copy custom backends to durablefunctionsmonitor-vscodeext/custom-backends
+ run: |
+ mkdir -p durablefunctionsmonitor-vscodeext/custom-backends
+ cp -r drop/dotnetIsolated-mssql/output durablefunctionsmonitor-vscodeext/custom-backends/dotnetIsolated-mssql
+ cp -r drop/dotnetIsolated-netherite/output durablefunctionsmonitor-vscodeext/custom-backends/dotnetIsolated-netherite
+
+ - name: npm install durablefunctionsmonitor-vscodeext
+ run: npm install
+ working-directory: durablefunctionsmonitor-vscodeext
+ - name: npm install -g azure-functions-core-tools@4
+ run: npm install -g azure-functions-core-tools@4
+ working-directory: durablefunctionsmonitor-vscodeext
+ - name: run tests on durablefunctionsmonitor-vscodeext
+ # TODO: vscode test pipeline was broken, need to investigate and fix
+ if: 'false'
+ run: npm run test
+ working-directory: durablefunctionsmonitor-vscodeext
+ - name: package durablefunctionsmonitor-vscodeext to VSIX-file
+ run: npm run package
+ working-directory: durablefunctionsmonitor-vscodeext
+ - name: copy VSIX-file to ArtifactStagingDirectory
+ run: cp durablefunctionsmonitor-vscodeext/durablefunctionsmonitor*.vsix drop
+
+ # Publish artifacts
+
+ - name: upload nuget packages
+ uses: actions/upload-artifact@v4
+ with:
+ name: packages
+ path: drop/packages/*.nupkg
+ if-no-files-found: error
+
+ - name: upload vsix
+ uses: actions/upload-artifact@v4
+ with:
+ name: vsix
+ path: drop/*.vsix
+ if-no-files-found: error
diff --git a/.github/workflows/main-build.yml b/.github/workflows/main-build.yml
index b2cd1aa..1b88506 100644
--- a/.github/workflows/main-build.yml
+++ b/.github/workflows/main-build.yml
@@ -1,109 +1,62 @@
-
name: main-build
+# Every push to main builds everything and publishes a prerelease of each package
+# to GitHub Packages, so the custom backends can be consumed via PackageReference
+# before a version is cut to nuget.org.
+
on:
workflow_dispatch:
push:
branches: [ "main" ]
- pull_request:
- branches: [ "main" ]
-jobs:
- build:
+permissions:
+ contents: read
- runs-on: ubuntu-22.04
+concurrency:
+ group: main-build
+ cancel-in-progress: false
+jobs:
+ version:
+ runs-on: ubuntu-22.04
+ outputs:
+ version: ${{ steps.v.outputs.version }}
steps:
- uses: actions/checkout@v4
-
- - name: create ArtifactStagingDirectory folder
- run: mkdir drop
-
- # Building and copying React
-
- - name: npm install durablefunctionsmonitor.react
- run: npm install -legacy-peer-deps
- working-directory: durablefunctionsmonitor.react
- - name: npm build durablefunctionsmonitor.react
- run: npm run build
- working-directory: durablefunctionsmonitor.react
-
- - name: copy statics to durablefunctionsmonitor.dotnetbackend/DfmStatics
+ - name: derive prerelease version from Directory.Build.props
+ id: v
run: |
- rm -rf durablefunctionsmonitor.dotnetbackend/DfmStatics
- cp -r durablefunctionsmonitor.react/build durablefunctionsmonitor.dotnetbackend/DfmStatics
+ set -euo pipefail
+ PREFIX=$(sed -n 's:.*\(.*\).*:\1:p' Directory.Build.props)
+ if [ -z "$PREFIX" ]; then echo "::error::VersionPrefix not found in Directory.Build.props"; exit 1; fi
+ echo "version=${PREFIX}-preview.${{ github.run_number }}" >> "$GITHUB_OUTPUT"
- - name: copy statics to durablefunctionsmonitor.dotnetisolated/DfmStatics
- run: |
- rm -rf durablefunctionsmonitor.dotnetisolated/DfmStatics
- cp -r durablefunctionsmonitor.react/build durablefunctionsmonitor.dotnetisolated/DfmStatics
+ build:
+ needs: version
+ uses: ./.github/workflows/build.yml
+ with:
+ version: ${{ needs.version.outputs.version }}
- # Building and testing .NET
+ publish-github-packages:
+ needs: [ version, build ]
+ runs-on: ubuntu-22.04
+ permissions:
+ contents: read
+ packages: write
+ steps:
+ - uses: actions/download-artifact@v4
+ with:
+ name: packages
+ path: packages
- name: Setup .NET
uses: actions/setup-dotnet@v4
with:
dotnet-version: 8.0.x
- - name: dotnet test tests/durablefunctionsmonitor.dotnetbackend.tests
- run: dotnet test tests/durablefunctionsmonitor.dotnetbackend.tests/*.csproj
- - name: dotnet test tests/durablefunctionsmonitor.dotnetisolated.core.tests
- run: dotnet test tests/durablefunctionsmonitor.dotnetisolated.core.tests/*.csproj
-
- - name: copy durablefunctionsmonitor.dotnetbackend to ArtifactStagingDirectory
- run: cp -r durablefunctionsmonitor.dotnetbackend drop/durablefunctionsmonitor.dotnetbackend
-
- - name: copy durablefunctionsmonitor.dotnetisolated to ArtifactStagingDirectory
- run: cp -r durablefunctionsmonitor.dotnetisolated drop/durablefunctionsmonitor.dotnetisolated
-
- - name: dotnet publish durablefunctionsmonitor.dotnetbackend
- run: dotnet publish durablefunctionsmonitor.dotnetbackend --output drop/durablefunctionsmonitor.dotnetbackend/output
- - name: dotnet publish durablefunctionsmonitor.dotnetisolated
- run: dotnet publish durablefunctionsmonitor.dotnetisolated --output drop/durablefunctionsmonitor.dotnetisolated/output
-
- # Building and testing vscode extension
-
- - name: copy dotnetbackend to durablefunctionsmonitor-vscodeext/backend
- run: cp -r drop/durablefunctionsmonitor.dotnetbackend/output durablefunctionsmonitor-vscodeext/backend
-
- - name: copy custom-backends to durablefunctionsmonitor-vscodeext/custom-backends
- run: cp -r custom-backends durablefunctionsmonitor-vscodeext/custom-backends
-
- - name: npm install durablefunctionsmonitor-vscodeext
- run: npm install
- working-directory: durablefunctionsmonitor-vscodeext
- - name: npm install -g azure-functions-core-tools@4
- run: npm install -g azure-functions-core-tools@4
- working-directory: durablefunctionsmonitor-vscodeext
- - name: run tests on durablefunctionsmonitor-vscodeext
- # TODO: vscode test pipeline was broken, need to investigate and fix
- if: 'false'
- run: npm run test
- working-directory: durablefunctionsmonitor-vscodeext
- - name: package durablefunctionsmonitor-vscodeext to VSIX-file
- run: npm run package
- working-directory: durablefunctionsmonitor-vscodeext
- - name: copy VSIX-file to ArtifactStagingDirectory
- run: cp durablefunctionsmonitor-vscodeext/durablefunctionsmonitor*.vsix drop
-
- # Building nuget packages
-
- - name: copy LICENSE to durablefunctionsmonitor.dotnetbackend/output
- run: cp LICENSE drop/durablefunctionsmonitor.dotnetbackend/output
- - name: copy LICENSE.txt to durablefunctionsmonitor.dotnetisolated/output
- run: cp durablefunctionsmonitor.dotnetisolated/LICENSE.txt drop/durablefunctionsmonitor.dotnetisolated/output
-
- - name: Install latest nuget.exe
- uses: nuget/setup-nuget@v1.2.0
- - name: package dotnetbackend into a Nuget package
- run: nuget pack drop/durablefunctionsmonitor.dotnetbackend/output/nuspec.nuspec -OutputDirectory drop
- - name: package dotnetisolated into a Nuget package
- run: nuget pack drop/durablefunctionsmonitor.dotnetisolated/output/nuspec.nuspec -OutputDirectory drop
-
- # Publish artifacts
-
- - name: publish artifacts
- uses: actions/upload-artifact@v4.1.0
- with:
- path: drop
-
+ - name: push to GitHub Packages
+ run: |
+ dotnet nuget push "packages/*.nupkg" \
+ --source "https://nuget.pkg.github.com/${{ github.repository_owner }}/index.json" \
+ --api-key "${{ secrets.GITHUB_TOKEN }}" \
+ --skip-duplicate
diff --git a/.github/workflows/pr-build.yml b/.github/workflows/pr-build.yml
new file mode 100644
index 0000000..a409df8
--- /dev/null
+++ b/.github/workflows/pr-build.yml
@@ -0,0 +1,22 @@
+name: pr-build
+
+# Validates every PR: builds React, runs the .NET tests, packs the NuGet packages
+# and builds the VSIX. Publishes nothing.
+
+on:
+ pull_request:
+ branches: [ "main" ]
+
+permissions:
+ contents: read
+
+concurrency:
+ group: pr-build-${{ github.event.pull_request.number }}
+ cancel-in-progress: true
+
+jobs:
+ build:
+ uses: ./.github/workflows/build.yml
+ with:
+ # PR packages are never pushed, so the exact version only has to be valid and unique-ish
+ version: 0.0.0-pr${{ github.event.pull_request.number }}.${{ github.run_number }}
diff --git a/.github/workflows/publish-nuget.yml b/.github/workflows/publish-nuget.yml
new file mode 100644
index 0000000..cc0986d
--- /dev/null
+++ b/.github/workflows/publish-nuget.yml
@@ -0,0 +1,92 @@
+name: publish-nuget
+
+# Cuts a public release to nuget.org, triggered by a version tag:
+#
+# git tag v6.9.0 && git push origin main --tags
+#
+# Auth is NuGet Trusted Publishing (OIDC) - there is no API key secret.
+# The nuget.org policy is bound to THIS filename (publish-nuget.yml) and to the
+# 'release' environment used below; renaming either breaks the policy.
+#
+# Requires repository variable PACKAGE_ID_PREFIX (Settings > Secrets and variables >
+# Actions > Variables) and environment secret NUGET_USER on the 'release' environment.
+
+on:
+ push:
+ tags:
+ - 'v*'
+
+permissions:
+ contents: read
+
+jobs:
+ preflight:
+ runs-on: ubuntu-22.04
+ outputs:
+ version: ${{ steps.v.outputs.version }}
+ steps:
+ - uses: actions/checkout@v4
+
+ - name: tag must match Directory.Build.props
+ id: v
+ run: |
+ set -euo pipefail
+ TAG_VERSION="${GITHUB_REF_NAME#v}"
+ PREFIX=$(sed -n 's:.*\(.*\).*:\1:p' Directory.Build.props)
+ if [ "$TAG_VERSION" != "$PREFIX" ]; then
+ echo "::error::Tag $GITHUB_REF_NAME implies version '$TAG_VERSION', but Directory.Build.props says '$PREFIX'. Bump VersionPrefix and re-tag."
+ exit 1
+ fi
+ echo "version=$TAG_VERSION" >> "$GITHUB_OUTPUT"
+
+ - name: package id prefix must be set
+ env:
+ PACKAGE_ID_PREFIX: ${{ vars.PACKAGE_ID_PREFIX }}
+ run: |
+ if [ -z "${PACKAGE_ID_PREFIX}" ]; then
+ echo "::error::Repository variable PACKAGE_ID_PREFIX is not set."
+ echo "::error::DurableFunctionsMonitor.DotNetIsolated and .MsSql already exist on nuget.org under different"
+ echo "::error::owners (durablefunctionsmonitor, kolepes), so pushing them from this repo will be rejected."
+ echo "::error::Set PACKAGE_ID_PREFIX to a prefix you own, including the trailing dot - e.g. 'Balusu.'"
+ echo "::error::Only remove this check once you hold co-ownership of the upstream package ids."
+ exit 1
+ fi
+ echo "Publishing with package id prefix '${PACKAGE_ID_PREFIX}'"
+
+ build:
+ needs: preflight
+ uses: ./.github/workflows/build.yml
+ with:
+ version: ${{ needs.preflight.outputs.version }}
+ package-id-prefix: ${{ vars.PACKAGE_ID_PREFIX }}
+
+ publish:
+ needs: [ preflight, build ]
+ runs-on: ubuntu-22.04
+ environment: release
+ permissions:
+ id-token: write # required for the OIDC token that NuGet/login exchanges
+ contents: read
+ steps:
+ - uses: actions/download-artifact@v4
+ with:
+ name: packages
+ path: packages
+
+ - name: Setup .NET
+ uses: actions/setup-dotnet@v4
+ with:
+ dotnet-version: 8.0.x
+
+ - name: NuGet login (OIDC)
+ id: login
+ uses: NuGet/login@v1
+ with:
+ user: ${{ secrets.NUGET_USER }} # nuget.org profile name, NOT the email address
+
+ - name: push to nuget.org
+ run: |
+ dotnet nuget push "packages/*.nupkg" \
+ --api-key "${{ steps.login.outputs.NUGET_API_KEY }}" \
+ --source https://api.nuget.org/v3/index.json \
+ --skip-duplicate
diff --git a/.github/workflows/push-to-docker-hub.yml b/.github/workflows/push-to-docker-hub.yml
index 707df2e..ab6ba83 100644
--- a/.github/workflows/push-to-docker-hub.yml
+++ b/.github/workflows/push-to-docker-hub.yml
@@ -7,7 +7,7 @@ on:
imageTag:
description: Docker image tag to be applied
required: true
-
+
jobs:
build:
@@ -25,11 +25,6 @@ jobs:
run: npm run build
working-directory: durablefunctionsmonitor.react
- - name: copy statics to durablefunctionsmonitor.dotnetbackend/DfmStatics
- run: |
- rm -rf durablefunctionsmonitor.dotnetbackend/DfmStatics
- cp -r durablefunctionsmonitor.react/build durablefunctionsmonitor.dotnetbackend/DfmStatics
-
- name: copy statics to durablefunctionsmonitor.dotnetisolated/DfmStatics
run: |
rm -rf durablefunctionsmonitor.dotnetisolated/DfmStatics
@@ -42,8 +37,6 @@ jobs:
with:
dotnet-version: 8.0.x
- - name: dotnet test tests/durablefunctionsmonitor.dotnetbackend.tests
- run: dotnet test tests/durablefunctionsmonitor.dotnetbackend.tests/*.csproj
- name: dotnet test tests/durablefunctionsmonitor.dotnetisolated.core.tests
run: dotnet test tests/durablefunctionsmonitor.dotnetisolated.core.tests/*.csproj
@@ -53,23 +46,29 @@ jobs:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
- - name: build and push durablefunctionsmonitor.dotnetbackend
+ # NOTE: build context is the repo root for all images, because the projects
+ # reference durablefunctionsmonitor.dotnetisolated.core by project reference
+
+ - name: build and push durablefunctionsmonitor.dotnetisolated
uses: docker/build-push-action@v6
with:
- context: ./durablefunctionsmonitor.dotnetbackend
+ context: .
+ file: ./durablefunctionsmonitor.dotnetisolated/Dockerfile
push: true
tags: scaletone/durablefunctionsmonitor:${{ github.event.inputs.imageTag }}
- - name: build and push custom-backends/mssql
+ - name: build and push custom-backends/dotnetIsolated-mssql
uses: docker/build-push-action@v6
with:
- context: ./custom-backends/mssql
+ context: .
+ file: ./custom-backends/dotnetIsolated-mssql/Dockerfile
push: true
tags: scaletone/durablefunctionsmonitor.mssql:${{ github.event.inputs.imageTag }}
- - name: build and push custom-backends/netherite
+ - name: build and push custom-backends/dotnetIsolated-netherite
uses: docker/build-push-action@v6
with:
- context: ./custom-backends/netherite
+ context: .
+ file: ./custom-backends/dotnetIsolated-netherite/Dockerfile
push: true
tags: scaletone/durablefunctionsmonitor.netherite:${{ github.event.inputs.imageTag }}
diff --git a/.github/workflows/push-to-nuget.yml b/.github/workflows/push-to-nuget.yml
deleted file mode 100644
index 5eeaf94..0000000
--- a/.github/workflows/push-to-nuget.yml
+++ /dev/null
@@ -1,97 +0,0 @@
-
-name: push-to-nuget
-
-on:
- workflow_dispatch:
-
-jobs:
- build:
-
- runs-on: ubuntu-22.04
-
- steps:
- - uses: actions/checkout@v4
-
- - name: create ArtifactStagingDirectory folder
- run: mkdir drop
-
- # Building and copying React
-
- - name: npm install durablefunctionsmonitor.react
- run: npm install -legacy-peer-deps
- working-directory: durablefunctionsmonitor.react
- - name: npm build durablefunctionsmonitor.react
- run: npm run build
- working-directory: durablefunctionsmonitor.react
-
- - name: copy statics to durablefunctionsmonitor.dotnetbackend/DfmStatics
- run: |
- rm -rf durablefunctionsmonitor.dotnetbackend/DfmStatics
- cp -r durablefunctionsmonitor.react/build durablefunctionsmonitor.dotnetbackend/DfmStatics
-
- - name: copy statics to durablefunctionsmonitor.dotnetisolated/DfmStatics
- run: |
- rm -rf durablefunctionsmonitor.dotnetisolated/DfmStatics
- cp -r durablefunctionsmonitor.react/build durablefunctionsmonitor.dotnetisolated/DfmStatics
-
- # Building and testing .NET
-
- - name: Setup .NET
- uses: actions/setup-dotnet@v4
- with:
- dotnet-version: 8.0.x
-
- - name: dotnet test tests/durablefunctionsmonitor.dotnetbackend.tests
- run: dotnet test tests/durablefunctionsmonitor.dotnetbackend.tests/*.csproj
- - name: dotnet test tests/durablefunctionsmonitor.dotnetisolated.core.tests
- run: dotnet test tests/durablefunctionsmonitor.dotnetisolated.core.tests/*.csproj
-
- - name: copy durablefunctionsmonitor.dotnetbackend to ArtifactStagingDirectory
- run: cp -r durablefunctionsmonitor.dotnetbackend drop/durablefunctionsmonitor.dotnetbackend
-
- - name: copy durablefunctionsmonitor.dotnetisolated to ArtifactStagingDirectory
- run: cp -r durablefunctionsmonitor.dotnetisolated drop/durablefunctionsmonitor.dotnetisolated
-
- - name: dotnet publish durablefunctionsmonitor.dotnetbackend
- run: dotnet publish durablefunctionsmonitor.dotnetbackend --output drop/durablefunctionsmonitor.dotnetbackend/output
- - name: dotnet publish durablefunctionsmonitor.dotnetisolated
- run: dotnet publish durablefunctionsmonitor.dotnetisolated --output drop/durablefunctionsmonitor.dotnetisolated/output
- - name: dotnet publish dotnetIsolated-mssql
- run: dotnet publish custom-backends/dotnetIsolated-mssql --output drop/dotnetIsolated-mssql/output
-
- # Building nuget packages
-
- - name: copy LICENSE to durablefunctionsmonitor.dotnetbackend/output
- run: cp LICENSE drop/durablefunctionsmonitor.dotnetbackend/output
- - name: copy LICENSE.txt to durablefunctionsmonitor.dotnetisolated/output
- run: cp durablefunctionsmonitor.dotnetisolated/LICENSE.txt drop/durablefunctionsmonitor.dotnetisolated/output
- - name: copy LICENSE.txt to dotnetIsolated-mssql/output
- run: cp durablefunctionsmonitor.dotnetisolated/LICENSE.txt drop/dotnetIsolated-mssql/output
-
- - name: Install latest nuget.exe
- uses: nuget/setup-nuget@v1.2.0
- - name: package dotnetbackend into a Nuget package
- run: nuget pack drop/durablefunctionsmonitor.dotnetbackend/output/nuspec.nuspec -OutputDirectory drop
- - name: package dotnetisolated into a Nuget package
- run: nuget pack drop/durablefunctionsmonitor.dotnetisolated/output/nuspec.nuspec -OutputDirectory drop
- - name: package dotnetIsolated-mssql into a Nuget package
- run: nuget pack drop/dotnetIsolated-mssql/output/nuspec.nuspec -OutputDirectory drop
-
- # Pushing nuget packages
-
- - name: push drop/DurableFunctionsMonitor.DotNetIsolated
- env:
- NUGET_API_KEY: ${{ secrets.NUGET_API_KEY }}
- run: nuget push drop/DurableFunctionsMonitor.DotNetIsolated.*.nupkg -ApiKey $NUGET_API_KEY -src https://api.nuget.org/v3/index.json
- continue-on-error: true
-
- - name: push drop/DurableFunctionsMonitor.DotNetBackend
- env:
- NUGET_API_KEY: ${{ secrets.NUGET_API_KEY }}
- run: nuget push drop/DurableFunctionsMonitor.DotNetBackend.*.nupkg -ApiKey $NUGET_API_KEY -src https://api.nuget.org/v3/index.json
- continue-on-error: true
-
- - name: push drop/DurableFunctionsMonitor.DotNetIsolated.MsSql
- env:
- NUGET_API_KEY: ${{ secrets.NUGET_API_KEY }}
- run: nuget push drop/DurableFunctionsMonitor.DotNetIsolated.MsSql.*.nupkg -ApiKey $NUGET_API_KEY -src https://api.nuget.org/v3/index.json
diff --git a/.github/workflows/push-to-vscode-marketplace.yml b/.github/workflows/push-to-vscode-marketplace.yml
index a6a1e2b..46a98e4 100644
--- a/.github/workflows/push-to-vscode-marketplace.yml
+++ b/.github/workflows/push-to-vscode-marketplace.yml
@@ -1,93 +1,48 @@
-
name: push-to-vscode-marketplace
+# Publishes the VSIX produced by the shared build to the VsCode Marketplace.
+
on:
workflow_dispatch:
-jobs:
- build:
-
- runs-on: ubuntu-latest
+permissions:
+ contents: read
+jobs:
+ version:
+ runs-on: ubuntu-22.04
+ outputs:
+ version: ${{ steps.v.outputs.version }}
steps:
- uses: actions/checkout@v4
-
- - name: create ArtifactStagingDirectory folder
- run: mkdir drop
-
- # Building and copying React
-
- - name: npm install durablefunctionsmonitor.react
- run: npm install -legacy-peer-deps
- working-directory: durablefunctionsmonitor.react
- - name: npm build durablefunctionsmonitor.react
- run: npm run build
- working-directory: durablefunctionsmonitor.react
-
- - name: copy statics to durablefunctionsmonitor.dotnetbackend/DfmStatics
- run: |
- rm -rf durablefunctionsmonitor.dotnetbackend/DfmStatics
- cp -r durablefunctionsmonitor.react/build durablefunctionsmonitor.dotnetbackend/DfmStatics
-
- - name: copy statics to durablefunctionsmonitor.dotnetisolated/DfmStatics
+ - name: read version from Directory.Build.props
+ id: v
run: |
- rm -rf durablefunctionsmonitor.dotnetisolated/DfmStatics
- cp -r durablefunctionsmonitor.react/build durablefunctionsmonitor.dotnetisolated/DfmStatics
+ set -euo pipefail
+ PREFIX=$(sed -n 's:.*\(.*\).*:\1:p' Directory.Build.props)
+ if [ -z "$PREFIX" ]; then echo "::error::VersionPrefix not found in Directory.Build.props"; exit 1; fi
+ echo "version=$PREFIX" >> "$GITHUB_OUTPUT"
- # Building and testing .NET
-
- - name: Setup .NET
- uses: actions/setup-dotnet@v4
+ build:
+ needs: version
+ uses: ./.github/workflows/build.yml
+ with:
+ version: ${{ needs.version.outputs.version }}
+
+ publish:
+ needs: build
+ runs-on: ubuntu-22.04
+ environment: release
+ steps:
+ - uses: actions/download-artifact@v4
with:
- dotnet-version: 8.0.x
-
- - name: dotnet test tests/durablefunctionsmonitor.dotnetbackend.tests
- run: dotnet test tests/durablefunctionsmonitor.dotnetbackend.tests/*.csproj
- - name: dotnet test tests/durablefunctionsmonitor.dotnetisolated.core.tests
- run: dotnet test tests/durablefunctionsmonitor.dotnetisolated.core.tests/*.csproj
-
- - name: copy durablefunctionsmonitor.dotnetbackend to ArtifactStagingDirectory
- run: cp -r durablefunctionsmonitor.dotnetbackend drop/durablefunctionsmonitor.dotnetbackend
-
- - name: copy durablefunctionsmonitor.dotnetisolated to ArtifactStagingDirectory
- run: cp -r durablefunctionsmonitor.dotnetisolated drop/durablefunctionsmonitor.dotnetisolated
-
- - name: dotnet publish durablefunctionsmonitor.dotnetbackend
- run: dotnet publish durablefunctionsmonitor.dotnetbackend --output drop/durablefunctionsmonitor.dotnetbackend/output
- - name: dotnet publish durablefunctionsmonitor.dotnetisolated
- run: dotnet publish durablefunctionsmonitor.dotnetisolated --output drop/durablefunctionsmonitor.dotnetisolated/output
-
- # Building and testing vscode extension
-
- - name: copy dotnetbackend to durablefunctionsmonitor-vscodeext/backend
- run: cp -r drop/durablefunctionsmonitor.dotnetbackend/output durablefunctionsmonitor-vscodeext/backend
-
- - name: copy custom-backends to durablefunctionsmonitor-vscodeext/custom-backends
- run: cp -r custom-backends durablefunctionsmonitor-vscodeext/custom-backends
-
- - name: npm install durablefunctionsmonitor-vscodeext
- run: npm install
- working-directory: durablefunctionsmonitor-vscodeext
- - name: npm install -g azure-functions-core-tools@4
- run: npm install -g azure-functions-core-tools@4
- working-directory: durablefunctionsmonitor-vscodeext
- - name: run tests on durablefunctionsmonitor-vscodeext
- # TODO: vscode test pipeline was broken, need to investigate and fix
- if: 'false'
- run: npm run test
- working-directory: durablefunctionsmonitor-vscodeext
- - name: package durablefunctionsmonitor-vscodeext to VSIX-file
- run: npm run package
- working-directory: durablefunctionsmonitor-vscodeext
- - name: copy VSIX-file to ArtifactStagingDirectory
- run: cp durablefunctionsmonitor-vscodeext/durablefunctionsmonitor*.vsix drop
+ name: vsix
+ path: drop
- # Publish VSIX
-
- name: npm install vsce
- run: npm install -g vsce
+ run: npm install -g @vscode/vsce
- name: publish vsix
env:
- VSCODE_MARKETPLACE_PAT: ${{ secrets.VSCODE_MARKETPLACE_PAT }}
- run: vsce publish --pat $VSCODE_MARKETPLACE_PAT --packagePath drop/durablefunctionsmonitor*.vsix
+ VSCODE_MARKETPLACE_PAT: ${{ secrets.VSCODE_MARKETPLACE_PAT }}
+ run: vsce publish --pat "$VSCODE_MARKETPLACE_PAT" --packagePath drop/durablefunctionsmonitor*.vsix
diff --git a/Directory.Build.props b/Directory.Build.props
new file mode 100644
index 0000000..3b8644a
--- /dev/null
+++ b/Directory.Build.props
@@ -0,0 +1,31 @@
+
+
+
+
+ 6.9.0
+
+
+
+ $(VersionPrefix)
+ $(VersionPrefix).0
+ $(VersionPrefix).0
+
+
+
+ DurableFunctionsMonitor
+ git
+ https://github.com/ViswanathBalusu/DurableFunctionsMonitor
+
+
+
diff --git a/README.md b/README.md
index 32ea80a..dc7bae9 100644
--- a/README.md
+++ b/README.md
@@ -5,35 +5,33 @@ A monitoring/debugging UI tool for Azure Durable Functions
[Azure Durable Functions](https://docs.microsoft.com/en-us/azure/azure-functions/durable/durable-functions-overview) provide an easy and elegant way of building cloud-native Reliable Stateful Services in the Serverless world. The only thing that's missing so far is a UI for monitoring, managing and debugging your orchestration instances. This project tries to bridge the gap.
-[
](https://www.nuget.org/profiles/durablefunctionsmonitor) [](https://github.com/microsoft/DurableFunctionsMonitor/actions/workflows/main-build.yml)
+[
](https://www.nuget.org/profiles/durablefunctionsmonitor) [](https://github.com/microsoft/DurableFunctionsMonitor/actions/workflows/main-build.yml)
[
](https://github.com/microsoft/DurableFunctionsMonitor/stargazers) [
](https://marketplace.visualstudio.com/items?itemName=DurableFunctionsMonitor.durablefunctionsmonitor)
-[
](https://marketplace.visualstudio.com/items?itemName=DurableFunctionsMonitor.durablefunctionsmonitor) [
](https://hub.docker.com/r/scaletone/durablefunctionsmonitor) [
](https://www.nuget.org/profiles/durablefunctionsmonitor)
+[
](https://marketplace.visualstudio.com/items?itemName=DurableFunctionsMonitor.durablefunctionsmonitor) [
](https://hub.docker.com/r/scaletone/durablefunctionsmonitor) [
](https://www.nuget.org/profiles/durablefunctionsmonitor)
## How to use
You can run this tool:
* [as a VsCode extension](https://marketplace.visualstudio.com/items?itemName=DurableFunctionsMonitor.durablefunctionsmonitor).
* [as a Standalone service](https://github.com/microsoft/DurableFunctionsMonitor/wiki/How-to-run-DfMon-in-Standalone-mode).
-* ["Injected" into your .NET InProc Function](https://github.com/microsoft/DurableFunctionsMonitor/blob/main/durablefunctionsmonitor.dotnetbackend/NUGET_README.md).
* ["Injected" into your .NET Isolated Function](https://github.com/microsoft/DurableFunctionsMonitor/tree/main/durablefunctionsmonitor.dotnetisolated.core#durablefunctionsmonitordotnetisolatedcore).
-"Injected" DfMon can only be injected into a .NET Function project (either InProc or Isolated). All other DfMon incarnations work with any platforms/programming languages supported by Durable Task Framework.
+"Injected" DfMon can only be injected into a .NET Isolated Function project. All other DfMon incarnations work with any platforms/programming languages supported by Durable Task Framework.
See [detailed instructions in our Wiki](https://github.com/microsoft/DurableFunctionsMonitor/wiki).
## Contents of this repo
-* [durablefunctionsmonitor.dotnetbackend](https://github.com/microsoft/DurableFunctionsMonitor/tree/main/durablefunctionsmonitor.dotnetbackend) - a .NET InProc version of the backend. Implements a thin layer of RESTful APIs on top of [Durable Task Framework](https://github.com/Azure/azure-functions-durable-extension), also serves [client UI statics](https://github.com/microsoft/DurableFunctionsMonitor/tree/main/durablefunctionsmonitor.react).
* [durablefunctionsmonitor.dotnetisolated.core](https://github.com/microsoft/DurableFunctionsMonitor/tree/main/durablefunctionsmonitor.dotnetisolated.core) - a .NET Isolated version of the backend. Implements a thin layer of RESTful APIs on top of [Durable Task Framework](https://github.com/microsoft/durabletask-dotnet), also serves [client UI statics](https://github.com/microsoft/DurableFunctionsMonitor/tree/main/durablefunctionsmonitor.react). This is what you will "inject" into *your* .NET Isolated Function projects.
* [durablefunctionsmonitor.dotnetisolated](https://github.com/microsoft/DurableFunctionsMonitor/tree/main/durablefunctionsmonitor.dotnetisolated) - a .NET Isolated Function project, that references [durablefunctionsmonitor.dotnetisolated.core](https://github.com/microsoft/DurableFunctionsMonitor/tree/main/durablefunctionsmonitor.dotnetisolated.core) and can be deployed as a standalone Function App instance.
* [durablefunctionsmonitor.react](https://github.com/microsoft/DurableFunctionsMonitor/tree/main/durablefunctionsmonitor.react) - client UI implementation. A React app written in TypeScript. Compiled HTML/JS/CSS statics from this project are then served by the backends.
* [durablefunctionsmonitor-vscodeext](https://github.com/microsoft/DurableFunctionsMonitor/tree/main/durablefunctionsmonitor-vscodeext) - VsCode extension implementation, written in TypeScript.
-* [custom-backends](https://github.com/microsoft/DurableFunctionsMonitor/tree/main/custom-backends) - a set of backend implementations for older framework versions or non-default storage providers (e.g. for [MSSQL](https://github.com/microsoft/DurableFunctionsMonitor/tree/main/custom-backends/mssql) and [Netherite](https://github.com/microsoft/DurableFunctionsMonitor/tree/main/custom-backends/netherite)).
+* [custom-backends](https://github.com/microsoft/DurableFunctionsMonitor/tree/main/custom-backends) - a set of backend implementations for non-default storage providers (e.g. for [MSSQL](https://github.com/microsoft/DurableFunctionsMonitor/tree/main/custom-backends/dotnetIsolated-mssql) and [Netherite](https://github.com/microsoft/DurableFunctionsMonitor/tree/main/custom-backends/dotnetIsolated-netherite)).
## Contributing
diff --git a/azure-pipelines.yml b/azure-pipelines.yml
index 0c50172..7d5f9b7 100644
--- a/azure-pipelines.yml
+++ b/azure-pipelines.yml
@@ -24,7 +24,7 @@ steps:
customCommand: 'run build'
- task: CopyFiles@2
- displayName: 'copy statics to durablefunctionsmonitor.dotnetbackend/DfmStatics'
+ displayName: 'copy statics to durablefunctionsmonitor.dotnetisolated/DfmStatics'
inputs:
SourceFolder: durablefunctionsmonitor.react/build
Contents: |
@@ -34,59 +34,66 @@ steps:
logo.svg
service-worker.js
manifest.json
- TargetFolder: durablefunctionsmonitor.dotnetbackend/DfmStatics
+ TargetFolder: durablefunctionsmonitor.dotnetisolated/DfmStatics
CleanTargetFolder: true
- task: CopyFiles@2
- displayName: 'copy durablefunctionsmonitor.dotnetbackend to ArtifactStagingDirectory'
+ displayName: 'copy durablefunctionsmonitor.dotnetisolated to ArtifactStagingDirectory'
inputs:
- SourceFolder: durablefunctionsmonitor.dotnetbackend
- TargetFolder: '$(Build.ArtifactStagingDirectory)/durablefunctionsmonitor.dotnetbackend'
+ SourceFolder: durablefunctionsmonitor.dotnetisolated
+ TargetFolder: '$(Build.ArtifactStagingDirectory)/durablefunctionsmonitor.dotnetisolated'
OverWrite: true
- task: CopyFiles@2
displayName: 'copy custom-backends to ArtifactStagingDirectory'
inputs:
SourceFolder: custom-backends
- TargetFolder: '$(Build.ArtifactStagingDirectory)/custom-backends'
+ TargetFolder: '$(Build.ArtifactStagingDirectory)/custom-backends-src'
OverWrite: true
- task: DotNetCoreCLI@2
- displayName: 'dotnet test tests/durablefunctionsmonitor.dotnetbackend.tests'
+ displayName: 'dotnet test tests/durablefunctionsmonitor.dotnetisolated.core.tests'
inputs:
command: 'test'
- projects: 'tests/durablefunctionsmonitor.dotnetbackend.tests/*.csproj'
+ projects: 'tests/durablefunctionsmonitor.dotnetisolated.core.tests/*.csproj'
- task: DotNetCoreCLI@2
- displayName: 'dotnet test tests/durablefunctionsmonitor.dotnetisolated.core.tests'
+ displayName: 'dotnet publish durablefunctionsmonitor.dotnetisolated'
inputs:
- command: 'test'
- projects: 'tests/durablefunctionsmonitor.dotnetisolated.core.tests/*.csproj'
+ command: publish
+ publishWebProjects: false
+ projects: durablefunctionsmonitor.dotnetisolated
+ arguments: '--output $(Build.ArtifactStagingDirectory)/durablefunctionsmonitor.dotnetisolated/output'
+ zipAfterPublish: false
+ modifyOutputPath: false
+
+# Custom backends are shipped inside the VSIX as published binaries, because they reference
+# durablefunctionsmonitor.dotnetisolated.* by project and so cannot be built from the VSIX itself
- task: DotNetCoreCLI@2
- displayName: 'dotnet publish durablefunctionsmonitor.dotnetbackend'
+ displayName: 'dotnet publish custom-backends/dotnetIsolated-mssql'
inputs:
command: publish
publishWebProjects: false
- projects: durablefunctionsmonitor.dotnetbackend
- arguments: '--output $(Build.ArtifactStagingDirectory)/durablefunctionsmonitor.dotnetbackend/output'
+ projects: custom-backends/dotnetIsolated-mssql
+ arguments: '--output $(Build.ArtifactStagingDirectory)/custom-backends/dotnetIsolated-mssql'
zipAfterPublish: false
modifyOutputPath: false
- task: DotNetCoreCLI@2
- displayName: 'dotnet publish durablefunctionsmonitor.dotnetisolated'
+ displayName: 'dotnet publish custom-backends/dotnetIsolated-netherite'
inputs:
command: publish
publishWebProjects: false
- projects: durablefunctionsmonitor.dotnetisolated
- arguments: '--output $(Build.ArtifactStagingDirectory)/durablefunctionsmonitor.dotnetisolated/output'
+ projects: custom-backends/dotnetIsolated-netherite
+ arguments: '--output $(Build.ArtifactStagingDirectory)/custom-backends/dotnetIsolated-netherite'
zipAfterPublish: false
modifyOutputPath: false
- task: CopyFiles@2
- displayName: 'copy dotnetbackend to durablefunctionsmonitor-vscodeext/backend'
+ displayName: 'copy dotnetisolated to durablefunctionsmonitor-vscodeext/backend'
inputs:
- SourceFolder: '$(Build.ArtifactStagingDirectory)/durablefunctionsmonitor.dotnetbackend/output'
+ SourceFolder: '$(Build.ArtifactStagingDirectory)/durablefunctionsmonitor.dotnetisolated/output'
Contents: |
**
!logo.svg
@@ -96,7 +103,7 @@ steps:
- task: CopyFiles@2
displayName: 'copy custom-backends to durablefunctionsmonitor-vscodeext/custom-backends'
inputs:
- SourceFolder: 'custom-backends'
+ SourceFolder: '$(Build.ArtifactStagingDirectory)/custom-backends'
Contents: |
**
!*.md
@@ -142,14 +149,6 @@ steps:
TargetFolder: '$(Build.ArtifactStagingDirectory)'
OverWrite: true
-- task: CopyFiles@2
- displayName: 'copy LICENSE to durablefunctionsmonitor.dotnetbackend/output'
- inputs:
- Contents: |
- LICENSE
- TargetFolder: '$(Build.ArtifactStagingDirectory)/durablefunctionsmonitor.dotnetbackend/output'
- OverWrite: true
-
- task: CopyFiles@2
displayName: 'copy LICENSE.txt to durablefunctionsmonitor.dotnetisolated/output'
inputs:
@@ -161,15 +160,7 @@ steps:
- task: NuGetToolInstaller@1
displayName: 'Install latest nuget.exe'
inputs:
- versionSpec:
-
-- task: NuGetCommand@2
- displayName: 'package dotnetbackend into a Nuget package'
- inputs:
- command: 'pack'
- packagesToPack: '$(Build.ArtifactStagingDirectory)/durablefunctionsmonitor.dotnetbackend/output/nuspec.nuspec'
- packDestination: '$(Build.ArtifactStagingDirectory)'
- versioningScheme: 'off'
+ versionSpec:
- task: NuGetCommand@2
displayName: 'package dotnetisolated into a Nuget package'
@@ -180,10 +171,10 @@ steps:
versioningScheme: 'off'
- task: az-func-as-a-graph@1
- displayName: 'Generate az-func-as-a-graph diagram of DurableFunctionsMonitor.DotNetBackend'
+ displayName: 'Generate az-func-as-a-graph diagram of DurableFunctionsMonitor.DotNetIsolated'
inputs:
- projectFolder: '$(System.DefaultWorkingDirectory)/durablefunctionsmonitor.dotnetbackend'
- outputFile: '$(Build.ArtifactStagingDirectory)/DurableFunctionsMonitor-DotNetBackend-Diagram.htm'
+ projectFolder: '$(System.DefaultWorkingDirectory)/durablefunctionsmonitor.dotnetisolated.core'
+ outputFile: '$(Build.ArtifactStagingDirectory)/DurableFunctionsMonitor-DotNetIsolated-Diagram.htm'
repoUri: '$(Build.Repository.Uri)'
repoName: '$(Build.Repository.Name)'
branchName: '$(Build.SourceBranchName)'
diff --git a/custom-backends/README.md b/custom-backends/README.md
index 9103aaa..ee7570f 100644
--- a/custom-backends/README.md
+++ b/custom-backends/README.md
@@ -2,9 +2,6 @@
These are Azure Function projects with Durable Functions Monitor 'injected' as a [NuGet package](https://www.nuget.org/profiles/durablefunctionsmonitor). To be used for e.g. monitoring [custom storage providers](https://docs.microsoft.com/en-us/azure/azure-functions/durable/durable-functions-storage-providers).
-* [netcore21](https://github.com/microsoft/DurableFunctionsMonitor/tree/main/custom-backends/netcore21) - (legacy) Durable Functions Monitor backend, that runs on .Net Core 2.1.
-* [netcore31](https://github.com/microsoft/DurableFunctionsMonitor/tree/main/custom-backends/netcore31) - Durable Functions Monitor backend, that runs on .Net Core 3.1.
* [dotnetIsolated](https://github.com/microsoft/DurableFunctionsMonitor/tree/main/custom-backends/dotnetIsolated) - Durable Functions Monitor .NET 8 Isolated backend.
-* [mssql](https://github.com/microsoft/DurableFunctionsMonitor/tree/main/custom-backends/mssql) - Durable Functions Monitor backend to be used with [Durable Task SQL Provider](https://microsoft.github.io/durabletask-mssql/#/).
* [dotnetIsolated-mssql](https://github.com/microsoft/DurableFunctionsMonitor/tree/main/custom-backends/dotnetIsolated-mssql) - Durable Functions Monitor .NET 8 Isolated backend to be used with [Durable Task SQL Provider](https://microsoft.github.io/durabletask-mssql/#/).
-* [netherite](https://github.com/microsoft/DurableFunctionsMonitor/tree/main/custom-backends/netherite) - Durable Functions Monitor backend to be used with [Netherite Provider](https://microsoft.github.io/durabletask-netherite/#/).
+* [dotnetIsolated-netherite](https://github.com/microsoft/DurableFunctionsMonitor/tree/main/custom-backends/dotnetIsolated-netherite) - Durable Functions Monitor .NET 8 Isolated backend to be used with [Netherite Provider](https://microsoft.github.io/durabletask-netherite/#/).
diff --git a/custom-backends/dotnetIsolated-mssql/Dfm.DotNetIsolatedMsSql.csproj b/custom-backends/dotnetIsolated-mssql/Dfm.DotNetIsolatedMsSql.csproj
index 95a138a..8d8d865 100644
--- a/custom-backends/dotnetIsolated-mssql/Dfm.DotNetIsolatedMsSql.csproj
+++ b/custom-backends/dotnetIsolated-mssql/Dfm.DotNetIsolatedMsSql.csproj
@@ -3,9 +3,6 @@
net8.0
v4
- 6.7.3.0
- 6.7.3.0
-
Exe
enable
enable
diff --git a/custom-backends/dotnetIsolated-mssql/Dockerfile b/custom-backends/dotnetIsolated-mssql/Dockerfile
new file mode 100644
index 0000000..70d1db9
--- /dev/null
+++ b/custom-backends/dotnetIsolated-mssql/Dockerfile
@@ -0,0 +1,17 @@
+# NOTE: this Dockerfile expects the REPO ROOT as its build context, because the project
+# references durablefunctionsmonitor.dotnetisolated.core (and friends) by project reference:
+#
+# docker build -f custom-backends/dotnetIsolated-mssql/Dockerfile .
+
+FROM mcr.microsoft.com/dotnet/sdk:8.0 AS installer-env
+
+COPY . /src
+RUN cd /src && \
+ mkdir -p /home/site/wwwroot && \
+ dotnet publish custom-backends/dotnetIsolated-mssql/Dfm.DotNetIsolatedMsSql.csproj --output /home/site/wwwroot
+
+FROM mcr.microsoft.com/azure-functions/dotnet-isolated:4-dotnet-isolated8.0
+ENV AzureWebJobsScriptRoot=/home/site/wwwroot \
+ AzureFunctionsJobHost__Logging__Console__IsEnabled=true
+
+COPY --from=installer-env ["/home/site/wwwroot", "/home/site/wwwroot"]
diff --git a/custom-backends/dotnetIsolated-mssql/nuspec.nuspec b/custom-backends/dotnetIsolated-mssql/nuspec.nuspec
index 8893fa1..3ae5cc3 100644
--- a/custom-backends/dotnetIsolated-mssql/nuspec.nuspec
+++ b/custom-backends/dotnetIsolated-mssql/nuspec.nuspec
@@ -1,12 +1,12 @@
- DurableFunctionsMonitor.DotNetIsolated.MsSql
- 6.8.1
+ $id$
+ $version$
false
DurableFunctionsMonitor.DotNetIsolated.MsSql
DurableFunctionsMonitor
-
+
LICENSE.txt
@@ -20,7 +20,7 @@
-
+
diff --git a/durablefunctionsmonitor.dotnetbackend/.gitignore b/custom-backends/dotnetIsolated-netherite/.gitignore
similarity index 99%
rename from durablefunctionsmonitor.dotnetbackend/.gitignore
rename to custom-backends/dotnetIsolated-netherite/.gitignore
index 91f6064..ff5b00c 100644
--- a/durablefunctionsmonitor.dotnetbackend/.gitignore
+++ b/custom-backends/dotnetIsolated-netherite/.gitignore
@@ -1,9 +1,6 @@
## Ignore Visual Studio temporary files, build results, and
## files generated by popular Visual Studio add-ons.
-# nuget.exe
-nuget.exe
-
# Azure Functions localsettings file
local.settings.json
diff --git a/custom-backends/dotnetIsolated-netherite/Dfm.DotNetIsolatedNetherite.csproj b/custom-backends/dotnetIsolated-netherite/Dfm.DotNetIsolatedNetherite.csproj
new file mode 100644
index 0000000..ce58184
--- /dev/null
+++ b/custom-backends/dotnetIsolated-netherite/Dfm.DotNetIsolatedNetherite.csproj
@@ -0,0 +1,38 @@
+
+
+ net8.0
+ v4
+
+ Exe
+ enable
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ PreserveNewest
+
+
+
+
+
+ PreserveNewest
+
+
+ PreserveNewest
+ Never
+
+
+ PreserveNewest
+
+
+
diff --git a/custom-backends/dotnetIsolated-netherite/Dockerfile b/custom-backends/dotnetIsolated-netherite/Dockerfile
new file mode 100644
index 0000000..b705442
--- /dev/null
+++ b/custom-backends/dotnetIsolated-netherite/Dockerfile
@@ -0,0 +1,17 @@
+# NOTE: this Dockerfile expects the REPO ROOT as its build context, because the project
+# references durablefunctionsmonitor.dotnetisolated.core (and friends) by project reference:
+#
+# docker build -f custom-backends/dotnetIsolated-netherite/Dockerfile .
+
+FROM mcr.microsoft.com/dotnet/sdk:8.0 AS installer-env
+
+COPY . /src
+RUN cd /src && \
+ mkdir -p /home/site/wwwroot && \
+ dotnet publish custom-backends/dotnetIsolated-netherite/Dfm.DotNetIsolatedNetherite.csproj --output /home/site/wwwroot
+
+FROM mcr.microsoft.com/azure-functions/dotnet-isolated:4-dotnet-isolated8.0
+ENV AzureWebJobsScriptRoot=/home/site/wwwroot \
+ AzureFunctionsJobHost__Logging__Console__IsEnabled=true
+
+COPY --from=installer-env ["/home/site/wwwroot", "/home/site/wwwroot"]
diff --git a/custom-backends/dotnetIsolated-netherite/HttpRoot.cs b/custom-backends/dotnetIsolated-netherite/HttpRoot.cs
new file mode 100644
index 0000000..b69012b
--- /dev/null
+++ b/custom-backends/dotnetIsolated-netherite/HttpRoot.cs
@@ -0,0 +1,32 @@
+// Copyright (c) Microsoft Corporation.
+// Licensed under the MIT license.
+
+using Microsoft.Azure.Functions.Worker;
+using Microsoft.Azure.Functions.Worker.Http;
+using Microsoft.Extensions.Logging;
+using DurableFunctionsMonitor.DotNetIsolated;
+
+namespace Dfm.DotNetIsolatedNetherite
+{
+ ///
+ /// Exposes DfMon at the root
+ ///
+ public class HttpRoot: ServeStatics
+ {
+ public HttpRoot(DfmSettings dfmSettings, DfmExtensionPoints extensionPoints, ILoggerFactory loggerFactory) :
+ base(dfmSettings, extensionPoints, loggerFactory)
+ {
+ }
+
+ [Function(nameof(HttpRoot))]
+ public Task ServeDfMonStatics(
+ [HttpTrigger(AuthorizationLevel.Anonymous, "get", Route = "{p1?}/{p2?}/{p3?}")] HttpRequestData req,
+ string p1,
+ string p2,
+ string p3
+ )
+ {
+ return this.DfmServeStaticsFunction(req, p1, p2, p3);
+ }
+ }
+}
diff --git a/custom-backends/dotnetIsolated-netherite/Program.cs b/custom-backends/dotnetIsolated-netherite/Program.cs
new file mode 100644
index 0000000..5aada2d
--- /dev/null
+++ b/custom-backends/dotnetIsolated-netherite/Program.cs
@@ -0,0 +1,23 @@
+// Copyright (c) Microsoft Corporation.
+// Licensed under the MIT license.
+
+using Microsoft.Extensions.Hosting;
+using DurableFunctionsMonitor.DotNetIsolated.Netherite;
+
+namespace Dfm.DotNetIsolatedNetherite
+{
+ internal class Program
+ {
+ private static void Main(string[] args)
+ {
+ var host = new HostBuilder()
+ .ConfigureFunctionsWorkerDefaults((hostBuilderContext, workerAppBuilder) =>
+ {
+ workerAppBuilder.UseDurableFunctionsMonitorWithNetheriteDurability();
+ })
+ .Build();
+
+ host.Run();
+ }
+ }
+}
diff --git a/custom-backends/dotnetIsolated-netherite/Properties/launchSettings.json b/custom-backends/dotnetIsolated-netherite/Properties/launchSettings.json
new file mode 100644
index 0000000..ea318a9
--- /dev/null
+++ b/custom-backends/dotnetIsolated-netherite/Properties/launchSettings.json
@@ -0,0 +1,9 @@
+{
+ "profiles": {
+ "dotnetisolated": {
+ "commandName": "Project",
+ "commandLineArgs": "--port 7183",
+ "launchBrowser": false
+ }
+ }
+}
diff --git a/custom-backends/dotnetIsolated-netherite/README.md b/custom-backends/dotnetIsolated-netherite/README.md
new file mode 100644
index 0000000..514169a
--- /dev/null
+++ b/custom-backends/dotnetIsolated-netherite/README.md
@@ -0,0 +1,32 @@
+# Durable Functions Monitor .Net Isolated for Netherite
+
+Custom Durable Functions Monitor .NET Isolated backend project to be used with [Netherite Provider](https://microsoft.github.io/durabletask-netherite/#/).
+
+## How to run locally
+
+* Clone this repo.
+* In the project's folder create a `local.settings.json` file, which should look like this:
+
+```
+{
+ "IsEncrypted": false,
+ "Values": {
+ "AzureWebJobsSecretStorageType": "files",
+ "AzureWebJobsStorage": "your-azure-storage-connection-string",
+ "EventHubsConnection": "your-event-hubs-connection-string",
+ "DFM_NONCE": "i_sure_know_what_i_am_doing",
+ "FUNCTIONS_WORKER_RUNTIME": "dotnet-isolated",
+ },
+ "Host": {
+ "LocalHttpPort": 7072
+ }
+}
+```
+
+* Go to the project's folder with your command prompt and type the following:
+
+```
+func start
+```
+
+* Navigate to http://localhost:7072/durable-functions-monitor
diff --git a/custom-backends/netherite/host.json b/custom-backends/dotnetIsolated-netherite/host.json
similarity index 99%
rename from custom-backends/netherite/host.json
rename to custom-backends/dotnetIsolated-netherite/host.json
index d6f9f75..77c90d3 100644
--- a/custom-backends/netherite/host.json
+++ b/custom-backends/dotnetIsolated-netherite/host.json
@@ -11,4 +11,4 @@
}
}
}
-}
\ No newline at end of file
+}
diff --git a/custom-backends/dotnetIsolated-netherite/nuspec.nuspec b/custom-backends/dotnetIsolated-netherite/nuspec.nuspec
new file mode 100644
index 0000000..bf87f3a
--- /dev/null
+++ b/custom-backends/dotnetIsolated-netherite/nuspec.nuspec
@@ -0,0 +1,29 @@
+
+
+
+ $id$
+ $version$
+ false
+ DurableFunctionsMonitor.DotNetIsolated.Netherite
+ DurableFunctionsMonitor
+
+ LICENSE.txt
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/custom-backends/mssql/Dfm.MsSql.csproj b/custom-backends/mssql/Dfm.MsSql.csproj
deleted file mode 100644
index a93e509..0000000
--- a/custom-backends/mssql/Dfm.MsSql.csproj
+++ /dev/null
@@ -1,22 +0,0 @@
-
-
- net6.0
- v4
-
-
-
-
-
-
-
-
-
-
- PreserveNewest
-
-
- PreserveNewest
- Never
-
-
-
diff --git a/custom-backends/mssql/Dockerfile b/custom-backends/mssql/Dockerfile
deleted file mode 100644
index 8a4907c..0000000
--- a/custom-backends/mssql/Dockerfile
+++ /dev/null
@@ -1,15 +0,0 @@
-FROM mcr.microsoft.com/dotnet/sdk:6.0 AS installer-env
-
-# Build requires 3.1 SDK
-COPY --from=mcr.microsoft.com/dotnet/core/sdk:3.1 /usr/share/dotnet /usr/share/dotnet
-
-COPY . /src/dotnet-function-app
-RUN cd /src/dotnet-function-app && \
- mkdir -p /home/site/wwwroot && \
- dotnet publish *.csproj --output /home/site/wwwroot
-
-FROM mcr.microsoft.com/azure-functions/dotnet:4
-ENV AzureWebJobsScriptRoot=/home/site/wwwroot \
- AzureFunctionsJobHost__Logging__Console__IsEnabled=true
-
-COPY --from=installer-env ["/home/site/wwwroot", "/home/site/wwwroot"]
\ No newline at end of file
diff --git a/custom-backends/mssql/README.md b/custom-backends/mssql/README.md
deleted file mode 100644
index 6d6343a..0000000
--- a/custom-backends/mssql/README.md
+++ /dev/null
@@ -1,50 +0,0 @@
-# Durable Functions Monitor for MSSQL storage provider
-
-Custom Durable Functions Monitor backend project to be used with [Durable Task SQL Provider](https://microsoft.github.io/durabletask-mssql/#/).
-
-## How to run locally
-
-* Clone this repo.
-* In the project's folder create a `local.settings.json` file, which should look like this:
-
-```
-{
- "IsEncrypted": false,
- "Values": {
- "AzureWebJobsSecretStorageType": "files",
- "DFM_SQL_CONNECTION_STRING": "your-mssql-connection-string",
- "DFM_NONCE": "i_sure_know_what_i_am_doing",
- "FUNCTIONS_WORKER_RUNTIME": "dotnet"
- },
- "Host": {
- "LocalHttpPort": 7072
- }
-}
-```
-
-* Go to the project's folder with your command prompt and type the following:
-
-```
-func start
-```
-
-* Navigate to http://localhost:7072
-
-
-## How to run [as a Docker container](https://hub.docker.com/repository/docker/scaletone/durablefunctionsmonitor.mssql)
-
-* `docker pull scaletone/durablefunctionsmonitor.mssql:[put-latest-tag-here]`
-* `docker run -p 7072:80 -e DFM_SQL_CONNECTION_STRING="your-sql-connection-string" -e DFM_NONCE="i_sure_know_what_i_am_doing" scaletone/durablefunctionsmonitor.mssql:[put-latest-tag-here]`
-
- WARNING: setting **DFM_NONCE** to `i_sure_know_what_i_am_doing` **turns authentication off**. Please, protect your endpoint as appropriate.
-
- If you are using a custom database schema name, then specify that schema name via `AzureFunctionsJobHost__extensions__durableTask__storageProvider__schemaName` config setting.
-
-* Navigate to http://localhost:7072
-
-
-# How to deploy to Azure
-
-[](https://portal.azure.com/#create/Microsoft.Template/uri/https%3A%2F%2Fraw.githubusercontent.com%2Fmicrosoft%2FDurableFunctionsMonitor%2Fmain%2Fcustom-backends%2Fmssql%2Farm-template.json)
-
-The above button will deploy *these sources* into *your newly created* Function App instance.
diff --git a/custom-backends/mssql/Startup.cs b/custom-backends/mssql/Startup.cs
deleted file mode 100644
index 74fcd6f..0000000
--- a/custom-backends/mssql/Startup.cs
+++ /dev/null
@@ -1,243 +0,0 @@
-// Copyright (c) Microsoft Corporation.
-// Licensed under the MIT license.
-
-using System;
-using System.Collections.Generic;
-using System.Data;
-using System.Threading.Tasks;
-using DurableFunctionsMonitor.DotNetBackend;
-using Microsoft.Azure.WebJobs;
-using Microsoft.Azure.WebJobs.Extensions.DurableTask;
-using Microsoft.Azure.WebJobs.Hosting;
-using Microsoft.Data.SqlClient;
-
-[assembly: WebJobsStartup(typeof(Dfm.MsSql.Startup))]
-namespace Dfm.MsSql
-{
- public class Startup : IWebJobsStartup
- {
- private static readonly string ConnString;
- private static readonly string SchemaName = "dt";
-
- static Startup()
- {
- ConnString = Environment.GetEnvironmentVariable("DFM_SQL_CONNECTION_STRING");
-
- // Getting custom schema name passed to us by VsCode ext
- string schemaName = Environment.GetEnvironmentVariable("AzureFunctionsJobHost__extensions__durableTask__storageProvider__schemaName");
- if (!string.IsNullOrEmpty(schemaName))
- {
- SchemaName = schemaName;
- }
- }
-
- public void Configure(IWebJobsBuilder builder)
- {
- DfmEndpoint.Setup(null, new DfmExtensionPoints
- {
- GetInstanceHistoryRoutine = (client, connName, hubName, instanceId) => Task.FromResult(GetInstanceHistory(client, connName, hubName, instanceId)),
- GetParentInstanceIdRoutine = GetParentInstanceId,
- GetTaskHubNamesRoutine = GetTaskHubNames
- });
- }
-
- ///
- /// Custom routine for fetching Task Hub names
- ///
- public static async Task> GetTaskHubNames(string connName)
- {
- var result = new List();
-
- string sql =
- $@"SELECT DISTINCT
- i.TaskHub as TaskHub
- FROM
- [{SchemaName}].Instances i";
-
- using (var conn = new SqlConnection(ConnString))
- {
- conn.Open();
-
- using (var cmd = new SqlCommand(sql, conn))
- {
- using (var reader = cmd.ExecuteReader())
- {
- while (await reader.ReadAsync())
- {
- result.Add(reader["TaskHub"].ToString());
- }
- }
- }
- }
-
- return result;
- }
-
- ///
- /// Custom routine for fetching parent orchestration id
- ///
- public static async Task GetParentInstanceId(IDurableClient durableClient, string connName, string hubName, string instanceId)
- {
- string sql =
- $@"SELECT
- i.ParentInstanceID as ParentInstanceID
- FROM
- [{SchemaName}].Instances i
- WHERE
- i.InstanceID = @OrchestrationInstanceId AND i.TaskHub = @TaskHub";
-
- using (var conn = new SqlConnection(ConnString))
- {
- conn.Open();
-
- using (var cmd = new SqlCommand(sql, conn))
- {
- cmd.Parameters.Add(new SqlParameter("@OrchestrationInstanceId", SqlDbType.VarChar, 256) { Value = instanceId });
- cmd.Parameters.Add(new SqlParameter("@TaskHub", SqlDbType.VarChar, 50) { Value = hubName });
- using (var reader = cmd.ExecuteReader())
- {
- if (await reader.ReadAsync())
- {
- var parentInstanceId = reader["ParentInstanceID"];
- if (parentInstanceId != null)
- {
- string parentInstanceIdString = parentInstanceId.ToString();
- if (!string.IsNullOrWhiteSpace(parentInstanceIdString))
- {
- return parentInstanceIdString;
- }
- }
- }
- }
- }
- }
-
- return null;
- }
-
- ///
- /// Custom routine for fetching orchestration history
- ///
- public static IEnumerable GetInstanceHistory(IDurableClient durableClient, string connName, string hubName, string instanceId)
- {
- string sql =
- $@"SELECT
- IIF(h2.TaskID IS NULL, h.Timestamp, h2.Timestamp) as Timestamp,
- IIF(h2.TaskID IS NULL, h.EventType, h2.EventType) as EventType,
- h.TaskID as EventId,
- h.Name as Name,
- IIF(h2.TaskID IS NULL, NULL, h.Timestamp) as ScheduledTime,
- p1.Text as Input,
- p2.Text as Result,
- p2.Reason as Details,
- cih.InstanceID as SubOrchestrationId
- FROM
- [{SchemaName}].History h
- LEFT JOIN
- [{SchemaName}].History h2
- ON
- (
- h.EventType IN ('TaskScheduled', 'SubOrchestrationInstanceCreated')
- AND
- h2.EventType IN ('SubOrchestrationInstanceCompleted', 'SubOrchestrationInstanceFailed', 'TaskCompleted', 'TaskFailed')
- AND
- h.InstanceID = h2.InstanceID AND h.ExecutionID = h2.ExecutionID AND h.TaskHub = h2.TaskHub AND h.TaskID = h2.TaskID AND h.SequenceNumber != h2.SequenceNumber
- )
- LEFT JOIN
- [{SchemaName}].Payloads p1
- ON
- p1.PayloadID = h.DataPayloadID AND p1.TaskHub = h.TaskHub AND p1.InstanceID = h.InstanceID
- LEFT JOIN
- [{SchemaName}].Payloads p2
- ON
- p2.PayloadID = h2.DataPayloadID AND p2.TaskHub = h2.TaskHub AND p2.InstanceID = h2.InstanceID
- LEFT JOIN
- (
- select
- cii.ParentInstanceID,
- cii.InstanceID,
- cii.TaskHub,
- chh.TaskID
- from
- [{SchemaName}].Instances cii
- INNER JOIN
- [{SchemaName}].History chh
- ON
- (chh.InstanceID = cii.InstanceID AND chh.TaskHub = cii.TaskHub AND chh.EventType = 'ExecutionStarted')
- ) cih
- ON
- (cih.ParentInstanceID = h.InstanceID AND cih.TaskHub = h.TaskHub AND cih.TaskID = h.TaskID AND h.EventType = 'SubOrchestrationInstanceCreated')
- WHERE
- h.EventType IN
- (
- 'ExecutionStarted', 'ExecutionCompleted', 'ExecutionFailed', 'ExecutionTerminated', 'TaskScheduled', 'SubOrchestrationInstanceCreated',
- 'ContinueAsNew', 'TimerCreated', 'TimerFired', 'EventRaised', 'EventSent'
- )
- AND
- h.InstanceID = @OrchestrationInstanceId AND h.TaskHub = @TaskHub
- ORDER BY
- h.SequenceNumber";
-
-
- using (var conn = new SqlConnection(ConnString))
- {
- conn.Open();
-
- using (var cmd = new SqlCommand(sql, conn))
- {
- cmd.Parameters.Add(new SqlParameter("@OrchestrationInstanceId", SqlDbType.VarChar, 256) { Value = instanceId });
- cmd.Parameters.Add(new SqlParameter("@TaskHub", SqlDbType.VarChar, 50) { Value = hubName });
- using (var reader = cmd.ExecuteReader())
- {
- // Memorizing 'ExecutionStarted' event, to further correlate with 'ExecutionCompleted'
- DateTimeOffset? executionStartedTimestamp = null;
-
- while (reader.Read())
- {
- var evt = ToHistoryEvent(reader, executionStartedTimestamp);
-
- if (evt.EventType == "ExecutionStarted")
- {
- executionStartedTimestamp = evt.Timestamp;
- }
-
- yield return evt;
- }
- }
- }
- }
- }
-
- private static HistoryEvent ToHistoryEvent(SqlDataReader reader, DateTimeOffset? executionStartTime)
- {
- var evt = new HistoryEvent
- {
- Timestamp = ((DateTime)reader["Timestamp"]).ToUniversalTime(),
- EventType = reader["EventType"].ToString(),
- EventId = reader["EventId"] is DBNull ? null : (int?)reader["EventId"],
- Name = reader["Name"].ToString(),
- Input = reader["Input"] is DBNull ? null : reader["Input"].ToString(),
- Result = reader["Result"].ToString(),
- Details = reader["Details"].ToString(),
- SubOrchestrationId = reader["SubOrchestrationId"].ToString(),
- };
-
- var rawScheduledTime = reader["ScheduledTime"];
- if (!(rawScheduledTime is DBNull))
- {
- evt.ScheduledTime = ((DateTime)rawScheduledTime).ToUniversalTime();
- }
- else if(evt.EventType == "ExecutionCompleted")
- {
- evt.ScheduledTime = executionStartTime?.ToUniversalTime();
- }
-
- if (evt.ScheduledTime.HasValue)
- {
- evt.DurationInMs = (evt.Timestamp - evt.ScheduledTime.Value).TotalMilliseconds;
- }
-
- return evt;
- }
- }
-}
diff --git a/custom-backends/mssql/arm-template.json b/custom-backends/mssql/arm-template.json
deleted file mode 100644
index f0d5bc9..0000000
--- a/custom-backends/mssql/arm-template.json
+++ /dev/null
@@ -1,157 +0,0 @@
-{
- "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
- "contentVersion": "1.0.0.0",
- "parameters": {
- "functionAppName": {
- "type": "string",
- "defaultValue": "[concat('dfm-',uniqueString(resourceGroup().id))]",
- "metadata": {
- "description": "Name for the Function App, that will host your DFM instance. NOTE: there will be a NEW app created, and it will be different from the one that hosts your Durable Functions."
- }
- },
- "storageConnectionString": {
- "type": "securestring",
- "metadata": {
- "description": "Storage Connection String to the Storage your Durable Functions reside in. Copy it from your Durable Functions App Settings."
- }
- },
- "sqlConnectionString": {
- "type": "securestring",
- "metadata": {
- "description": "Connection String for the database your MSSQL storage provider is using. Copy it from your Durable Functions App Settings."
- }
- },
- "taskHubName": {
- "type": "string",
- "defaultValue": "dbo",
- "metadata": {
- "description": "Task Hub name to be monitored"
- }
- },
- "aadAppClientId": {
- "type": "string",
- "metadata": {
- "description": "In Azure Portal->Azure Active Directory->App Registrations create a new AAD App. Set its 'Redirect URI' setting to 'https://[your-function-app].azurewebsites.net/.auth/login/aad/callback'. Then on 'Authentication' page enable ID Tokens. Then copy that AAD App's ClientId into here."
- }
- },
- "aadAppTenantId": {
- "type": "string",
- "defaultValue": "[subscription().tenantId]",
- "metadata": {
- "description": "Put your AAD TenantId here (you can find it on Azure Portal->Azure Active Directory page), or leave as default to use the current subscription's TenantId."
- }
- },
- "allowedUserNames": {
- "type": "string",
- "metadata": {
- "description": "Comma-separated list of users (emails), that will be allowed to access this DFM instance. Specify at least yourself here."
- }
- }
- },
- "resources": [
- {
- "type": "Microsoft.Web/serverfarms",
- "apiVersion": "2016-09-01",
- "name": "[parameters('functionAppName')]",
- "location": "[resourceGroup().location]",
- "sku": {
- "name": "Y1",
- "tier": "Dynamic"
- },
- "properties": {
- "name": "[parameters('functionAppName')]",
- "computeMode": "Dynamic"
- }
- },
-
- {
- "apiVersion": "2018-11-01",
- "type": "Microsoft.Web/sites",
- "name": "[parameters('functionAppName')]",
- "location": "[resourceGroup().location]",
- "kind": "functionapp",
- "dependsOn": [
- "[resourceId('Microsoft.Web/serverfarms', parameters('functionAppName'))]"
- ],
-
- "resources": [
- {
- "apiVersion": "2015-08-01",
- "name": "web",
- "type": "sourcecontrols",
- "dependsOn": [
- "[resourceId('Microsoft.Web/sites', parameters('functionAppName'))]"
- ],
- "properties": {
- "RepoUrl": "https://github.com/microsoft/DurableFunctionsMonitor",
- "branch": "main",
- "IsManualIntegration": true
- }
- },
-
- {
- "name": "[concat(parameters('functionAppName'), '/authsettings')]",
- "apiVersion": "2018-11-01",
- "type": "Microsoft.Web/sites/config",
- "location": "[resourceGroup().location]",
- "dependsOn": [
- "[resourceId('Microsoft.Web/sites', parameters('functionAppName'))]"
- ],
- "properties": {
- "enabled": true,
- "unauthenticatedClientAction": "RedirectToLoginPage",
- "tokenStoreEnabled": true,
- "defaultProvider": "AzureActiveDirectory",
- "clientId": "[parameters('aadAppClientId')]",
- "issuer": "[concat('https://login.microsoftonline.com/', parameters('aadAppTenantId'), '/v2.0')]"
- }
- }
- ],
-
- "properties": {
- "serverFarmId": "[resourceId('Microsoft.Web/serverfarms', parameters('functionAppName'))]",
- "siteConfig": {
- "netFrameworkVersion": "v8.0",
- "appSettings": [
- {
- "name": "DFM_SQL_CONNECTION_STRING",
- "value": "[parameters('sqlConnectionString')]"
- },
- {
- "name": "DFM_HUB_NAME",
- "value": "[parameters('taskHubName')]"
- },
- {
- "name": "DFM_ALLOWED_USER_NAMES",
- "value": "[parameters('allowedUserNames')]"
- },
- {
- "name": "AzureWebJobsStorage",
- "value": "[parameters('storageConnectionString')]"
- },
- {
- "name": "WEBSITE_CONTENTAZUREFILECONNECTIONSTRING",
- "value": "[parameters('storageConnectionString')]"
- },
- {
- "name": "WEBSITE_CONTENTSHARE",
- "value": "[toLower(parameters('functionAppName'))]"
- },
- {
- "name": "FUNCTIONS_EXTENSION_VERSION",
- "value": "~4"
- },
- {
- "name": "FUNCTIONS_WORKER_RUNTIME",
- "value": "dotnet"
- },
- {
- "name": "Project",
- "value": "custom-backends/mssql"
- }
- ]
- }
- }
- }
- ]
-}
diff --git a/custom-backends/mssql/host.json b/custom-backends/mssql/host.json
deleted file mode 100644
index d61bd2d..0000000
--- a/custom-backends/mssql/host.json
+++ /dev/null
@@ -1,19 +0,0 @@
-{
- "version": "2.0",
- "extensions": {
- "http": {
- "routePrefix": ""
- },
-
- "durableTask": {
- "hubName": "%DFM_HUB_NAME%",
- "extendedSessionsEnabled": "true",
- "UseGracefulShutdown": "true",
- "storageProvider": {
- "type": "mssql",
- "connectionStringName": "DFM_SQL_CONNECTION_STRING",
- "taskEventLockTimeout": "00:02:00"
- }
- }
- }
-}
\ No newline at end of file
diff --git a/custom-backends/netcore21/.gitignore b/custom-backends/netcore21/.gitignore
deleted file mode 100644
index 91f6064..0000000
--- a/custom-backends/netcore21/.gitignore
+++ /dev/null
@@ -1,267 +0,0 @@
-## Ignore Visual Studio temporary files, build results, and
-## files generated by popular Visual Studio add-ons.
-
-# nuget.exe
-nuget.exe
-
-# Azure Functions localsettings file
-local.settings.json
-
-# User-specific files
-*.suo
-*.user
-*.userosscache
-*.sln.docstates
-
-# User-specific files (MonoDevelop/Xamarin Studio)
-*.userprefs
-
-# Build results
-[Dd]ebug/
-[Dd]ebugPublic/
-[Rr]elease/
-[Rr]eleases/
-x64/
-x86/
-bld/
-[Bb]in/
-[Oo]bj/
-[Ll]og/
-
-# Visual Studio 2015 cache/options directory
-.vs/
-# Uncomment if you have tasks that create the project's static files in wwwroot
-#wwwroot/
-
-# MSTest test Results
-[Tt]est[Rr]esult*/
-[Bb]uild[Ll]og.*
-
-# NUNIT
-*.VisualState.xml
-TestResult.xml
-
-# Build Results of an ATL Project
-[Dd]ebugPS/
-[Rr]eleasePS/
-dlldata.c
-
-# DNX
-project.lock.json
-project.fragment.lock.json
-artifacts/
-
-*_i.c
-*_p.c
-*_i.h
-*.ilk
-*.meta
-*.obj
-*.pch
-*.pdb
-*.pgc
-*.pgd
-*.rsp
-*.sbr
-*.tlb
-*.tli
-*.tlh
-*.tmp
-*.tmp_proj
-*.log
-*.vspscc
-*.vssscc
-.builds
-*.pidb
-*.svclog
-*.scc
-
-# Chutzpah Test files
-_Chutzpah*
-
-# Visual C++ cache files
-ipch/
-*.aps
-*.ncb
-*.opendb
-*.opensdf
-*.sdf
-*.cachefile
-*.VC.db
-*.VC.VC.opendb
-
-# Visual Studio profiler
-*.psess
-*.vsp
-*.vspx
-*.sap
-
-# TFS 2012 Local Workspace
-$tf/
-
-# Guidance Automation Toolkit
-*.gpState
-
-# ReSharper is a .NET coding add-in
-_ReSharper*/
-*.[Rr]e[Ss]harper
-*.DotSettings.user
-
-# JustCode is a .NET coding add-in
-.JustCode
-
-# TeamCity is a build add-in
-_TeamCity*
-
-# DotCover is a Code Coverage Tool
-*.dotCover
-
-# NCrunch
-_NCrunch_*
-.*crunch*.local.xml
-nCrunchTemp_*
-
-# MightyMoose
-*.mm.*
-AutoTest.Net/
-
-# Web workbench (sass)
-.sass-cache/
-
-# Installshield output folder
-[Ee]xpress/
-
-# DocProject is a documentation generator add-in
-DocProject/buildhelp/
-DocProject/Help/*.HxT
-DocProject/Help/*.HxC
-DocProject/Help/*.hhc
-DocProject/Help/*.hhk
-DocProject/Help/*.hhp
-DocProject/Help/Html2
-DocProject/Help/html
-
-# Click-Once directory
-publish/
-
-# Publish Web Output
-*.[Pp]ublish.xml
-*.azurePubxml
-# TODO: Comment the next line if you want to checkin your web deploy settings
-# but database connection strings (with potential passwords) will be unencrypted
-#*.pubxml
-*.publishproj
-
-# Microsoft Azure Web App publish settings. Comment the next line if you want to
-# checkin your Azure Web App publish settings, but sensitive information contained
-# in these scripts will be unencrypted
-PublishScripts/
-
-# NuGet Packages
-*.nupkg
-# The packages folder can be ignored because of Package Restore
-**/packages/*
-# except build/, which is used as an MSBuild target.
-!**/packages/build/
-# Uncomment if necessary however generally it will be regenerated when needed
-#!**/packages/repositories.config
-# NuGet v3's project.json files produces more ignoreable files
-*.nuget.props
-*.nuget.targets
-
-# Microsoft Azure Build Output
-csx/
-*.build.csdef
-
-# Microsoft Azure Emulator
-ecf/
-rcf/
-
-# Windows Store app package directories and files
-AppPackages/
-BundleArtifacts/
-Package.StoreAssociation.xml
-_pkginfo.txt
-
-# Visual Studio cache files
-# files ending in .cache can be ignored
-*.[Cc]ache
-# but keep track of directories ending in .cache
-!*.[Cc]ache/
-
-# Others
-ClientBin/
-~$*
-*~
-*.dbmdl
-*.dbproj.schemaview
-*.jfm
-*.pfx
-*.publishsettings
-node_modules/
-orleans.codegen.cs
-
-# Since there are multiple workflows, uncomment next line to ignore bower_components
-# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622)
-#bower_components/
-
-# RIA/Silverlight projects
-Generated_Code/
-
-# Backup & report files from converting an old project file
-# to a newer Visual Studio version. Backup files are not needed,
-# because we have git ;-)
-_UpgradeReport_Files/
-Backup*/
-UpgradeLog*.XML
-UpgradeLog*.htm
-
-# SQL Server files
-*.mdf
-*.ldf
-
-# Business Intelligence projects
-*.rdl.data
-*.bim.layout
-*.bim_*.settings
-
-# Microsoft Fakes
-FakesAssemblies/
-
-# GhostDoc plugin setting file
-*.GhostDoc.xml
-
-# Node.js Tools for Visual Studio
-.ntvs_analysis.dat
-
-# Visual Studio 6 build log
-*.plg
-
-# Visual Studio 6 workspace options file
-*.opt
-
-# Visual Studio LightSwitch build output
-**/*.HTMLClient/GeneratedArtifacts
-**/*.DesktopClient/GeneratedArtifacts
-**/*.DesktopClient/ModelManifest.xml
-**/*.Server/GeneratedArtifacts
-**/*.Server/ModelManifest.xml
-_Pvt_Extensions
-
-# Paket dependency manager
-.paket/paket.exe
-paket-files/
-
-# FAKE - F# Make
-.fake/
-
-# JetBrains Rider
-.idea/
-*.sln.iml
-
-# CodeRush
-.cr/
-
-# Python Tools for Visual Studio (PTVS)
-__pycache__/
-*.pyc
\ No newline at end of file
diff --git a/custom-backends/netcore21/Dfm.NetCore21.csproj b/custom-backends/netcore21/Dfm.NetCore21.csproj
deleted file mode 100644
index 50262f1..0000000
--- a/custom-backends/netcore21/Dfm.NetCore21.csproj
+++ /dev/null
@@ -1,20 +0,0 @@
-
-
- netcoreapp2.1
- v2
-
-
-
-
-
-
-
-
- PreserveNewest
-
-
- PreserveNewest
- Never
-
-
-
diff --git a/custom-backends/netcore21/README.md b/custom-backends/netcore21/README.md
deleted file mode 100644
index fda5a77..0000000
--- a/custom-backends/netcore21/README.md
+++ /dev/null
@@ -1,9 +0,0 @@
-# Durable Functions Monitor on .Net Core 2.1
-
-Custom Durable Functions Monitor backend project, configured to run on .Net Core 2.1.
-
-# How to deploy to Azure
-
-[](https://portal.azure.com/#create/Microsoft.Template/uri/https%3A%2F%2Fraw.githubusercontent.com%2Fmicrosoft%2FDurableFunctionsMonitor%2Fmain%2Fcustom-backends%2Fnetcore21%2Farm-template.json)
-
-The above button will deploy *these sources* into *your newly created* Function App instance.
diff --git a/custom-backends/netcore21/Startup.cs b/custom-backends/netcore21/Startup.cs
deleted file mode 100644
index f37e092..0000000
--- a/custom-backends/netcore21/Startup.cs
+++ /dev/null
@@ -1,18 +0,0 @@
-// Copyright (c) Microsoft Corporation.
-// Licensed under the MIT license.
-
-using DurableFunctionsMonitor.DotNetBackend;
-using Microsoft.Azure.WebJobs;
-using Microsoft.Azure.WebJobs.Hosting;
-
-[assembly: WebJobsStartup(typeof(Dfm.NetCore21.Startup))]
-namespace Dfm.NetCore21
-{
- public class Startup : IWebJobsStartup
- {
- public void Configure(IWebJobsBuilder builder)
- {
- DfmEndpoint.Setup();
- }
- }
-}
diff --git a/custom-backends/netcore21/arm-template.json b/custom-backends/netcore21/arm-template.json
deleted file mode 100644
index c0b51c0..0000000
--- a/custom-backends/netcore21/arm-template.json
+++ /dev/null
@@ -1,146 +0,0 @@
-{
- "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
- "contentVersion": "1.0.0.0",
- "parameters": {
- "functionAppName": {
- "type": "string",
- "defaultValue": "[concat('dfm-',uniqueString(resourceGroup().id))]",
- "metadata": {
- "description": "Name for the Function App, that will host your DFM instance. NOTE: there will be a NEW app created, and it will be different from the one that hosts your Durable Functions."
- }
- },
- "storageConnectionString": {
- "type": "securestring",
- "metadata": {
- "description": "Storage Connection String to the Storage your Durable Functions reside in. Copy it from your Durable Functions App Settings."
- }
- },
- "taskHubName": {
- "type": "string",
- "defaultValue": "",
- "metadata": {
- "description": "(optional) Comma-separated list of Task Hub names to be monitored. WARNING: if not set, this instance will expose ALL Task Hubs in your Storage account!"
- }
- },
- "aadAppClientId": {
- "type": "string",
- "metadata": {
- "description": "In Azure Portal->Azure Active Directory->App Registrations create a new AAD App. Set its 'Redirect URI' setting to 'https://[your-function-app].azurewebsites.net/.auth/login/aad/callback'. Then on 'Authentication' page enable ID Tokens. Then copy that AAD App's ClientId into here."
- }
- },
- "aadAppTenantId": {
- "type": "string",
- "defaultValue": "[subscription().tenantId]",
- "metadata": {
- "description": "Put your AAD TenantId here (you can find it on Azure Portal->Azure Active Directory page), or leave as default to use the current subscription's TenantId."
- }
- },
- "allowedUserNames": {
- "type": "string",
- "metadata": {
- "description": "Comma-separated list of users (emails), that will be allowed to access this DFM instance. Specify at least yourself here."
- }
- }
- },
- "resources": [
- {
- "type": "Microsoft.Web/serverfarms",
- "apiVersion": "2016-09-01",
- "name": "[parameters('functionAppName')]",
- "location": "[resourceGroup().location]",
- "sku": {
- "name": "Y1",
- "tier": "Dynamic"
- },
- "properties": {
- "name": "[parameters('functionAppName')]",
- "computeMode": "Dynamic"
- }
- },
-
- {
- "apiVersion": "2018-11-01",
- "type": "Microsoft.Web/sites",
- "name": "[parameters('functionAppName')]",
- "location": "[resourceGroup().location]",
- "kind": "functionapp",
- "dependsOn": [
- "[resourceId('Microsoft.Web/serverfarms', parameters('functionAppName'))]"
- ],
-
- "resources": [
- {
- "apiVersion": "2015-08-01",
- "name": "web",
- "type": "sourcecontrols",
- "dependsOn": [
- "[resourceId('Microsoft.Web/sites', parameters('functionAppName'))]"
- ],
- "properties": {
- "RepoUrl": "https://github.com/microsoft/DurableFunctionsMonitor",
- "branch": "main",
- "IsManualIntegration": true
- }
- },
-
- {
- "name": "[concat(parameters('functionAppName'), '/authsettings')]",
- "apiVersion": "2018-11-01",
- "type": "Microsoft.Web/sites/config",
- "location": "[resourceGroup().location]",
- "dependsOn": [
- "[resourceId('Microsoft.Web/sites', parameters('functionAppName'))]"
- ],
- "properties": {
- "enabled": true,
- "unauthenticatedClientAction": "RedirectToLoginPage",
- "tokenStoreEnabled": true,
- "defaultProvider": "AzureActiveDirectory",
- "clientId": "[parameters('aadAppClientId')]",
- "issuer": "[concat('https://login.microsoftonline.com/', parameters('aadAppTenantId'), '/v2.0')]"
- }
- }
- ],
-
- "properties": {
- "serverFarmId": "[resourceId('Microsoft.Web/serverfarms', parameters('functionAppName'))]",
- "siteConfig": {
- "appSettings": [
- {
- "name": "DFM_HUB_NAME",
- "value": "[parameters('taskHubName')]"
- },
- {
- "name": "DFM_ALLOWED_USER_NAMES",
- "value": "[parameters('allowedUserNames')]"
- },
- {
- "name": "AzureWebJobsStorage",
- "value": "[parameters('storageConnectionString')]"
- },
- {
- "name": "WEBSITE_CONTENTAZUREFILECONNECTIONSTRING",
- "value": "[parameters('storageConnectionString')]"
- },
- {
- "name": "WEBSITE_CONTENTSHARE",
- "value": "[toLower(parameters('functionAppName'))]"
- },
- {
- "name": "FUNCTIONS_EXTENSION_VERSION",
- "value": "~2"
- },
- {
- "name": "FUNCTIONS_WORKER_RUNTIME",
- "value": "dotnet"
- },
- {
- "name": "Project",
- "value": "custom-backends/netcore21"
- }
- ]
- }
- }
- }
- ]
-}
diff --git a/custom-backends/netcore21/host.json b/custom-backends/netcore21/host.json
deleted file mode 100644
index dc0bbb4..0000000
--- a/custom-backends/netcore21/host.json
+++ /dev/null
@@ -1,8 +0,0 @@
-{
- "version": "2.0",
- "extensions": {
- "http": {
- "routePrefix": ""
- }
- }
-}
\ No newline at end of file
diff --git a/custom-backends/netcore31/.gitignore b/custom-backends/netcore31/.gitignore
deleted file mode 100644
index 91f6064..0000000
--- a/custom-backends/netcore31/.gitignore
+++ /dev/null
@@ -1,267 +0,0 @@
-## Ignore Visual Studio temporary files, build results, and
-## files generated by popular Visual Studio add-ons.
-
-# nuget.exe
-nuget.exe
-
-# Azure Functions localsettings file
-local.settings.json
-
-# User-specific files
-*.suo
-*.user
-*.userosscache
-*.sln.docstates
-
-# User-specific files (MonoDevelop/Xamarin Studio)
-*.userprefs
-
-# Build results
-[Dd]ebug/
-[Dd]ebugPublic/
-[Rr]elease/
-[Rr]eleases/
-x64/
-x86/
-bld/
-[Bb]in/
-[Oo]bj/
-[Ll]og/
-
-# Visual Studio 2015 cache/options directory
-.vs/
-# Uncomment if you have tasks that create the project's static files in wwwroot
-#wwwroot/
-
-# MSTest test Results
-[Tt]est[Rr]esult*/
-[Bb]uild[Ll]og.*
-
-# NUNIT
-*.VisualState.xml
-TestResult.xml
-
-# Build Results of an ATL Project
-[Dd]ebugPS/
-[Rr]eleasePS/
-dlldata.c
-
-# DNX
-project.lock.json
-project.fragment.lock.json
-artifacts/
-
-*_i.c
-*_p.c
-*_i.h
-*.ilk
-*.meta
-*.obj
-*.pch
-*.pdb
-*.pgc
-*.pgd
-*.rsp
-*.sbr
-*.tlb
-*.tli
-*.tlh
-*.tmp
-*.tmp_proj
-*.log
-*.vspscc
-*.vssscc
-.builds
-*.pidb
-*.svclog
-*.scc
-
-# Chutzpah Test files
-_Chutzpah*
-
-# Visual C++ cache files
-ipch/
-*.aps
-*.ncb
-*.opendb
-*.opensdf
-*.sdf
-*.cachefile
-*.VC.db
-*.VC.VC.opendb
-
-# Visual Studio profiler
-*.psess
-*.vsp
-*.vspx
-*.sap
-
-# TFS 2012 Local Workspace
-$tf/
-
-# Guidance Automation Toolkit
-*.gpState
-
-# ReSharper is a .NET coding add-in
-_ReSharper*/
-*.[Rr]e[Ss]harper
-*.DotSettings.user
-
-# JustCode is a .NET coding add-in
-.JustCode
-
-# TeamCity is a build add-in
-_TeamCity*
-
-# DotCover is a Code Coverage Tool
-*.dotCover
-
-# NCrunch
-_NCrunch_*
-.*crunch*.local.xml
-nCrunchTemp_*
-
-# MightyMoose
-*.mm.*
-AutoTest.Net/
-
-# Web workbench (sass)
-.sass-cache/
-
-# Installshield output folder
-[Ee]xpress/
-
-# DocProject is a documentation generator add-in
-DocProject/buildhelp/
-DocProject/Help/*.HxT
-DocProject/Help/*.HxC
-DocProject/Help/*.hhc
-DocProject/Help/*.hhk
-DocProject/Help/*.hhp
-DocProject/Help/Html2
-DocProject/Help/html
-
-# Click-Once directory
-publish/
-
-# Publish Web Output
-*.[Pp]ublish.xml
-*.azurePubxml
-# TODO: Comment the next line if you want to checkin your web deploy settings
-# but database connection strings (with potential passwords) will be unencrypted
-#*.pubxml
-*.publishproj
-
-# Microsoft Azure Web App publish settings. Comment the next line if you want to
-# checkin your Azure Web App publish settings, but sensitive information contained
-# in these scripts will be unencrypted
-PublishScripts/
-
-# NuGet Packages
-*.nupkg
-# The packages folder can be ignored because of Package Restore
-**/packages/*
-# except build/, which is used as an MSBuild target.
-!**/packages/build/
-# Uncomment if necessary however generally it will be regenerated when needed
-#!**/packages/repositories.config
-# NuGet v3's project.json files produces more ignoreable files
-*.nuget.props
-*.nuget.targets
-
-# Microsoft Azure Build Output
-csx/
-*.build.csdef
-
-# Microsoft Azure Emulator
-ecf/
-rcf/
-
-# Windows Store app package directories and files
-AppPackages/
-BundleArtifacts/
-Package.StoreAssociation.xml
-_pkginfo.txt
-
-# Visual Studio cache files
-# files ending in .cache can be ignored
-*.[Cc]ache
-# but keep track of directories ending in .cache
-!*.[Cc]ache/
-
-# Others
-ClientBin/
-~$*
-*~
-*.dbmdl
-*.dbproj.schemaview
-*.jfm
-*.pfx
-*.publishsettings
-node_modules/
-orleans.codegen.cs
-
-# Since there are multiple workflows, uncomment next line to ignore bower_components
-# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622)
-#bower_components/
-
-# RIA/Silverlight projects
-Generated_Code/
-
-# Backup & report files from converting an old project file
-# to a newer Visual Studio version. Backup files are not needed,
-# because we have git ;-)
-_UpgradeReport_Files/
-Backup*/
-UpgradeLog*.XML
-UpgradeLog*.htm
-
-# SQL Server files
-*.mdf
-*.ldf
-
-# Business Intelligence projects
-*.rdl.data
-*.bim.layout
-*.bim_*.settings
-
-# Microsoft Fakes
-FakesAssemblies/
-
-# GhostDoc plugin setting file
-*.GhostDoc.xml
-
-# Node.js Tools for Visual Studio
-.ntvs_analysis.dat
-
-# Visual Studio 6 build log
-*.plg
-
-# Visual Studio 6 workspace options file
-*.opt
-
-# Visual Studio LightSwitch build output
-**/*.HTMLClient/GeneratedArtifacts
-**/*.DesktopClient/GeneratedArtifacts
-**/*.DesktopClient/ModelManifest.xml
-**/*.Server/GeneratedArtifacts
-**/*.Server/ModelManifest.xml
-_Pvt_Extensions
-
-# Paket dependency manager
-.paket/paket.exe
-paket-files/
-
-# FAKE - F# Make
-.fake/
-
-# JetBrains Rider
-.idea/
-*.sln.iml
-
-# CodeRush
-.cr/
-
-# Python Tools for Visual Studio (PTVS)
-__pycache__/
-*.pyc
\ No newline at end of file
diff --git a/custom-backends/netcore31/Dfm.NetCore31.csproj b/custom-backends/netcore31/Dfm.NetCore31.csproj
deleted file mode 100644
index 4cbd1cc..0000000
--- a/custom-backends/netcore31/Dfm.NetCore31.csproj
+++ /dev/null
@@ -1,20 +0,0 @@
-
-
- netcoreapp3.1
- v3
-
-
-
-
-
-
-
-
- PreserveNewest
-
-
- PreserveNewest
- Never
-
-
-
diff --git a/custom-backends/netcore31/README.md b/custom-backends/netcore31/README.md
deleted file mode 100644
index 10f15c7..0000000
--- a/custom-backends/netcore31/README.md
+++ /dev/null
@@ -1,9 +0,0 @@
-# Durable Functions Monitor on .Net Core 3.1
-
-Custom Durable Functions Monitor backend project, configured to run on .Net Core 3.1.
-
-# How to deploy to Azure
-
-[](https://portal.azure.com/#create/Microsoft.Template/uri/https%3A%2F%2Fraw.githubusercontent.com%2Fmicrosoft%2FDurableFunctionsMonitor%2Fmain%2Fcustom-backends%2Fnetcore31%2Farm-template.json)
-
-The above button will deploy *these sources* into *your newly created* Function App instance.
diff --git a/custom-backends/netcore31/Startup.cs b/custom-backends/netcore31/Startup.cs
deleted file mode 100644
index 9ac0948..0000000
--- a/custom-backends/netcore31/Startup.cs
+++ /dev/null
@@ -1,18 +0,0 @@
-// Copyright (c) Microsoft Corporation.
-// Licensed under the MIT license.
-
-using DurableFunctionsMonitor.DotNetBackend;
-using Microsoft.Azure.WebJobs;
-using Microsoft.Azure.WebJobs.Hosting;
-
-[assembly: WebJobsStartup(typeof(Dfm.NetCore31.Startup))]
-namespace Dfm.NetCore31
-{
- public class Startup : IWebJobsStartup
- {
- public void Configure(IWebJobsBuilder builder)
- {
- DfmEndpoint.Setup();
- }
- }
-}
diff --git a/custom-backends/netcore31/arm-template.json b/custom-backends/netcore31/arm-template.json
deleted file mode 100644
index 5cec9f5..0000000
--- a/custom-backends/netcore31/arm-template.json
+++ /dev/null
@@ -1,146 +0,0 @@
-{
- "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
- "contentVersion": "1.0.0.0",
- "parameters": {
- "functionAppName": {
- "type": "string",
- "defaultValue": "[concat('dfm-',uniqueString(resourceGroup().id))]",
- "metadata": {
- "description": "Name for the Function App, that will host your DFM instance. NOTE: there will be a NEW app created, and it will be different from the one that hosts your Durable Functions."
- }
- },
- "storageConnectionString": {
- "type": "securestring",
- "metadata": {
- "description": "Storage Connection String to the Storage your Durable Functions reside in. Copy it from your Durable Functions App Settings."
- }
- },
- "taskHubName": {
- "type": "string",
- "defaultValue": "",
- "metadata": {
- "description": "(optional) Comma-separated list of Task Hub names to be monitored. WARNING: if not set, this instance will expose ALL Task Hubs in your Storage account!"
- }
- },
- "aadAppClientId": {
- "type": "string",
- "metadata": {
- "description": "In Azure Portal->Azure Active Directory->App Registrations create a new AAD App. Set its 'Redirect URI' setting to 'https://[your-function-app].azurewebsites.net/.auth/login/aad/callback'. Then on 'Authentication' page enable ID Tokens. Then copy that AAD App's ClientId into here."
- }
- },
- "aadAppTenantId": {
- "type": "string",
- "defaultValue": "[subscription().tenantId]",
- "metadata": {
- "description": "Put your AAD TenantId here (you can find it on Azure Portal->Azure Active Directory page), or leave as default to use the current subscription's TenantId."
- }
- },
- "allowedUserNames": {
- "type": "string",
- "metadata": {
- "description": "Comma-separated list of users (emails), that will be allowed to access this DFM instance. Specify at least yourself here."
- }
- }
- },
- "resources": [
- {
- "type": "Microsoft.Web/serverfarms",
- "apiVersion": "2016-09-01",
- "name": "[parameters('functionAppName')]",
- "location": "[resourceGroup().location]",
- "sku": {
- "name": "Y1",
- "tier": "Dynamic"
- },
- "properties": {
- "name": "[parameters('functionAppName')]",
- "computeMode": "Dynamic"
- }
- },
-
- {
- "apiVersion": "2018-11-01",
- "type": "Microsoft.Web/sites",
- "name": "[parameters('functionAppName')]",
- "location": "[resourceGroup().location]",
- "kind": "functionapp",
- "dependsOn": [
- "[resourceId('Microsoft.Web/serverfarms', parameters('functionAppName'))]"
- ],
-
- "resources": [
- {
- "apiVersion": "2015-08-01",
- "name": "web",
- "type": "sourcecontrols",
- "dependsOn": [
- "[resourceId('Microsoft.Web/sites', parameters('functionAppName'))]"
- ],
- "properties": {
- "RepoUrl": "https://github.com/microsoft/DurableFunctionsMonitor",
- "branch": "main",
- "IsManualIntegration": true
- }
- },
-
- {
- "name": "[concat(parameters('functionAppName'), '/authsettings')]",
- "apiVersion": "2018-11-01",
- "type": "Microsoft.Web/sites/config",
- "location": "[resourceGroup().location]",
- "dependsOn": [
- "[resourceId('Microsoft.Web/sites', parameters('functionAppName'))]"
- ],
- "properties": {
- "enabled": true,
- "unauthenticatedClientAction": "RedirectToLoginPage",
- "tokenStoreEnabled": true,
- "defaultProvider": "AzureActiveDirectory",
- "clientId": "[parameters('aadAppClientId')]",
- "issuer": "[concat('https://login.microsoftonline.com/', parameters('aadAppTenantId'), '/v2.0')]"
- }
- }
- ],
-
- "properties": {
- "serverFarmId": "[resourceId('Microsoft.Web/serverfarms', parameters('functionAppName'))]",
- "siteConfig": {
- "appSettings": [
- {
- "name": "DFM_HUB_NAME",
- "value": "[parameters('taskHubName')]"
- },
- {
- "name": "DFM_ALLOWED_USER_NAMES",
- "value": "[parameters('allowedUserNames')]"
- },
- {
- "name": "AzureWebJobsStorage",
- "value": "[parameters('storageConnectionString')]"
- },
- {
- "name": "WEBSITE_CONTENTAZUREFILECONNECTIONSTRING",
- "value": "[parameters('storageConnectionString')]"
- },
- {
- "name": "WEBSITE_CONTENTSHARE",
- "value": "[toLower(parameters('functionAppName'))]"
- },
- {
- "name": "FUNCTIONS_EXTENSION_VERSION",
- "value": "~3"
- },
- {
- "name": "FUNCTIONS_WORKER_RUNTIME",
- "value": "dotnet"
- },
- {
- "name": "Project",
- "value": "custom-backends/netcore31"
- }
- ]
- }
- }
- }
- ]
-}
diff --git a/custom-backends/netcore31/host.json b/custom-backends/netcore31/host.json
deleted file mode 100644
index dc0bbb4..0000000
--- a/custom-backends/netcore31/host.json
+++ /dev/null
@@ -1,8 +0,0 @@
-{
- "version": "2.0",
- "extensions": {
- "http": {
- "routePrefix": ""
- }
- }
-}
\ No newline at end of file
diff --git a/custom-backends/netherite/.gitignore b/custom-backends/netherite/.gitignore
deleted file mode 100644
index 91f6064..0000000
--- a/custom-backends/netherite/.gitignore
+++ /dev/null
@@ -1,267 +0,0 @@
-## Ignore Visual Studio temporary files, build results, and
-## files generated by popular Visual Studio add-ons.
-
-# nuget.exe
-nuget.exe
-
-# Azure Functions localsettings file
-local.settings.json
-
-# User-specific files
-*.suo
-*.user
-*.userosscache
-*.sln.docstates
-
-# User-specific files (MonoDevelop/Xamarin Studio)
-*.userprefs
-
-# Build results
-[Dd]ebug/
-[Dd]ebugPublic/
-[Rr]elease/
-[Rr]eleases/
-x64/
-x86/
-bld/
-[Bb]in/
-[Oo]bj/
-[Ll]og/
-
-# Visual Studio 2015 cache/options directory
-.vs/
-# Uncomment if you have tasks that create the project's static files in wwwroot
-#wwwroot/
-
-# MSTest test Results
-[Tt]est[Rr]esult*/
-[Bb]uild[Ll]og.*
-
-# NUNIT
-*.VisualState.xml
-TestResult.xml
-
-# Build Results of an ATL Project
-[Dd]ebugPS/
-[Rr]eleasePS/
-dlldata.c
-
-# DNX
-project.lock.json
-project.fragment.lock.json
-artifacts/
-
-*_i.c
-*_p.c
-*_i.h
-*.ilk
-*.meta
-*.obj
-*.pch
-*.pdb
-*.pgc
-*.pgd
-*.rsp
-*.sbr
-*.tlb
-*.tli
-*.tlh
-*.tmp
-*.tmp_proj
-*.log
-*.vspscc
-*.vssscc
-.builds
-*.pidb
-*.svclog
-*.scc
-
-# Chutzpah Test files
-_Chutzpah*
-
-# Visual C++ cache files
-ipch/
-*.aps
-*.ncb
-*.opendb
-*.opensdf
-*.sdf
-*.cachefile
-*.VC.db
-*.VC.VC.opendb
-
-# Visual Studio profiler
-*.psess
-*.vsp
-*.vspx
-*.sap
-
-# TFS 2012 Local Workspace
-$tf/
-
-# Guidance Automation Toolkit
-*.gpState
-
-# ReSharper is a .NET coding add-in
-_ReSharper*/
-*.[Rr]e[Ss]harper
-*.DotSettings.user
-
-# JustCode is a .NET coding add-in
-.JustCode
-
-# TeamCity is a build add-in
-_TeamCity*
-
-# DotCover is a Code Coverage Tool
-*.dotCover
-
-# NCrunch
-_NCrunch_*
-.*crunch*.local.xml
-nCrunchTemp_*
-
-# MightyMoose
-*.mm.*
-AutoTest.Net/
-
-# Web workbench (sass)
-.sass-cache/
-
-# Installshield output folder
-[Ee]xpress/
-
-# DocProject is a documentation generator add-in
-DocProject/buildhelp/
-DocProject/Help/*.HxT
-DocProject/Help/*.HxC
-DocProject/Help/*.hhc
-DocProject/Help/*.hhk
-DocProject/Help/*.hhp
-DocProject/Help/Html2
-DocProject/Help/html
-
-# Click-Once directory
-publish/
-
-# Publish Web Output
-*.[Pp]ublish.xml
-*.azurePubxml
-# TODO: Comment the next line if you want to checkin your web deploy settings
-# but database connection strings (with potential passwords) will be unencrypted
-#*.pubxml
-*.publishproj
-
-# Microsoft Azure Web App publish settings. Comment the next line if you want to
-# checkin your Azure Web App publish settings, but sensitive information contained
-# in these scripts will be unencrypted
-PublishScripts/
-
-# NuGet Packages
-*.nupkg
-# The packages folder can be ignored because of Package Restore
-**/packages/*
-# except build/, which is used as an MSBuild target.
-!**/packages/build/
-# Uncomment if necessary however generally it will be regenerated when needed
-#!**/packages/repositories.config
-# NuGet v3's project.json files produces more ignoreable files
-*.nuget.props
-*.nuget.targets
-
-# Microsoft Azure Build Output
-csx/
-*.build.csdef
-
-# Microsoft Azure Emulator
-ecf/
-rcf/
-
-# Windows Store app package directories and files
-AppPackages/
-BundleArtifacts/
-Package.StoreAssociation.xml
-_pkginfo.txt
-
-# Visual Studio cache files
-# files ending in .cache can be ignored
-*.[Cc]ache
-# but keep track of directories ending in .cache
-!*.[Cc]ache/
-
-# Others
-ClientBin/
-~$*
-*~
-*.dbmdl
-*.dbproj.schemaview
-*.jfm
-*.pfx
-*.publishsettings
-node_modules/
-orleans.codegen.cs
-
-# Since there are multiple workflows, uncomment next line to ignore bower_components
-# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622)
-#bower_components/
-
-# RIA/Silverlight projects
-Generated_Code/
-
-# Backup & report files from converting an old project file
-# to a newer Visual Studio version. Backup files are not needed,
-# because we have git ;-)
-_UpgradeReport_Files/
-Backup*/
-UpgradeLog*.XML
-UpgradeLog*.htm
-
-# SQL Server files
-*.mdf
-*.ldf
-
-# Business Intelligence projects
-*.rdl.data
-*.bim.layout
-*.bim_*.settings
-
-# Microsoft Fakes
-FakesAssemblies/
-
-# GhostDoc plugin setting file
-*.GhostDoc.xml
-
-# Node.js Tools for Visual Studio
-.ntvs_analysis.dat
-
-# Visual Studio 6 build log
-*.plg
-
-# Visual Studio 6 workspace options file
-*.opt
-
-# Visual Studio LightSwitch build output
-**/*.HTMLClient/GeneratedArtifacts
-**/*.DesktopClient/GeneratedArtifacts
-**/*.DesktopClient/ModelManifest.xml
-**/*.Server/GeneratedArtifacts
-**/*.Server/ModelManifest.xml
-_Pvt_Extensions
-
-# Paket dependency manager
-.paket/paket.exe
-paket-files/
-
-# FAKE - F# Make
-.fake/
-
-# JetBrains Rider
-.idea/
-*.sln.iml
-
-# CodeRush
-.cr/
-
-# Python Tools for Visual Studio (PTVS)
-__pycache__/
-*.pyc
\ No newline at end of file
diff --git a/custom-backends/netherite/Dfm.Netherite.csproj b/custom-backends/netherite/Dfm.Netherite.csproj
deleted file mode 100644
index f32d57a..0000000
--- a/custom-backends/netherite/Dfm.Netherite.csproj
+++ /dev/null
@@ -1,21 +0,0 @@
-
-
- net6.0
- v4
-
-
-
-
-
-
-
-
-
- PreserveNewest
-
-
- PreserveNewest
- Never
-
-
-
diff --git a/custom-backends/netherite/Dockerfile b/custom-backends/netherite/Dockerfile
deleted file mode 100644
index 8a4907c..0000000
--- a/custom-backends/netherite/Dockerfile
+++ /dev/null
@@ -1,15 +0,0 @@
-FROM mcr.microsoft.com/dotnet/sdk:6.0 AS installer-env
-
-# Build requires 3.1 SDK
-COPY --from=mcr.microsoft.com/dotnet/core/sdk:3.1 /usr/share/dotnet /usr/share/dotnet
-
-COPY . /src/dotnet-function-app
-RUN cd /src/dotnet-function-app && \
- mkdir -p /home/site/wwwroot && \
- dotnet publish *.csproj --output /home/site/wwwroot
-
-FROM mcr.microsoft.com/azure-functions/dotnet:4
-ENV AzureWebJobsScriptRoot=/home/site/wwwroot \
- AzureFunctionsJobHost__Logging__Console__IsEnabled=true
-
-COPY --from=installer-env ["/home/site/wwwroot", "/home/site/wwwroot"]
\ No newline at end of file
diff --git a/custom-backends/netherite/README.md b/custom-backends/netherite/README.md
deleted file mode 100644
index 4454bc2..0000000
--- a/custom-backends/netherite/README.md
+++ /dev/null
@@ -1,53 +0,0 @@
-# Durable Functions Monitor for Netherite storage provider
-
-Custom Durable Functions Monitor backend project to be used with [Netherite Provider](https://microsoft.github.io/durabletask-netherite/#/).
-
-NOTE: The monitored function app must be running; otherwise DFM cannot display any information about the taskhub.
-Thus, if the monitored application is unresponsive (because of excessive CPU or IO load, for example), DFM is unresponsive as well.
-This is different than with Azure Storage provider or the Microsoft SQL provider, where the storage service can be queried directly.
-
-# How to run locally
-
-1. Clone this repo.
-
-2. In the project's folder create a `local.settings.json` file containing the required connection strings:
-```
-{
- "IsEncrypted": false,
- "Values": {
- "DFM_NONCE": "i_sure_know_what_i_am_doing",
- "AzureWebJobsStorage": "insert-azure-storage-connection-string-here",
- "EventHubsConnection": "insert-eventhubs-sas-connection-string-here"
- },
- "Host": {
- "LocalHttpPort": 7072
- }
-}
-```
-If you prefer to not enter the connection strings into a file, you can omit the respective lines and use environment variables (same names) instead.
-
-3. Edit the host.json file, specifying the correct *taskhub name*. It must match the taskhub name of the app you wish to monitor.
-
-4. Enter the Dfm.Netherite directory from a console, and enter `func start`
-
-5. If it does not open by itself, direct your browser to http://localhost:7072/.
- You can change this port and whether to open the browser in Properties/launchSettings.json
-
-WARNING: setting **DFM_NONCE** to `i_sure_know_what_i_am_doing` **turns authentication off**. Please, protect your endpoint as appropriate.
-
-
-## How to run [as a Docker container](https://hub.docker.com/repository/docker/scaletone/durablefunctionsmonitor.netherite)
-
-* `docker pull scaletone/durablefunctionsmonitor.netherite:[put-latest-tag-here]`
-* `docker run -p 7072:80 -e AzureWebJobsStorage="your-storage-connection-string" -e EventHubsConnection="your-event-hubs-connection-string" -e DFM_NONCE="i_sure_know_what_i_am_doing" scaletone/durablefunctionsmonitor.netherite:[put-latest-tag-here]`
-
- WARNING: setting **DFM_NONCE** to `i_sure_know_what_i_am_doing` **turns authentication off**. Please, protect your endpoint as appropriate.
-
-* Navigate to http://localhost:7072
-
-
-# How to deploy to Azure
-
-[](https://portal.azure.com/#create/Microsoft.Template/uri/https%3A%2F%2Fraw.githubusercontent.com%2Fmicrosoft%2FDurableFunctionsMonitor%2Fmain%2Fcustom-backends%2Fnetherite%2Farm-template.json)
-
-The above button will deploy *these sources* into *your newly created* Function App instance.
diff --git a/custom-backends/netherite/Startup.cs b/custom-backends/netherite/Startup.cs
deleted file mode 100644
index a005545..0000000
--- a/custom-backends/netherite/Startup.cs
+++ /dev/null
@@ -1,51 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Threading.Tasks;
-using DurableFunctionsMonitor.DotNetBackend;
-using Microsoft.Azure.WebJobs;
-using Microsoft.Azure.WebJobs.Hosting;
-using Microsoft.WindowsAzure.Storage;
-using Microsoft.WindowsAzure.Storage.Table;
-
-[assembly: WebJobsStartup(typeof(Dfm.Netherite.Startup))]
-namespace Dfm.Netherite
-{
- public class Startup : IWebJobsStartup
- {
- public void Configure(IWebJobsBuilder builder)
- {
- DfmEndpoint.Setup(null, new DfmExtensionPoints
- {
- GetTaskHubNamesRoutine = GetTaskHubNames
- });
- }
-
- ///
- /// Custom routine for fetching Task Hub names
- ///
- public static async Task> GetTaskHubNames(string connName)
- {
- string connectionString = Environment.GetEnvironmentVariable(connName);
-
- var tableClient = CloudStorageAccount.Parse(connectionString).CreateCloudTableClient();
-
- var table = tableClient.GetTableReference("DurableTaskPartitions");
-
- var query = new TableQuery();
-
- var partitionKeys = new List();
- TableContinuationToken token = null;
- do
- {
- var nextBatch = await table.ExecuteQuerySegmentedAsync(query, token);
-
- partitionKeys.AddRange(nextBatch.Results.Select(r => r.PartitionKey));
- token = nextBatch.ContinuationToken;
- }
- while (token != null);
-
- return partitionKeys.Distinct();
- }
- }
-}
diff --git a/custom-backends/netherite/arm-template.json b/custom-backends/netherite/arm-template.json
deleted file mode 100644
index f01e243..0000000
--- a/custom-backends/netherite/arm-template.json
+++ /dev/null
@@ -1,170 +0,0 @@
-{
- "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
- "contentVersion": "1.0.0.0",
- "parameters": {
- "functionAppName": {
- "type": "string",
- "defaultValue": "[concat('dfm-',uniqueString(resourceGroup().id))]",
- "metadata": {
- "description": "Name for the Function App, that will host your DFM instance. NOTE: there will be a NEW app created, and it will be different from the one that hosts your Durable Functions."
- }
- },
- "storageConnectionString": {
- "type": "securestring",
- "metadata": {
- "description": "Storage Connection String to the Storage your Durable Functions reside in. Copy it from your Durable Functions App Settings."
- }
- },
- "eventHubsConnectionString": {
- "type": "securestring",
- "metadata": {
- "description": "Connection String for the Event Hubs namespace your Netherite storage provider is using. Copy it from your Durable Functions App Settings."
- }
- },
- "taskHubName": {
- "type": "string",
- "defaultValue": "",
- "metadata": {
- "description": "(optional) Comma-separated list of Task Hub names to be monitored. WARNING: if not set, this instance will expose ALL Task Hubs in your Storage account!"
- }
- },
- "aadAppClientId": {
- "type": "string",
- "metadata": {
- "description": "In Azure Portal->Azure Active Directory->App Registrations create a new AAD App. Set its 'Redirect URI' setting to 'https://[your-function-app].azurewebsites.net/.auth/login/aad/callback'. Then on 'Authentication' page enable ID Tokens. Then copy that AAD App's ClientId into here."
- }
- },
- "aadAppTenantId": {
- "type": "string",
- "defaultValue": "[subscription().tenantId]",
- "metadata": {
- "description": "Put your AAD TenantId here (you can find it on Azure Portal->Azure Active Directory page), or leave as default to use the current subscription's TenantId."
- }
- },
- "allowedUserNames": {
- "type": "string",
- "metadata": {
- "description": "Comma-separated list of users (emails), that will be allowed to access this DFM instance. Specify at least yourself here."
- }
- }
- },
- "resources": [
- {
- "type": "Microsoft.Web/serverfarms",
- "apiVersion": "2016-09-01",
- "name": "[parameters('functionAppName')]",
- "location": "[resourceGroup().location]",
- "sku": {
- "name": "Y1",
- "tier": "Dynamic"
- },
- "properties": {
- "name": "[parameters('functionAppName')]",
- "computeMode": "Dynamic"
- }
- },
-
- {
- "apiVersion": "2018-11-01",
- "type": "Microsoft.Web/sites",
- "name": "[parameters('functionAppName')]",
- "location": "[resourceGroup().location]",
- "kind": "functionapp",
- "dependsOn": [
- "[resourceId('Microsoft.Web/serverfarms', parameters('functionAppName'))]"
- ],
-
- "resources": [
- {
- "apiVersion": "2015-08-01",
- "name": "web",
- "type": "sourcecontrols",
- "dependsOn": [
- "[resourceId('Microsoft.Web/sites', parameters('functionAppName'))]"
- ],
- "properties": {
- "RepoUrl": "https://github.com/microsoft/DurableFunctionsMonitor",
- "branch": "main",
- "IsManualIntegration": true
- }
- },
-
- {
- "name": "[concat(parameters('functionAppName'), '/authsettings')]",
- "apiVersion": "2018-11-01",
- "type": "Microsoft.Web/sites/config",
- "location": "[resourceGroup().location]",
- "dependsOn": [
- "[resourceId('Microsoft.Web/sites', parameters('functionAppName'))]"
- ],
- "properties": {
- "enabled": true,
- "unauthenticatedClientAction": "RedirectToLoginPage",
- "tokenStoreEnabled": true,
- "defaultProvider": "AzureActiveDirectory",
- "clientId": "[parameters('aadAppClientId')]",
- "issuer": "[concat('https://login.microsoftonline.com/', parameters('aadAppTenantId'), '/v2.0')]"
- }
- },
-
- {
- "name": "[concat(parameters('functionAppName'), '/web')]",
- "type": "Microsoft.Web/sites/config",
- "apiVersion": "2022-03-01",
- "location": "[resourceGroup().location]",
- "dependsOn": [
- "[resourceId('Microsoft.Web/sites', parameters('functionAppName'))]"
- ],
- "properties": {
- "use32BitWorkerProcess": false
- }
- }
- ],
-
- "properties": {
- "serverFarmId": "[resourceId('Microsoft.Web/serverfarms', parameters('functionAppName'))]",
- "siteConfig": {
- "netFrameworkVersion": "v8.0",
- "appSettings": [
- {
- "name": "DFM_HUB_NAME",
- "value": "[parameters('taskHubName')]"
- },
- {
- "name": "DFM_ALLOWED_USER_NAMES",
- "value": "[parameters('allowedUserNames')]"
- },
- {
- "name": "EventHubsConnection",
- "value": "[parameters('eventHubsConnectionString')]"
- },
- {
- "name": "AzureWebJobsStorage",
- "value": "[parameters('storageConnectionString')]"
- },
- {
- "name": "WEBSITE_CONTENTAZUREFILECONNECTIONSTRING",
- "value": "[parameters('storageConnectionString')]"
- },
- {
- "name": "WEBSITE_CONTENTSHARE",
- "value": "[toLower(parameters('functionAppName'))]"
- },
- {
- "name": "FUNCTIONS_EXTENSION_VERSION",
- "value": "~4"
- },
- {
- "name": "FUNCTIONS_WORKER_RUNTIME",
- "value": "dotnet"
- },
- {
- "name": "Project",
- "value": "custom-backends/netherite"
- }
- ]
- }
- }
- }
- ]
-}
\ No newline at end of file
diff --git a/durablefunctionsmonitor-vscodeext/README.md b/durablefunctionsmonitor-vscodeext/README.md
index e53498c..d6d4b58 100644
--- a/durablefunctionsmonitor-vscodeext/README.md
+++ b/durablefunctionsmonitor-vscodeext/README.md
@@ -101,10 +101,14 @@ and follow the flow.
## How to compile and run this project locally
This project is a typical [VsCode extension](https://code.visualstudio.com/api/get-started/your-first-extension), so to run/debug it locally you just open these sources in your VsCode and press F5.
-But before that you'll need to get the [backend](https://github.com/microsoft/DurableFunctionsMonitor/tree/main/durablefunctionsmonitor.dotnetbackend) binaries compiled and copied:
-* Go to [durablefunctionsmonitor.dotnetbackend](https://github.com/microsoft/DurableFunctionsMonitor/tree/main/durablefunctionsmonitor.dotnetbackend) folder.
+But before that you'll need to get the [backend](https://github.com/microsoft/DurableFunctionsMonitor/tree/main/durablefunctionsmonitor.dotnetisolated) binaries compiled and copied:
+* Go to [durablefunctionsmonitor.dotnetisolated](https://github.com/microsoft/DurableFunctionsMonitor/tree/main/durablefunctionsmonitor.dotnetisolated) folder.
* Execute `dotnet publish -o ../durablefunctionsmonitor-vscodeext/backend` there with your command line. This will compile the backend and place its binaries into the newly created **durablefunctionsmonitor-vscodeext/backend** subfolder.
+The custom backends (used for MSSQL and Netherite storage providers) are shipped as *published binaries* too, because they reference **durablefunctionsmonitor.dotnetisolated.\*** by project reference. From the repo root:
+* `dotnet publish custom-backends/dotnetIsolated-mssql -o durablefunctionsmonitor-vscodeext/custom-backends/dotnetIsolated-mssql`
+* `dotnet publish custom-backends/dotnetIsolated-netherite -o durablefunctionsmonitor-vscodeext/custom-backends/dotnetIsolated-netherite`
+
Now you'll also need to do `npm install` in **durablefunctionsmonitor-vscodeext** folder.
Then finally you can press F5. This will start a sandbox VsCode instance, with **DfMon** extension running in it from sources.
diff --git a/durablefunctionsmonitor-vscodeext/package.json b/durablefunctionsmonitor-vscodeext/package.json
index 96b39f5..05d291e 100644
--- a/durablefunctionsmonitor-vscodeext/package.json
+++ b/durablefunctionsmonitor-vscodeext/package.json
@@ -276,16 +276,6 @@
"default": "http://localhost:{portNr}/a/p/i",
"description": "URL the backend(s) to be started on. You might want e.g. to change 'localhost' to '127.0.0.1', if you're observing firewall issues. You can also specify custom port range here, like this: 'http://localhost:[8080-9080]/a/p/i' (default port range is 37072-38000)."
},
- "durableFunctionsMonitor.backendVersionToUse": {
- "type": "string",
- "enum": [
- "Default",
- ".Net Core 3.1",
- ".Net Core 2.1"
- ],
- "default": "Default",
- "description": "Choose which backend binaries to use when starting a backend. Currently 'Default' backend targets .NET 6, but you can try other ones, if 'Default' doesn't work for you."
- },
"durableFunctionsMonitor.customPathToBackendBinaries": {
"type": "string",
"description": "Local path to a custom backend implementation to use. Overrides 'Backend Version to Use' when set."
diff --git a/durablefunctionsmonitor-vscodeext/src/BackendProcess.ts b/durablefunctionsmonitor-vscodeext/src/BackendProcess.ts
index afbf687..ab3a65f 100644
--- a/durablefunctionsmonitor-vscodeext/src/BackendProcess.ts
+++ b/durablefunctionsmonitor-vscodeext/src/BackendProcess.ts
@@ -114,7 +114,7 @@ export class BackendProcess {
env['AzureWebJobsSecretStorageType'] = 'files';
// Need to explicitly set this, to make sure it is not overshadowed by some global setting
- env['FUNCTIONS_WORKER_RUNTIME'] = 'dotnet';
+ env['FUNCTIONS_WORKER_RUNTIME'] = 'dotnet-isolated';
// To make sure we do not interfere with user's dev setup
delete env['AzureWebJobsStorage'];
@@ -181,7 +181,10 @@ export class BackendProcess {
return new Promise((resolve, reject) => {
- this._funcProcess = cp.spawn(funcExePath, ['start', '--port', portNr.toString(), '--csharp'], {
+ // NOTE: no language flag here on purpose. FUNCTIONS_WORKER_RUNTIME is set to 'dotnet-isolated'
+ // in getEnvVariables(), and passing e.g. '--csharp' would contradict it by selecting the
+ // (now removed) in-process worker.
+ this._funcProcess = cp.spawn(funcExePath, ['start', '--port', portNr.toString()], {
cwd: this._eventualBinariesFolder,
env: this.getEnvVariables()
});
@@ -372,32 +375,17 @@ export class BackendProcess {
}
var customBinariesFolder = Settings().customPathToBackendBinaries;
-
- if (!!customBinariesFolder) {
-
- return customBinariesFolder;
-
- } else if (!!this._storageConnectionSettings.isMsSql) {
-
- return path.join(this._extensionRootFolder, 'custom-backends', 'mssql');
-
- } else if (!!this._storageConnectionSettings.isNetherite) {
-
- return path.join(this._extensionRootFolder, 'custom-backends', 'netherite');
-
- } else if (Settings().backendVersionToUse === '.Net Core 2.1') {
-
- return path.join(this._extensionRootFolder, 'custom-backends', 'netcore21');
- } else if (Settings().backendVersionToUse === '.Net Core 3.1') {
+ if (!!customBinariesFolder) {
- return path.join(this._extensionRootFolder, 'custom-backends', 'netcore31');
+ return customBinariesFolder;
}
- // Default backend now expects at least Functions V4. Checking that it is installed
+ // All bundled backends are .NET Isolated now, and those all expect at least Functions V4.
+ // Checking that it is installed
if (!this.isFuncVersionUpToDate()) {
-
- const msg = `Default backend now requires at least Azure Functions Core Tools v${MinimumFuncVersion.major}.${MinimumFuncVersion.minor}.${MinimumFuncVersion.patch} (currently discovered is v${BackendProcess._funcVersion}). Install latest Azure Functions Core Tools or, alternatively, select a custom backend in extension's settings.`;
+
+ const msg = `DfMon's backends require at least Azure Functions Core Tools v${MinimumFuncVersion.major}.${MinimumFuncVersion.minor}.${MinimumFuncVersion.patch} (currently discovered is v${BackendProcess._funcVersion}). Install latest Azure Functions Core Tools or, alternatively, point 'Custom Path to Backend Binaries' setting to your own backend.`;
// Making sure the version is re-validated next time
BackendProcess._funcVersion = '';
@@ -405,6 +393,15 @@ export class BackendProcess {
throw new Error(msg);
}
+ if (!!this._storageConnectionSettings.isMsSql) {
+
+ return path.join(this._extensionRootFolder, 'custom-backends', 'dotnetIsolated-mssql');
+
+ } else if (!!this._storageConnectionSettings.isNetherite) {
+
+ return path.join(this._extensionRootFolder, 'custom-backends', 'dotnetIsolated-netherite');
+ }
+
return path.join(this._extensionRootFolder, 'backend');
}
diff --git a/durablefunctionsmonitor-vscodeext/src/Settings.ts b/durablefunctionsmonitor-vscodeext/src/Settings.ts
index b8b1b1e..b5854ae 100644
--- a/durablefunctionsmonitor-vscodeext/src/Settings.ts
+++ b/durablefunctionsmonitor-vscodeext/src/Settings.ts
@@ -11,7 +11,6 @@ export function Settings(): ISettings {
// Better to have default values hardcoded here (not only in package.json) as well
return {
backendBaseUrl: config.get('backendBaseUrl', 'http://localhost:{portNr}/a/p/i'),
- backendVersionToUse: config.get<'Default' | '.Net Core 3.1' | '.Net Core 2.1'>('backendVersionToUse', 'Default'),
customPathToBackendBinaries: config.get('customPathToBackendBinaries', ''),
customPathToAzureFunctionsHost: config.get('customPathToAzureFunctionsHost', ''),
backendTimeoutInSeconds: config.get('backendTimeoutInSeconds', 60),
@@ -32,7 +31,6 @@ export function UpdateSetting(name: string, val: any): Thenable {
interface ISettings
{
backendBaseUrl: string;
- backendVersionToUse: 'Default' | '.Net Core 3.1' | '.Net Core 2.1';
customPathToBackendBinaries: string;
customPathToAzureFunctionsHost: string;
backendTimeoutInSeconds: number;
diff --git a/durablefunctionsmonitor-vscodeext/src/test/suite/BackendProcess.test.ts b/durablefunctionsmonitor-vscodeext/src/test/suite/BackendProcess.test.ts
index 4c9ecdc..3100645 100644
--- a/durablefunctionsmonitor-vscodeext/src/test/suite/BackendProcess.test.ts
+++ b/durablefunctionsmonitor-vscodeext/src/test/suite/BackendProcess.test.ts
@@ -102,7 +102,7 @@ suite('BackendProcess Test Suite', () => {
// Arrange
- const tempBackendFolder = await copyBackendProjectToTempFolder('mssql');
+ const tempBackendFolder = await copyBackendProjectToTempFolder('dotnetIsolated-mssql');
const connSettings = new StorageConnectionSettings('Data Source=my-server;Initial Catalog=my-db;Integrated Security=True;', 'my-task-hub');
@@ -188,7 +188,7 @@ suite('BackendProcess Test Suite', () => {
// Arrange
- const tempBackendFolder = await copyBackendProjectToTempFolder('mssql');
+ const tempBackendFolder = await copyBackendProjectToTempFolder('dotnetIsolated-mssql');
const connSettings = new StorageConnectionSettings('Data Source=my-server;Initial Catalog=my-db;Integrated Security=True;', 'my-task-hub');
@@ -383,11 +383,12 @@ suite('BackendProcess Test Suite', () => {
const extensionPath = path.join(__dirname, '..', '..', '..');
- const connSettings = new StorageConnectionSettings(`AccountName=mystorageaccount1;AccountKey=12345;DefaultEndpointsProtocol=http;`, 'my-task-hub');
+ const connSettings = new StorageConnectionSettings(`Server=(localdb)\\MSSQLLocalDB;Database=durabledb;`, 'dt/my-task-hub');
const backendProcess = new BackendProcess(extensionPath, connSettings, () => { }, () => Promise.resolve(), () => { });
- await UpdateSetting('backendVersionToUse', '.Net Core 3.1');
+ // Pretending a recent enough Functions host is installed, so that the version gate lets us through
+ (BackendProcess as any)._funcVersion = '4.0.5000';
// Act
@@ -397,11 +398,11 @@ suite('BackendProcess Test Suite', () => {
// Assert
- assert.strictEqual(binariesFolder, path.join(extensionPath, 'custom-backends', 'netcore31'));
+ assert.strictEqual(binariesFolder, path.join(extensionPath, 'custom-backends', 'dotnetIsolated-mssql'));
} finally {
- await UpdateSetting('backendVersionToUse', undefined);
+ (BackendProcess as any)._funcVersion = '';
}
});
@@ -427,7 +428,7 @@ suite('BackendProcess Test Suite', () => {
// Assert
- assert.strictEqual(err.message.startsWith(`Default backend now requires at least Azure Functions Core Tools v4.0.4629`), true);
+ assert.strictEqual(err.message.startsWith(`DfMon's backends require at least Azure Functions Core Tools v4.0.4629`), true);
}
});
});
diff --git a/durablefunctionsmonitor-vscodeext/src/test/suite/FunctionGraphList.test.ts b/durablefunctionsmonitor-vscodeext/src/test/suite/FunctionGraphList.test.ts
index 2d18892..85f9eba 100644
--- a/durablefunctionsmonitor-vscodeext/src/test/suite/FunctionGraphList.test.ts
+++ b/durablefunctionsmonitor-vscodeext/src/test/suite/FunctionGraphList.test.ts
@@ -21,7 +21,7 @@ suite('FunctionGraphList Test Suite', () => {
const funcGraphList = new FunctionGraphList(context);
- const functionProjectPath = path.join(__dirname, '..', '..', '..', '..', 'durablefunctionsmonitor.dotnetbackend');
+ const functionProjectPath = path.join(__dirname, '..', '..', '..', '..', 'durablefunctionsmonitor.dotnetisolated.core');
Object.defineProperty(vscode.workspace, 'workspaceFolders', { get: () => [{ uri: vscode.Uri.file(functionProjectPath) }] });
@@ -36,12 +36,13 @@ suite('FunctionGraphList Test Suite', () => {
assert.strictEqual(traversalResult1.proxies, traversalResult2.proxies);
assert.strictEqual(Object.keys(traversalResult1.functions).length > 14, true);
- assert.strictEqual(Object.keys(traversalResult1.proxies).length > 0, true);
+ // .NET Isolated projects have no proxies.json (proxies are not supported on Functions V4)
+ assert.strictEqual(Object.keys(traversalResult1.proxies).length, 0);
assert.strictEqual(traversalResult1.functions.DfmAboutFunction.filePath, path.join(functionProjectPath, 'Functions', 'About.cs'));
assert.strictEqual(traversalResult1.functions.DfmAboutFunction.lineNr! > 1, true);
assert.strictEqual(traversalResult1.functions.DfmAboutFunction.pos! > 1, true);
- assert.strictEqual(traversalResult1.functions.DfmAboutFunction.bindings.length, 2);
+ assert.strictEqual(traversalResult1.functions.DfmAboutFunction.bindings.length, 1);
assert.deepStrictEqual(traversalResult1.functions.DfmAboutFunction.bindings[0], {
"type": "httpTrigger",
@@ -68,7 +69,7 @@ suite('FunctionGraphList Test Suite', () => {
const funcGraphList = new FunctionGraphList(context);
- const functionProjectPath = path.join(__dirname, '..', '..', '..', '..', 'durablefunctionsmonitor.dotnetbackend');
+ const functionProjectPath = path.join(__dirname, '..', '..', '..', '..', 'durablefunctionsmonitor.dotnetisolated.core');
Object.defineProperty(vscode.workspace, 'rootPath', { get: () => functionProjectPath });
diff --git a/durablefunctionsmonitor-vscodeext/src/test/suite/FunctionGraphView.test.ts b/durablefunctionsmonitor-vscodeext/src/test/suite/FunctionGraphView.test.ts
index 3c5fff3..6d0b773 100644
--- a/durablefunctionsmonitor-vscodeext/src/test/suite/FunctionGraphView.test.ts
+++ b/durablefunctionsmonitor-vscodeext/src/test/suite/FunctionGraphView.test.ts
@@ -22,7 +22,7 @@ suite('FunctionGraphView Test Suite', () => {
extensionPath: path.join(__dirname, '..', '..', '..')
};
- const functionProjectPath = path.join(__dirname, '..', '..', '..', '..', 'durablefunctionsmonitor.dotnetbackend');
+ const functionProjectPath = path.join(__dirname, '..', '..', '..', '..', 'durablefunctionsmonitor.dotnetisolated.core');
const functionGraphList: any = {};
@@ -89,7 +89,7 @@ suite('FunctionGraphView Test Suite', () => {
extensionPath: path.join(__dirname, '..', '..', '..')
};
- const functionProjectPath = path.join(__dirname, '..', '..', '..', '..', 'durablefunctionsmonitor.dotnetbackend');
+ const functionProjectPath = path.join(__dirname, '..', '..', '..', '..', 'durablefunctionsmonitor.dotnetisolated.core');
const functionGraphList: any = {
traverseFunctions: () => Promise.resolve({
@@ -175,7 +175,7 @@ suite('FunctionGraphView Test Suite', () => {
}
};
- const backendFolder = path.join(__dirname, '..', '..', '..', '..', 'durablefunctionsmonitor.dotnetbackend');
+ const backendFolder = path.join(__dirname, '..', '..', '..', '..', 'durablefunctionsmonitor.dotnetisolated.core');
const functionGraphList: any = {
@@ -229,7 +229,7 @@ suite('FunctionGraphView Test Suite', () => {
url: 'my-func-1'
};
- const backendFolder = path.join(__dirname, '..', '..', '..', '..', 'durablefunctionsmonitor.dotnetbackend');
+ const backendFolder = path.join(__dirname, '..', '..', '..', '..', 'durablefunctionsmonitor.dotnetisolated.core');
const functionGraphView = new FunctionGraphView(context, backendFolder, functionGraphList);
diff --git a/durablefunctionsmonitor-vscodeext/src/test/suite/MonitorView.test.ts b/durablefunctionsmonitor-vscodeext/src/test/suite/MonitorView.test.ts
index 1fe7e13..68f01cd 100644
--- a/durablefunctionsmonitor-vscodeext/src/test/suite/MonitorView.test.ts
+++ b/durablefunctionsmonitor-vscodeext/src/test/suite/MonitorView.test.ts
@@ -37,7 +37,7 @@ suite('MonitorView Test Suite', () => {
storageConnectionStrings: Settings().storageEmulatorConnectionString,
- binariesFolder: path.join(__dirname, '..', '..', '..', '..', 'durablefunctionsmonitor.dotnetbackend')
+ binariesFolder: path.join(__dirname, '..', '..', '..', '..', 'durablefunctionsmonitor.dotnetisolated')
};
const functionGraphList: any = {};
@@ -231,7 +231,7 @@ suite('MonitorView Test Suite', () => {
storageConnectionStrings: Settings().storageEmulatorConnectionString,
- binariesFolder: path.join(__dirname, '..', '..', '..', '..', 'durablefunctionsmonitor.dotnetbackend')
+ binariesFolder: path.join(__dirname, '..', '..', '..', '..', 'durablefunctionsmonitor.dotnetisolated')
};
const functionGraphList: any = {
@@ -336,7 +336,7 @@ suite('MonitorView Test Suite', () => {
url: 'my-func-1'
};
- const backendFolder = path.join(__dirname, '..', '..', '..', '..', 'durablefunctionsmonitor.dotnetbackend');
+ const backendFolder = path.join(__dirname, '..', '..', '..', '..', 'durablefunctionsmonitor.dotnetisolated.core');
const monitorView = new MonitorView(context, backend, 'my-hub', functionGraphList, () => Promise.resolve(undefined), () => { }, () => { }, backendFolder);
@@ -381,7 +381,7 @@ suite('MonitorView Test Suite', () => {
data: 0
};
- const backendFolder = path.join(__dirname, '..', '..', '..', '..', 'durablefunctionsmonitor.dotnetbackend');
+ const backendFolder = path.join(__dirname, '..', '..', '..', '..', 'durablefunctionsmonitor.dotnetisolated.core');
const errorMessageToThrow = 'TestErrorMessageToCheckGotoBinding';
let errorMessageThrown: string = '';
@@ -449,7 +449,7 @@ suite('MonitorView Test Suite', () => {
}
};
- const backendFolder = path.join(__dirname, '..', '..', '..', '..', 'durablefunctionsmonitor.dotnetbackend');
+ const backendFolder = path.join(__dirname, '..', '..', '..', '..', 'durablefunctionsmonitor.dotnetisolated.core');
const functionGraphList: any = {
diff --git a/durablefunctionsmonitor.dotnetbackend/.dockerignore b/durablefunctionsmonitor.dotnetbackend/.dockerignore
deleted file mode 100644
index 1927772..0000000
--- a/durablefunctionsmonitor.dotnetbackend/.dockerignore
+++ /dev/null
@@ -1 +0,0 @@
-local.settings.json
\ No newline at end of file
diff --git a/durablefunctionsmonitor.dotnetbackend/.vscode/extensions.json b/durablefunctionsmonitor.dotnetbackend/.vscode/extensions.json
deleted file mode 100644
index c845fde..0000000
--- a/durablefunctionsmonitor.dotnetbackend/.vscode/extensions.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
- "recommendations": [
- "ms-azuretools.vscode-azurefunctions",
- "ms-vscode.csharp",
- "DurableFunctionsMonitor.az-func-as-a-graph"
- ]
-}
diff --git a/durablefunctionsmonitor.dotnetbackend/.vscode/launch.json b/durablefunctionsmonitor.dotnetbackend/.vscode/launch.json
deleted file mode 100644
index 1d5b2a7..0000000
--- a/durablefunctionsmonitor.dotnetbackend/.vscode/launch.json
+++ /dev/null
@@ -1,11 +0,0 @@
-{
- "version": "0.2.0",
- "configurations": [
- {
- "name": "Attach to .NET Functions",
- "type": "coreclr",
- "request": "attach",
- "processId": "${command:pickProcess}"
- }
- ]
-}
\ No newline at end of file
diff --git a/durablefunctionsmonitor.dotnetbackend/.vscode/settings.json b/durablefunctionsmonitor.dotnetbackend/.vscode/settings.json
deleted file mode 100644
index c43d11c..0000000
--- a/durablefunctionsmonitor.dotnetbackend/.vscode/settings.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
- "azureFunctions.deploySubpath": "bin/Release/net6.0/publish",
- "azureFunctions.projectLanguage": "C#",
- "azureFunctions.projectRuntime": "~4",
- "debug.internalConsoleOptions": "neverOpen",
- "azureFunctions.preDeployTask": "publish"
-}
\ No newline at end of file
diff --git a/durablefunctionsmonitor.dotnetbackend/.vscode/tasks.json b/durablefunctionsmonitor.dotnetbackend/.vscode/tasks.json
deleted file mode 100644
index 6cc9b81..0000000
--- a/durablefunctionsmonitor.dotnetbackend/.vscode/tasks.json
+++ /dev/null
@@ -1,69 +0,0 @@
-{
- "version": "2.0.0",
- "tasks": [
- {
- "label": "clean",
- "command": "dotnet",
- "args": [
- "clean",
- "/property:GenerateFullPaths=true",
- "/consoleloggerparameters:NoSummary"
- ],
- "type": "process",
- "problemMatcher": "$msCompile"
- },
- {
- "label": "build",
- "command": "dotnet",
- "args": [
- "build",
- "/property:GenerateFullPaths=true",
- "/consoleloggerparameters:NoSummary"
- ],
- "type": "process",
- "dependsOn": "clean",
- "group": {
- "kind": "build",
- "isDefault": true
- },
- "problemMatcher": "$msCompile"
- },
- {
- "label": "clean release",
- "command": "dotnet",
- "args": [
- "clean",
- "--configuration",
- "Release",
- "/property:GenerateFullPaths=true",
- "/consoleloggerparameters:NoSummary"
- ],
- "type": "process",
- "problemMatcher": "$msCompile"
- },
- {
- "label": "publish",
- "command": "dotnet",
- "args": [
- "publish",
- "--configuration",
- "Release",
- "/property:GenerateFullPaths=true",
- "/consoleloggerparameters:NoSummary"
- ],
- "type": "process",
- "dependsOn": "clean release",
- "problemMatcher": "$msCompile"
- },
- {
- "type": "func",
- "dependsOn": "build",
- "options": {
- "cwd": "${workspaceFolder}/bin/Debug/net6.0"
- },
- "command": "host start",
- "isBackground": true,
- "problemMatcher": "$func-watch"
- }
- ]
-}
\ No newline at end of file
diff --git a/durablefunctionsmonitor.dotnetbackend/Common/Auth.cs b/durablefunctionsmonitor.dotnetbackend/Common/Auth.cs
deleted file mode 100644
index 83695bd..0000000
--- a/durablefunctionsmonitor.dotnetbackend/Common/Auth.cs
+++ /dev/null
@@ -1,430 +0,0 @@
-// Copyright (c) Microsoft Corporation.
-// Licensed under the MIT license.
-
-using System;
-using System.Collections;
-using System.Collections.Generic;
-using System.IdentityModel.Tokens.Jwt;
-using System.IO;
-using System.Linq;
-using System.Security.Claims;
-using System.Text.RegularExpressions;
-using System.Threading.Tasks;
-using System.Web;
-using Microsoft.AspNetCore.Http;
-using Microsoft.IdentityModel.Protocols;
-using Microsoft.IdentityModel.Protocols.OpenIdConnect;
-using Microsoft.IdentityModel.Tokens;
-using Newtonsoft.Json.Linq;
-
-namespace DurableFunctionsMonitor.DotNetBackend
-{
- ///
- /// Defines whether a Function only reads data or makes modifications.
- /// Used for applying authorization rules.
- ///
- public enum OperationKind
- {
- Read,
- Write
- }
-
- internal static class Auth
- {
- // Magic constant for turning auth off
- public const string ISureKnowWhatIAmDoingNonce = "i_sure_know_what_i_am_doing";
-
- // Value of WEBSITE_AUTH_UNAUTHENTICATED_ACTION config setting, when server-directed login flow is configured
- public const string UnauthenticatedActionRedirectToLoginPage = "RedirectToLoginPage";
-
- // Default user name claim name
- public const string PreferredUserNameClaim = "preferred_username";
-
- // Roles claim name
- public const string RolesClaim = "roles";
-
- // Tries to get Easy Auth Issuer setting from env variables
- public static string GetEasyAuthIssuer()
- {
- string result = Environment.GetEnvironmentVariable(EnvVariableNames.WEBSITE_AUTH_OPENID_ISSUER);
- if (!string.IsNullOrEmpty(result))
- {
- return result;
- }
-
- // Now trying Auth V2 settings
- string authv2ConfigJsonString = Environment.GetEnvironmentVariable(EnvVariableNames.WEBSITE_AUTH_V2_CONFIG_JSON);
- dynamic authV2ConfigJson = JObject.Parse(string.IsNullOrEmpty(authv2ConfigJsonString) ? "{}" : authv2ConfigJsonString);
-
- result = authV2ConfigJson?.identityProviders?.azureActiveDirectory?.registration?.openIdIssuer;
-
- return result ?? string.Empty;
- }
-
- // If DFM_NONCE was passed as env variable, validates that the incoming request contains it. Throws UnauthorizedAccessException, if it doesn't.
- public static bool IsNonceSetAndValid(IHeaderDictionary headers)
- {
- // From now on it is the only way to skip auth
- if (DfmEndpoint.Settings.DisableAuthentication)
- {
- return true;
- }
-
- string nonce = Environment.GetEnvironmentVariable(EnvVariableNames.DFM_NONCE);
-
- if (!string.IsNullOrEmpty(nonce))
- {
- // Checking the nonce header
- if (nonce == headers["x-dfm-nonce"])
- {
- return true;
- }
-
- throw new UnauthorizedAccessException("Invalid nonce. Call is rejected.");
- }
-
- return false;
- }
-
- ///
- /// Validates that the incoming request is properly authenticated. Throws if not.
- ///
- /// value for current request (so that it can be returned to the client)
- ///
- ///
- public static async Task ValidateIdentityAsync(ClaimsPrincipal principal, IHeaderDictionary headers, IRequestCookieCollection cookies, OperationKind operationKind)
- {
- // Checking if the endpoint is in ReadOnly mode
- if (operationKind != OperationKind.Read && DfmEndpoint.Settings.Mode == DfmMode.ReadOnly)
- {
- throw new AccessViolationException("Endpoint is in ReadOnly mode");
- }
-
- // Starting with nonce (used when running as a VsCode extension)
- if (IsNonceSetAndValid(headers))
- {
- return DfmEndpoint.Settings.Mode;
- }
-
- // Then validating anti-forgery token
- ThrowIfXsrfTokenIsInvalid(headers, cookies);
-
- // Trying with EasyAuth
- var userNameClaim = principal?.FindFirst(DfmEndpoint.Settings.UserNameClaimName);
- if (userNameClaim == null)
- {
- // Validating and parsing the token ourselves
- principal = await ValidateToken(headers["Authorization"]);
- userNameClaim = principal.FindFirst(DfmEndpoint.Settings.UserNameClaimName);
- }
-
- if (userNameClaim == null)
- {
- throw new UnauthorizedAccessException($"'{DfmEndpoint.Settings.UserNameClaimName}' claim is missing in the incoming identity. Call is rejected.");
- }
-
- if (DfmEndpoint.Settings.AllowedUserNames?.Contains(userNameClaim.Value) == false)
- {
- throw new UnauthorizedAccessException($"User {userNameClaim.Value} is not mentioned in {EnvVariableNames.DFM_ALLOWED_USER_NAMES} config setting. Call is rejected");
- }
-
- // Also validating App Roles, but only if any of relevant setting is set
- var allowedAppRoles = DfmEndpoint.Settings.AllowedAppRoles;
- var allowedFullAccessAppRoles = DfmEndpoint.Settings.AllowedFullAccessAppRoles;
- var allowedReadOnlyAppRoles = DfmEndpoint.Settings.AllowedReadOnlyAppRoles;
-
- if (allowedAppRoles != null || allowedFullAccessAppRoles != null || allowedReadOnlyAppRoles != null)
- {
- var roleClaims = principal.FindAll(DfmEndpoint.Settings.RolesClaimName);
-
- bool userIsInAppRole = allowedAppRoles != null && roleClaims.Any(claim => allowedAppRoles.Contains(claim.Value));
- bool userIsInFullAccessRole = allowedFullAccessAppRoles != null && roleClaims.Any(claim => allowedFullAccessAppRoles.Contains(claim.Value));
- bool userIsInReadonlyRole = allowedReadOnlyAppRoles != null && roleClaims.Any(claim => allowedReadOnlyAppRoles.Contains(claim.Value));
-
- // If user belongs _neither_ to AllowedAppRoles _nor_ to AllowedReadOnlyAppRoles
- if (!(userIsInAppRole || userIsInFullAccessRole || userIsInReadonlyRole))
- {
- throw new UnauthorizedAccessException($"User {userNameClaim.Value} doesn't have any of roles mentioned in {EnvVariableNames.DFM_ALLOWED_APP_ROLES}, {EnvVariableNames.DFM_ALLOWED_FULL_ACCESS_APP_ROLES} or {EnvVariableNames.DFM_ALLOWED_READ_ONLY_APP_ROLES} config setting. Call is rejected");
- }
-
- if (userIsInFullAccessRole)
- {
- return DfmEndpoint.Settings.Mode;
- }
-
- // If current operation modifies any data, then validating that user is _not_ in ReadOnly mode
- if (operationKind != OperationKind.Read && userIsInReadonlyRole)
- {
- throw new AccessViolationException($"User {userNameClaim.Value} is in read-only mode");
- }
-
- return userIsInReadonlyRole ? DfmMode.ReadOnly : DfmEndpoint.Settings.Mode;
- }
-
- return DfmEndpoint.Settings.Mode;
- }
-
- public static async Task> GetTaskHubNamesFromStorage(string connStringName)
- {
- var tableClient = await TableClient.GetTableClient(connStringName);
- var tableNames = await tableClient.ListTableNamesAsync();
-
- var hubNames = new HashSet(tableNames
- .Where(n => n.EndsWith("Instances"))
- .Select(n => n.Remove(n.Length - "Instances".Length)),
- StringComparer.InvariantCultureIgnoreCase);
-
- hubNames.IntersectWith(tableNames
- .Where(n => n.EndsWith("History"))
- .Select(n => n.Remove(n.Length - "History".Length)));
-
- return hubNames;
- }
-
- // Lists all allowed Task Hubs. The returned HashSet is configured to ignore case.
- public static async Task> GetAllowedTaskHubNamesAsync()
- {
- // Respecting DFM_HUB_NAME, if it is set
- string dfmHubName = Environment.GetEnvironmentVariable(EnvVariableNames.DFM_HUB_NAME);
- if (!string.IsNullOrEmpty(dfmHubName))
- {
- return new HashSet(dfmHubName.Split(','), StringComparer.InvariantCultureIgnoreCase);
- }
-
- // Also respecting host.json setting, when set
- dfmHubName = TryGetHubNameFromHostJson();
- if (!string.IsNullOrEmpty(dfmHubName))
- {
- return new HashSet(new string[] { dfmHubName }, StringComparer.InvariantCultureIgnoreCase);
- }
-
- // Otherwise trying to load table names from the Storage
- try
- {
- var hubNames = new HashSet(
- await DfmEndpoint.ExtensionPoints.GetTaskHubNamesRoutine(DfmEndpoint.StorageConnStringEnvVarName),
- StringComparer.InvariantCultureIgnoreCase
- );
-
- // Also checking alternative connection strings
- foreach (var connName in AlternativeConnectionStringNames)
- {
- var connAndHubNames = (await DfmEndpoint.ExtensionPoints.GetTaskHubNamesRoutine(Globals.GetFullConnectionStringEnvVariableName(connName)))
- .Select(hubName => Globals.CombineConnNameAndHubName(connName, hubName));
-
- hubNames.UnionWith(connAndHubNames);
- }
-
- return hubNames;
- }
- catch (Exception)
- {
- // Intentionally returning null. Need to skip validation, if for some reason list of tables
- // cannot be loaded from Storage. But only in that case.
- return null;
- }
- }
-
- private static readonly Regex ValidTaskHubNameRegex = new Regex(@"^[\w-]{3,128}$", RegexOptions.IgnoreCase | RegexOptions.Compiled);
-
- private static Task> HubNamesTask = GetAllowedTaskHubNamesAsync();
-
- // Checks that a Task Hub name looks like a Task Hub name
- public static void ThrowIfTaskHubNameHasInvalidSymbols(string hubName)
- {
- if (!ValidTaskHubNameRegex.Match(hubName).Success)
- {
- throw new ArgumentException($"Task Hub name is invalid.");
- }
- }
-
- // Checks that a path does not look malicious
- public static void ThrowIfPathHasInvalidSymbols(string path)
- {
- if (!string.IsNullOrEmpty(path))
- {
- string invalidSymbols = "{}()<>:;=";
-
- if (invalidSymbols.Any(path.Contains) || invalidSymbols.Any(HttpUtility.UrlDecode(path).Contains))
- {
- throw new ArgumentException($"Path contains invalid characters.");
- }
- }
- }
-
- // Checks that a Task Hub name is valid for this instace
- public static async Task ThrowIfTaskHubNameIsInvalid(string hubName)
- {
- if (string.IsNullOrEmpty(hubName))
- {
- return;
- }
- // Two bugs away. Validating that the incoming Task Hub name looks like a Task Hub name
- ThrowIfTaskHubNameHasInvalidSymbols(hubName);
-
- var hubNames = await HubNamesTask;
-
- if (hubNames == null || !hubNames.Contains(hubName))
- {
- // doing double-check, by reloading hub names
- HubNamesTask = GetAllowedTaskHubNamesAsync();
- hubNames = await HubNamesTask;
- }
-
- // If existing Task Hub names cannot be read from Storage, we can only skip validation and return true.
- // Note, that it will never be null, if DFM_HUB_NAME is set. So authZ is always in place.
- if (hubNames == null)
- {
- return;
- }
-
- if (!hubNames.Contains(hubName))
- {
- throw new UnauthorizedAccessException($"Task Hub '{hubName}' is not allowed.");
- }
- }
-
- // Compares our XSRF tokens, that come from cookies and headers
- public static void ThrowIfXsrfTokenIsInvalid(IHeaderDictionary headers, IRequestCookieCollection cookies)
- {
- string tokenFromHeaders = headers[Globals.XsrfTokenCookieAndHeaderName];
-
- if (string.IsNullOrEmpty(tokenFromHeaders))
- {
- throw new UnauthorizedAccessException("XSRF token is missing.");
- }
-
- string tokenFromCookies = cookies[Globals.XsrfTokenCookieAndHeaderName];
-
- if (tokenFromCookies != tokenFromHeaders)
- {
- throw new UnauthorizedAccessException("XSRF tokens do not match.");
- }
- }
-
- public static string[] AlternativeConnectionStringNames = GetAlternativeConnectionStringNames().ToArray();
-
- public static IEnumerable GetAlternativeConnectionStringNames()
- {
- var envVars = Environment.GetEnvironmentVariables();
- foreach (DictionaryEntry kv in envVars)
- {
- string variableName = kv.Key.ToString();
- if (variableName.StartsWith(EnvVariableNames.DFM_ALTERNATIVE_CONNECTION_STRING_PREFIX))
- {
- yield return variableName[EnvVariableNames.DFM_ALTERNATIVE_CONNECTION_STRING_PREFIX.Length..];
- }
- }
- }
-
- private static string TryGetHubNameFromHostJson()
- {
- try
- {
- string hostJsonFileName = Globals.GetHostJsonPath();
- dynamic hostJson = JObject.Parse(File.ReadAllText(hostJsonFileName));
-
- string hubName = hostJson.extensions.durableTask.hubName;
- if (hubName != null && hubName.StartsWith('%') && hubName.EndsWith('%'))
- {
- hubName = Environment.GetEnvironmentVariable(hubName.Trim('%'));
- }
-
- return hubName;
- }
- catch (Exception)
- {
- return string.Empty;
- }
- }
-
- internal static JwtSecurityTokenHandler MockedJwtSecurityTokenHandler = null;
-
- private static async Task ValidateToken(string authorizationHeader)
- {
- if (string.IsNullOrEmpty(authorizationHeader))
- {
- throw new UnauthorizedAccessException("No access token provided. Call is rejected.");
- }
-
- string clientId = Environment.GetEnvironmentVariable(EnvVariableNames.WEBSITE_AUTH_CLIENT_ID);
- if (string.IsNullOrEmpty(clientId))
- {
- throw new UnauthorizedAccessException($"Specify the Valid Audience value via '{EnvVariableNames.WEBSITE_AUTH_CLIENT_ID}' config setting. Typically it is the ClientId of your AAD application.");
- }
-
- string openIdIssuer = GetEasyAuthIssuer();
- if (string.IsNullOrEmpty(openIdIssuer))
- {
- throw new UnauthorizedAccessException($"Specify the Valid Issuer value via '{EnvVariableNames.WEBSITE_AUTH_OPENID_ISSUER}' config setting. Typically it looks like 'https://login.microsoftonline.com//v2.0'.");
- }
-
- string token = authorizationHeader["Bearer ".Length..];
-
- var validationParameters = new TokenValidationParameters
- {
- ValidAudiences = new[] { clientId },
- ValidIssuers = new[] { openIdIssuer },
- // Yes, it is OK to await a Task multiple times like this
- IssuerSigningKeys = await GetSigningKeysTask,
- // According to internet, this should not be needed (despite the fact that the default value is false)
- // But better to be two-bugs away
- ValidateIssuerSigningKey = true
- };
-
- var handler = MockedJwtSecurityTokenHandler ?? new JwtSecurityTokenHandler();
- return handler.ValidateToken(token, validationParameters, out _);
- }
-
- // Caching the keys for 24 hours
- internal static Task> GetSigningKeysTask = InitGetSigningKeysTask(86400, 0);
-
- internal static Task> InitGetSigningKeysTask(int cacheTtlInSeconds, int retryCount = 0)
- {
- // If you ever use this code in Asp.Net, don't forget to wrap this line with Task.Run(), to decouple from SynchronizationContext
- var task = GetSigningKeysAsync();
-
- // Adding cache-flushing continuation
- task.ContinueWith(async t =>
- {
- // If the data retrieval failed, then retrying immediately, but no more than 3 times.
- // Otherwise re-populating the cache in cacheTtlInSeconds.
- if (t.IsFaulted)
- {
- if (retryCount > 1)
- {
- return;
- }
- }
- else
- {
- await Task.Delay(TimeSpan.FromSeconds(cacheTtlInSeconds));
- }
-
- GetSigningKeysTask = InitGetSigningKeysTask(cacheTtlInSeconds, t.IsFaulted ? retryCount + 1 : 0);
- });
-
- return task;
- }
-
- private static async Task> GetSigningKeysAsync()
- {
- string openIdIssuer = GetEasyAuthIssuer();
- if (string.IsNullOrEmpty(openIdIssuer))
- {
- throw new UnauthorizedAccessException($"Specify the Valid Issuer value via '{EnvVariableNames.WEBSITE_AUTH_OPENID_ISSUER}' config setting. Typically it looks like 'https://login.microsoftonline.com//v2.0'.");
- }
-
- if (openIdIssuer.EndsWith("/v2.0"))
- {
- openIdIssuer = openIdIssuer[..^"/v2.0".Length];
- }
-
- string stsDiscoveryEndpoint = $"{openIdIssuer}/.well-known/openid-configuration";
- var configManager = new ConfigurationManager(stsDiscoveryEndpoint, new OpenIdConnectConfigurationRetriever());
- var config = await configManager.GetConfigurationAsync();
-
- return config.SigningKeys;
- }
- }
-}
\ No newline at end of file
diff --git a/durablefunctionsmonitor.dotnetbackend/Common/CustomTemplates.cs b/durablefunctionsmonitor.dotnetbackend/Common/CustomTemplates.cs
deleted file mode 100644
index 259e8de..0000000
--- a/durablefunctionsmonitor.dotnetbackend/Common/CustomTemplates.cs
+++ /dev/null
@@ -1,324 +0,0 @@
-// Copyright (c) Microsoft Corporation.
-// Licensed under the MIT license.
-
-using System;
-using System.Threading.Tasks;
-using System.Linq;
-using System.Collections.Generic;
-using Microsoft.WindowsAzure.Storage;
-using System.IO;
-using System.Text;
-using System.Collections.Concurrent;
-using System.Reflection;
-using Microsoft.WindowsAzure.Storage.Blob;
-using Microsoft.WindowsAzure.Storage.Auth;
-
-namespace DurableFunctionsMonitor.DotNetBackend
-{
- // Contains all logic of loading custom tab/html templates
- // TODO: respect alternative connection strings
- class CustomTemplates
- {
- internal static Task GetTabTemplatesAsync()
- {
- if (TabTemplatesTask == null)
- {
- TabTemplatesTask = string.IsNullOrEmpty(DfmEndpoint.Settings.CustomTemplatesFolderName) ?
- GetTabTemplatesFromStorageAsync() : GetTabTemplatesFromFolderAsync(DfmEndpoint.Settings.CustomTemplatesFolderName);
- }
-
- return TabTemplatesTask;
- }
-
- internal static Task GetCustomMetaTagCodeAsync()
- {
- if (CustomMetaTagCodeTask == null)
- {
- CustomMetaTagCodeTask = string.IsNullOrEmpty(DfmEndpoint.Settings.CustomTemplatesFolderName) ?
- GetCustomMetaTagCodeFromStorageAsync() : GetCustomMetaTagCodeFromFolderAsync(DfmEndpoint.Settings.CustomTemplatesFolderName);
- }
-
- return CustomMetaTagCodeTask;
- }
-
- internal static Task GetFunctionMapsAsync()
- {
- if (FunctionMapsTask == null)
- {
- FunctionMapsTask = string.IsNullOrEmpty(DfmEndpoint.Settings.CustomTemplatesFolderName) ?
- GetFunctionMapsFromStorageAsync() : GetFunctionMapsFromFolderAsync(DfmEndpoint.Settings.CustomTemplatesFolderName);
- }
-
- return FunctionMapsTask;
- }
-
- // Yes, it is OK to use Task in this way.
- // The Task code will only be executed once. All subsequent/parallel awaits will get the same returned value.
- // Tasks do have the same behavior as Lazy.
- private static Task TabTemplatesTask;
-
- private static Task CustomMetaTagCodeTask;
-
- private static Task FunctionMapsTask;
-
- // Tries to load liquid templates from underlying Azure Storage
- private static async Task GetTabTemplatesFromStorageAsync()
- {
- var result = new LiquidTemplatesMap();
- try
- {
- var blobClient = await Globals.GetCloudBlobClient(EnvVariableNames.AzureWebJobsStorage);
-
- // Listing all blobs in durable-functions-monitor/tab-templates folder
- var container = blobClient.GetContainerReference(Globals.TemplateContainerName);
-
- string templateFolderName = Globals.TabTemplateFolderName + "/";
- var templateNames = await container.ListBlobsAsync(templateFolderName);
-
- // Loading blobs in parallel
- await Task.WhenAll(templateNames.Select(async templateName =>
- {
- var blob = await blobClient.GetBlobReferenceFromServerAsync(templateName.Uri);
-
- // Expecting the blob name to be like "[Tab Name].[EntityTypeName].liquid" or just "[Tab Name].liquid"
- var nameParts = blob.Name.Substring(templateFolderName.Length).Split('.');
- if (nameParts.Length < 2 || nameParts.Last() != "liquid")
- {
- return;
- }
-
- string tabName = nameParts[0];
- string entityTypeName = nameParts.Length > 2 ? nameParts[1] : string.Empty;
-
- using (var stream = new MemoryStream())
- {
- await blob.DownloadToStreamAsync(stream);
- string templateText = Encoding.UTF8.GetString(stream.ToArray());
-
- result.GetOrAdd(entityTypeName, new ConcurrentDictionary())[tabName] = templateText;
- }
- }));
- }
- catch (Exception)
- {
- // Intentionally swallowing all exceptions here
- }
- return result;
- }
-
- // Tries to load liquid templates from local folder
- private static async Task GetTabTemplatesFromFolderAsync(string folderName)
- {
- var result = new LiquidTemplatesMap();
-
- string binFolder = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
- string templatesFolder = Path.Combine(binFolder, "..", folderName, Globals.TabTemplateFolderName);
-
- if (!Directory.Exists(templatesFolder))
- {
- return result;
- }
-
- foreach(var templateFilePath in Directory.EnumerateFiles(templatesFolder, "*.liquid"))
- {
- var nameParts = Path.GetFileName(templateFilePath).Split('.');
- if(nameParts.Length < 2)
- {
- continue;
- }
-
- string tabName = nameParts[0];
- string entityTypeName = nameParts.Length > 2 ? nameParts[1] : string.Empty;
- string templateText = await File.ReadAllTextAsync(templateFilePath);
-
- result.GetOrAdd(entityTypeName, new ConcurrentDictionary())[tabName] = templateText;
- }
-
- return result;
- }
-
- // Tries to load code for our meta tag from Storage
- private static async Task GetCustomMetaTagCodeFromStorageAsync()
- {
- try
- {
- var blobClient = await Globals.GetCloudBlobClient(EnvVariableNames.AzureWebJobsStorage);
- var container = blobClient.GetContainerReference(Globals.TemplateContainerName);
- var blob = container.GetBlobReference(Globals.CustomMetaTagBlobName);
-
- if (!(await blob.ExistsAsync()))
- {
- return null;
- }
-
- using (var stream = new MemoryStream())
- {
- await blob.DownloadToStreamAsync(stream);
- return Encoding.UTF8.GetString(stream.ToArray());
- }
- }
- catch (Exception)
- {
- // Intentionally swallowing all exceptions here
- return null;
- }
- }
-
- // Tries to load code for our meta tag from local folder
- private static async Task GetCustomMetaTagCodeFromFolderAsync(string folderName)
- {
- string binFolder = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
- string filePath = Path.Combine(binFolder, "..", folderName, Globals.CustomMetaTagBlobName);
-
- if(!File.Exists(filePath))
- {
- return null;
- }
-
- return await File.ReadAllTextAsync(filePath);
- }
-
- // Tries to load Function Maps from underlying Azure Storage
- private static async Task GetFunctionMapsFromStorageAsync()
- {
- var result = new FunctionMapsMap();
- try
- {
- var blobClient = await Globals.GetCloudBlobClient(EnvVariableNames.AzureWebJobsStorage);
-
- // Listing all blobs in durable-functions-monitor/function-maps folder
- var container = blobClient.GetContainerReference(Globals.TemplateContainerName);
-
- string functionMapFolderName = Globals.FunctionMapFolderName + "/";
- var fileNames = await container.ListBlobsAsync(functionMapFolderName);
-
- // Loading blobs in parallel
- await Task.WhenAll(fileNames.Select(async templateName =>
- {
- var blob = await blobClient.GetBlobReferenceFromServerAsync(templateName.Uri);
-
- // Expecting the blob name to be like "dfm-function-map.[TaskHubName].json" or just "dfm-function-map.json"
- var nameParts = blob.Name.Substring(functionMapFolderName.Length).Split('.');
- if (nameParts.Length < 2 || nameParts.First() != Globals.FunctionMapFilePrefix || nameParts.Last() != "json")
- {
- return;
- }
-
- string taskHubName = nameParts.Length > 2 ? nameParts[1] : string.Empty;
-
- using (var stream = new MemoryStream())
- {
- await blob.DownloadToStreamAsync(stream);
- string templateText = Encoding.UTF8.GetString(stream.ToArray());
-
- result.TryAdd(taskHubName, templateText);
- }
- }));
- }
- catch (Exception)
- {
- // Intentionally swallowing all exceptions here
- }
- return result;
- }
-
- // Tries to load Function Maps from local folder
- private static async Task GetFunctionMapsFromFolderAsync(string folderName)
- {
- var result = new FunctionMapsMap();
-
- string binFolder = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
- string functionMapsFolder = Path.Combine(binFolder, "..", folderName, Globals.FunctionMapFolderName);
-
- if (!Directory.Exists(functionMapsFolder))
- {
- return result;
- }
-
- foreach(var filePath in Directory.EnumerateFiles(functionMapsFolder, $"{Globals.FunctionMapFilePrefix}*.json"))
- {
- var nameParts = Path.GetFileName(filePath).Split('.');
- if (nameParts.Length < 2)
- {
- continue;
- }
-
- string taskHubName = nameParts.Length > 2 ? nameParts[1] : string.Empty;
- string json = await File.ReadAllTextAsync(filePath);
-
- result.TryAdd(taskHubName, json);
- }
-
- return result;
- }
- }
-
- // Represents the liquid template map
- class LiquidTemplatesMap: ConcurrentDictionary>
- {
- public List GetTemplateNames(string entityTypeName)
- {
- var result = new List();
- IDictionary templates;
-
- // Getting template names for all entity types
- if (this.TryGetValue(string.Empty, out templates))
- {
- result.AddRange(templates.Keys);
- }
-
- // Getting template names for this particular entity type
- if (this.TryGetValue(entityTypeName, out templates))
- {
- result.AddRange(templates.Keys);
- }
-
- result.Sort();
-
- return result;
- }
-
- public string GetTemplate(string entityTypeName, string templateName)
- {
- string result = null;
- IDictionary templates;
-
- // Getting template names for all entity types
- if (this.TryGetValue(string.Empty, out templates))
- {
- if(templates.TryGetValue(templateName, out result)){
- return result;
- }
- }
-
- // Getting template names for this particular entity type
- if (this.TryGetValue(entityTypeName, out templates))
- {
- if (templates.TryGetValue(templateName, out result))
- {
- return result;
- }
- }
-
- return result;
- }
- }
-
- // Represents the map of Function Maps
- class FunctionMapsMap : ConcurrentDictionary
- {
- public string GetFunctionMap(string taskHubName)
- {
- string result = null;
-
- // Getting Function Map for this particular Task Hub
- if (!this.TryGetValue(taskHubName, out result))
- {
- // Getting Function Map for all Task Hubs
- this.TryGetValue(string.Empty, out result);
- }
-
- return result;
- }
- }
-}
\ No newline at end of file
diff --git a/durablefunctionsmonitor.dotnetbackend/Common/DetailedOrchestrationStatus.cs b/durablefunctionsmonitor.dotnetbackend/Common/DetailedOrchestrationStatus.cs
deleted file mode 100644
index 9c2b7eb..0000000
--- a/durablefunctionsmonitor.dotnetbackend/Common/DetailedOrchestrationStatus.cs
+++ /dev/null
@@ -1,191 +0,0 @@
-// Copyright (c) Microsoft Corporation.
-// Licensed under the MIT license.
-
-using Microsoft.Azure.WebJobs.Extensions.DurableTask;
-using System.Collections.Generic;
-using Newtonsoft.Json.Linq;
-using System;
-using System.Linq;
-using Microsoft.WindowsAzure.Storage;
-using System.IO;
-using Newtonsoft.Json;
-using System.IO.Compression;
-using System.Threading.Tasks;
-using System.Text.RegularExpressions;
-using Microsoft.Extensions.Logging;
-using Microsoft.WindowsAzure.Storage.Table;
-using System.Threading;
-
-namespace DurableFunctionsMonitor.DotNetBackend
-{
- // Adds extra fields to DurableOrchestrationStatus returned by IDurableClient.GetStatusAsync()
- class DetailedOrchestrationStatus : DurableOrchestrationStatus
- {
- public EntityTypeEnum EntityType { get; private set; }
- public EntityId? EntityId { get; private set; }
- public string ParentInstanceId { get; private set; }
-
- public List TabTemplateNames
- {
- get
- {
- // The underlying Task never throws, so it's OK.
- var templatesMap = CustomTemplates.GetTabTemplatesAsync().Result;
- return templatesMap.GetTemplateNames(this.GetEntityTypeName());
- }
- }
-
- internal static async Task CreateFrom(DurableOrchestrationStatus that, IDurableClient durableClient, string connName, string hubName, ILogger log)
- {
- var connEnvVariableName = Globals.GetFullConnectionStringEnvVariableName(connName);
-
- var result = new DetailedOrchestrationStatus();
-
- result.Name = that.Name;
- result.InstanceId = that.InstanceId;
- result.CreatedTime = that.CreatedTime;
- result.LastUpdatedTime = that.LastUpdatedTime;
- result.RuntimeStatus = that.RuntimeStatus;
- result.Output = that.Output;
- result.CustomStatus = that.CustomStatus;
- result.History = that.History;
-
- // Detecting whether it is an Orchestration or a Durable Entity
- var match = ExpandedOrchestrationStatus.EntityIdRegex.Match(result.InstanceId);
- if (match.Success)
- {
- result.EntityType = EntityTypeEnum.DurableEntity;
- result.EntityId = new EntityId(match.Groups[1].Value, match.Groups[2].Value);
- }
- else
- {
- // Trying to get parent orchestrationId for this instance, if it is a subOrchestration
- try
- {
- result.ParentInstanceId = await DfmEndpoint.ExtensionPoints.GetParentInstanceIdRoutine(durableClient, connEnvVariableName, hubName, result.InstanceId);
- }
- catch(Exception ex)
- {
- log.LogWarning(ex, "Failed to get parent instanceId");
- }
- }
-
- if (result.EntityType == EntityTypeEnum.DurableEntity)
- {
- result.Input = ConvertInput(that.Input, connEnvVariableName);
- }
- else
- {
- result.Input = that.Input;
- }
-
- return result;
- }
-
- private static int GetParentInstanceIdTimeoutInSeconds = 15;
-
- internal static async Task GetParentInstanceIdDirectlyFromTable(IDurableClient durableClient, string connEnvVariableName, string hubName, string instanceId)
- {
- var tableClient = await TableClient.GetTableClient(connEnvVariableName);
- IEnumerable tableResult;
-
- // Checking if instanceId looks like a suborchestration (old format)
- var match = SubOrchestrationIdRegex.Match(instanceId);
- if (match.Success)
- {
- string parentExecutionId = match.Groups[1].Value;
-
- var executionIdQuery = new TableQuery().Where
- (
- TableQuery.GenerateFilterCondition("ExecutionId", QueryComparisons.Equal, parentExecutionId)
- );
-
- tableResult = await tableClient.GetAllAsync($"{durableClient.TaskHubName}Instances", executionIdQuery);
- }
- else
- {
- // Trying history table instead (new format)
- // Need to narrow the scan operation by timestamp (because history tables grow large)
- // Also need to put it under a feature switch, as it still might be a performance issue
-
- string featureFlags = Environment.GetEnvironmentVariable(EnvVariableNames.AzureWebJobsFeatureFlags);
- bool isDisabled = featureFlags == null ? false : featureFlags.Contains(Globals.DfMonDisableNewParentIdResolutionAlgorithm);
- if (isDisabled)
- {
- return null;
- }
-
- var instanceEntity = (await tableClient.ExecuteAsync($"{durableClient.TaskHubName}Instances", TableOperation.Retrieve(instanceId, string.Empty)))
- .Result as DynamicTableEntity;
-
- var createdTime = instanceEntity?.Properties["CreatedTime"].DateTimeOffsetValue;
- if (createdTime == null)
- {
- return null;
- }
-
- var notBefore = createdTime.Value - TimeSpan.FromSeconds(5);
- var notAfter = createdTime.Value + TimeSpan.FromSeconds(5);
-
- var executionIdQuery = new TableQuery().Where
- (
- TableQuery.CombineFilters
- (
- TableQuery.CombineFilters
- (
- TableQuery.GenerateFilterConditionForDate("Timestamp", QueryComparisons.GreaterThan, notBefore),
- TableOperators.And,
- TableQuery.GenerateFilterConditionForDate("Timestamp", QueryComparisons.LessThan, notAfter)
- ),
- TableOperators.And,
- TableQuery.GenerateFilterCondition("InstanceId", QueryComparisons.Equal, instanceId)
- )
- );
-
- // This scan can still take long time, so we'll have to hard-limit it to a few seconds. TaskCancelledException will be handled by upper code.
- var cts = new CancellationTokenSource(TimeSpan.FromSeconds(GetParentInstanceIdTimeoutInSeconds));
- tableResult = await tableClient.GetAllAsync($"{durableClient.TaskHubName}History", executionIdQuery, cts.Token);
- }
-
- return tableResult.FirstOrDefault()?.PartitionKey;
- }
-
- private static readonly Regex SubOrchestrationIdRegex = new Regex(@"(.+):\d+$", RegexOptions.IgnoreCase | RegexOptions.Compiled);
-
- private static JsonSerializerSettings InputSerializerSettings = new JsonSerializerSettings
- {
- DateParseHandling = DateParseHandling.None
- };
-
- private DetailedOrchestrationStatus() {}
-
- internal string GetEntityTypeName()
- {
- return this.EntityType == EntityTypeEnum.DurableEntity ? this.EntityId.Value.EntityName : this.Name;
- }
-
- private static JToken ConvertInput(JToken input, string connEnvVariableName)
- {
- if (input.Type == JTokenType.String)
- {
- return input;
- }
-
- var stateToken = input["state"];
- if (stateToken == null || stateToken.Type != JTokenType.String)
- {
- return input;
- }
-
- var stateString = stateToken.Value();
- if (!(stateString.StartsWith('{') && stateString.EndsWith('}')))
- {
- return input;
- }
-
- // Converting JSON string into JSON object
- input["state"] = (JToken)JsonConvert.DeserializeObject(stateString, InputSerializerSettings);
- return input;
- }
- }
-}
\ No newline at end of file
diff --git a/durablefunctionsmonitor.dotnetbackend/Common/ExpandedOrchestrationStatus.cs b/durablefunctionsmonitor.dotnetbackend/Common/ExpandedOrchestrationStatus.cs
deleted file mode 100644
index e5478b5..0000000
--- a/durablefunctionsmonitor.dotnetbackend/Common/ExpandedOrchestrationStatus.cs
+++ /dev/null
@@ -1,138 +0,0 @@
-// Copyright (c) Microsoft Corporation.
-// Licensed under the MIT license.
-
-using System;
-using System.Threading.Tasks;
-using System.Linq;
-using Microsoft.Azure.WebJobs.Extensions.DurableTask;
-using System.Text.RegularExpressions;
-using System.Collections.Generic;
-
-namespace DurableFunctionsMonitor.DotNetBackend
-{
- enum EntityTypeEnum
- {
- Orchestration = 0,
- DurableEntity
- }
-
- // Adds extra fields to DurableOrchestrationStatus returned by IDurableClient.ListInstancesAsync()
- class ExpandedOrchestrationStatus : DurableOrchestrationStatus
- {
- public static readonly Regex EntityIdRegex = new Regex(@"@([\w-]+)@(.+)", RegexOptions.IgnoreCase | RegexOptions.Compiled);
- public EntityTypeEnum EntityType { get; private set; }
- public EntityId? EntityId { get; private set; }
- public double Duration { get; private set; }
- public string LastEvent
- {
- get
- {
- if (this._detailsTask == null)
- {
- return string.Empty;
- }
-
- if (this._lastEvent != null)
- {
- return this._lastEvent;
- }
-
- this._lastEvent = string.Empty;
- DurableOrchestrationStatus details;
- try
- {
- // For some orchestrations getting an extended status might fail due to bugs in DurableOrchestrationClient.
- // So just returning an empty string in that case.
- details = this._detailsTask.Result;
- }
- catch(Exception)
- {
- return this._lastEvent;
- }
-
- if (details.History == null)
- {
- return this._lastEvent;
- }
-
- var lastEvent = details.History
- .Select(e => e["Name"] ?? e["FunctionName"] )
- .LastOrDefault(e => e != null);
-
- if (lastEvent == null)
- {
- return this._lastEvent;
- }
-
- this._lastEvent = lastEvent.ToString();
- return this._lastEvent;
- }
- }
-
- public string ParentInstanceId
- {
- get
- {
- if (this._parentInstanceIdTask == null)
- {
- return string.Empty;
- }
-
- if (this._parentInstanceId != null)
- {
- return this._parentInstanceId;
- }
-
- this._parentInstanceId = string.Empty;
- try
- {
- this._parentInstanceId = this._parentInstanceIdTask.Result;
- }
- catch(Exception)
- {
- // Intentionally doing nothing. Also it's not possible to log anything here at this stage.
- }
-
- return this._parentInstanceId;
- }
- }
-
- public ExpandedOrchestrationStatus(DurableOrchestrationStatus that,
- Task detailsTask,
- Task parentInstanceIdTask,
- HashSet hiddenColumns)
- {
- this.Name = that.Name;
- this.InstanceId = that.InstanceId;
- this.CreatedTime = that.CreatedTime;
- this.LastUpdatedTime = that.LastUpdatedTime;
- this.Duration = Math.Round((that.LastUpdatedTime - that.CreatedTime).TotalMilliseconds);
- this.RuntimeStatus = that.RuntimeStatus;
-
- this.Input = hiddenColumns.Contains("input") ? null : that.Input;
- this.Output = hiddenColumns.Contains("output") ? null : that.Output;
- this.CustomStatus = hiddenColumns.Contains("customStatus") ? null : that.CustomStatus;
-
- // Detecting whether it is an Orchestration or a Durable Entity
- var match = EntityIdRegex.Match(this.InstanceId);
- if (match.Success)
- {
- this.EntityType = EntityTypeEnum.DurableEntity;
- this.EntityId = new EntityId(match.Groups[1].Value, match.Groups[2].Value);
- }
-
- this._detailsTask = detailsTask;
- this._parentInstanceIdTask = parentInstanceIdTask;
- }
-
- internal string GetEntityTypeName()
- {
- return this.EntityType == EntityTypeEnum.DurableEntity ? this.EntityId.Value.EntityName : this.Name;
- }
-
- private Task _detailsTask;
- private string _lastEvent;
- private Task _parentInstanceIdTask;
- private string _parentInstanceId;
- }
-}
\ No newline at end of file
diff --git a/durablefunctionsmonitor.dotnetbackend/Common/FilterClause.cs b/durablefunctionsmonitor.dotnetbackend/Common/FilterClause.cs
deleted file mode 100644
index 228e3aa..0000000
--- a/durablefunctionsmonitor.dotnetbackend/Common/FilterClause.cs
+++ /dev/null
@@ -1,229 +0,0 @@
-// Copyright (c) Microsoft Corporation.
-// Licensed under the MIT license.
-
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Reflection;
-using System.Text.RegularExpressions;
-
-namespace DurableFunctionsMonitor.DotNetBackend
-{
- // A parsed $filter clause
- class FilterClause
- {
- public FilterClause(string filterString)
- {
- if (filterString == null)
- {
- filterString = string.Empty;
- }
-
- filterString = this.ExtractTimeRange(filterString);
- filterString = this.ExtractRuntimeStatuses(filterString);
- this.ExtractPredicate(filterString);
- }
-
- public Func Predicate { get; private set; }
- public string FieldName { get; private set; }
-
- public DateTime? TimeFrom { get; private set; }
- public DateTime? TimeTill { get; private set; }
- public string[] RuntimeStatuses { get; private set; }
-
- private string ExtractTimeRange(string filterClause)
- {
- this.TimeFrom = null;
- this.TimeTill = null;
-
- if (string.IsNullOrEmpty(filterClause))
- {
- return filterClause;
- }
-
- var match = TimeFromRegex.Match(filterClause);
- if (match.Success)
- {
- this.TimeFrom = DateTime.Parse(match.Groups[3].Value);
- filterClause = filterClause.Substring(0, match.Index) + filterClause.Substring(match.Index + match.Length);
- }
-
- match = TimeTillRegex.Match(filterClause);
- if (match.Success)
- {
- this.TimeTill = DateTime.Parse(match.Groups[2].Value);
- filterClause = filterClause.Substring(0, match.Index) + filterClause.Substring(match.Index + match.Length);
- }
-
- return filterClause;
- }
-
- private string ExtractRuntimeStatuses(string filterClause)
- {
- this.RuntimeStatuses = null;
-
- if (string.IsNullOrEmpty(filterClause))
- {
- return filterClause;
- }
-
- var match = RuntimeStatusRegex.Match(filterClause);
- if (match.Success)
- {
- this.RuntimeStatuses = match.Groups[2].Value
- .Split(',').Where(s => !string.IsNullOrEmpty(s))
- .Select(s => s.Trim(' ', '\'')).ToArray();
-
- filterClause = filterClause.Substring(0, match.Index) + filterClause.Substring(match.Index + match.Length);
- }
-
- return filterClause;
- }
-
- private void ExtractPredicate(string filterString)
- {
- // startswith(field-name, 'value') eq true|false
- var match = StartsWithRegex.Match(filterString);
- if (match.Success)
- {
-
- bool result = true;
- if (match.Groups.Count > 4)
- {
- result = match.Groups[4].Value != "false";
- }
- string arg = match.Groups[2].Value;
-
- this.Predicate = (v) => v.StartsWith(arg) == result;
- }
- // contains(field-name, 'value') eq true|false
- else if ((match = ContainsRegex.Match(filterString)).Success)
- {
- bool result = true;
- if (match.Groups.Count > 4)
- {
- result = match.Groups[4].Value != "false";
- }
- string arg = match.Groups[2].Value;
-
- this.Predicate = (v) => v.Contains(arg) == result;
- }
- // field-name eq|ne 'value'
- else if ((match = EqRegex.Match(filterString)).Success)
- {
- string value = match.Groups[3].Value;
- string op = match.Groups[2].Value;
-
- this.Predicate = (v) =>
- {
- bool res = value == "null" ? string.IsNullOrEmpty(v) : v == value;
- return op == "ne" ? !res : res;
- };
- }
- // field-name in ('value1','value2','value3')
- else if ((match = InRegex.Match(filterString)).Success)
- {
- string value = match.Groups[2].Value.Trim();
-
- string[] values;
- if (value.StartsWith("'"))
- {
- values = LazyQuotesRegex.Matches(value)
- .Select(m => m.Groups[1].Value)
- .ToArray();
- }
- else
- {
- values = match.Groups[2].Value
- .Split(',').Where(s => !string.IsNullOrEmpty(s))
- .Select(s => s.Trim(' ', '\''))
- .ToArray();
- }
-
- if ((match.Groups.Count) > 4 && (match.Groups[4].Value == "false"))
- {
- this.Predicate = (v) => !values.Contains(v);
- }
- else
- {
- this.Predicate = (v) => values.Contains(v);
- }
- }
-
- if (this.Predicate != null)
- {
- this.FieldName = match.Groups[1].Value;
- }
- }
-
- private static readonly Regex StartsWithRegex = new Regex(@"startswith\s*\(\s*(\w+)\s*,\s*'([^']+)'\s*\)\s*(eq)?\s*(true|false)?", RegexOptions.IgnoreCase | RegexOptions.Compiled);
- private static readonly Regex ContainsRegex = new Regex(@"contains\s*\(\s*(\w+)\s*,\s*'([^']+)'\s*\)\s*(eq)?\s*(true|false)?", RegexOptions.IgnoreCase | RegexOptions.Compiled);
- private static readonly Regex EqRegex = new Regex(@"(\w+)\s+(eq|ne)\s*'([^']+)", RegexOptions.IgnoreCase | RegexOptions.Compiled);
- private static readonly Regex InRegex = new Regex(@"(\w+)\s+in\s*\((.*)\)\s*(eq)?\s*(true|false)?", RegexOptions.IgnoreCase | RegexOptions.Compiled);
- private static readonly Regex LazyQuotesRegex = new Regex(@"'(.*?)'", RegexOptions.IgnoreCase | RegexOptions.Compiled);
-
- private static readonly Regex RuntimeStatusRegex = new Regex(@"\s*(and\s+)?runtimeStatus\s+in\s*\(([^\)]*)\)(\s*and)?\s*", RegexOptions.IgnoreCase | RegexOptions.Compiled);
- private static readonly Regex TimeFromRegex = new Regex(@"\s*(and\s+)?(createdTime|timestamp)\s+ge\s+'([\d-:.T]{19,}Z)'(\s*and)?\s*", RegexOptions.IgnoreCase | RegexOptions.Compiled);
- private static readonly Regex TimeTillRegex = new Regex(@"\s*(and\s+)?createdTime\s+le\s+'([\d-:.T]{19,}Z)'(\s*and)?\s*", RegexOptions.IgnoreCase | RegexOptions.Compiled);
- }
-
- static class FilterClauseExtensions
- {
- // Applies a filter to a collection of items
- internal static IEnumerable ApplyFilter(this IEnumerable items, FilterClause filter)
- {
- if (string.IsNullOrEmpty(filter.FieldName))
- {
- // if field to be filtered is not specified, returning everything
- foreach (var orchestration in items)
- {
- yield return orchestration;
- }
- }
- else
- {
- if (filter.Predicate == null)
- {
- // if filter expression is invalid, returning nothing
- yield break;
- }
-
- var propInfo = typeof(T).GetProperties()
- .FirstOrDefault(p => p.Name.Equals(filter.FieldName, StringComparison.InvariantCultureIgnoreCase));
-
- if (propInfo == null)
- {
- // if field name is invalid, returning nothing
- yield break;
- }
-
- foreach (var item in items)
- {
- if (filter.Predicate(item.GetPropertyValueAsString(propInfo)))
- {
- yield return item;
- }
- }
- }
- }
-
- // Helper for formatting orchestration field values
- internal static string GetPropertyValueAsString(this T orchestration, PropertyInfo propInfo)
- {
- object propValue = propInfo.GetValue(orchestration);
-
- if (propValue == null)
- {
- return string.Empty;
- }
-
- // Explicitly handling DateTime as 'yyyy-MM-ddTHH:mm:ssZ'
- if (propInfo.PropertyType == typeof(DateTime))
- {
- return ((DateTime)propValue).ToString(Globals.SerializerSettings.DateFormatString);
- }
-
- return propValue.ToString();
- }
- }
-}
\ No newline at end of file
diff --git a/durablefunctionsmonitor.dotnetbackend/Common/Globals.cs b/durablefunctionsmonitor.dotnetbackend/Common/Globals.cs
deleted file mode 100644
index 21f9727..0000000
--- a/durablefunctionsmonitor.dotnetbackend/Common/Globals.cs
+++ /dev/null
@@ -1,259 +0,0 @@
-// Copyright (c) Microsoft Corporation.
-// Licensed under the MIT license.
-
-using System;
-using System.Collections.Generic;
-using System.IO;
-using System.Linq;
-using System.Reflection;
-using System.Runtime.CompilerServices;
-using System.Threading.Tasks;
-using Microsoft.AspNetCore.Http;
-using Microsoft.AspNetCore.Mvc;
-using Microsoft.Extensions.Logging;
-using Microsoft.WindowsAzure.Storage;
-using Microsoft.WindowsAzure.Storage.Auth;
-using Microsoft.WindowsAzure.Storage.Blob;
-using Newtonsoft.Json;
-using Newtonsoft.Json.Converters;
-using Newtonsoft.Json.Serialization;
-
-[assembly: InternalsVisibleToAttribute("durablefunctionsmonitor.dotnetbackend.tests")]
-
-namespace DurableFunctionsMonitor.DotNetBackend
-{
- static class EnvVariableNames
- {
- public const string AzureWebJobsStorage = "AzureWebJobsStorage";
- public const string AzureWebJobsFeatureFlags = "AzureWebJobsFeatureFlags";
- public const string WEBSITE_SITE_NAME = "WEBSITE_SITE_NAME";
- public const string WEBSITE_AUTH_V2_CONFIG_JSON = "WEBSITE_AUTH_V2_CONFIG_JSON";
- public const string WEBSITE_AUTH_CLIENT_ID = "WEBSITE_AUTH_CLIENT_ID";
- public const string WEBSITE_AUTH_OPENID_ISSUER = "WEBSITE_AUTH_OPENID_ISSUER";
- public const string WEBSITE_AUTH_UNAUTHENTICATED_ACTION = "WEBSITE_AUTH_UNAUTHENTICATED_ACTION";
- public const string DFM_ALLOWED_USER_NAMES = "DFM_ALLOWED_USER_NAMES";
- public const string DFM_ALLOWED_APP_ROLES = "DFM_ALLOWED_APP_ROLES";
- public const string DFM_ALLOWED_FULL_ACCESS_APP_ROLES = "DFM_ALLOWED_FULL_ACCESS_APP_ROLES";
- public const string DFM_ALLOWED_READ_ONLY_APP_ROLES = "DFM_ALLOWED_READ_ONLY_APP_ROLES";
- public const string DFM_HUB_NAME = "DFM_HUB_NAME";
- public const string DFM_NONCE = "DFM_NONCE";
- public const string DFM_CLIENT_CONFIG = "DFM_CLIENT_CONFIG";
- public const string DFM_MODE = "DFM_MODE";
- public const string DFM_USERNAME_CLAIM_NAME = "DFM_USERNAME_CLAIM_NAME";
- public const string DFM_ROLES_CLAIM_NAME = "DFM_ROLES_CLAIM_NAME";
- public const string DFM_ALTERNATIVE_CONNECTION_STRING_PREFIX = "DFM_ALTERNATIVE_CONNECTION_STRING_";
- public const string DFM_INGRESS_ROUTE_PREFIX = "DFM_INGRESS_ROUTE_PREFIX";
- }
-
- static class Globals
- {
- public const string XsrfTokenCookieAndHeaderName = "x-dfm-xsrf-token";
- public const string TemplateContainerName = "durable-functions-monitor";
- public const string TabTemplateFolderName = "tab-templates";
- public const string FunctionMapFolderName = "function-maps";
- public const string FunctionMapFilePrefix = "dfm-func-map";
- public const string CustomMetaTagBlobName = "custom-meta-tag.htm";
-
- public const string ConnAndTaskHubNameSeparator = "-";
-
- public const string HubNameRouteParamName = "{hubName}";
-
- // Constant, that defines the /a/p/i/{connName}-{hubName} route prefix, to let Functions Host distinguish api methods from statics
- public const string ApiRoutePrefix = "a/p/i/{connName}-{hubName}";
-
- public const string IdentityBasedConnectionSettingAccountNameSuffix = "__accountName";
- public const string IdentityBasedConnectionSettingTableServiceUriSuffix = "__tableServiceUri";
- public const string IdentityBasedConnectionSettingBlobServiceUriSuffix = "__blobServiceUri";
- public const string IdentityBasedConnectionSettingCredentialSuffix = "__credential";
- public const string IdentityBasedConnectionSettingClientIdSuffix = "__clientId";
- public const string IdentityBasedConnectionSettingCredentialValue = "managedidentity";
-
- public const string DfMonDisableNewParentIdResolutionAlgorithm = "DfMonDisableNewParentIdResolutionAlgorithm";
-
-
- public static void SplitConnNameAndHubName(string connAndHubName, out string connName, out string hubName)
- {
- int pos = connAndHubName.LastIndexOf("-");
- if (pos < 0)
- {
- connName = null;
- hubName = connAndHubName;
- }
- else
- {
- connName = connAndHubName.Substring(0, pos);
- hubName = connAndHubName.Substring(pos + 1);
- }
- }
-
- public static string CombineConnNameAndHubName(string connName, string hubName)
- {
- if (string.IsNullOrEmpty(connName) || connName == "-")
- {
- return hubName;
- }
-
- return $"{connName}{ConnAndTaskHubNameSeparator}{hubName}";
- }
-
- public static bool IsDefaultConnectionStringName(string connName)
- {
- return string.IsNullOrEmpty(connName) || connName == "-";
- }
-
- public static string GetFullConnectionStringEnvVariableName(string connName)
- {
- if (IsDefaultConnectionStringName(connName))
- {
- return DfmEndpoint.StorageConnStringEnvVarName;
- }
- else
- {
- return EnvVariableNames.DFM_ALTERNATIVE_CONNECTION_STRING_PREFIX + connName;
- }
- }
-
- // Applies authN/authZ rules and handles incoming HTTP request. Also does error handling.
- public static async Task HandleAuthAndErrors(this HttpRequest req, OperationKind kind, string connName, string hubName, ILogger log, Func> todo)
- {
- return await HandleErrors(req, log, async () =>
- {
- var mode = await Auth.ValidateIdentityAsync(req.HttpContext.User, req.Headers, req.Cookies, kind);
-
- // Also validating task hub name (if it is a part of the request).
- // But only after validating user identity (because validating task hub name involves querying the Storage).
- await Auth.ThrowIfTaskHubNameIsInvalid(CombineConnNameAndHubName(connName, hubName));
-
- return await todo(mode);
- });
- }
-
- // Handles incoming HTTP request with error handling.
- public static async Task HandleErrors(this HttpRequest req, ILogger log, Func> todo)
- {
- try
- {
- return await todo();
- }
- catch (UnauthorizedAccessException ex)
- {
- log.LogError(ex, "DFM failed to authenticate request");
- return new UnauthorizedResult();
- }
- catch (AccessViolationException ex)
- {
- log.LogError(ex, "DFM failed to authorize request");
- return new StatusCodeResult(403);
- }
- catch (Exception ex)
- {
- log.LogError(ex, "DFM failed");
- return new BadRequestObjectResult(ex.Message);
- }
- }
-
- // Lists all blobs from Azure Blob Container
- public static async Task> ListBlobsAsync(this CloudBlobContainer container, string prefix)
- {
- var result = new List();
- BlobContinuationToken token = null;
- do
- {
- var nextBatch = await container.ListBlobsSegmentedAsync(prefix, token);
- result.AddRange(nextBatch.Results);
- token = nextBatch.ContinuationToken;
- }
- while (token != null);
- return result;
- }
-
- // Fighting with https://github.com/Azure/azure-functions-durable-js/issues/94
- // Could use a custom JsonConverter, but it won't be invoked for nested items :(
- public static string FixUndefinedsInJson(this string json)
- {
- return json.Replace("\": undefined", "\": null");
- }
-
- // Shared JSON serialization settings
- public static JsonSerializerSettings SerializerSettings = GetSerializerSettings();
-
- // A customized way of returning JsonResult, to cope with Functions v2/v3 incompatibility
- public static ContentResult ToJsonContentResult(this object result, Func applyThisToJson = null)
- {
- string json = JsonConvert.SerializeObject(result, Globals.SerializerSettings);
- if (applyThisToJson != null)
- {
- json = applyThisToJson(json);
- }
- return new ContentResult() { Content = json, ContentType = "application/json" };
- }
-
- public static IEnumerable ApplyTop(this IEnumerable collection, IQueryCollection query)
- {
- var clause = query["$top"];
- return clause.Any() ? collection.Take(int.Parse(clause)) : collection;
- }
- public static IEnumerable ApplySkip(this IEnumerable collection, IQueryCollection query)
- {
- var clause = query["$skip"];
- return clause.Any() ? collection.Skip(int.Parse(clause)) : collection;
- }
-
- public static async Task GetCloudBlobClient(string connStringName)
- {
- string connectionString = Environment.GetEnvironmentVariable(connStringName);
-
- if (string.IsNullOrEmpty(connectionString))
- {
- // Trying with Managed Identity/local Azure login
-
- string blobServiceUri = Environment.GetEnvironmentVariable(connStringName + Globals.IdentityBasedConnectionSettingBlobServiceUriSuffix);
- if (string.IsNullOrEmpty(blobServiceUri))
- {
- string accountName = Environment.GetEnvironmentVariable(connStringName + Globals.IdentityBasedConnectionSettingAccountNameSuffix);
- blobServiceUri = $"https://{accountName}.blob.core.windows.net";
- }
-
- var identityBasedToken = await IdentityBasedTokenSource.GetTokenAsync();
- var credentials = new StorageCredentials(new TokenCredential(identityBasedToken));
-
- return new CloudBlobClient(new Uri(blobServiceUri), credentials);
- }
- else
- {
- // Using classic connection string
- return CloudStorageAccount.Parse(connectionString).CreateCloudBlobClient();
- }
- }
-
- public static string GetHostJsonPath()
- {
- string assemblyLocation = Assembly.GetExecutingAssembly().Location;
-
- // First trying current folder
- string result = Path.Combine(Path.GetDirectoryName(assemblyLocation), "host.json");
-
- if (File.Exists(result))
- {
- return result;
- }
-
- // Falling back to parent folder
- result = Path.Combine(Path.GetDirectoryName(Path.GetDirectoryName(assemblyLocation)), "host.json");
-
- return result;
- }
-
- private static JsonSerializerSettings GetSerializerSettings()
- {
- var settings = new JsonSerializerSettings
- {
- Formatting = Formatting.Indented,
- DateFormatString = "yyyy-MM-ddTHH:mm:ssZ",
- ContractResolver = new CamelCasePropertyNamesContractResolver()
- };
- settings.Converters.Add(new StringEnumConverter());
- return settings;
- }
- }
-}
\ No newline at end of file
diff --git a/durablefunctionsmonitor.dotnetbackend/Common/HttpHandlerBase.cs b/durablefunctionsmonitor.dotnetbackend/Common/HttpHandlerBase.cs
deleted file mode 100644
index 791e36e..0000000
--- a/durablefunctionsmonitor.dotnetbackend/Common/HttpHandlerBase.cs
+++ /dev/null
@@ -1,52 +0,0 @@
-// Copyright (c) Microsoft Corporation.
-// Licensed under the MIT license.
-
-using System;
-using System.Threading.Tasks;
-using Microsoft.AspNetCore.Http;
-using Microsoft.AspNetCore.Mvc;
-using Microsoft.Azure.WebJobs.Extensions.DurableTask;
-using Microsoft.Azure.WebJobs.Extensions.DurableTask.ContextImplementations;
-using Microsoft.Azure.WebJobs.Extensions.DurableTask.Options;
-using Microsoft.Extensions.Logging;
-
-namespace DurableFunctionsMonitor.DotNetBackend
-{
- // Base class for all HTTP request handlers.
- // Provides tooling for authZ and error handling.
- public abstract class HttpHandlerBase
- {
- // Default instance of IDurableClientFactory, injected via ctor
- private readonly IDurableClientFactory _durableClientFactory;
-
- public HttpHandlerBase(IDurableClientFactory durableClientFactory)
- {
- this._durableClientFactory = durableClientFactory;
- }
-
- // Applies authN/authZ rules and handles incoming HTTP request. Also creates IDurableClient (when needed) and does error handling.
- protected async Task HandleAuthAndErrors(OperationKind kind, IDurableClient defaultDurableClient, HttpRequest req, string connName, string hubName, ILogger log, Func> todo)
- {
- return await Globals.HandleErrors(req, log, async () => {
-
- await Auth.ValidateIdentityAsync(req.HttpContext.User, req.Headers, req.Cookies, kind);
-
- // Also validating task hub name (if it is a part of the request).
- // But only after validating user identity (because validating task hub name involves querying the Storage).
- await Auth.ThrowIfTaskHubNameIsInvalid(Globals.CombineConnNameAndHubName(connName, hubName));
-
- // For default storage connections using default durableClient, injected normally, as a parameter.
- // Only using IDurableClientFactory for custom connections, just in case.
- var durableClient = Globals.IsDefaultConnectionStringName(connName) ?
- defaultDurableClient :
- this._durableClientFactory.CreateClient(new DurableClientOptions
- {
- TaskHub = hubName,
- ConnectionName = Globals.GetFullConnectionStringEnvVariableName(connName)
- });
-
- return await todo(durableClient);
- });
- }
- }
-}
diff --git a/durablefunctionsmonitor.dotnetbackend/Common/IdentityBasedTokenSource.cs b/durablefunctionsmonitor.dotnetbackend/Common/IdentityBasedTokenSource.cs
deleted file mode 100644
index 5f53999..0000000
--- a/durablefunctionsmonitor.dotnetbackend/Common/IdentityBasedTokenSource.cs
+++ /dev/null
@@ -1,62 +0,0 @@
-// Copyright (c) Microsoft Corporation.
-// Licensed under the MIT license.
-
-using System;
-using System.Threading.Tasks;
-using Azure.Identity;
-using Azure.Core;
-using System.Threading;
-
-namespace DurableFunctionsMonitor.DotNetBackend
-{
- // Implements getting and caching identity-based access tokens for Storage
- class IdentityBasedTokenSource
- {
- // Cannot use DI functionality (our startup method will not be called when installed as a NuGet package),
- // so just leaving this as an internal static variable.
- internal static TokenCredential MockedTokenCredential = null;
-
- public static async Task GetTokenAsync()
- {
- // Returning cached token, if it is not expired yet (adding a 10 seconds handicap)
- if (CachedToken.ExpiresOn > (DateTimeOffset.UtcNow + TimeSpan.FromSeconds(TokenExpirationHandicapInSeconds)))
- {
- return CachedToken.Token;
- }
-
- try
- {
- // Obtaining a new token
- var tokenCredential = MockedTokenCredential ?? GetTokenCredential();
- var tokenRequestContext = new TokenRequestContext(new string[] { "https://storage.azure.com" });
- CachedToken = await tokenCredential.GetTokenAsync(tokenRequestContext, CancellationToken.None);
- }
- catch (Exception)
- {
- // Resetting the cached token. Note that AccessToken is a struct
- CachedToken = new AccessToken();
- throw;
- }
-
- return CachedToken.Token;
- }
-
- internal static TokenCredential GetTokenCredential()
- {
- // Supporting user-assigned Managed Identities as well
-
- if (Globals.IdentityBasedConnectionSettingCredentialValue == Environment.GetEnvironmentVariable(EnvVariableNames.AzureWebJobsStorage + Globals.IdentityBasedConnectionSettingCredentialSuffix))
- {
- string clientId = Environment.GetEnvironmentVariable(EnvVariableNames.AzureWebJobsStorage + Globals.IdentityBasedConnectionSettingClientIdSuffix);
- return new DefaultAzureCredential(new DefaultAzureCredentialOptions { ManagedIdentityClientId = clientId });
- }
- else
- {
- return new DefaultAzureCredential();
- }
- }
-
- private const int TokenExpirationHandicapInSeconds = 10;
- private static AccessToken CachedToken = new AccessToken();
- }
-}
\ No newline at end of file
diff --git a/durablefunctionsmonitor.dotnetbackend/Common/OrchestrationHistory.cs b/durablefunctionsmonitor.dotnetbackend/Common/OrchestrationHistory.cs
deleted file mode 100644
index 8da7c5a..0000000
--- a/durablefunctionsmonitor.dotnetbackend/Common/OrchestrationHistory.cs
+++ /dev/null
@@ -1,228 +0,0 @@
-// Copyright (c) Microsoft Corporation.
-// Licensed under the MIT license.
-
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Threading.Tasks;
-using Microsoft.Azure.WebJobs.Extensions.DurableTask;
-using Microsoft.WindowsAzure.Storage.Table;
-using Newtonsoft.Json.Linq;
-
-namespace DurableFunctionsMonitor.DotNetBackend
-{
- static class OrchestrationHistory
- {
- ///
- /// Fetches orchestration instance history directly from XXXHistory table
- /// Tries to mimic the history aggregation algorithm in https://github.com/Azure/azure-functions-durable-extension/blob/main/src/WebJobs.Extensions.DurableTask/ContextImplementations/DurableClient.cs
- /// Intentionally returns IEnumerable, because the consuming code not always iterates through all of it.
- ///
- public static async Task> GetHistoryDirectlyFromTable(IDurableClient durableClient, string connName, string hubName, string instanceId)
- {
- var tableClient = await TableClient.GetTableClient(connName);
-
- // Need to fetch executionId first
-
- var instanceEntity = (await tableClient.ExecuteAsync($"{hubName}Instances", TableOperation.Retrieve(instanceId, string.Empty)))
- .Result as DynamicTableEntity;
-
- string executionId = instanceEntity.Properties.ContainsKey("ExecutionId") ?
- instanceEntity.Properties["ExecutionId"].StringValue :
- null;
-
- var instanceIdFilter = TableQuery.CombineFilters
- (
- TableQuery.GenerateFilterCondition("PartitionKey", QueryComparisons.Equal, instanceId),
- TableOperators.And,
- TableQuery.GenerateFilterCondition("ExecutionId", QueryComparisons.Equal, executionId)
- );
-
- // Fetching _all_ correlated events with a separate parallel query. This seems to be the only option.
- var correlatedEventsQuery = new TableQuery().Where
- (
- TableQuery.CombineFilters
- (
- instanceIdFilter,
- TableOperators.And,
- TableQuery.GenerateFilterConditionForInt("TaskScheduledId", QueryComparisons.GreaterThanOrEqual, 0)
- )
- );
-
- var correlatedEventsTask = tableClient
- .GetAllAsync($"{hubName}History", correlatedEventsQuery)
- .ContinueWith(t => {
-
- // It turned out that there can be entities with duplicated TaskScheduleId (not sure why).
- // So creating this map manually (instead of using .ToDictionary())
- var correlatedEventsMap = new Dictionary();
-
- foreach (var historyEntity in t.Result)
- {
- correlatedEventsMap[historyEntity.TaskScheduledId.Value] = historyEntity;
- }
-
- return correlatedEventsMap;
- });
-
- // Fetching the history
- var query = new TableQuery().Where(instanceIdFilter);
-
- // Intentionally using synchronous method, since not all results might be iterated
- var queryResults = tableClient.GetAll($"{hubName}History", query);
-
- return EnumerateEvents(queryResults, correlatedEventsTask);
- }
-
- private static IEnumerable EnumerateEvents(IEnumerable events, Task> correlatedEventsTask)
- {
- // Memorizing 'ExecutionStarted' event, to further correlate with 'ExecutionCompleted'
- HistoryEntity executionStartedEvent = null;
-
- foreach (var evt in events)
- {
- switch (evt.EventType)
- {
- case "TaskScheduled":
- case "SubOrchestrationInstanceCreated":
-
- // Trying to match the completion event
- correlatedEventsTask.Result.TryGetValue(evt.EventId, out var correlatedEvt);
- if (correlatedEvt != null)
- {
- yield return correlatedEvt.ToHistoryEvent
- (
- evt._Timestamp,
- evt.Name,
- correlatedEvt.EventType == "GenericEvent" ? evt.EventType : null,
- evt.InstanceId,
- evt.Input
- );
- }
- else
- {
- yield return evt.ToHistoryEvent();
- }
-
- break;
- case "ExecutionStarted":
-
- executionStartedEvent = evt;
-
- yield return evt.ToHistoryEvent(null, evt.Name);
-
- break;
- case "ExecutionCompleted":
- case "ExecutionFailed":
- case "ExecutionTerminated":
-
- yield return evt.ToHistoryEvent(executionStartedEvent?._Timestamp);
-
- break;
- case "ContinueAsNew":
- case "TimerCreated":
- case "TimerFired":
- case "EventRaised":
- case "EventSent":
-
- yield return evt.ToHistoryEvent();
-
- break;
- }
- }
- }
-
- private static HistoryEvent ToHistoryEvent(this HistoryEntity evt,
- DateTimeOffset? scheduledTime = null,
- string functionName = null,
- string eventType = null,
- string subOrchestrationId = null,
- string input = null)
- {
- return new HistoryEvent
- {
- Timestamp = evt._Timestamp.ToUniversalTime(),
- EventType = eventType ?? evt.EventType,
- EventId = evt.TaskScheduledId,
- Name = string.IsNullOrEmpty(evt.Name) ? functionName : evt.Name,
- Input = string.IsNullOrEmpty(evt.Input) ? input : evt.Input,
- Result = evt.Result,
- // Fallback to FailureDetails, see: https://github.com/microsoft/DurableFunctionsMonitor/issues/174
- Details = evt.Details ?? evt.FailureDetails,
- SubOrchestrationId = subOrchestrationId ?? evt.InstanceId,
- ScheduledTime = scheduledTime,
- DurationInMs = scheduledTime.HasValue ? (evt._Timestamp - scheduledTime.Value).TotalMilliseconds : 0
- };
- }
-
- internal static HistoryEvent ToHistoryEvent(JToken token)
- {
- dynamic dynamicToken = token;
-
- // Turned out that string.IsNullOrEmpty() can throw, if the passed dynamic value is not of a string type.
- // So need to explicitly convert to string first
- string name = dynamicToken.Name;
- if (string.IsNullOrEmpty(name))
- {
- name = dynamicToken.FunctionName;
- }
-
- return new HistoryEvent
- {
- Timestamp = dynamicToken.Timestamp,
- EventType = dynamicToken.EventType,
- EventId = dynamicToken.EventId,
- Name = name,
- ScheduledTime = dynamicToken.ScheduledTime,
- Input = dynamicToken.Input?.ToString(),
- Result = dynamicToken.Result?.ToString(),
- // Fallback to FailureDetails, see: https://github.com/microsoft/DurableFunctionsMonitor/issues/174
- Details = dynamicToken.Details?.ToString() ?? dynamicToken.FailureDetails?.ToString(),
- DurationInMs = dynamicToken.DurationInMs,
- SubOrchestrationId = dynamicToken.SubOrchestrationId
- };
- }
-
- internal static IEnumerable ApplyTimeFrom(this IEnumerable events, DateTime? timeFrom)
- {
- if (timeFrom == null)
- {
- return events;
- }
-
- return events.Where(evt => evt.Timestamp >= timeFrom);
- }
- }
-
- ///
- /// Represents a record in orchestration's history
- ///
- public class HistoryEvent
- {
- public DateTimeOffset Timestamp { get; set; }
- public string EventType { get; set; }
- public int? EventId { get; set; }
- public string Name { get; set; }
- public DateTimeOffset? ScheduledTime { get; set; }
- public string Input { get; set; }
- public string Result { get; set; }
- public string Details { get; set; }
- public double? DurationInMs { get; set; }
- public string SubOrchestrationId { get; set; }
- }
-
- // Represents an record in XXXHistory table
- class HistoryEntity : TableEntity
- {
- public string InstanceId { get; set; }
- public string EventType { get; set; }
- public string Name { get; set; }
- public DateTimeOffset _Timestamp { get; set; }
- public string Input { get; set; }
- public string Result { get; set; }
- public string Details { get; set; }
- public string FailureDetails { get; set; }
- public int EventId { get; set; }
- public int? TaskScheduledId { get; set; }
- }
-}
diff --git a/durablefunctionsmonitor.dotnetbackend/Common/Setup.cs b/durablefunctionsmonitor.dotnetbackend/Common/Setup.cs
deleted file mode 100644
index a0252ec..0000000
--- a/durablefunctionsmonitor.dotnetbackend/Common/Setup.cs
+++ /dev/null
@@ -1,301 +0,0 @@
-// Copyright (c) Microsoft Corporation.
-// Licensed under the MIT license.
-
-using System;
-using System.Collections.Generic;
-using System.IO;
-using System.Linq;
-using System.Reflection;
-using System.Threading.Tasks;
-using Microsoft.Azure.WebJobs.Extensions.DurableTask;
-using Newtonsoft.Json.Linq;
-
-namespace DurableFunctionsMonitor.DotNetBackend
-{
- ///
- /// Defines functional mode for DurableFunctionsMonitor endpoint.
- ///
- public enum DfmMode
- {
- Normal = 0,
- ReadOnly
- }
-
- ///
- /// DurableFunctionsMonitor configuration settings
- ///
- public class DfmSettings
- {
- ///
- /// Turns authentication off for DurableFunctionsMonitor endpoint.
- /// WARNING: this might not only expose DurableFunctionsMonitor to the public, but also
- /// expose all other HTTP-triggered endpoints in your project. Make sure you know what you're doing.
- ///
- public bool DisableAuthentication { get; set; }
-
- ///
- /// Functional mode for DurableFunctionsMonitor endpoint.
- /// Currently only Normal (default) and ReadOnly modes are supported.
- ///
- public DfmMode Mode { get; set; }
-
- ///
- /// List of App Roles, that are allowed to access DurableFunctionsMonitor endpoint. Users/Groups then need
- /// to be assigned one of these roles via AAD Enterprise Applications->[your AAD app]->Users and Groups tab.
- /// Once set, the incoming access token is expected to contain one of these in its 'roles' claim.
- ///
- public IEnumerable AllowedAppRoles { get; set; }
-
- ///
- /// List of App Roles, that are allowed to full access DurableFunctionsMonitor endpoint. Users/Groups then need
- /// to be assigned one of these roles via AAD Enterprise Applications->[your AAD app]->Users and Groups tab.
- /// Once set, the incoming access token is expected to contain one of these in its 'roles' claim.
- ///
- public IEnumerable AllowedFullAccessAppRoles { get; set; }
-
- ///
- /// List of App Roles, that are allowed read only access to the DurableFunctionsMonitor endpoint. Users/Groups then need
- /// to be assigned one of these roles via AAD Enterprise Applications->[your AAD app]->Users and Groups tab.
- /// Once set, the incoming access token is expected to contain one of these in its 'roles' claim.
- ///
- public IEnumerable AllowedReadOnlyAppRoles { get; set; }
-
- ///
- /// List of users, that are allowed to access DurableFunctionsMonitor endpoint. You typically put emails into here.
- /// Once set, the incoming access token is expected to contain one of these names in its 'preferred_username' claim.
- ///
- public IEnumerable AllowedUserNames { get; set; }
-
- ///
- /// Folder where to search for custom tab/html templates.
- /// Must be a part of your Functions project and be adjacent to your host.json file.
- ///
- public string CustomTemplatesFolderName { get; set; }
-
- ///
- /// Name of the claim (from ClaimsCredential) to be used as a user name.
- /// Defaults to "preferred_username"
- ///
- public string UserNameClaimName { get; set; }
-
- ///
- /// Name of the claim (from ClaimsCredential) to be used as a role name.
- /// Defaults to "roles"
- ///
- public string RolesClaimName { get; set; }
-
- public DfmSettings()
- {
- this.UserNameClaimName = Auth.PreferredUserNameClaim;
- this.RolesClaimName = Auth.RolesClaim;
- }
- }
-
- ///
- /// A set of extension points that can be customized by the client code, when DFM is used in 'injected' mode.
- ///
- public class DfmExtensionPoints
- {
- ///
- /// Routine for fetching orchestration history.
- /// Takes IDurableClient, connString env variable name, taskHubName and instanceId and returns IEnumerable[HistoryEvent].
- /// Provide your own implementation for a custom storage provider.
- /// Default implementation fetches history directly from XXXHistory table.
- ///
- public Func>> GetInstanceHistoryRoutine { get; set; }
-
- ///
- /// Routine for getting parent orchestration's Id.
- /// Takes IDurableClient, connString env variable name, taskHubName and instanceId and returns
- /// Id of parent orchestration, or null if the given instance is not a suborchestration.
- /// Provide your own implementation for a custom storage provider.
- /// Default implementation matches ExecutionId field in XXXInstances table.
- ///
- public Func> GetParentInstanceIdRoutine { get; set; }
-
- ///
- /// Routine for getting Task Hub names
- /// Takes connString env variable name and returns names of Task Hubs discovered there.
- /// Provide your own implementation for a custom storage provider.
- /// Default implementation traverses XXXInstances tables.
- ///
- public Func>> GetTaskHubNamesRoutine { get; set; }
-
- public DfmExtensionPoints()
- {
- this.GetInstanceHistoryRoutine = OrchestrationHistory.GetHistoryDirectlyFromTable;
- this.GetParentInstanceIdRoutine = DetailedOrchestrationStatus.GetParentInstanceIdDirectlyFromTable;
- this.GetTaskHubNamesRoutine = Auth.GetTaskHubNamesFromStorage;
- }
- }
-
- ///
- /// DurableFunctionsMonitor configuration
- ///
- public static class DfmEndpoint
- {
- ///
- /// Initializes DurableFunctionsMonitor endpoint with some settings
- ///
- /// When null, default settings are used
- /// Routines, that can be customized by client code. When null, default instance of DfmExtensionPoints is used
- public static void Setup(DfmSettings settings = null, DfmExtensionPoints extensionPoints = null)
- {
- string dfmNonce = Environment.GetEnvironmentVariable(EnvVariableNames.DFM_NONCE);
-
- _settings = settings;
-
- if (_settings == null)
- {
- string dfmAllowedUserNames = Environment.GetEnvironmentVariable(EnvVariableNames.DFM_ALLOWED_USER_NAMES);
- string dfmAllowedAppRoles = Environment.GetEnvironmentVariable(EnvVariableNames.DFM_ALLOWED_APP_ROLES);
- string dfmAllowedFullAccessAppRoles = Environment.GetEnvironmentVariable(EnvVariableNames.DFM_ALLOWED_FULL_ACCESS_APP_ROLES);
- string dfmAllowedReadOnlyAppRoles = Environment.GetEnvironmentVariable(EnvVariableNames.DFM_ALLOWED_READ_ONLY_APP_ROLES);
- string dfmMode = Environment.GetEnvironmentVariable(EnvVariableNames.DFM_MODE);
- string dfmUserNameClaimName = Environment.GetEnvironmentVariable(EnvVariableNames.DFM_USERNAME_CLAIM_NAME);
- string dfmRolesClaimName = Environment.GetEnvironmentVariable(EnvVariableNames.DFM_ROLES_CLAIM_NAME);
-
- var allowedAppRoles = dfmAllowedAppRoles == null ? null : dfmAllowedAppRoles.Split(',');
- var allowedFullAccessAppRoles = dfmAllowedFullAccessAppRoles == null ? null : dfmAllowedFullAccessAppRoles.Split(',');
- var allowedReadOnlyAppRoles = dfmAllowedReadOnlyAppRoles == null ? null : dfmAllowedReadOnlyAppRoles.Split(',');
-
- // Validating that same app role does not appear in multiple settings
- if (AreAppRoleListsIntersecting(allowedAppRoles, allowedFullAccessAppRoles, allowedReadOnlyAppRoles))
- {
- throw new NotSupportedException($"{EnvVariableNames.DFM_ALLOWED_APP_ROLES}, {EnvVariableNames.DFM_ALLOWED_FULL_ACCESS_APP_ROLES} and {EnvVariableNames.DFM_ALLOWED_READ_ONLY_APP_ROLES} should not intersect");
- }
-
- _settings = new DfmSettings()
- {
- // Don't want to move the below initializatin to DfmSettings's ctor. The idea is: either _everything_ comes
- // from env variables or _everything_ is configured programmatically. To avoid unclarity we shouldn't mix these two approaches.
- DisableAuthentication = dfmNonce == Auth.ISureKnowWhatIAmDoingNonce,
- Mode = dfmMode == DfmMode.ReadOnly.ToString() ? DfmMode.ReadOnly : DfmMode.Normal,
- AllowedUserNames = dfmAllowedUserNames == null ? null : dfmAllowedUserNames.Split(','),
- AllowedAppRoles = allowedAppRoles,
- AllowedFullAccessAppRoles = allowedFullAccessAppRoles,
- AllowedReadOnlyAppRoles = allowedReadOnlyAppRoles,
- UserNameClaimName = string.IsNullOrEmpty(dfmUserNameClaimName) ? Auth.PreferredUserNameClaim : dfmUserNameClaimName,
- RolesClaimName = string.IsNullOrEmpty(dfmRolesClaimName) ? Auth.RolesClaim : dfmRolesClaimName
- };
- }
-
- if (extensionPoints != null)
- {
- _extensionPoints = extensionPoints;
- }
-
- // Also initializing CustomUserAgent value based on input parameters
- if (!string.IsNullOrEmpty(dfmNonce) && (dfmNonce != Auth.ISureKnowWhatIAmDoingNonce))
- {
- _customUserAgent = $"DurableFunctionsMonitor-VsCodeExt/{GetVersion()}";
- }
- else
- {
- _customUserAgent = $"DurableFunctionsMonitor-Injected/{GetVersion()}";
- }
-
- // Checking host.json for a custom dedicated Storage account
- string hostJsonFileName = Globals.GetHostJsonPath();
- if (File.Exists(hostJsonFileName))
- {
- dynamic hostJson = JObject.Parse(File.ReadAllText(hostJsonFileName));
-
- string connStringNameFromHostJson =
- hostJson?.extensions?.durableTask?.storageProvider?.azureStorageConnectionStringName ??
- hostJson?.extensions?.durableTask?.storageProvider?.connectionStringName ??
- hostJson?.extensions?.durableTask?.storageProvider?.connectionName;
-
- if (!string.IsNullOrEmpty(connStringNameFromHostJson))
- {
- _storageConnStringEnvVarName = connStringNameFromHostJson;
- }
- }
- }
-
- internal static DfmSettings Settings
- {
- get
- {
- if (_settings != null)
- {
- return _settings;
- }
-
- if (!AreWeInStandaloneMode())
- {
- throw new InvalidOperationException("Make sure you called DfmEndpoint.Setup() in your code");
- }
-
- DfmEndpoint.Setup();
-
- // Need to reinitialize CustomUserAgent
- _customUserAgent = $"DurableFunctionsMonitor-Standalone/{GetVersion()}";
-
- return _settings;
- }
- }
-
- internal static DfmExtensionPoints ExtensionPoints
- {
- get { return _extensionPoints; }
- }
-
- internal static string CustomUserAgent
- {
- get { return _customUserAgent; }
- }
-
- ///
- /// Provides support for dedicated Storage accounts (different from AzureWebJobsStorage)
- ///
- internal static string StorageConnStringEnvVarName
- {
- get { return _storageConnStringEnvVarName; }
- }
-
- private static DfmSettings _settings = null;
- private static DfmExtensionPoints _extensionPoints = new DfmExtensionPoints();
- private static string _customUserAgent;
- private static string _storageConnStringEnvVarName = EnvVariableNames.AzureWebJobsStorage;
-
- ///
- /// Checks whether we should do our internal initialization (Standalone mode)
- /// or throw an exception when not initialized (Injected mode)
- ///
- private static bool AreWeInStandaloneMode()
- {
- string assemblyLocation = Assembly.GetExecutingAssembly().Location;
- if (string.IsNullOrEmpty(assemblyLocation))
- {
- return true;
- }
-
- string currentFolder = Path.GetDirectoryName(assemblyLocation);
- string targetsFileName = "durablefunctionsmonitor.dotnetbackend.targets";
-
- // Using our .targets file as a marker. It should only appear in our own output folder
- return File.Exists(Path.Combine(currentFolder, targetsFileName)) ||
- File.Exists(Path.Combine(Path.GetDirectoryName(currentFolder), targetsFileName));
- }
-
- private static string GetVersion()
- {
- var version = typeof(DfmEndpoint).Assembly.GetName().Version;
- return $"{version.Major}.{version.Minor}.{version.Build}";
- }
-
- private static bool AreAppRoleListsIntersecting(params string[][] appRoleLists)
- {
- try
- {
- appRoleLists.Where(a => a != null).SelectMany(a => a).ToDictionary(a => a);
- return false;
- }
- catch (ArgumentException)
- {
- return true;
- }
- }
- }
-}
\ No newline at end of file
diff --git a/durablefunctionsmonitor.dotnetbackend/Common/TableClient.cs b/durablefunctionsmonitor.dotnetbackend/Common/TableClient.cs
deleted file mode 100644
index 9d2465b..0000000
--- a/durablefunctionsmonitor.dotnetbackend/Common/TableClient.cs
+++ /dev/null
@@ -1,171 +0,0 @@
-// Copyright (c) Microsoft Corporation.
-// Licensed under the MIT license.
-
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Threading.Tasks;
-using Microsoft.WindowsAzure.Storage.Table;
-using Microsoft.WindowsAzure.Storage;
-using Microsoft.WindowsAzure.Storage.Auth;
-using System.Threading;
-
-namespace DurableFunctionsMonitor.DotNetBackend
-{
- // CloudTableClient wrapper interface. Seems to be the only way to unit-test.
- public interface ITableClient
- {
- // Gets the list of table names
- Task> ListTableNamesAsync();
-
- // Synchronously retrieves all results from Azure Table
- IEnumerable GetAll(string tableName, TableQuery query) where TEntity : TableEntity, new();
-
- // Asynchronously retrieves all results from Azure Table
- Task> GetAllAsync(string tableName, TableQuery query) where TEntity : TableEntity, new();
-
- // Asynchronously retrieves all results from Azure Table
- Task> GetAllAsync(string tableName, TableQuery query, CancellationToken ct) where TEntity : TableEntity, new();
-
- // Executes a TableOperation
- Task ExecuteAsync(string tableName, TableOperation operation);
- }
-
- // CloudTableClient wrapper. Seems to be the only way to unit-test.
- class TableClient: ITableClient
- {
- // Cannot use DI functionality (our startup method will not be called when installed as a NuGet package),
- // so just leaving this as an internal static variable.
- internal static ITableClient MockedTableClient = null;
-
- public static async Task GetTableClient(string connStringName)
- {
- if (MockedTableClient != null)
- {
- return MockedTableClient;
- }
-
- string connectionString = Environment.GetEnvironmentVariable(connStringName);
- if (string.IsNullOrEmpty(connectionString))
- {
- // Trying with Managed Identity/local Azure login
-
- string tableServiceUri = Environment.GetEnvironmentVariable(connStringName + Globals.IdentityBasedConnectionSettingTableServiceUriSuffix);
- if (string.IsNullOrEmpty(tableServiceUri))
- {
- string accountName = Environment.GetEnvironmentVariable(connStringName + Globals.IdentityBasedConnectionSettingAccountNameSuffix);
- tableServiceUri = $"https://{accountName}.table.core.windows.net";
- }
-
- var identityBasedToken = await IdentityBasedTokenSource.GetTokenAsync();
- var credentials = new StorageCredentials(new TokenCredential(identityBasedToken));
-
- return new TableClient(new CloudTableClient(new Uri(tableServiceUri), credentials));
- }
- else
- {
- // Using classic connection string
- return new TableClient(CloudStorageAccount.Parse(connectionString).CreateCloudTableClient());
- }
- }
-
- private TableClient(CloudTableClient client)
- {
- this._client = client;
- }
-
- ///
- public async Task> ListTableNamesAsync()
- {
- // Overriding User-Agent header
- var operationContext = new OperationContext
- {
- CustomUserAgent = DfmEndpoint.CustomUserAgent
- };
-
- var result = new List();
- TableContinuationToken token = null;
- do
- {
- var nextBatch = await this._client.ListTablesSegmentedAsync(null, null, token, null, operationContext);
- result.AddRange(nextBatch.Results.Select(r => r.Name));
- token = nextBatch.ContinuationToken;
- }
- while (token != null);
- return result;
- }
-
- ///
- public IEnumerable GetAll(string tableName, TableQuery query)
- where TEntity : TableEntity, new()
- {
- var table = this._client.GetTableReference(tableName);
-
- // Overriding User-Agent header
- var operationContext = new OperationContext
- {
- CustomUserAgent = DfmEndpoint.CustomUserAgent
- };
-
- TableContinuationToken token = null;
- do
- {
- var nextBatch = table.ExecuteQuerySegmentedAsync(query, token, null, operationContext).Result;
-
- foreach (var evt in nextBatch.Results)
- {
- yield return evt;
- }
-
- token = nextBatch.ContinuationToken;
- }
- while (token != null);
- }
-
- ///
- public Task> GetAllAsync(string tableName, TableQuery query)
- where TEntity : TableEntity, new() => this.GetAllAsync(tableName, query, CancellationToken.None);
-
- ///
- public async Task> GetAllAsync(string tableName, TableQuery query, CancellationToken ct)
- where TEntity : TableEntity, new()
- {
- var table = this._client.GetTableReference(tableName);
-
- // Overriding User-Agent header
- var operationContext = new OperationContext
- {
- CustomUserAgent = DfmEndpoint.CustomUserAgent
- };
-
- var result = new List();
- TableContinuationToken token = null;
- do
- {
- ct.ThrowIfCancellationRequested();
-
- var nextBatch = await table.ExecuteQuerySegmentedAsync(query, token, null, operationContext, ct);
-
- result.AddRange(nextBatch.Results);
- token = nextBatch.ContinuationToken;
- }
- while (token != null);
-
- return result;
- }
-
- ///
- public Task ExecuteAsync(string tableName, TableOperation operation)
- {
- // Overriding User-Agent header
- var operationContext = new OperationContext
- {
- CustomUserAgent = DfmEndpoint.CustomUserAgent
- };
-
- return this._client.GetTableReference(tableName).ExecuteAsync(operation, null, operationContext);
- }
-
- private readonly CloudTableClient _client;
- }
-}
\ No newline at end of file
diff --git a/durablefunctionsmonitor.dotnetbackend/DfmStatics/favicon.png b/durablefunctionsmonitor.dotnetbackend/DfmStatics/favicon.png
deleted file mode 100644
index f8968fe..0000000
Binary files a/durablefunctionsmonitor.dotnetbackend/DfmStatics/favicon.png and /dev/null differ
diff --git a/durablefunctionsmonitor.dotnetbackend/DfmStatics/index.html b/durablefunctionsmonitor.dotnetbackend/DfmStatics/index.html
deleted file mode 100644
index a6376a5..0000000
--- a/durablefunctionsmonitor.dotnetbackend/DfmStatics/index.html
+++ /dev/null
@@ -1,77 +0,0 @@
-Durable Functions Monitor
\ No newline at end of file
diff --git a/durablefunctionsmonitor.dotnetbackend/DfmStatics/logo.svg b/durablefunctionsmonitor.dotnetbackend/DfmStatics/logo.svg
deleted file mode 100644
index 668b6df..0000000
--- a/durablefunctionsmonitor.dotnetbackend/DfmStatics/logo.svg
+++ /dev/null
@@ -1,58 +0,0 @@
-
-
-
-
-
-
-
- Page-1
-
- Sheet.1
-
- Sheet.2
-
- Sheet.3
-
-
-
- Sheet.4
-
-
-
- Sheet.5
-
-
-
- Sheet.6
-
-
-
-
-
- Sheet.20
-
-
-
-
diff --git a/durablefunctionsmonitor.dotnetbackend/DfmStatics/manifest.json b/durablefunctionsmonitor.dotnetbackend/DfmStatics/manifest.json
deleted file mode 100644
index f3813a8..0000000
--- a/durablefunctionsmonitor.dotnetbackend/DfmStatics/manifest.json
+++ /dev/null
@@ -1,15 +0,0 @@
-{
- "short_name": "Durable Functions Monitor",
- "name": "Durable Functions Monitor",
- "icons": [
- {
- "src": "favicon.png",
- "sizes": "64x64",
- "type": "image/png"
- }
- ],
- "start_url": "/",
- "display": "standalone",
- "theme_color": "#000000",
- "background_color": "#ffffff"
-}
\ No newline at end of file
diff --git a/durablefunctionsmonitor.dotnetbackend/DfmStatics/static/css/main.cb251aaa.css b/durablefunctionsmonitor.dotnetbackend/DfmStatics/static/css/main.cb251aaa.css
deleted file mode 100644
index 62cb418..0000000
--- a/durablefunctionsmonitor.dotnetbackend/DfmStatics/static/css/main.cb251aaa.css
+++ /dev/null
@@ -1,2 +0,0 @@
-html{overflow-y:scroll!important}body{display:table;font-family:sans-serif;margin:0;padding:0;width:100%}.top-appbar{box-shadow:none!important}.top-toolbar{max-width:100vw;min-width:900px;padding-bottom:18px;padding-top:5px}.toolbar-select{min-width:150px}.long-text-cell-input{font-size:x-small!important;line-height:normal;max-height:48px;overflow:auto;overflow-wrap:break-word;word-break:break-all}.long-text-cell-input:hover{cursor:pointer;opacity:.8;text-decoration:underline}.empty-table-placeholder{padding:30px;text-align:center}.name-cell{min-width:165px;word-break:break-all}.link-with-pointer-cursor{cursor:pointer}.time-zone-name-span{font-size:x-small;padding-left:2px}.react-vis-magic-css-import-rule{display:inherit}.rv-treemap{font-size:12px;position:relative}.rv-treemap__leaf{overflow:hidden;position:absolute}.rv-treemap__leaf--circle{align-items:center;border-radius:100%;display:flex;justify-content:center}.rv-treemap__leaf__content{overflow:hidden;padding:10px;text-overflow:ellipsis}.rv-xy-plot{color:#c3c3c3;position:relative}.rv-xy-plot canvas{pointer-events:none}.rv-xy-plot .rv-xy-canvas{pointer-events:none;position:absolute}.rv-xy-plot__inner{display:block}.rv-xy-plot__axis__line{fill:none;stroke-width:2px;stroke:#e6e6e9}.rv-xy-plot__axis__tick__line{stroke:#e6e6e9}.rv-xy-plot__axis__tick__text,.rv-xy-plot__axis__title text{fill:#6b6b76;font-size:11px}.rv-xy-plot__grid-lines__line{stroke:#e6e6e9}.rv-xy-plot__circular-grid-lines__line{fill-opacity:0;stroke:#e6e6e9}.rv-xy-plot__series,.rv-xy-plot__series path{pointer-events:all}.rv-xy-plot__series--line{fill:none;stroke:#000;stroke-width:2px}.rv-crosshair{font-size:11px;pointer-events:none;position:absolute}.rv-crosshair__line{background:#47d3d9;width:1px}.rv-crosshair__inner{position:absolute;text-align:left;top:0}.rv-crosshair__inner__content{background:#3a3a48;border-radius:4px;box-shadow:0 2px 4px #00000080;color:#fff;font-size:12px;padding:7px 10px}.rv-crosshair__inner--left{right:4px}.rv-crosshair__inner--right{left:4px}.rv-crosshair__title{font-weight:700;white-space:nowrap}.rv-crosshair__item{white-space:nowrap}.rv-hint{pointer-events:none;position:absolute}.rv-hint__content{background:#3a3a48;border-radius:4px;box-shadow:0 2px 4px #00000080;color:#fff;font-size:12px;padding:7px 10px;text-align:left;white-space:nowrap}.rv-discrete-color-legend{box-sizing:border-box;font-size:12px;overflow-y:auto}.rv-discrete-color-legend.horizontal{white-space:nowrap}.rv-discrete-color-legend-item{border-radius:1px;color:#3a3a48;padding:9px 10px}.rv-discrete-color-legend-item.horizontal{display:inline-block}.rv-discrete-color-legend-item.horizontal .rv-discrete-color-legend-item__title{display:block;margin-left:0}.rv-discrete-color-legend-item__color{display:inline-block;overflow:visible;vertical-align:middle}.rv-discrete-color-legend-item__color__path{stroke:#dcdcdc;stroke-width:2px}.rv-discrete-color-legend-item__title{margin-left:10px}.rv-discrete-color-legend-item.disabled{color:#b8b8b8}.rv-discrete-color-legend-item.clickable{cursor:pointer}.rv-discrete-color-legend-item.clickable:hover{background:#f9f9f9}.rv-search-wrapper{display:flex;flex-direction:column}.rv-search-wrapper__form{flex:0 1}.rv-search-wrapper__form__input{border:1px solid #e5e5e4;border-radius:2px;box-sizing:border-box;color:#a6a6a5;font-size:12px;margin:0 0 9px;outline:0;padding:7px 10px;width:100%}.rv-search-wrapper__contents{flex:1 1;overflow:auto}.rv-continuous-color-legend{font-size:12px}.rv-continuous-color-legend .rv-gradient{border-radius:2px;height:4px;margin-bottom:5px}.rv-continuous-size-legend{font-size:12px}.rv-continuous-size-legend .rv-bubbles{margin-bottom:5px;overflow:hidden;text-align:justify;width:100%}.rv-continuous-size-legend .rv-bubble{background:#d8d9dc;display:inline-block;vertical-align:bottom}.rv-continuous-size-legend .rv-spacer{display:inline-block;font-size:0;line-height:0;width:100%}.rv-legend-titles{height:16px;position:relative}.rv-legend-titles__center,.rv-legend-titles__left,.rv-legend-titles__right{overflow:hidden;position:absolute;white-space:nowrap}.rv-legend-titles__center{display:block;text-align:center;width:100%}.rv-legend-titles__right{right:0}.rv-radial-chart .rv-xy-plot__series--label{pointer-events:none}.title-typography{padding-bottom:3px;padding-right:10px}.app-bar{margin-bottom:10px}.instance-id-input{width:320px}.instance-id-valid .MuiOutlinedInput-root .MuiOutlinedInput-notchedOutline{border-color:green!important}.raw-html-div{padding:10px}.instance-management-button{white-space:nowrap}.login-progress{margin-bottom:20px;margin-top:20px;text-align:center}.task-hub-list{padding-bottom:25px!important}.show-time-as-typography{padding-left:16px;padding-right:10px;padding-top:10px}.datetime-cell{min-width:145px}.till-checkbox{padding:20px 14px 4px 4px!important}.till-label{padding-left:15px!important}.from-input{margin-left:10px!important;width:215px}.till-input{width:215px}.time-period-menu-drop-btn{margin-top:16px!important;min-width:32px!important;width:32px!important}.filter-value-input{flex:1 1;margin-left:20px!important}.filtered-column-input{width:180px}.items-count-label{height:20px;margin-top:12px!important;padding-left:15px}.instance-id-cell{max-width:270px;min-width:145px;word-break:break-all}.output-cell{max-width:140px;min-width:75px}.entity-type-radio{margin-bottom:0}.toolbar-grid1{width:260px!important}.toolbar-grid1-item2{min-height:68px!important;min-width:257px!important;padding-top:20px}.toolbar-grid2{margin-left:40px;margin-right:40px}.toolbar-grid2-item-1{display:flex}.toolbar-grid2-item1-select{margin-left:20px!important}.toolbar-grid2-item2{padding-top:19px}.toolbar-grid3{width:auto!important}.toolbar-grid3-item2{padding-top:26px}.toolbar-runtime-status-group{margin-left:30px;margin-right:30px}.toolbar-runtime-status-group-label{padding-left:10px!important}.form-control-float-right{float:right}.column-filter-input{margin-top:-3px!important;padding-left:5px!important;width:170px}.column-filter-input>div>input{padding-bottom:2px!important;padding-top:2px!important}.column-filter-button{float:right;margin-right:-8px!important;margin-top:4px!important;opacity:.6;padding:0!important;width:8px!important}.columnt-filter-button-img{height:22px!important;padding-top:2px}.column-hide-button{float:right;margin-right:-24px!important;opacity:.6;padding:0!important;width:6px!important}.instances-list-header-cell{padding-right:30px!important}.unhide-button{padding-bottom:2px!important}.histogram-legend{padding-left:70px;white-space:normal!important}.histogram-legend-dark-mode>div>span{color:#d3d3d3}.status-checkbox{padding-bottom:5px!important;padding-left:10px!important;padding-top:5px!important}.autorefresh-select{min-width:130px}.refresh-button{width:130px}.selected-statuses-box{display:flex;flex-wrap:wrap}.type-status-label{margin-bottom:-6px}.message-snackbar{top:80px!important}.error-icon{margin-bottom:-7px;margin-right:10px}.error-snackbar-content{background-color:red!important}.settings-group{padding-bottom:5px;padding-left:20px;padding-top:5px}.link-to-az-func-as-a-graph{padding-top:10px}.metrics-chip{font-size:xx-small!important;margin-right:3px}.metrics-span{position:absolute;visibility:hidden;white-space:nowrap}.total-metrics-span{display:inherit;padding-left:20px;padding-top:9px}.diagram-div{padding-bottom:30px;padding-top:30px}.diagram-div>svg{display:block;height:100%!important;margin:auto;width:100%!important}.link-to-az-func-as-a-graph{float:right;padding-right:10px}.details-top-toolbar{max-width:100vw;min-width:900px;padding-bottom:20px;padding-top:5px}.grid-container{padding-right:15px;padding-top:20px}.grid-item{padding-left:15px}.details-datetime-cell{min-width:250px}.history-events-count-label{padding-bottom:10px;padding-left:16px;padding-top:10px}.details-refresh-select{width:150px}.details-toolbar-select{min-width:150px!important}.details-refresh-button{width:90px}.functions-graph-tab-span{display:inline-flex;flex-direction:row}.functions-graph-link-icon{margin-top:-2px;padding-left:5px;width:15px!important}.history-filter-value-input{width:250px}.history-appbar{margin-bottom:15px;margin-top:15px;padding-bottom:5px;padding-top:5px}.history-toolbar{margin-left:-8px!important;padding-left:0!important;padding-top:17px!important}.history-from-input{width:210px}.history-from-checkbox{padding-top:18px!important}.history-from-label{margin-left:-30px}.long-text-cell{max-width:200px;min-width:160px}.parent-instance-id-input{padding:17px 12px 16px}.parent-instance-id-input>a{overflow:hidden;white-space:nowrap}.parent-instance-id-label{padding-left:7px!important;padding-right:7px!important}.purge-history-from-input,.purge-history-till-input{padding-bottom:20px!important}.purge-history-till-input{margin-left:20px!important}.purge-history-apply-to{padding-bottom:10px!important;padding-top:10px!important}.success-message{color:green!important}.dialog-text-field{padding-bottom:10px}.batch-operation-select{margin-bottom:15px!important;margin-left:15px!important;width:250px}.batch-operation-string-input{margin-left:30px!important;width:270px}.batch-operation-bool-input{margin-left:30px!important;margin-top:15px!important}.batch-operation-json-input{margin-bottom:5px!important}.batch-operation-instance-cell{width:270px;word-break:break-all}.batch-operation-status-cell-input{font-size:x-small!important;line-height:normal;max-height:48px;overflow:auto;overflow-wrap:break-word;word-break:break-all}
-/*# sourceMappingURL=main.cb251aaa.css.map*/
\ No newline at end of file
diff --git a/durablefunctionsmonitor.dotnetbackend/DfmStatics/static/css/main.cb251aaa.css.map b/durablefunctionsmonitor.dotnetbackend/DfmStatics/static/css/main.cb251aaa.css.map
deleted file mode 100644
index 178b80f..0000000
--- a/durablefunctionsmonitor.dotnetbackend/DfmStatics/static/css/main.cb251aaa.css.map
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"file":"static/css/main.cb251aaa.css","mappings":"AAKA,KACI,2BACJ,CAEA,KAII,aAAc,CADd,sBAAuB,CAFvB,QAAS,CACT,SAAU,CAGV,UACJ,CAEA,YACI,yBACJ,CAEA,aAGI,eAAgB,CAChB,eAAgB,CAFhB,mBAAoB,CADpB,eAIJ,CAEA,gBACI,eACJ,CAEA,sBACI,2BAA6B,CAI7B,kBAAmB,CAHnB,eAAgB,CAChB,aAAc,CACd,wBAAyB,CAEzB,oBACJ,CAEA,4BAEI,cAAe,CACf,UAAY,CAFZ,yBAGJ,CAEA,yBACI,YAAa,CACb,iBACJ,CAEA,WACI,eAAgB,CAChB,oBACJ,CAEA,0BACI,cACJ,CAEA,qBAEI,iBAAkB,CADlB,gBAEJ,CChEA,iCAAiC,eAAe,CAAC,YAAY,cAAc,CAAC,iBAAiB,CAAC,kBAAkB,eAAe,CAAC,iBAAiB,CAAC,0BAA0B,kBAAkB,CAAC,kBAAkB,CAAC,YAAY,CAAC,sBAAsB,CAAC,2BAA2B,eAAe,CAAC,YAAY,CAAC,sBAAsB,CAAC,YAAY,aAAa,CAAC,iBAAiB,CAAC,mBAAmB,mBAAmB,CAAC,0BAA0B,mBAAmB,CAAC,iBAAiB,CAAC,mBAAmB,aAAa,CAAC,wBAAwB,SAAS,CAAC,gBAAgB,CAAC,cAAc,CAAC,8BAA8B,cAAc,CAA2D,4DAA8B,YAAY,CAAC,cAAc,CAAC,8BAA8B,cAAc,CAAC,uCAAuC,cAAc,CAAC,cAAc,CAAC,6CAA6C,kBAAkB,CAAC,0BAA0B,SAAS,CAAC,WAAW,CAAC,gBAAgB,CAAC,cAAgC,cAAc,CAAC,mBAAkB,CAAnD,iBAAoD,CAAC,oBAAoB,kBAAkB,CAAC,SAAS,CAAC,qBAAqB,iBAAiB,CAAC,eAAe,CAAC,KAAK,CAAC,8BAAgD,kBAAkB,CAApC,iBAAiB,CAA+D,8BAAmC,CAA9E,UAAU,CAAC,cAAc,CAAC,gBAAqD,CAAC,2BAA2B,SAAS,CAAC,4BAA4B,QAAQ,CAAC,qBAAqB,eAAgB,CAAC,kBAAkB,CAAC,oBAAoB,kBAAkB,CAAC,SAA2B,mBAAkB,CAApC,iBAAqC,CAAC,kBAAoE,kBAAkB,CAApE,iBAAiB,CAAoD,8BAAoC,CAAC,UAAU,CAAjF,cAAc,CAA/B,gBAAgB,CAAmF,eAAe,CAAC,kBAAkB,CAAC,0BAA0B,qBAAqB,CAAiB,cAAa,CAA7B,eAA8B,CAAC,qCAAqC,kBAAkB,CAAC,+BAA6C,iBAAiB,CAA/B,aAAa,CAAmB,gBAAgB,CAAC,0CAA0C,oBAAoB,CAAC,gFAA8F,aAAY,CAA1B,aAA2B,CAAC,sCAAsC,oBAAoB,CAAuB,gBAAe,CAArC,qBAAsC,CAAC,4CAA4C,cAAc,CAAC,gBAAgB,CAAC,sCAAsC,gBAAgB,CAAC,wCAAwC,aAAa,CAAC,yCAAyC,cAAc,CAAC,+CAA+C,kBAAkB,CAAC,mBAAmB,YAAY,CAAC,qBAAqB,CAAC,yBAAyB,QAAM,CAAC,gCAAyD,wBAAwB,CAAuD,iBAAiB,CAAvC,qBAAqB,CAA5F,aAAa,CAA2C,cAAc,CAAyC,cAAc,CAAC,SAAQ,CAA/F,gBAAgB,CAAlE,UAAkJ,CAAC,6BAA6B,QAAM,CAAC,aAAa,CAAC,4BAA4B,cAAc,CAAC,yCAAoD,iBAAiB,CAA5B,UAAU,CAAmB,iBAAiB,CAAC,2BAA2B,cAAc,CAAC,uCAA0E,iBAAiB,CAAjC,eAAe,CAAlC,kBAAkB,CAAmC,UAAU,CAAC,sCAAsC,kBAAkB,CAAC,oBAAoB,CAAC,qBAAqB,CAAC,sCAAsC,oBAAoB,CAAC,WAAW,CAAC,aAAa,CAAC,UAAU,CAAC,kBAAkB,WAAW,CAAC,iBAAiB,CAAC,2EAAgH,eAAc,CAAnD,iBAAiB,CAAC,kBAAkC,CAAC,0BAA0B,aAAa,CAAC,iBAAiB,CAAC,UAAU,CAAC,yBAAyB,OAAO,CAAC,4CAA4C,mBAAmB,CCKrhH,kBAEI,kBAAmB,CADnB,kBAEJ,CAEA,SACI,kBACJ,CAEA,mBACI,WACJ,CAEA,2EACI,4BACJ,CAEA,cACI,YACJ,CAEA,4BACI,kBACJ,CCvBA,gBAGI,kBAAmB,CADnB,eAAgB,CADhB,iBAGJ,CAEA,eACI,6BACJ,CCRA,yBAEI,iBAAkB,CAClB,kBAAmB,CAFnB,gBAGJ,CCJA,eACI,eACJ,CAEA,eAII,mCACJ,CAEA,YACI,2BACJ,CAEA,YAEI,0BAA4B,CAD5B,WAEJ,CAEA,YACI,WACJ,CAEA,2BAGI,yBAA2B,CAD3B,wBAA0B,CAD1B,oBAGJ,CAEA,oBACI,QAAO,CACP,0BACJ,CAEA,uBACI,WACJ,CAEA,mBAGI,WAAY,CAFZ,yBAA2B,CAC3B,iBAEJ,CAEA,kBAEI,eAAgB,CADhB,eAAgB,CAEhB,oBACJ,CAEA,aAEI,eAAgB,CADhB,cAEJ,CAEA,mBACI,eACJ,CAEA,eACI,qBACJ,CAEA,qBAEI,yBAA2B,CAC3B,yBAA2B,CAF3B,gBAGJ,CAEA,eACI,gBAAiB,CACjB,iBACJ,CAEA,sBACI,YACJ,CAGA,4BACI,0BACJ,CAEA,qBACI,gBACJ,CAEA,eACI,oBACJ,CAEA,qBACI,gBACJ,CAEA,8BACI,gBAAiB,CACjB,iBACJ,CAEA,oCACI,2BACJ,CAEA,0BACI,WACJ,CAEA,qBAGI,yBAA2B,CAF3B,0BAA4B,CAC5B,WAEJ,CAEA,+BAEI,4BAA8B,CAD9B,yBAEJ,CAEA,sBAKI,WAAY,CADZ,2BAA6B,CAD7B,wBAA0B,CAG1B,UAAY,CAJZ,mBAAuB,CADvB,mBAMJ,CAEA,2BACI,qBAAuB,CACvB,eACJ,CAEA,oBAII,WAAY,CADZ,4BAA8B,CAE9B,UAAY,CAHZ,mBAAuB,CADvB,mBAKJ,CAEA,4BACI,4BACJ,CAEA,eACI,4BACJ,CAEA,kBACI,iBAAkB,CAClB,4BACJ,CAEA,qCACI,aACJ,CAEA,iBAGI,4BAA8B,CAF9B,2BAA6B,CAC7B,yBAEJ,CAEA,oBACI,eACJ,CAEA,gBACI,WACJ,CAEA,uBACI,YAAa,CACb,cACJ,CAEA,mBACI,kBACJ,CCpLA,kBACI,kBACJ,CAEA,YAEI,kBAAmB,CADnB,iBAEJ,CAEA,wBACI,8BACJ,CCXA,gBAGI,kBAAmB,CADnB,iBAAkB,CADlB,eAGJ,CAEA,4BAEI,gBAEJ,CAEA,cAEI,4BAA8B,CAD9B,gBAEJ,CAEA,cACI,iBAAkB,CAClB,iBAAkB,CAClB,kBACJ,CAEA,oBACI,eAAgB,CAEhB,iBAAkB,CADlB,eAEJ,CC3BA,aAEI,mBAAoB,CADpB,gBAEJ,CAEA,iBACI,aAAc,CAGd,qBAAuB,CAFvB,WAAY,CACZ,oBAEJ,CAEA,4BACI,WAAY,CACZ,kBACJ,CCfA,qBAGI,eAAgB,CAChB,eAAgB,CAFhB,mBAAoB,CADpB,eAIJ,CAEA,gBAEI,kBAAmB,CADnB,gBAEJ,CAEA,WACI,iBACJ,CAEA,uBACI,eACJ,CAEA,4BAGI,mBAAoB,CADpB,iBAAkB,CADlB,gBAGJ,CAEA,wBACI,WACJ,CAEA,wBACI,yBACJ,CAEA,wBACI,UACJ,CAEA,0BACI,mBAAoB,CACpB,kBACJ,CAEA,2BAEI,eAAgB,CAChB,gBAAiB,CAFjB,oBAGJ,CAEA,4BACI,WACJ,CAEA,gBAEI,kBAAmB,CADnB,eAAgB,CAGhB,kBAAmB,CADnB,eAEJ,CAEA,iBACI,0BAA4B,CAC5B,wBAA4B,CAC5B,0BACJ,CAEA,oBACI,WACJ,CAEA,uBACI,0BACJ,CAEA,oBACI,iBACJ,CAEA,gBAEI,eAAgB,CADhB,eAEJ,CAEA,0BAII,sBACJ,CAEA,4BACI,eAAgB,CAChB,kBACJ,CAEA,0BACI,0BAA4B,CAC5B,2BACJ,CC9FA,oDAHI,6BAMJ,CAHA,0BACI,0BAEJ,CAEA,wBAEI,6BAA+B,CAD/B,0BAEJ,CCZA,iBACI,qBACJ,CCFA,mBACI,mBACJ,CCFA,wBAGI,4BAA8B,CAD9B,0BAA4B,CAD5B,WAGJ,CAEA,8BAEI,0BAA4B,CAD5B,WAEJ,CAEA,4BACI,0BAA4B,CAC5B,yBACJ,CAEA,4BACI,2BACJ,CAEA,+BACI,WAAY,CACZ,oBACJ,CAEA,mCACI,2BAA6B,CAI7B,kBAAmB,CAHnB,eAAgB,CAChB,aAAc,CACd,wBAAyB,CAEzB,oBACJ","sources":["index.css","../node_modules/react-vis/dist/style.css","components/Main.css","components/LoginIcon.css","components/MainMenu.css","components/results-view/Orchestrations.css","components/ErrorMessage.css","components/results-view/OrchestrationsFunctionGraph.css","components/FunctionGraph.css","components/details-view/OrchestrationDetails.css","components/dialogs/PurgeHistoryDialog.css","components/dialogs/CleanEntityStorageDialog.css","components/dialogs/StartNewInstanceDialog.css","components/dialogs/BatchOpsDialog.css"],"sourcesContent":["/* \r\n Copyright (c) Microsoft Corporation.\r\n Licensed under the MIT license.\r\n*/\r\n\r\nhtml {\r\n overflow-y: scroll !important;\r\n}\r\n\r\nbody {\r\n margin: 0;\r\n padding: 0;\r\n font-family: sans-serif;\r\n display: table;\r\n width: 100%;\r\n}\r\n\r\n.top-appbar {\r\n box-shadow: none !important;\r\n}\r\n\r\n.top-toolbar {\r\n padding-top: 5px;\r\n padding-bottom: 18px;\r\n max-width: 100vw;\r\n min-width: 900px;\r\n}\r\n\r\n.toolbar-select {\r\n min-width: 150px;\r\n}\r\n\r\n.long-text-cell-input {\r\n font-size: x-small !important;\r\n max-height: 48px;\r\n overflow: auto;\r\n overflow-wrap: break-word;\r\n line-height: normal;\r\n word-break: break-all;\r\n}\r\n\r\n.long-text-cell-input:hover {\r\n text-decoration: underline;\r\n cursor: pointer;\r\n opacity: 0.8;\r\n}\r\n\r\n.empty-table-placeholder {\r\n padding: 30px;\r\n text-align: center;\r\n}\r\n\r\n.name-cell {\r\n min-width: 165px;\r\n word-break: break-all;\r\n}\r\n\r\n.link-with-pointer-cursor {\r\n cursor: pointer;\r\n}\r\n\r\n.time-zone-name-span {\r\n padding-left: 2px;\r\n font-size: x-small;\r\n}\r\n",".react-vis-magic-css-import-rule{display:inherit}.rv-treemap{font-size:12px;position:relative}.rv-treemap__leaf{overflow:hidden;position:absolute}.rv-treemap__leaf--circle{align-items:center;border-radius:100%;display:flex;justify-content:center}.rv-treemap__leaf__content{overflow:hidden;padding:10px;text-overflow:ellipsis}.rv-xy-plot{color:#c3c3c3;position:relative}.rv-xy-plot canvas{pointer-events:none}.rv-xy-plot .rv-xy-canvas{pointer-events:none;position:absolute}.rv-xy-plot__inner{display:block}.rv-xy-plot__axis__line{fill:none;stroke-width:2px;stroke:#e6e6e9}.rv-xy-plot__axis__tick__line{stroke:#e6e6e9}.rv-xy-plot__axis__tick__text{fill:#6b6b76;font-size:11px}.rv-xy-plot__axis__title text{fill:#6b6b76;font-size:11px}.rv-xy-plot__grid-lines__line{stroke:#e6e6e9}.rv-xy-plot__circular-grid-lines__line{fill-opacity:0;stroke:#e6e6e9}.rv-xy-plot__series,.rv-xy-plot__series path{pointer-events:all}.rv-xy-plot__series--line{fill:none;stroke:#000;stroke-width:2px}.rv-crosshair{position:absolute;font-size:11px;pointer-events:none}.rv-crosshair__line{background:#47d3d9;width:1px}.rv-crosshair__inner{position:absolute;text-align:left;top:0}.rv-crosshair__inner__content{border-radius:4px;background:#3a3a48;color:#fff;font-size:12px;padding:7px 10px;box-shadow:0 2px 4px rgba(0,0,0,0.5)}.rv-crosshair__inner--left{right:4px}.rv-crosshair__inner--right{left:4px}.rv-crosshair__title{font-weight:bold;white-space:nowrap}.rv-crosshair__item{white-space:nowrap}.rv-hint{position:absolute;pointer-events:none}.rv-hint__content{border-radius:4px;padding:7px 10px;font-size:12px;background:#3a3a48;box-shadow:0 2px 4px rgba(0,0,0,0.5);color:#fff;text-align:left;white-space:nowrap}.rv-discrete-color-legend{box-sizing:border-box;overflow-y:auto;font-size:12px}.rv-discrete-color-legend.horizontal{white-space:nowrap}.rv-discrete-color-legend-item{color:#3a3a48;border-radius:1px;padding:9px 10px}.rv-discrete-color-legend-item.horizontal{display:inline-block}.rv-discrete-color-legend-item.horizontal .rv-discrete-color-legend-item__title{margin-left:0;display:block}.rv-discrete-color-legend-item__color{display:inline-block;vertical-align:middle;overflow:visible}.rv-discrete-color-legend-item__color__path{stroke:#dcdcdc;stroke-width:2px}.rv-discrete-color-legend-item__title{margin-left:10px}.rv-discrete-color-legend-item.disabled{color:#b8b8b8}.rv-discrete-color-legend-item.clickable{cursor:pointer}.rv-discrete-color-legend-item.clickable:hover{background:#f9f9f9}.rv-search-wrapper{display:flex;flex-direction:column}.rv-search-wrapper__form{flex:0}.rv-search-wrapper__form__input{width:100%;color:#a6a6a5;border:1px solid #e5e5e4;padding:7px 10px;font-size:12px;box-sizing:border-box;border-radius:2px;margin:0 0 9px;outline:0}.rv-search-wrapper__contents{flex:1;overflow:auto}.rv-continuous-color-legend{font-size:12px}.rv-continuous-color-legend .rv-gradient{height:4px;border-radius:2px;margin-bottom:5px}.rv-continuous-size-legend{font-size:12px}.rv-continuous-size-legend .rv-bubbles{text-align:justify;overflow:hidden;margin-bottom:5px;width:100%}.rv-continuous-size-legend .rv-bubble{background:#d8d9dc;display:inline-block;vertical-align:bottom}.rv-continuous-size-legend .rv-spacer{display:inline-block;font-size:0;line-height:0;width:100%}.rv-legend-titles{height:16px;position:relative}.rv-legend-titles__left,.rv-legend-titles__right,.rv-legend-titles__center{position:absolute;white-space:nowrap;overflow:hidden}.rv-legend-titles__center{display:block;text-align:center;width:100%}.rv-legend-titles__right{right:0}.rv-radial-chart .rv-xy-plot__series--label{pointer-events:none}\n","/* \r\n Copyright (c) Microsoft Corporation.\r\n Licensed under the MIT license.\r\n*/\r\n\r\n.title-typography {\r\n padding-right: 10px;\r\n padding-bottom: 3px;\r\n}\r\n\r\n.app-bar {\r\n margin-bottom: 10px;\r\n}\r\n\r\n.instance-id-input {\r\n width: 320px;\r\n}\r\n\r\n.instance-id-valid .MuiOutlinedInput-root .MuiOutlinedInput-notchedOutline {\r\n border-color: green !important;\r\n}\r\n\r\n.raw-html-div {\r\n padding: 10px;\r\n}\r\n\r\n.instance-management-button {\r\n white-space: nowrap;\r\n}","/* \r\n Copyright (c) Microsoft Corporation.\r\n Licensed under the MIT license.\r\n*/\r\n\r\n.login-progress {\r\n text-align: center;\r\n margin-top: 20px;\r\n margin-bottom: 20px;\r\n}\r\n\r\n.task-hub-list {\r\n padding-bottom: 25px !important;\r\n}","/* \r\n Copyright (c) Microsoft Corporation.\r\n Licensed under the MIT license.\r\n*/\r\n\r\n.show-time-as-typography {\r\n padding-top: 10px;\r\n padding-left: 16px;\r\n padding-right: 10px;\r\n}","/* \r\n Copyright (c) Microsoft Corporation.\r\n Licensed under the MIT license.\r\n*/\r\n\r\n.datetime-cell {\r\n min-width: 145px;\r\n}\r\n\r\n.till-checkbox {\r\n padding-top: 20px !important;\r\n padding-bottom: 4px !important;\r\n padding-left: 4px !important;\r\n padding-right: 14px !important;\r\n}\r\n\r\n.till-label {\r\n padding-left: 15px !important;\r\n}\r\n\r\n.from-input {\r\n width: 215px;\r\n margin-left: 10px !important;\r\n}\r\n\r\n.till-input {\r\n width: 215px;\r\n}\r\n\r\n.time-period-menu-drop-btn {\r\n width: 32px !important;\r\n min-width: 32px !important;\r\n margin-top: 16px !important;\r\n}\r\n\r\n.filter-value-input {\r\n flex: 1;\r\n margin-left: 20px !important;\r\n}\r\n\r\n.filtered-column-input {\r\n width: 180px;\r\n}\r\n\r\n.items-count-label {\r\n margin-top: 12px !important;\r\n padding-left: 15px;\r\n height: 20px;\r\n}\r\n\r\n.instance-id-cell {\r\n min-width: 145px;\r\n max-width: 270px;\r\n word-break: break-all;\r\n}\r\n\r\n.output-cell {\r\n min-width: 75px;\r\n max-width: 140px;\r\n}\r\n\r\n.entity-type-radio {\r\n margin-bottom: 0px;\r\n}\r\n\r\n.toolbar-grid1 {\r\n width: 260px !important;\r\n}\r\n\r\n.toolbar-grid1-item2 {\r\n padding-top: 20px;\r\n min-height: 68px !important;\r\n min-width: 257px !important;\r\n}\r\n\r\n.toolbar-grid2 {\r\n margin-left: 40px;\r\n margin-right: 40px;\r\n}\r\n\r\n.toolbar-grid2-item-1 {\r\n display: flex;\r\n}\r\n\r\n\r\n.toolbar-grid2-item1-select {\r\n margin-left: 20px !important;\r\n}\r\n\r\n.toolbar-grid2-item2 {\r\n padding-top: 19px;\r\n}\r\n\r\n.toolbar-grid3 {\r\n width: auto !important;\r\n}\r\n\r\n.toolbar-grid3-item2 {\r\n padding-top: 26px;\r\n}\r\n\r\n.toolbar-runtime-status-group {\r\n margin-left: 30px;\r\n margin-right: 30px;\r\n}\r\n\r\n.toolbar-runtime-status-group-label {\r\n padding-left: 10px !important;\r\n}\r\n\r\n.form-control-float-right {\r\n float: right;\r\n}\r\n\r\n.column-filter-input {\r\n padding-left: 5px !important;\r\n width: 170px;\r\n margin-top: -3px !important; \r\n}\r\n\r\n.column-filter-input > div > input {\r\n padding-top: 2px !important;\r\n padding-bottom: 2px !important;\r\n}\r\n\r\n.column-filter-button {\r\n width: 8px !important;\r\n padding: 0px !important;\r\n margin-top: 4px !important;\r\n margin-right: -8px !important;\r\n float: right;\r\n opacity: 0.6;\r\n}\r\n\r\n.columnt-filter-button-img {\r\n height: 22px !important;\r\n padding-top: 2px;\r\n}\r\n\r\n.column-hide-button {\r\n width: 6px !important;\r\n padding: 0px !important;\r\n margin-right: -24px !important;\r\n float: right;\r\n opacity: 0.6;\r\n}\r\n\r\n.instances-list-header-cell {\r\n padding-right: 30px !important;\r\n}\r\n\r\n.unhide-button {\r\n padding-bottom: 2px !important;\r\n}\r\n\r\n.histogram-legend {\r\n padding-left: 70px;\r\n white-space: normal !important;\r\n}\r\n\r\n.histogram-legend-dark-mode > div > span {\r\n color:lightgrey;\r\n}\r\n\r\n.status-checkbox {\r\n padding-left: 10px !important;\r\n padding-top: 5px !important;\r\n padding-bottom: 5px !important;\r\n}\r\n\r\n.autorefresh-select {\r\n min-width: 130px\r\n}\r\n\r\n.refresh-button {\r\n width: 130px;\r\n}\r\n\r\n.selected-statuses-box {\r\n display: flex;\r\n flex-wrap: wrap;\r\n}\r\n\r\n.type-status-label{\r\n margin-bottom: -6px;\r\n}","/* \r\n Copyright (c) Microsoft Corporation.\r\n Licensed under the MIT license.\r\n*/\r\n\r\n.message-snackbar {\r\n top: 80px !important;\r\n}\r\n\r\n.error-icon {\r\n margin-right: 10px;\r\n margin-bottom: -7px;\r\n}\r\n\r\n.error-snackbar-content {\r\n background-color: red !important;\r\n}\r\n","/* \r\n Copyright (c) Microsoft Corporation.\r\n Licensed under the MIT license.\r\n*/\r\n\r\n.settings-group {\r\n padding-top: 5px;\r\n padding-left: 20px;\r\n padding-bottom: 5px;\r\n}\r\n\r\n.link-to-az-func-as-a-graph {\r\n float: right;\r\n padding-top: 10px;\r\n padding-right: 10px;\r\n}\r\n\r\n.metrics-chip {\r\n margin-right: 3px;\r\n font-size: xx-small !important;\r\n}\r\n\r\n.metrics-span {\r\n position: absolute;\r\n visibility: hidden;\r\n white-space: nowrap;\r\n}\r\n\r\n.total-metrics-span {\r\n display: inherit;\r\n padding-top: 9px;\r\n padding-left: 20px;\r\n}","/* \r\n Copyright (c) Microsoft Corporation.\r\n Licensed under the MIT license.\r\n*/\r\n\r\n.diagram-div {\r\n padding-top: 30px;\r\n padding-bottom: 30px;\r\n}\r\n\r\n.diagram-div > svg {\r\n display: block;\r\n margin: auto;\r\n width: 100% !important;\r\n height: 100% !important;\r\n}\r\n\r\n.link-to-az-func-as-a-graph {\r\n float: right;\r\n padding-right: 10px;\r\n}\r\n","/* \r\n Copyright (c) Microsoft Corporation.\r\n Licensed under the MIT license.\r\n*/\r\n\r\n.details-top-toolbar {\r\n padding-top: 5px;\r\n padding-bottom: 20px;\r\n max-width: 100vw;\r\n min-width: 900px;\r\n}\r\n\r\n.grid-container {\r\n padding-top: 20px;\r\n padding-right: 15px;\r\n}\r\n\r\n.grid-item {\r\n padding-left: 15px;\r\n}\r\n\r\n.details-datetime-cell {\r\n min-width: 250px;\r\n}\r\n\r\n.history-events-count-label {\r\n padding-top: 10px;\r\n padding-left: 16px;\r\n padding-bottom: 10px;\r\n}\r\n\r\n.details-refresh-select {\r\n width: 150px;\r\n}\r\n\r\n.details-toolbar-select {\r\n min-width: 150px !important;\r\n}\r\n\r\n.details-refresh-button {\r\n width: 90px;\r\n}\r\n\r\n.functions-graph-tab-span {\r\n display: inline-flex;\r\n flex-direction: row;\r\n}\r\n\r\n.functions-graph-link-icon {\r\n width: 15px !important;\r\n margin-top: -2px;\r\n padding-left: 5px;\r\n}\r\n\r\n.history-filter-value-input {\r\n width: 250px;\r\n}\r\n\r\n.history-appbar {\r\n margin-top: 15px;\r\n margin-bottom: 15px;\r\n padding-top: 5px;\r\n padding-bottom: 5px;\r\n}\r\n\r\n.history-toolbar {\r\n margin-left: -8px !important;\r\n padding-left: 0px !important;\r\n padding-top: 17px !important;\r\n}\r\n\r\n.history-from-input {\r\n width: 210px;\r\n}\r\n\r\n.history-from-checkbox {\r\n padding-top: 18px !important;\r\n}\r\n\r\n.history-from-label {\r\n margin-left: -30px;\r\n}\r\n\r\n.long-text-cell {\r\n min-width: 160px;\r\n max-width: 200px;\r\n}\r\n\r\n.parent-instance-id-input {\r\n padding-top: 17px;\r\n padding-bottom: 16px;\r\n padding-left: 12px;\r\n padding-right: 12px;\r\n}\r\n\r\n.parent-instance-id-input > a {\r\n overflow: hidden;\r\n white-space: nowrap;\r\n}\r\n\r\n.parent-instance-id-label {\r\n padding-left: 7px !important;\r\n padding-right: 7px !important;\r\n}","/* \r\n Copyright (c) Microsoft Corporation.\r\n Licensed under the MIT license.\r\n*/\r\n\r\n.purge-history-from-input {\r\n padding-bottom: 20px !important;\r\n}\r\n\r\n.purge-history-till-input {\r\n margin-left: 20px !important;\r\n padding-bottom: 20px !important;\r\n}\r\n\r\n.purge-history-apply-to {\r\n padding-top: 10px !important;\r\n padding-bottom: 10px !important;\r\n}\r\n\r\n.success-message {\r\n color: green !important;\r\n}","/* \r\n Copyright (c) Microsoft Corporation.\r\n Licensed under the MIT license.\r\n*/\r\n\r\n.success-message {\r\n color: green !important;\r\n}","/* \r\n Copyright (c) Microsoft Corporation.\r\n Licensed under the MIT license.\r\n*/\r\n\r\n.dialog-text-field {\r\n padding-bottom: 10px;\r\n}","/* \r\n Copyright (c) Microsoft Corporation.\r\n Licensed under the MIT license.\r\n*/\r\n\r\n.batch-operation-select {\r\n width: 250px;\r\n margin-left: 15px !important;\r\n margin-bottom: 15px !important;\r\n}\r\n\r\n.batch-operation-string-input {\r\n width: 270px;\r\n margin-left: 30px !important;\r\n}\r\n\r\n.batch-operation-bool-input {\r\n margin-left: 30px !important;\r\n margin-top: 15px !important;\r\n}\r\n\r\n.batch-operation-json-input {\r\n margin-bottom: 5px !important;\r\n}\r\n\r\n.batch-operation-instance-cell {\r\n width: 270px;\r\n word-break: break-all;\r\n}\r\n\r\n.batch-operation-status-cell-input {\r\n font-size: x-small !important;\r\n max-height: 48px;\r\n overflow: auto;\r\n overflow-wrap: break-word;\r\n line-height: normal;\r\n word-break: break-all;\r\n}\r\n"],"names":[],"sourceRoot":""}
\ No newline at end of file
diff --git a/durablefunctionsmonitor.dotnetbackend/DfmStatics/static/icons/all-azure-icons.svg b/durablefunctionsmonitor.dotnetbackend/DfmStatics/static/icons/all-azure-icons.svg
deleted file mode 100644
index 9150192..0000000
--- a/durablefunctionsmonitor.dotnetbackend/DfmStatics/static/icons/all-azure-icons.svg
+++ /dev/null
@@ -1,1250 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-image/svg+xml
-
-
-
-
-image/svg+xml
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-image/svg+xml
-
-
-
-
-
-
-
-
-
-
-
-image/svg+xml
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-image/svg+xml
-
-
-
-
-image/svg+xml
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-image/svg+xml
-
-
-
-
-
-
-
-
-
-
-
-image/svg+xml
-
-
-
-
-
-
-
-
-
-
-
-image/svg+xml
-
-
-
-
-
-
-
-
-
-
-
-image/svg+xml
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/durablefunctionsmonitor.dotnetbackend/DfmStatics/static/js/main.4f23d15e.js b/durablefunctionsmonitor.dotnetbackend/DfmStatics/static/js/main.4f23d15e.js
deleted file mode 100644
index 82e30c4..0000000
--- a/durablefunctionsmonitor.dotnetbackend/DfmStatics/static/js/main.4f23d15e.js
+++ /dev/null
@@ -1,156 +0,0 @@
-/*! For license information please see main.4f23d15e.js.LICENSE.txt */
-(()=>{var e={3755(e,t){"use strict";t.J=void 0;var n=/^([^\w]*)(javascript|data|vbscript)/im,r=/(\w+)(^\w|;)?/g,i=/&(newline|tab);/gi,o=/[\u0000-\u001F\u007F-\u009F\u2000-\u200D\uFEFF]/gim,a=/^.+(:|:)/gim,s=[".","/"];t.J=function(e){var t,c=(t=e||"",t.replace(r,(function(e,t){return String.fromCharCode(t)}))).replace(i,"").replace(o,"").trim();if(!c)return"about:blank";if(function(e){return s.indexOf(e[0])>-1}(c))return c;var l=c.match(a);if(!l)return c;var u=l[0];return n.test(u)?"about:blank":c}},6339(e,t,n){"use strict";n.d(t,{A:()=>ie});var r=function(){function e(e){var t=this;this._insertTag=function(e){var n;n=0===t.tags.length?t.insertionPoint?t.insertionPoint.nextSibling:t.prepend?t.container.firstChild:t.before:t.tags[t.tags.length-1].nextSibling,t.container.insertBefore(e,n),t.tags.push(e)},this.isSpeedy=void 0===e.speedy||e.speedy,this.tags=[],this.ctr=0,this.nonce=e.nonce,this.key=e.key,this.container=e.container,this.prepend=e.prepend,this.insertionPoint=e.insertionPoint,this.before=null}var t=e.prototype;return t.hydrate=function(e){e.forEach(this._insertTag)},t.insert=function(e){this.ctr%(this.isSpeedy?65e3:1)===0&&this._insertTag(function(e){var t=document.createElement("style");return t.setAttribute("data-emotion",e.key),void 0!==e.nonce&&t.setAttribute("nonce",e.nonce),t.appendChild(document.createTextNode("")),t.setAttribute("data-s",""),t}(this));var t=this.tags[this.tags.length-1];if(this.isSpeedy){var n=function(e){if(e.sheet)return e.sheet;for(var t=0;t0?u(w,--y):0,m--,10===v&&(m=1,g--),v}function A(){return v=y2||E(v)>3?"":" "}function D(e,t){for(;--t&&A()&&!(v<48||v>102||v>57&&v<65||v>70&&v<97););return C(e,T()+(t<6&&32==_()&&32==A()))}function N(e){for(;A();)switch(v){case e:return y;case 34:case 39:34!==e&&39!==e&&N(v);break;case 40:41===e&&N(e);break;case 92:A()}return y}function L(e,t){for(;A()&&e+v!==57&&(e+v!==84||47!==_()););return"/*"+C(t,y-1)+"*"+o(47===e?e:A())}function R(e){for(;!E(_());)A();return C(e,y)}var j="-ms-",F="-moz-",B="-webkit-",$="comm",z="rule",H="decl",q="@keyframes";function V(e,t){for(var n="",r=d(e),i=0;i0&&f(F)-b&&p(v>32?X(F+";",r,n,b-1):X(c(F," ","")+";",r,n,b-2),d);break;case 59:F+=";";default:if(p(j=Y(F,t,n,g,m,i,h,O,P=[],N=[],b),a),123===E)if(0===m)G(F,t,j,j,P,a,b,h,N);else switch(99===y&&110===u(F,3)?100:y){case 100:case 108:case 109:case 115:G(e,j,j,r&&p(Y(e,j,j,0,0,i,h,O,i,P=[],b),N),i,N,b,h,r?P:N);break;default:G(F,j,j,j,[""],N,0,h,N)}}g=m=v=0,x=C=1,O=F="",b=s;break;case 58:b=1+f(F),v=w;default:if(x<1)if(123==E)--x;else if(125==E&&0==x++&&125==S())continue;switch(F+=o(E),E*x){case 38:C=m>0?1:(F+="\f",-1);break;case 44:h[g++]=(f(F)-1)*C,C=1;break;case 64:45===_()&&(F+=M(A())),y=_(),m=b=f(O=F+=R(T())),E++;break;case 45:45===w&&2==f(F)&&(x=0)}}return a}function Y(e,t,n,r,o,a,l,u,f,p,g){for(var m=o-1,b=0===o?a:[""],y=d(b),v=0,w=0,k=0;v0?b[S]+" "+A:c(A,/&\f/g,b[S])))&&(f[k++]=_);return x(e,t,n,0===o?z:u,f,p,g)}function K(e,t,n){return x(e,t,n,$,o(v),h(e,2,-2),0)}function X(e,t,n,r){return x(e,t,n,H,h(e,0,r),h(e,r+1,-1),r)}var Q=function(e,t,n){for(var r=0,i=0;r=i,i=_(),38===r&&12===i&&(t[n]=1),!E(i);)A();return C(e,y)},J=function(e,t){return P(function(e,t){var n=-1,r=44;do{switch(E(r)){case 0:38===r&&12===_()&&(t[n]=1),e[n]+=Q(y-1,t,n);break;case 2:e[n]+=M(r);break;case 4:if(44===r){e[++n]=58===_()?"&\f":"",t[n]=e[n].length;break}default:e[n]+=o(r)}}while(r=A());return e}(O(e),t))},Z=new WeakMap,ee=function(e){if("rule"===e.type&&e.parent&&!(e.length<1)){for(var t=e.value,n=e.parent,r=e.column===n.column&&e.line===n.line;"rule"!==n.type;)if(!(n=n.parent))return;if((1!==e.props.length||58===t.charCodeAt(0)||Z.get(n))&&!r){Z.set(e,!0);for(var i=[],o=J(t,i),a=n.props,s=0,c=0;s6)switch(u(e,t+1)){case 109:if(45!==u(e,t+4))break;case 102:return c(e,/(.+:)(.+)-([^]+)/,"$1"+B+"$2-$3$1"+F+(108==u(e,t+3)?"$3":"$2-$3"))+e;case 115:return~l(e,"stretch")?ne(c(e,"stretch","fill-available"),t)+e:e}break;case 4949:if(115!==u(e,t+1))break;case 6444:switch(u(e,f(e)-3-(~l(e,"!important")&&10))){case 107:return c(e,":",":"+B)+e;case 101:return c(e,/(.+:)([^;!]+)(;|!.+)?/,"$1"+B+(45===u(e,14)?"inline-":"")+"box$3$1"+B+"$2$3$1"+j+"$2box$3")+e}break;case 5936:switch(u(e,t+11)){case 114:return B+e+j+c(e,/[svh]\w+-[tblr]{2}/,"tb")+e;case 108:return B+e+j+c(e,/[svh]\w+-[tblr]{2}/,"tb-rl")+e;case 45:return B+e+j+c(e,/[svh]\w+-[tblr]{2}/,"lr")+e}return B+e+j+e+e}return e}var re=[function(e,t,n,r){if(e.length>-1&&!e.return)switch(e.type){case H:e.return=ne(e.value,e.length);break;case q:return V([k(e,{value:c(e.value,"@","@"+B)})],r);case z:if(e.length)return function(e,t){return e.map(t).join("")}(e.props,(function(t){switch(function(e,t){return(e=t.exec(e))?e[0]:e}(t,/(::plac\w+|:read-\w+)/)){case":read-only":case":read-write":return V([k(e,{props:[c(t,/:(read-\w+)/,":-moz-$1")]})],r);case"::placeholder":return V([k(e,{props:[c(t,/:(plac\w+)/,":"+B+"input-$1")]}),k(e,{props:[c(t,/:(plac\w+)/,":-moz-$1")]}),k(e,{props:[c(t,/:(plac\w+)/,j+"input-$1")]})],r)}return""}))}}],ie=function(e){var t=e.key;if("css"===t){var n=document.querySelectorAll("style[data-emotion]:not([data-s])");Array.prototype.forEach.call(n,(function(e){-1!==e.getAttribute("data-emotion").indexOf(" ")&&(document.head.appendChild(e),e.setAttribute("data-s",""))}))}var i,o,a=e.stylisPlugins||re,s={},c=[];i=e.container||document.head,Array.prototype.forEach.call(document.querySelectorAll('style[data-emotion^="'+t+' "]'),(function(e){for(var t=e.getAttribute("data-emotion").split(" "),n=1;nc,i:()=>o,w:()=>s});var r=n(5043),i=n(6339),o=(n(6679),n(9436),!0),a=r.createContext("undefined"!==typeof HTMLElement?(0,i.A)({key:"css"}):null);a.Provider;var s=function(e){return(0,r.forwardRef)((function(t,n){var i=(0,r.useContext)(a);return e(t,i,n)}))};o||(s=function(e){return function(t){var n=(0,r.useContext)(a);return null===n?(n=(0,i.A)({key:"css"}),r.createElement(a.Provider,{value:n},e(t,n))):e(t,n)}});var c=r.createContext({})},6679(e,t,n){"use strict";n.d(t,{J:()=>p});var r={animationIterationCount:1,aspectRatio:1,borderImageOutset:1,borderImageSlice:1,borderImageWidth:1,boxFlex:1,boxFlexGroup:1,boxOrdinalGroup:1,columnCount:1,columns:1,flex:1,flexGrow:1,flexPositive:1,flexShrink:1,flexNegative:1,flexOrder:1,gridRow:1,gridRowEnd:1,gridRowSpan:1,gridRowStart:1,gridColumn:1,gridColumnEnd:1,gridColumnSpan:1,gridColumnStart:1,msGridRow:1,msGridRowSpan:1,msGridColumn:1,msGridColumnSpan:1,fontWeight:1,lineHeight:1,opacity:1,order:1,orphans:1,scale:1,tabSize:1,widows:1,zIndex:1,zoom:1,WebkitLineClamp:1,fillOpacity:1,floodOpacity:1,stopOpacity:1,strokeDasharray:1,strokeDashoffset:1,strokeMiterlimit:1,strokeOpacity:1,strokeWidth:1};function i(e){var t=Object.create(null);return function(n){return void 0===t[n]&&(t[n]=e(n)),t[n]}}var o=/[A-Z]|^ms/g,a=/_EMO_([^_]+?)_([^]*?)_EMO_/g,s=function(e){return 45===e.charCodeAt(1)},c=function(e){return null!=e&&"boolean"!==typeof e},l=i((function(e){return s(e)?e:e.replace(o,"-$&").toLowerCase()})),u=function(e,t){switch(e){case"animation":case"animationName":if("string"===typeof t)return t.replace(a,(function(e,t,n){return f={name:t,styles:n,next:f},t}))}return 1===r[e]||s(e)||"number"!==typeof t||0===t?t:t+"px"};function h(e,t,n){if(null==n)return"";var r=n;if(void 0!==r.__emotion_styles)return r;switch(typeof n){case"boolean":return"";case"object":var i=n;if(1===i.anim)return f={name:i.name,styles:i.styles,next:f},i.name;var o=n;if(void 0!==o.styles){var a=o.next;if(void 0!==a)for(;void 0!==a;)f={name:a.name,styles:a.styles,next:f},a=a.next;return o.styles+";"}return function(e,t,n){var r="";if(Array.isArray(n))for(var i=0;i=4;++r,i-=4)t=1540483477*(65535&(t=255&e.charCodeAt(r)|(255&e.charCodeAt(++r))<<8|(255&e.charCodeAt(++r))<<16|(255&e.charCodeAt(++r))<<24))+(59797*(t>>>16)<<16),n=1540483477*(65535&(t^=t>>>24))+(59797*(t>>>16)<<16)^1540483477*(65535&n)+(59797*(n>>>16)<<16);switch(i){case 3:n^=(255&e.charCodeAt(r+2))<<16;case 2:n^=(255&e.charCodeAt(r+1))<<8;case 1:n=1540483477*(65535&(n^=255&e.charCodeAt(r)))+(59797*(n>>>16)<<16)}return(((n=1540483477*(65535&(n^=n>>>13))+(59797*(n>>>16)<<16))^n>>>15)>>>0).toString(36)}(i)+c;return{name:l,styles:i,next:f}}},9436(e,t,n){"use strict";var r;n.d(t,{i:()=>s,s:()=>a});var i=n(5043),o=!!(r||(r=n.t(i,2))).useInsertionEffect&&(r||(r=n.t(i,2))).useInsertionEffect,a=o||function(e){return e()},s=o||i.useLayoutEffect},1722(e,t,n){"use strict";n.d(t,{Rk:()=>r,SF:()=>i,sk:()=>o});function r(e,t,n){var r="";return n.split(" ").forEach((function(n){void 0!==e[n]?t.push(e[n]+";"):n&&(r+=n+" ")})),r}var i=function(e,t,n){var r=e.key+"-"+t.name;!1===n&&void 0===e.registered[r]&&(e.registered[r]=t.styles)},o=function(e,t,n){i(e,t,n);var r=e.key+"-"+t.name;if(void 0===e.inserted[t.name]){var o=t;do{e.insert(t===o?"."+r:"",o,e.sheet,!0),o=o.next}while(void 0!==o)}}},430(e,t,n){"use strict";var r=n(4994);t.A=void 0;var i=r(n(39)),o=n(579),a=(0,i.default)((0,o.jsx)("path",{d:"m7 10 5 5 5-5z"}),"ArrowDropDown");t.A=a},8256(e,t,n){"use strict";var r=n(4994);t.A=void 0;var i=r(n(39)),o=n(579),a=(0,i.default)((0,o.jsx)("path",{d:"M12 2C6.47 2 2 6.47 2 12s4.47 10 10 10 10-4.47 10-10S17.53 2 12 2zm0 18c-4.41 0-8-3.59-8-8s3.59-8 8-8 8 3.59 8 8-3.59 8-8 8zm3.59-13L12 10.59 8.41 7 7 8.41 10.59 12 7 15.59 8.41 17 12 13.41 15.59 17 17 15.59 13.41 12 17 8.41z"}),"CancelOutlined");t.A=a},5382(e,t,n){"use strict";var r=n(4994);t.A=void 0;var i=r(n(39)),o=n(579),a=(0,i.default)((0,o.jsx)("path",{d:"M9 16.17 4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41z"}),"Check");t.A=a},4802(e,t,n){"use strict";var r=n(4994);t.A=void 0;var i=r(n(39)),o=n(579),a=(0,i.default)((0,o.jsx)("path",{d:"M19 6.41 17.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"}),"Close");t.A=a},1528(e,t,n){"use strict";var r=n(4994);t.A=void 0;var i=r(n(39)),o=n(579),a=(0,i.default)((0,o.jsx)("path",{d:"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm1 15h-2v-2h2v2zm0-4h-2V7h2v6z"}),"Error");t.A=a},8355(e,t,n){"use strict";var r=n(4994);t.A=void 0;var i=r(n(39)),o=n(579),a=(0,i.default)((0,o.jsx)("path",{d:"M16 1H4c-1.1 0-2 .9-2 2v14h2V3h12V1zm-1 4 6 6v10c0 1.1-.9 2-2 2H7.99C6.89 23 6 22.1 6 21l.01-14c0-1.1.89-2 1.99-2h7zm-1 7h5.5L14 6.5V12z"}),"FileCopy");t.A=a},9611(e,t,n){"use strict";var r=n(4994);t.A=void 0;var i=r(n(39)),o=n(579),a=(0,i.default)((0,o.jsx)("path",{d:"M3 18h18v-2H3v2zm0-5h18v-2H3v2zm0-7v2h18V6H3z"}),"Menu");t.A=a},8625(e,t,n){"use strict";var r=n(4994);t.A=void 0;var i=r(n(39)),o=n(579),a=(0,i.default)((0,o.jsx)("path",{d:"M17.65 6.35C16.2 4.9 14.21 4 12 4c-4.42 0-7.99 3.58-7.99 8s3.57 8 7.99 8c3.73 0 6.84-2.55 7.73-6h-2.08c-.82 2.33-3.04 4-5.65 4-3.31 0-6-2.69-6-6s2.69-6 6-6c1.66 0 3.14.69 4.22 1.78L13 11h7V4l-2.35 2.35z"}),"Refresh");t.A=a},4329(e,t,n){"use strict";var r=n(4994);t.A=void 0;var i=r(n(39)),o=n(579),a=(0,i.default)((0,o.jsx)("path",{d:"M17 3H5c-1.11 0-2 .9-2 2v14c0 1.1.89 2 2 2h14c1.1 0 2-.9 2-2V7l-4-4zm-5 16c-1.66 0-3-1.34-3-3s1.34-3 3-3 3 1.34 3 3-1.34 3-3 3zm3-10H5V5h10v4z"}),"Save");t.A=a},4190(e,t,n){"use strict";var r=n(4994);t.A=void 0;var i=r(n(39)),o=n(579),a=(0,i.default)((0,o.jsx)("path",{d:"M19 12v7H5v-7H3v7c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2v-7h-2zm-6 .67 2.59-2.58L17 11.5l-5 5-5-5 1.41-1.41L11 12.67V3h2z"}),"SaveAlt");t.A=a},39(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"default",{enumerable:!0,get:function(){return r.createSvgIcon}});var r=n(4391)},8122(e,t,n){"use strict";n.d(t,{A:()=>y});var r=n(8168),i=n(8587),o=n(5043),a=n(3024),s=n(8610),c=n(6803),l=n(2876),u=n(4535),h=n(2532),f=n(2372);function d(e){return(0,f.Ay)("MuiSvgIcon",e)}(0,h.A)("MuiSvgIcon",["root","colorPrimary","colorSecondary","colorAction","colorError","colorDisabled","fontSizeInherit","fontSizeSmall","fontSizeMedium","fontSizeLarge"]);var p=n(579);const g=["children","className","color","component","fontSize","htmlColor","inheritViewBox","titleAccess","viewBox"],m=(0,u.Ay)("svg",{name:"MuiSvgIcon",slot:"Root",overridesResolver:(e,t)=>{const{ownerState:n}=e;return[t.root,"inherit"!==n.color&&t[`color${(0,c.A)(n.color)}`],t[`fontSize${(0,c.A)(n.fontSize)}`]]}})((e=>{let{theme:t,ownerState:n}=e;var r,i,o,a,s,c,l,u,h,f,d,p,g,m,b,y,v;return{userSelect:"none",width:"1em",height:"1em",display:"inline-block",fill:n.hasSvgAsChild?void 0:"currentColor",flexShrink:0,transition:null==(r=t.transitions)||null==(i=r.create)?void 0:i.call(r,"fill",{duration:null==(o=t.transitions)||null==(a=o.duration)?void 0:a.shorter}),fontSize:{inherit:"inherit",small:(null==(s=t.typography)||null==(c=s.pxToRem)?void 0:c.call(s,20))||"1.25rem",medium:(null==(l=t.typography)||null==(u=l.pxToRem)?void 0:u.call(l,24))||"1.5rem",large:(null==(h=t.typography)||null==(f=h.pxToRem)?void 0:f.call(h,35))||"2.1875rem"}[n.fontSize],color:null!=(d=null==(p=(t.vars||t).palette)||null==(g=p[n.color])?void 0:g.main)?d:{action:null==(m=(t.vars||t).palette)||null==(b=m.action)?void 0:b.active,disabled:null==(y=(t.vars||t).palette)||null==(v=y.action)?void 0:v.disabled,inherit:void 0}[n.color]}})),b=o.forwardRef((function(e,t){const n=(0,l.A)({props:e,name:"MuiSvgIcon"}),{children:u,className:h,color:f="inherit",component:b="svg",fontSize:y="medium",htmlColor:v,inheritViewBox:w=!1,titleAccess:x,viewBox:k="0 0 24 24"}=n,S=(0,i.A)(n,g),A=o.isValidElement(u)&&"svg"===u.type,_=(0,r.A)({},n,{color:f,component:b,fontSize:y,instanceFontSize:e.fontSize,inheritViewBox:w,viewBox:k,hasSvgAsChild:A}),T={};w||(T.viewBox=k);const C=(e=>{const{color:t,fontSize:n,classes:r}=e,i={root:["root","inherit"!==t&&`color${(0,c.A)(t)}`,`fontSize${(0,c.A)(n)}`]};return(0,s.A)(i,d,r)})(_);return(0,p.jsxs)(m,(0,r.A)({as:b,className:(0,a.A)(C.root,h),focusable:"false",color:v,"aria-hidden":!x||void 0,role:x?"img":void 0,ref:t},T,S,A&&u.props,{ownerState:_,children:[A?u.props.children:u,x?(0,p.jsx)("title",{children:x}):null]}))}));b.muiName="SvgIcon";const y=b},5881(e,t){"use strict";var n,r=Symbol.for("react.element"),i=Symbol.for("react.portal"),o=Symbol.for("react.fragment"),a=Symbol.for("react.strict_mode"),s=Symbol.for("react.profiler"),c=Symbol.for("react.provider"),l=Symbol.for("react.context"),u=Symbol.for("react.server_context"),h=Symbol.for("react.forward_ref"),f=Symbol.for("react.suspense"),d=Symbol.for("react.suspense_list"),p=Symbol.for("react.memo"),g=Symbol.for("react.lazy"),m=Symbol.for("react.offscreen");function b(e){if("object"===typeof e&&null!==e){var t=e.$$typeof;switch(t){case r:switch(e=e.type){case o:case s:case a:case f:case d:return e;default:switch(e=e&&e.$$typeof){case u:case l:case h:case g:case p:case c:return e;default:return t}}case i:return t}}}n=Symbol.for("react.module.reference")},805(e,t,n){"use strict";n(5881)},8279(e,t,n){"use strict";n.d(t,{A:()=>B});var r=n(8168),i=n(8587),o=n(7868),a=n(9172),s=n(7322),c=n(7758),l=n(8812);var u=n(4794);const h={black:"#000",white:"#fff"},f={50:"#fafafa",100:"#f5f5f5",200:"#eeeeee",300:"#e0e0e0",400:"#bdbdbd",500:"#9e9e9e",600:"#757575",700:"#616161",800:"#424242",900:"#212121",A100:"#f5f5f5",A200:"#eeeeee",A400:"#bdbdbd",A700:"#616161"},d={50:"#f3e5f5",100:"#e1bee7",200:"#ce93d8",300:"#ba68c8",400:"#ab47bc",500:"#9c27b0",600:"#8e24aa",700:"#7b1fa2",800:"#6a1b9a",900:"#4a148c",A100:"#ea80fc",A200:"#e040fb",A400:"#d500f9",A700:"#aa00ff"},p={50:"#ffebee",100:"#ffcdd2",200:"#ef9a9a",300:"#e57373",400:"#ef5350",500:"#f44336",600:"#e53935",700:"#d32f2f",800:"#c62828",900:"#b71c1c",A100:"#ff8a80",A200:"#ff5252",A400:"#ff1744",A700:"#d50000"},g={50:"#fff3e0",100:"#ffe0b2",200:"#ffcc80",300:"#ffb74d",400:"#ffa726",500:"#ff9800",600:"#fb8c00",700:"#f57c00",800:"#ef6c00",900:"#e65100",A100:"#ffd180",A200:"#ffab40",A400:"#ff9100",A700:"#ff6d00"},m={50:"#e3f2fd",100:"#bbdefb",200:"#90caf9",300:"#64b5f6",400:"#42a5f5",500:"#2196f3",600:"#1e88e5",700:"#1976d2",800:"#1565c0",900:"#0d47a1",A100:"#82b1ff",A200:"#448aff",A400:"#2979ff",A700:"#2962ff"},b={50:"#e1f5fe",100:"#b3e5fc",200:"#81d4fa",300:"#4fc3f7",400:"#29b6f6",500:"#03a9f4",600:"#039be5",700:"#0288d1",800:"#0277bd",900:"#01579b",A100:"#80d8ff",A200:"#40c4ff",A400:"#00b0ff",A700:"#0091ea"},y={50:"#e8f5e9",100:"#c8e6c9",200:"#a5d6a7",300:"#81c784",400:"#66bb6a",500:"#4caf50",600:"#43a047",700:"#388e3c",800:"#2e7d32",900:"#1b5e20",A100:"#b9f6ca",A200:"#69f0ae",A400:"#00e676",A700:"#00c853"},v=["mode","contrastThreshold","tonalOffset"],w={text:{primary:"rgba(0, 0, 0, 0.87)",secondary:"rgba(0, 0, 0, 0.6)",disabled:"rgba(0, 0, 0, 0.38)"},divider:"rgba(0, 0, 0, 0.12)",background:{paper:h.white,default:h.white},action:{active:"rgba(0, 0, 0, 0.54)",hover:"rgba(0, 0, 0, 0.04)",hoverOpacity:.04,selected:"rgba(0, 0, 0, 0.08)",selectedOpacity:.08,disabled:"rgba(0, 0, 0, 0.26)",disabledBackground:"rgba(0, 0, 0, 0.12)",disabledOpacity:.38,focus:"rgba(0, 0, 0, 0.12)",focusOpacity:.12,activatedOpacity:.12}},x={text:{primary:h.white,secondary:"rgba(255, 255, 255, 0.7)",disabled:"rgba(255, 255, 255, 0.5)",icon:"rgba(255, 255, 255, 0.5)"},divider:"rgba(255, 255, 255, 0.12)",background:{paper:"#121212",default:"#121212"},action:{active:h.white,hover:"rgba(255, 255, 255, 0.08)",hoverOpacity:.08,selected:"rgba(255, 255, 255, 0.16)",selectedOpacity:.16,disabled:"rgba(255, 255, 255, 0.3)",disabledBackground:"rgba(255, 255, 255, 0.12)",disabledOpacity:.38,focus:"rgba(255, 255, 255, 0.12)",focusOpacity:.12,activatedOpacity:.24}};function k(e,t,n,r){const i=r.light||r,o=r.dark||1.5*r;e[t]||(e.hasOwnProperty(n)?e[t]=e[n]:"light"===t?e.light=(0,u.a)(e.main,i):"dark"===t&&(e.dark=(0,u.e$)(e.main,o)))}function S(e){const{mode:t="light",contrastThreshold:n=3,tonalOffset:s=.2}=e,c=(0,i.A)(e,v),l=e.primary||function(){return"dark"===(arguments.length>0&&void 0!==arguments[0]?arguments[0]:"light")?{main:m[200],light:m[50],dark:m[400]}:{main:m[700],light:m[400],dark:m[800]}}(t),S=e.secondary||function(){return"dark"===(arguments.length>0&&void 0!==arguments[0]?arguments[0]:"light")?{main:d[200],light:d[50],dark:d[400]}:{main:d[500],light:d[300],dark:d[700]}}(t),A=e.error||function(){return"dark"===(arguments.length>0&&void 0!==arguments[0]?arguments[0]:"light")?{main:p[500],light:p[300],dark:p[700]}:{main:p[700],light:p[400],dark:p[800]}}(t),_=e.info||function(){return"dark"===(arguments.length>0&&void 0!==arguments[0]?arguments[0]:"light")?{main:b[400],light:b[300],dark:b[700]}:{main:b[700],light:b[500],dark:b[900]}}(t),T=e.success||function(){return"dark"===(arguments.length>0&&void 0!==arguments[0]?arguments[0]:"light")?{main:y[400],light:y[300],dark:y[700]}:{main:y[800],light:y[500],dark:y[900]}}(t),C=e.warning||function(){return"dark"===(arguments.length>0&&void 0!==arguments[0]?arguments[0]:"light")?{main:g[400],light:g[300],dark:g[700]}:{main:"#ed6c02",light:g[500],dark:g[900]}}(t);function E(e){return(0,u.eM)(e,x.text.primary)>=n?x.text.primary:w.text.primary}const O=e=>{let{color:t,name:n,mainShade:i=500,lightShade:a=300,darkShade:c=700}=e;if(t=(0,r.A)({},t),!t.main&&t[i]&&(t.main=t[i]),!t.hasOwnProperty("main"))throw new Error((0,o.A)(11,n?` (${n})`:"",i));if("string"!==typeof t.main)throw new Error((0,o.A)(12,n?` (${n})`:"",JSON.stringify(t.main)));return k(t,"light",a,s),k(t,"dark",c,s),t.contrastText||(t.contrastText=E(t.main)),t},P={dark:x,light:w};return(0,a.A)((0,r.A)({common:(0,r.A)({},h),mode:t,primary:O({color:l,name:"primary"}),secondary:O({color:S,name:"secondary",mainShade:"A400",lightShade:"A200",darkShade:"A700"}),error:O({color:A,name:"error"}),warning:O({color:C,name:"warning"}),info:O({color:_,name:"info"}),success:O({color:T,name:"success"}),grey:f,contrastThreshold:n,getContrastText:E,augmentColor:O,tonalOffset:s},P[t]),c)}const A=["fontFamily","fontSize","fontWeightLight","fontWeightRegular","fontWeightMedium","fontWeightBold","htmlFontSize","allVariants","pxToRem"];const _={textTransform:"uppercase"},T='"Roboto", "Helvetica", "Arial", sans-serif';function C(e,t){const n="function"===typeof t?t(e):t,{fontFamily:o=T,fontSize:s=14,fontWeightLight:c=300,fontWeightRegular:l=400,fontWeightMedium:u=500,fontWeightBold:h=700,htmlFontSize:f=16,allVariants:d,pxToRem:p}=n,g=(0,i.A)(n,A);const m=s/14,b=p||(e=>e/f*m+"rem"),y=(e,t,n,i,a)=>{return(0,r.A)({fontFamily:o,fontWeight:e,fontSize:b(t),lineHeight:n},o===T?{letterSpacing:(s=i/t,Math.round(1e5*s)/1e5)+"em"}:{},a,d);var s},v={h1:y(c,96,1.167,-1.5),h2:y(c,60,1.2,-.5),h3:y(l,48,1.167,0),h4:y(l,34,1.235,.25),h5:y(l,24,1.334,0),h6:y(u,20,1.6,.15),subtitle1:y(l,16,1.75,.15),subtitle2:y(u,14,1.57,.1),body1:y(l,16,1.5,.15),body2:y(l,14,1.43,.15),button:y(u,14,1.75,.4,_),caption:y(l,12,1.66,.4),overline:y(l,12,2.66,1,_),inherit:{fontFamily:"inherit",fontWeight:"inherit",fontSize:"inherit",lineHeight:"inherit",letterSpacing:"inherit"}};return(0,a.A)((0,r.A)({htmlFontSize:f,pxToRem:b,fontFamily:o,fontSize:s,fontWeightLight:c,fontWeightRegular:l,fontWeightMedium:u,fontWeightBold:h},v),g,{clone:!1})}function E(){return[`${arguments.length<=0?void 0:arguments[0]}px ${arguments.length<=1?void 0:arguments[1]}px ${arguments.length<=2?void 0:arguments[2]}px ${arguments.length<=3?void 0:arguments[3]}px rgba(0,0,0,0.2)`,`${arguments.length<=4?void 0:arguments[4]}px ${arguments.length<=5?void 0:arguments[5]}px ${arguments.length<=6?void 0:arguments[6]}px ${arguments.length<=7?void 0:arguments[7]}px rgba(0,0,0,0.14)`,`${arguments.length<=8?void 0:arguments[8]}px ${arguments.length<=9?void 0:arguments[9]}px ${arguments.length<=10?void 0:arguments[10]}px ${arguments.length<=11?void 0:arguments[11]}px rgba(0,0,0,0.12)`].join(",")}const O=["none",E(0,2,1,-1,0,1,1,0,0,1,3,0),E(0,3,1,-2,0,2,2,0,0,1,5,0),E(0,3,3,-2,0,3,4,0,0,1,8,0),E(0,2,4,-1,0,4,5,0,0,1,10,0),E(0,3,5,-1,0,5,8,0,0,1,14,0),E(0,3,5,-1,0,6,10,0,0,1,18,0),E(0,4,5,-2,0,7,10,1,0,2,16,1),E(0,5,5,-3,0,8,10,1,0,3,14,2),E(0,5,6,-3,0,9,12,1,0,3,16,2),E(0,6,6,-3,0,10,14,1,0,4,18,3),E(0,6,7,-4,0,11,15,1,0,4,20,3),E(0,7,8,-4,0,12,17,2,0,5,22,4),E(0,7,8,-4,0,13,19,2,0,5,24,4),E(0,7,9,-4,0,14,21,2,0,5,26,4),E(0,8,9,-5,0,15,22,2,0,6,28,5),E(0,8,10,-5,0,16,24,2,0,6,30,5),E(0,8,11,-5,0,17,26,2,0,6,32,5),E(0,9,11,-5,0,18,28,2,0,7,34,6),E(0,9,12,-6,0,19,29,2,0,7,36,6),E(0,10,13,-6,0,20,31,3,0,8,38,7),E(0,10,13,-6,0,21,33,3,0,8,40,7),E(0,10,14,-6,0,22,35,3,0,8,42,7),E(0,11,14,-7,0,23,36,3,0,9,44,8),E(0,11,15,-7,0,24,38,3,0,9,46,8)],P=["duration","easing","delay"],M={easeInOut:"cubic-bezier(0.4, 0, 0.2, 1)",easeOut:"cubic-bezier(0.0, 0, 0.2, 1)",easeIn:"cubic-bezier(0.4, 0, 1, 1)",sharp:"cubic-bezier(0.4, 0, 0.6, 1)"},I={shortest:150,shorter:200,short:250,standard:300,complex:375,enteringScreen:225,leavingScreen:195};function D(e){return`${Math.round(e)}ms`}function N(e){if(!e)return 0;const t=e/36;return Math.round(10*(4+15*t**.25+t/5))}function L(e){const t=(0,r.A)({},M,e.easing),n=(0,r.A)({},I,e.duration);return(0,r.A)({getAutoHeightDuration:N,create:function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:["all"],r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const{duration:o=n.standard,easing:a=t.easeInOut,delay:s=0}=r;(0,i.A)(r,P);return(Array.isArray(e)?e:[e]).map((e=>`${e} ${"string"===typeof o?o:D(o)} ${a} ${"string"===typeof s?s:D(s)}`)).join(",")}},e,{easing:t,duration:n})}const R={mobileStepper:1e3,fab:1050,speedDial:1050,appBar:1100,drawer:1200,modal:1300,snackbar:1400,tooltip:1500},j=["breakpoints","mixins","spacing","palette","transitions","typography","shape"];function F(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};const{mixins:t={},palette:n={},transitions:u={},typography:h={}}=e,f=(0,i.A)(e,j);if(e.vars)throw new Error((0,o.A)(18));const d=S(n),p=(0,s.A)(e);let g=(0,a.A)(p,{mixins:(m=p.breakpoints,b=t,(0,r.A)({toolbar:{minHeight:56,[m.up("xs")]:{"@media (orientation: landscape)":{minHeight:48}},[m.up("sm")]:{minHeight:64}}},b)),palette:d,shadows:O.slice(),typography:C(d,h),transitions:L(u),zIndex:(0,r.A)({},R)});var m,b;g=(0,a.A)(g,f);for(var y=arguments.length,v=new Array(y>1?y-1:0),w=1;w(0,a.A)(e,t)),g),g.unstable_sxConfig=(0,r.A)({},c.A,null==f?void 0:f.unstable_sxConfig),g.unstable_sx=function(e){return(0,l.A)({sx:e,theme:this})},g}const B=F},5170(e,t,n){"use strict";n.d(t,{A:()=>r});const r=(0,n(8279).A)()},3375(e,t,n){"use strict";n.d(t,{A:()=>r});const r="$$material"},4535(e,t,n){"use strict";n.d(t,{Ay:()=>c,_n:()=>s,ep:()=>a});var r=n(920),i=n(5170),o=n(3375);const a=e=>(0,r.MC)(e)&&"classes"!==e,s=r.MC,c=(0,r.Ay)({themeId:o.A,defaultTheme:i.A,rootShouldForwardProp:a})},2876(e,t,n){"use strict";n.d(t,{A:()=>a});var r=n(2919),i=n(5170),o=n(3375);function a(e){let{props:t,name:n}=e;return(0,r.A)({props:t,name:n,defaultTheme:i.A,themeId:o.A})}},6803(e,t,n){"use strict";n.d(t,{A:()=>r});const r=n(7598).A},6593(e,t,n){"use strict";n.d(t,{A:()=>r});const r=n(2456).A},6734(e,t,n){"use strict";n.d(t,{A:()=>s});var r=n(8168),i=n(5043),o=n(8122),a=n(579);function s(e,t){function n(n,i){return(0,a.jsx)(o.A,(0,r.A)({"data-testid":`${t}Icon`,ref:i},n,{children:e}))}return n.muiName=o.A.muiName,i.memo(i.forwardRef(n))}},950(e,t,n){"use strict";n.d(t,{A:()=>r});const r=n(3468).A},4391(e,t,n){"use strict";n.r(t),n.d(t,{capitalize:()=>i.A,createChainedFunction:()=>o.A,createSvgIcon:()=>a.A,debounce:()=>s.A,deprecatedPropType:()=>c,isMuiElement:()=>l.A,ownerDocument:()=>u.A,ownerWindow:()=>h.A,requirePropFactory:()=>f,setRef:()=>d,unstable_ClassNameGenerator:()=>x,unstable_useEnhancedEffect:()=>p.A,unstable_useId:()=>g.A,unsupportedProp:()=>m,useControlled:()=>b.A,useEventCallback:()=>y.A,useForkRef:()=>v.A,useIsFocusVisible:()=>w.A});var r=n(9386),i=n(6803),o=n(6593),a=n(6734),s=n(950);const c=function(e,t){return()=>null};var l=n(7328),u=n(2427),h=n(6078);const f=function(e,t){return()=>null};const d=n(6564).A;var p=n(5013),g=n(5879);const m=function(e,t,n,r,i){return null};var b=n(4516),y=n(3319),v=n(5849),w=n(5135);const x={configure:e=>{r.A.configure(e)}}},7328(e,t,n){"use strict";n.d(t,{A:()=>i});var r=n(5043);const i=function(e,t){var n,i;return r.isValidElement(e)&&-1!==t.indexOf(null!=(n=e.type.muiName)?n:null==(i=e.type)||null==(i=i._payload)||null==(i=i.value)?void 0:i.muiName)}},2427(e,t,n){"use strict";n.d(t,{A:()=>r});const r=n(1668).A},6078(e,t,n){"use strict";n.d(t,{A:()=>r});const r=n(3940).A},4516(e,t,n){"use strict";n.d(t,{A:()=>r});const r=n(1052).A},5013(e,t,n){"use strict";n.d(t,{A:()=>r});const r=n(4440).A},3319(e,t,n){"use strict";n.d(t,{A:()=>r});const r=n(1782).A},5849(e,t,n){"use strict";n.d(t,{A:()=>r});const r=n(3462).A},5879(e,t,n){"use strict";n.d(t,{A:()=>r});const r=n(5844).A},5135(e,t,n){"use strict";n.d(t,{A:()=>d});var r=n(5043);class i{constructor(){this.currentId=null,this.clear=()=>{null!==this.currentId&&(clearTimeout(this.currentId),this.currentId=null)},this.disposeEffect=()=>this.clear}static create(){return new i}start(e,t){this.clear(),this.currentId=setTimeout((()=>{this.currentId=null,t()}),e)}}let o=!0,a=!1;const s=new i,c={text:!0,search:!0,url:!0,tel:!0,email:!0,password:!0,number:!0,date:!0,month:!0,week:!0,time:!0,datetime:!0,"datetime-local":!0};function l(e){e.metaKey||e.altKey||e.ctrlKey||(o=!0)}function u(){o=!1}function h(){"hidden"===this.visibilityState&&a&&(o=!0)}function f(e){const{target:t}=e;try{return t.matches(":focus-visible")}catch(n){}return o||function(e){const{type:t,tagName:n}=e;return!("INPUT"!==n||!c[t]||e.readOnly)||"TEXTAREA"===n&&!e.readOnly||!!e.isContentEditable}(t)}const d=function(){const e=r.useCallback((e=>{var t;null!=e&&((t=e.ownerDocument).addEventListener("keydown",l,!0),t.addEventListener("mousedown",u,!0),t.addEventListener("pointerdown",u,!0),t.addEventListener("touchstart",u,!0),t.addEventListener("visibilitychange",h,!0))}),[]),t=r.useRef(!1);return{isFocusVisibleRef:t,onFocus:function(e){return!!f(e)&&(t.current=!0,!0)},onBlur:function(){return!!t.current&&(a=!0,s.start(100,(()=>{a=!1})),t.current=!1,!0)},ref:e}}},3984(e,t,n){"use strict";n.d(t,{Ay:()=>y,q_:()=>v,tT:()=>x});var r=n(8168),i=n(5043);function o(e){var t=Object.create(null);return function(n){return void 0===t[n]&&(t[n]=e(n)),t[n]}}var a=/^((children|dangerouslySetInnerHTML|key|ref|autoFocus|defaultValue|defaultChecked|innerHTML|suppressContentEditableWarning|suppressHydrationWarning|valueLink|abbr|accept|acceptCharset|accessKey|action|allow|allowUserMedia|allowPaymentRequest|allowFullScreen|allowTransparency|alt|async|autoComplete|autoPlay|capture|cellPadding|cellSpacing|challenge|charSet|checked|cite|classID|className|cols|colSpan|content|contentEditable|contextMenu|controls|controlsList|coords|crossOrigin|data|dateTime|decoding|default|defer|dir|disabled|disablePictureInPicture|download|draggable|encType|enterKeyHint|form|formAction|formEncType|formMethod|formNoValidate|formTarget|frameBorder|headers|height|hidden|high|href|hrefLang|htmlFor|httpEquiv|id|inputMode|integrity|is|keyParams|keyType|kind|label|lang|list|loading|loop|low|marginHeight|marginWidth|max|maxLength|media|mediaGroup|method|min|minLength|multiple|muted|name|nonce|noValidate|open|optimum|pattern|placeholder|playsInline|poster|preload|profile|radioGroup|readOnly|referrerPolicy|rel|required|reversed|role|rows|rowSpan|sandbox|scope|scoped|scrolling|seamless|selected|shape|size|sizes|slot|span|spellCheck|src|srcDoc|srcLang|srcSet|start|step|style|summary|tabIndex|target|title|translate|type|useMap|value|width|wmode|wrap|about|datatype|inlist|prefix|property|resource|typeof|vocab|autoCapitalize|autoCorrect|autoSave|color|incremental|fallback|inert|itemProp|itemScope|itemType|itemID|itemRef|on|option|results|security|unselectable|accentHeight|accumulate|additive|alignmentBaseline|allowReorder|alphabetic|amplitude|arabicForm|ascent|attributeName|attributeType|autoReverse|azimuth|baseFrequency|baselineShift|baseProfile|bbox|begin|bias|by|calcMode|capHeight|clip|clipPathUnits|clipPath|clipRule|colorInterpolation|colorInterpolationFilters|colorProfile|colorRendering|contentScriptType|contentStyleType|cursor|cx|cy|d|decelerate|descent|diffuseConstant|direction|display|divisor|dominantBaseline|dur|dx|dy|edgeMode|elevation|enableBackground|end|exponent|externalResourcesRequired|fill|fillOpacity|fillRule|filter|filterRes|filterUnits|floodColor|floodOpacity|focusable|fontFamily|fontSize|fontSizeAdjust|fontStretch|fontStyle|fontVariant|fontWeight|format|from|fr|fx|fy|g1|g2|glyphName|glyphOrientationHorizontal|glyphOrientationVertical|glyphRef|gradientTransform|gradientUnits|hanging|horizAdvX|horizOriginX|ideographic|imageRendering|in|in2|intercept|k|k1|k2|k3|k4|kernelMatrix|kernelUnitLength|kerning|keyPoints|keySplines|keyTimes|lengthAdjust|letterSpacing|lightingColor|limitingConeAngle|local|markerEnd|markerMid|markerStart|markerHeight|markerUnits|markerWidth|mask|maskContentUnits|maskUnits|mathematical|mode|numOctaves|offset|opacity|operator|order|orient|orientation|origin|overflow|overlinePosition|overlineThickness|panose1|paintOrder|pathLength|patternContentUnits|patternTransform|patternUnits|pointerEvents|points|pointsAtX|pointsAtY|pointsAtZ|preserveAlpha|preserveAspectRatio|primitiveUnits|r|radius|refX|refY|renderingIntent|repeatCount|repeatDur|requiredExtensions|requiredFeatures|restart|result|rotate|rx|ry|scale|seed|shapeRendering|slope|spacing|specularConstant|specularExponent|speed|spreadMethod|startOffset|stdDeviation|stemh|stemv|stitchTiles|stopColor|stopOpacity|strikethroughPosition|strikethroughThickness|string|stroke|strokeDasharray|strokeDashoffset|strokeLinecap|strokeLinejoin|strokeMiterlimit|strokeOpacity|strokeWidth|surfaceScale|systemLanguage|tableValues|targetX|targetY|textAnchor|textDecoration|textRendering|textLength|to|transform|u1|u2|underlinePosition|underlineThickness|unicode|unicodeBidi|unicodeRange|unitsPerEm|vAlphabetic|vHanging|vIdeographic|vMathematical|values|vectorEffect|version|vertAdvY|vertOriginX|vertOriginY|viewBox|viewTarget|visibility|widths|wordSpacing|writingMode|x|xHeight|x1|x2|xChannelSelector|xlinkActuate|xlinkArcrole|xlinkHref|xlinkRole|xlinkShow|xlinkTitle|xlinkType|xmlBase|xmlns|xmlnsXlink|xmlLang|xmlSpace|y|y1|y2|yChannelSelector|z|zoomAndPan|for|class|autofocus)|(([Dd][Aa][Tt][Aa]|[Aa][Rr][Ii][Aa]|x)-.*))$/,s=o((function(e){return a.test(e)||111===e.charCodeAt(0)&&110===e.charCodeAt(1)&&e.charCodeAt(2)<91})),c=n(5025),l=n(1722),u=n(6679),h=n(9436),f=s,d=function(e){return"theme"!==e},p=function(e){return"string"===typeof e&&e.charCodeAt(0)>96?f:d},g=function(e,t,n){var r;if(t){var i=t.shouldForwardProp;r=e.__emotion_forwardProp&&i?function(t){return e.__emotion_forwardProp(t)&&i(t)}:i}return"function"!==typeof r&&n&&(r=e.__emotion_forwardProp),r},m=function(e){var t=e.cache,n=e.serialized,r=e.isStringTag;return(0,l.SF)(t,n,r),(0,h.s)((function(){return(0,l.sk)(t,n,r)})),null},b=function e(t,n){var o,a,s=t.__emotion_real===t,h=s&&t.__emotion_base||t;void 0!==n&&(o=n.label,a=n.target);var f=g(t,n,s),d=f||p(h),b=!d("as");return function(){var y=arguments,v=s&&void 0!==t.__emotion_styles?t.__emotion_styles.slice(0):[];if(void 0!==o&&v.push("label:"+o+";"),null==y[0]||void 0===y[0].raw)v.push.apply(v,y);else{0,v.push(y[0][0]);for(var w=y.length,x=1;x{Array.isArray(e.__emotion_styles)&&(e.__emotion_styles=t(e.__emotion_styles))},w=[];function x(e){return w[0]=e,(0,u.J)(w)}},9751(e,t,n){"use strict";n.d(t,{EU:()=>a,NI:()=>o,kW:()=>c,vf:()=>s,zu:()=>r});const r={xs:0,sm:600,md:900,lg:1200,xl:1536},i={keys:["xs","sm","md","lg","xl"],up:e=>`@media (min-width:${r[e]}px)`};function o(e,t,n){const o=e.theme||{};if(Array.isArray(t)){const e=o.breakpoints||i;return t.reduce(((r,i,o)=>(r[e.up(e.keys[o])]=n(t[o]),r)),{})}if("object"===typeof t){const e=o.breakpoints||i;return Object.keys(t).reduce(((i,o)=>{if(-1!==Object.keys(e.values||r).indexOf(o)){i[e.up(o)]=n(t[o],o)}else{const e=o;i[e]=t[e]}return i}),{})}return n(t)}function a(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};var t;return(null==(t=e.keys)?void 0:t.reduce(((t,n)=>(t[e.up(n)]={},t)),{}))||{}}function s(e,t){return e.reduce(((e,t)=>{const n=e[t];return(!n||0===Object.keys(n).length)&&delete e[t],e}),t)}function c(e){let{values:t,breakpoints:n,base:r}=e;const i=r||function(e,t){if("object"!==typeof e)return{};const n={},r=Object.keys(t);return Array.isArray(e)?r.forEach(((t,r)=>{r{null!=e[t]&&(n[t]=!0)})),n}(t,n),o=Object.keys(i);if(0===o.length)return t;let a;return o.reduce(((e,n,r)=>(Array.isArray(t)?(e[n]=null!=t[r]?t[r]:t[a],a=r):"object"===typeof t?(e[n]=null!=t[n]?t[n]:t[a],a=n):e[n]=t,e)),{})}},4794(e,t,n){"use strict";n.d(t,{X4:()=>u,e$:()=>h,tL:()=>d,eM:()=>l,a:()=>f});var r=n(7868);const i=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:Number.MIN_SAFE_INTEGER,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:Number.MAX_SAFE_INTEGER;return Math.max(t,Math.min(e,n))};function o(e){return i(e,arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,arguments.length>2&&void 0!==arguments[2]?arguments[2]:1)}function a(e){if(e.type)return e;if("#"===e.charAt(0))return a(function(e){e=e.slice(1);const t=new RegExp(`.{1,${e.length>=6?2:1}}`,"g");let n=e.match(t);return n&&1===n[0].length&&(n=n.map((e=>e+e))),n?`rgb${4===n.length?"a":""}(${n.map(((e,t)=>t<3?parseInt(e,16):Math.round(parseInt(e,16)/255*1e3)/1e3)).join(", ")})`:""}(e));const t=e.indexOf("("),n=e.substring(0,t);if(-1===["rgb","rgba","hsl","hsla","color"].indexOf(n))throw new Error((0,r.A)(9,e));let i,o=e.substring(t+1,e.length-1);if("color"===n){if(o=o.split(" "),i=o.shift(),4===o.length&&"/"===o[3].charAt(0)&&(o[3]=o[3].slice(1)),-1===["srgb","display-p3","a98-rgb","prophoto-rgb","rec-2020"].indexOf(i))throw new Error((0,r.A)(10,i))}else o=o.split(",");return o=o.map((e=>parseFloat(e))),{type:n,values:o,colorSpace:i}}function s(e){const{type:t,colorSpace:n}=e;let{values:r}=e;return-1!==t.indexOf("rgb")?r=r.map(((e,t)=>t<3?parseInt(e,10):e)):-1!==t.indexOf("hsl")&&(r[1]=`${r[1]}%`,r[2]=`${r[2]}%`),r=-1!==t.indexOf("color")?`${n} ${r.join(" ")}`:`${r.join(", ")}`,`${t}(${r})`}function c(e){let t="hsl"===(e=a(e)).type||"hsla"===e.type?a(function(e){e=a(e);const{values:t}=e,n=t[0],r=t[1]/100,i=t[2]/100,o=r*Math.min(i,1-i),c=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:(e+n/30)%12;return i-o*Math.max(Math.min(t-3,9-t,1),-1)};let l="rgb";const u=[Math.round(255*c(0)),Math.round(255*c(8)),Math.round(255*c(4))];return"hsla"===e.type&&(l+="a",u.push(t[3])),s({type:l,values:u})}(e)).values:e.values;return t=t.map((t=>("color"!==e.type&&(t/=255),t<=.03928?t/12.92:((t+.055)/1.055)**2.4))),Number((.2126*t[0]+.7152*t[1]+.0722*t[2]).toFixed(3))}function l(e,t){const n=c(e),r=c(t);return(Math.max(n,r)+.05)/(Math.min(n,r)+.05)}function u(e,t){return e=a(e),t=o(t),"rgb"!==e.type&&"hsl"!==e.type||(e.type+="a"),"color"===e.type?e.values[3]=`/${t}`:e.values[3]=t,s(e)}function h(e,t){if(e=a(e),t=o(t),-1!==e.type.indexOf("hsl"))e.values[2]*=1-t;else if(-1!==e.type.indexOf("rgb")||-1!==e.type.indexOf("color"))for(let n=0;n<3;n+=1)e.values[n]*=1-t;return s(e)}function f(e,t){if(e=a(e),t=o(t),-1!==e.type.indexOf("hsl"))e.values[2]+=(100-e.values[2])*t;else if(-1!==e.type.indexOf("rgb"))for(let n=0;n<3;n+=1)e.values[n]+=(255-e.values[n])*t;else if(-1!==e.type.indexOf("color"))for(let n=0;n<3;n+=1)e.values[n]+=(1-e.values[n])*t;return s(e)}function d(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:.15;return c(e)>.5?h(e,t):f(e,t)}},920(e,t,n){"use strict";n.d(t,{Ay:()=>v,MC:()=>f});var r=n(8168),i=n(8587),o=n(3984),a=n(9172),s=n(7322),c=n(8812);const l=["ownerState"],u=["variants"],h=["name","slot","skipVariantsResolver","skipSx","overridesResolver"];function f(e){return"ownerState"!==e&&"theme"!==e&&"sx"!==e&&"as"!==e}function d(e,t){return t&&e&&"object"===typeof e&&e.styles&&!e.styles.startsWith("@layer")&&(e.styles=`@layer ${t}{${String(e.styles)}}`),e}const p=(0,s.A)(),g=e=>e?e.charAt(0).toLowerCase()+e.slice(1):e;function m(e){let{defaultTheme:t,theme:n,themeId:r}=e;return i=n,0===Object.keys(i).length?t:n[r]||n;var i}function b(e){return e?(t,n)=>n[e]:null}function y(e,t,n){let{ownerState:a}=t,s=(0,i.A)(t,l);const c="function"===typeof e?e((0,r.A)({ownerState:a},s)):e;if(Array.isArray(c))return c.flatMap((e=>y(e,(0,r.A)({ownerState:a},s),n)));if(c&&"object"===typeof c&&Array.isArray(c.variants)){const{variants:e=[]}=c;let t=(0,i.A)(c,u);return e.forEach((e=>{let i=!0;if("function"===typeof e.props?i=e.props((0,r.A)({ownerState:a},s,a)):Object.keys(e.props).forEach((t=>{(null==a?void 0:a[t])!==e.props[t]&&s[t]!==e.props[t]&&(i=!1)})),i){Array.isArray(t)||(t=[t]);const i="function"===typeof e.style?e.style((0,r.A)({ownerState:a},s,a)):e.style;t.push(n?d((0,o.tT)(i),n):i)}})),t}return n?d((0,o.tT)(c),n):c}function v(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};const{themeId:t,defaultTheme:n=p,rootShouldForwardProp:s=f,slotShouldForwardProp:l=f}=e,u=e=>(0,c.A)((0,r.A)({},e,{theme:m((0,r.A)({},e,{defaultTheme:n,themeId:t}))}));return u.__mui_systemSx=!0,function(e){let c=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};(0,o.q_)(e,(e=>e.filter((e=>!(null!=e&&e.__mui_systemSx)))));const{name:d,slot:p,skipVariantsResolver:v,skipSx:w,overridesResolver:x=b(g(p))}=c,k=(0,i.A)(c,h),S=d&&d.startsWith("Mui")||p?"components":"custom",A=void 0!==v?v:p&&"Root"!==p&&"root"!==p||!1,_=w||!1;let T=f;"Root"===p||"root"===p?T=s:p?T=l:function(e){return"string"===typeof e&&e.charCodeAt(0)>96}(e)&&(T=void 0);const C=(0,o.Ay)(e,(0,r.A)({shouldForwardProp:T,label:undefined},k)),E=e=>"function"===typeof e&&e.__emotion_real!==e||(0,a.Q)(e)?i=>{const o=m({theme:i.theme,defaultTheme:n,themeId:t});return y(e,(0,r.A)({},i,{theme:o}),o.modularCssLayers?S:void 0)}:e,O=function(i){let o=E(i);for(var a=arguments.length,s=new Array(a>1?a-1:0),c=1;c{const i=m((0,r.A)({},e,{defaultTheme:n,themeId:t}));if(!i.components||!i.components[d]||!i.components[d].styleOverrides)return null;const o=i.components[d].styleOverrides,a={};return Object.entries(o).forEach((t=>{let[n,o]=t;a[n]=y(o,(0,r.A)({},e,{theme:i}),i.modularCssLayers?"theme":void 0)})),x(e,a)})),d&&!A&&l.push((e=>{var i;const o=m((0,r.A)({},e,{defaultTheme:n,themeId:t}));return y({variants:null==o||null==(i=o.components)||null==(i=i[d])?void 0:i.variants},(0,r.A)({},e,{theme:o}),o.modularCssLayers?"theme":void 0)})),_||l.push(u);const h=l.length-s.length;if(Array.isArray(i)&&h>0){const e=new Array(h).fill("");o=[...i,...e],o.raw=[...i.raw,...e]}const f=C(o,...l);return e.muiName&&(f.muiName=e.muiName),f};return C.withConfig&&(O.withConfig=C.withConfig),O}}},7322(e,t,n){"use strict";n.d(t,{A:()=>p});var r=n(8168),i=n(8587),o=n(9172);const a=["values","unit","step"];function s(e){const{values:t={xs:0,sm:600,md:900,lg:1200,xl:1536},unit:n="px",step:o=5}=e,s=(0,i.A)(e,a),c=(e=>{const t=Object.keys(e).map((t=>({key:t,val:e[t]})))||[];return t.sort(((e,t)=>e.val-t.val)),t.reduce(((e,t)=>(0,r.A)({},e,{[t.key]:t.val})),{})})(t),l=Object.keys(c);function u(e){return`@media (min-width:${"number"===typeof t[e]?t[e]:e}${n})`}function h(e){return`@media (max-width:${("number"===typeof t[e]?t[e]:e)-o/100}${n})`}function f(e,r){const i=l.indexOf(r);return`@media (min-width:${"number"===typeof t[e]?t[e]:e}${n}) and (max-width:${(-1!==i&&"number"===typeof t[l[i]]?t[l[i]]:r)-o/100}${n})`}return(0,r.A)({keys:l,values:c,up:u,down:h,between:f,only:function(e){return l.indexOf(e)+10&&void 0!==arguments[0]?arguments[0]:{};const{breakpoints:t={},palette:n={},spacing:a,shape:p={}}=e,g=(0,i.A)(e,d),m=s(t),b=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:8;if(e.mui)return e;const t=(0,l.LX)({spacing:e}),n=function(){for(var e=arguments.length,n=new Array(e),r=0;r{const n=t(e);return"number"===typeof n?`${n}px`:n})).join(" ")};return n.mui=!0,n}(a);let y=(0,o.A)({breakpoints:m,direction:"ltr",components:{},palette:(0,r.A)({mode:"light"},n),spacing:b,shape:(0,r.A)({},c,p)},g);y.applyStyles=f;for(var v=arguments.length,w=new Array(v>1?v-1:0),x=1;x(0,o.A)(e,t)),y),y.unstable_sxConfig=(0,r.A)({},h.A,null==g?void 0:g.unstable_sxConfig),y.unstable_sx=function(e){return(0,u.A)({sx:e,theme:this})},y}},3815(e,t,n){"use strict";n.d(t,{A:()=>i});var r=n(9172);const i=function(e,t){return t?(0,r.A)(e,t,{clone:!1}):e}},8604(e,t,n){"use strict";n.d(t,{LX:()=>p,MA:()=>d,_W:()=>g,Lc:()=>y,Ms:()=>v});var r=n(9751),i=n(7162),o=n(3815);const a={m:"margin",p:"padding"},s={t:"Top",r:"Right",b:"Bottom",l:"Left",x:["Left","Right"],y:["Top","Bottom"]},c={marginX:"mx",marginY:"my",paddingX:"px",paddingY:"py"},l=function(e){const t={};return n=>(void 0===t[n]&&(t[n]=e(n)),t[n])}((e=>{if(e.length>2){if(!c[e])return[e];e=c[e]}const[t,n]=e.split(""),r=a[t],i=s[n]||"";return Array.isArray(i)?i.map((e=>r+e)):[r+i]})),u=["m","mt","mr","mb","ml","mx","my","margin","marginTop","marginRight","marginBottom","marginLeft","marginX","marginY","marginInline","marginInlineStart","marginInlineEnd","marginBlock","marginBlockStart","marginBlockEnd"],h=["p","pt","pr","pb","pl","px","py","padding","paddingTop","paddingRight","paddingBottom","paddingLeft","paddingX","paddingY","paddingInline","paddingInlineStart","paddingInlineEnd","paddingBlock","paddingBlockStart","paddingBlockEnd"],f=[...u,...h];function d(e,t,n,r){var o;const a=null!=(o=(0,i.Yn)(e,t,!1))?o:n;return"number"===typeof a?e=>"string"===typeof e?e:a*e:Array.isArray(a)?e=>"string"===typeof e?e:a[e]:"function"===typeof a?a:()=>{}}function p(e){return d(e,"spacing",8)}function g(e,t){if("string"===typeof t||null==t)return t;const n=e(Math.abs(t));return t>=0?n:"number"===typeof n?-n:`-${n}`}function m(e,t,n,i){if(-1===t.indexOf(n))return null;const o=function(e,t){return n=>e.reduce(((e,r)=>(e[r]=g(t,n),e)),{})}(l(n),i),a=e[n];return(0,r.NI)(e,a,o)}function b(e,t){const n=p(e.theme);return Object.keys(e).map((r=>m(e,t,r,n))).reduce(o.A,{})}function y(e){return b(e,u)}function v(e){return b(e,h)}function w(e){return b(e,f)}y.propTypes={},y.filterProps=u,v.propTypes={},v.filterProps=h,w.propTypes={},w.filterProps=f},7162(e,t,n){"use strict";n.d(t,{Ay:()=>s,BO:()=>a,Yn:()=>o});var r=n(7598),i=n(9751);function o(e,t){let n=!(arguments.length>2&&void 0!==arguments[2])||arguments[2];if(!t||"string"!==typeof t)return null;if(e&&e.vars&&n){const n=`vars.${t}`.split(".").reduce(((e,t)=>e&&e[t]?e[t]:null),e);if(null!=n)return n}return t.split(".").reduce(((e,t)=>e&&null!=e[t]?e[t]:null),e)}function a(e,t,n){let r,i=arguments.length>3&&void 0!==arguments[3]?arguments[3]:n;return r="function"===typeof e?e(n):Array.isArray(e)?e[n]||i:o(e,n)||i,t&&(r=t(r,i,e)),r}const s=function(e){const{prop:t,cssProperty:n=e.prop,themeKey:s,transform:c}=e,l=e=>{if(null==e[t])return null;const l=e[t],u=o(e.theme,s)||{};return(0,i.NI)(e,l,(e=>{let i=a(u,c,e);return e===i&&"string"===typeof e&&(i=a(u,c,`${t}${"default"===e?"":(0,r.A)(e)}`,e)),!1===n?i:{[n]:i}}))};return l.propTypes={},l.filterProps=[t],l}},7758(e,t,n){"use strict";n.d(t,{A:()=>N});var r=n(8604),i=n(7162),o=n(3815);const a=function(){for(var e=arguments.length,t=new Array(e),n=0;n(t.filterProps.forEach((n=>{e[n]=t})),e)),{}),i=e=>Object.keys(e).reduce(((t,n)=>r[n]?(0,o.A)(t,r[n](e)):t),{});return i.propTypes={},i.filterProps=t.reduce(((e,t)=>e.concat(t.filterProps)),[]),i};var s=n(9751);function c(e){return"number"!==typeof e?e:`${e}px solid`}function l(e,t){return(0,i.Ay)({prop:e,themeKey:"borders",transform:t})}const u=l("border",c),h=l("borderTop",c),f=l("borderRight",c),d=l("borderBottom",c),p=l("borderLeft",c),g=l("borderColor"),m=l("borderTopColor"),b=l("borderRightColor"),y=l("borderBottomColor"),v=l("borderLeftColor"),w=l("outline",c),x=l("outlineColor"),k=e=>{if(void 0!==e.borderRadius&&null!==e.borderRadius){const t=(0,r.MA)(e.theme,"shape.borderRadius",4,"borderRadius"),n=e=>({borderRadius:(0,r._W)(t,e)});return(0,s.NI)(e,e.borderRadius,n)}return null};k.propTypes={},k.filterProps=["borderRadius"];a(u,h,f,d,p,g,m,b,y,v,k,w,x);const S=e=>{if(void 0!==e.gap&&null!==e.gap){const t=(0,r.MA)(e.theme,"spacing",8,"gap"),n=e=>({gap:(0,r._W)(t,e)});return(0,s.NI)(e,e.gap,n)}return null};S.propTypes={},S.filterProps=["gap"];const A=e=>{if(void 0!==e.columnGap&&null!==e.columnGap){const t=(0,r.MA)(e.theme,"spacing",8,"columnGap"),n=e=>({columnGap:(0,r._W)(t,e)});return(0,s.NI)(e,e.columnGap,n)}return null};A.propTypes={},A.filterProps=["columnGap"];const _=e=>{if(void 0!==e.rowGap&&null!==e.rowGap){const t=(0,r.MA)(e.theme,"spacing",8,"rowGap"),n=e=>({rowGap:(0,r._W)(t,e)});return(0,s.NI)(e,e.rowGap,n)}return null};_.propTypes={},_.filterProps=["rowGap"];a(S,A,_,(0,i.Ay)({prop:"gridColumn"}),(0,i.Ay)({prop:"gridRow"}),(0,i.Ay)({prop:"gridAutoFlow"}),(0,i.Ay)({prop:"gridAutoColumns"}),(0,i.Ay)({prop:"gridAutoRows"}),(0,i.Ay)({prop:"gridTemplateColumns"}),(0,i.Ay)({prop:"gridTemplateRows"}),(0,i.Ay)({prop:"gridTemplateAreas"}),(0,i.Ay)({prop:"gridArea"}));function T(e,t){return"grey"===t?t:e}a((0,i.Ay)({prop:"color",themeKey:"palette",transform:T}),(0,i.Ay)({prop:"bgcolor",cssProperty:"backgroundColor",themeKey:"palette",transform:T}),(0,i.Ay)({prop:"backgroundColor",themeKey:"palette",transform:T}));function C(e){return e<=1&&0!==e?100*e+"%":e}const E=(0,i.Ay)({prop:"width",transform:C}),O=e=>{if(void 0!==e.maxWidth&&null!==e.maxWidth){const t=t=>{var n,r;const i=(null==(n=e.theme)||null==(n=n.breakpoints)||null==(n=n.values)?void 0:n[t])||s.zu[t];return i?"px"!==(null==(r=e.theme)||null==(r=r.breakpoints)?void 0:r.unit)?{maxWidth:`${i}${e.theme.breakpoints.unit}`}:{maxWidth:i}:{maxWidth:C(t)}};return(0,s.NI)(e,e.maxWidth,t)}return null};O.filterProps=["maxWidth"];const P=(0,i.Ay)({prop:"minWidth",transform:C}),M=(0,i.Ay)({prop:"height",transform:C}),I=(0,i.Ay)({prop:"maxHeight",transform:C}),D=(0,i.Ay)({prop:"minHeight",transform:C}),N=((0,i.Ay)({prop:"size",cssProperty:"width",transform:C}),(0,i.Ay)({prop:"size",cssProperty:"height",transform:C}),a(E,O,P,M,I,D,(0,i.Ay)({prop:"boxSizing"})),{border:{themeKey:"borders",transform:c},borderTop:{themeKey:"borders",transform:c},borderRight:{themeKey:"borders",transform:c},borderBottom:{themeKey:"borders",transform:c},borderLeft:{themeKey:"borders",transform:c},borderColor:{themeKey:"palette"},borderTopColor:{themeKey:"palette"},borderRightColor:{themeKey:"palette"},borderBottomColor:{themeKey:"palette"},borderLeftColor:{themeKey:"palette"},outline:{themeKey:"borders",transform:c},outlineColor:{themeKey:"palette"},borderRadius:{themeKey:"shape.borderRadius",style:k},color:{themeKey:"palette",transform:T},bgcolor:{themeKey:"palette",cssProperty:"backgroundColor",transform:T},backgroundColor:{themeKey:"palette",transform:T},p:{style:r.Ms},pt:{style:r.Ms},pr:{style:r.Ms},pb:{style:r.Ms},pl:{style:r.Ms},px:{style:r.Ms},py:{style:r.Ms},padding:{style:r.Ms},paddingTop:{style:r.Ms},paddingRight:{style:r.Ms},paddingBottom:{style:r.Ms},paddingLeft:{style:r.Ms},paddingX:{style:r.Ms},paddingY:{style:r.Ms},paddingInline:{style:r.Ms},paddingInlineStart:{style:r.Ms},paddingInlineEnd:{style:r.Ms},paddingBlock:{style:r.Ms},paddingBlockStart:{style:r.Ms},paddingBlockEnd:{style:r.Ms},m:{style:r.Lc},mt:{style:r.Lc},mr:{style:r.Lc},mb:{style:r.Lc},ml:{style:r.Lc},mx:{style:r.Lc},my:{style:r.Lc},margin:{style:r.Lc},marginTop:{style:r.Lc},marginRight:{style:r.Lc},marginBottom:{style:r.Lc},marginLeft:{style:r.Lc},marginX:{style:r.Lc},marginY:{style:r.Lc},marginInline:{style:r.Lc},marginInlineStart:{style:r.Lc},marginInlineEnd:{style:r.Lc},marginBlock:{style:r.Lc},marginBlockStart:{style:r.Lc},marginBlockEnd:{style:r.Lc},displayPrint:{cssProperty:!1,transform:e=>({"@media print":{display:e}})},display:{},overflow:{},textOverflow:{},visibility:{},whiteSpace:{},flexBasis:{},flexDirection:{},flexWrap:{},justifyContent:{},alignItems:{},alignContent:{},order:{},flex:{},flexGrow:{},flexShrink:{},alignSelf:{},justifyItems:{},justifySelf:{},gap:{style:S},rowGap:{style:_},columnGap:{style:A},gridColumn:{},gridRow:{},gridAutoFlow:{},gridAutoColumns:{},gridAutoRows:{},gridTemplateColumns:{},gridTemplateRows:{},gridTemplateAreas:{},gridArea:{},position:{},zIndex:{themeKey:"zIndex"},top:{},right:{},bottom:{},left:{},boxShadow:{themeKey:"shadows"},width:{transform:C},maxWidth:{style:O},minWidth:{transform:C},height:{transform:C},maxHeight:{transform:C},minHeight:{transform:C},boxSizing:{},fontFamily:{themeKey:"typography"},fontSize:{themeKey:"typography"},fontStyle:{themeKey:"typography"},fontWeight:{themeKey:"typography"},letterSpacing:{},textTransform:{},lineHeight:{},textAlign:{},typography:{cssProperty:!1,themeKey:"typography"}})},8812(e,t,n){"use strict";n.d(t,{A:()=>l});var r=n(7598),i=n(3815),o=n(7162),a=n(9751),s=n(7758);const c=function(){function e(e,t,n,i){const s={[e]:t,theme:n},c=i[e];if(!c)return{[e]:t};const{cssProperty:l=e,themeKey:u,transform:h,style:f}=c;if(null==t)return null;if("typography"===u&&"inherit"===t)return{[e]:t};const d=(0,o.Yn)(n,u)||{};if(f)return f(s);return(0,a.NI)(s,t,(t=>{let n=(0,o.BO)(d,h,t);return t===n&&"string"===typeof t&&(n=(0,o.BO)(d,h,`${e}${"default"===t?"":(0,r.A)(t)}`,t)),!1===l?n:{[l]:n}}))}return function t(n){var r;const{sx:o,theme:c={},nested:l}=n||{};if(!o)return null;const u=null!=(r=c.unstable_sxConfig)?r:s.A;function h(n){let r=n;if("function"===typeof n)r=n(c);else if("object"!==typeof n)return n;if(!r)return null;const o=(0,a.EU)(c.breakpoints),s=Object.keys(o);let h=o;return Object.keys(r).forEach((n=>{const o=(s=r[n],l=c,"function"===typeof s?s(l):s);var s,l;if(null!==o&&void 0!==o)if("object"===typeof o)if(u[n])h=(0,i.A)(h,e(n,o,c,u));else{const e=(0,a.NI)({theme:c},o,(e=>({[n]:e})));!function(){for(var e=arguments.length,t=new Array(e),n=0;ne.concat(Object.keys(t))),[]),i=new Set(r);return t.every((e=>i.size===Object.keys(e).length))}(e,o)?h=(0,i.A)(h,e):h[n]=t({sx:o,theme:c,nested:!0})}else h=(0,i.A)(h,e(n,o,c,u))})),!l&&c.modularCssLayers?{"@layer sx":(0,a.vf)(s,h)}:(0,a.vf)(s,h)}return Array.isArray(o)?o.map(h):h(o)}}();c.filterProps=["sx"];const l=c},5527(e,t,n){"use strict";n.d(t,{A:()=>a});var r=n(7322),i=n(7082);const o=(0,r.A)();const a=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:o;return(0,i.A)(e)}},2919(e,t,n){"use strict";n.d(t,{A:()=>o});var r=n(3030);var i=n(5527);function o(e){let{props:t,name:n,defaultTheme:o,themeId:a}=e,s=(0,i.A)(o);a&&(s=s[a]||s);const c=function(e){const{theme:t,name:n,props:i}=e;return t&&t.components&&t.components[n]&&t.components[n].defaultProps?(0,r.A)(t.components[n].defaultProps,i):i}({theme:s,name:n,props:t});return c}},7082(e,t,n){"use strict";n.d(t,{A:()=>o});var r=n(5043),i=n(5025);const o=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null;const t=r.useContext(i.T);return t&&(n=t,0!==Object.keys(n).length)?t:e;var n}},9386(e,t,n){"use strict";n.d(t,{A:()=>i});const r=e=>e,i=(()=>{let e=r;return{configure(t){e=t},generate:t=>e(t),reset(){e=r}}})()},7598(e,t,n){"use strict";n.d(t,{A:()=>i});var r=n(7868);function i(e){if("string"!==typeof e)throw new Error((0,r.A)(7));return e.charAt(0).toUpperCase()+e.slice(1)}},8610(e,t,n){"use strict";function r(e,t){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:void 0;const r={};return Object.keys(e).forEach((i=>{r[i]=e[i].reduce(((e,r)=>{if(r){const i=t(r);""!==i&&e.push(i),n&&n[r]&&e.push(n[r])}return e}),[]).join(" ")})),r}n.d(t,{A:()=>r})},2456(e,t,n){"use strict";function r(){for(var e=arguments.length,t=new Array(e),n=0;nnull==t?e:function(){for(var n=arguments.length,r=new Array(n),i=0;i{}))}n.d(t,{A:()=>r})},3468(e,t,n){"use strict";function r(e){let t,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:166;function r(){for(var r=arguments.length,i=new Array(r),o=0;o{e.apply(this,i)}),n)}return r.clear=()=>{clearTimeout(t)},r}n.d(t,{A:()=>r})},9172(e,t,n){"use strict";n.d(t,{A:()=>s,Q:()=>o});var r=n(8168),i=n(5043);function o(e){if("object"!==typeof e||null===e)return!1;const t=Object.getPrototypeOf(e);return(null===t||t===Object.prototype||null===Object.getPrototypeOf(t))&&!(Symbol.toStringTag in e)&&!(Symbol.iterator in e)}function a(e){if(i.isValidElement(e)||!o(e))return e;const t={};return Object.keys(e).forEach((n=>{t[n]=a(e[n])})),t}function s(e,t){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{clone:!0};const c=n.clone?(0,r.A)({},e):e;return o(e)&&o(t)&&Object.keys(t).forEach((r=>{i.isValidElement(t[r])?c[r]=t[r]:o(t[r])&&Object.prototype.hasOwnProperty.call(e,r)&&o(e[r])?c[r]=s(e[r],t[r],n):n.clone?c[r]=o(t[r])?a(t[r]):t[r]:c[r]=t[r]})),c}},7868(e,t,n){"use strict";function r(e){let t="https://mui.com/production-error/?code="+e;for(let n=1;nr})},2372(e,t,n){"use strict";n.d(t,{Ay:()=>o});var r=n(9386);const i={active:"active",checked:"checked",completed:"completed",disabled:"disabled",error:"error",expanded:"expanded",focused:"focused",focusVisible:"focusVisible",open:"open",readOnly:"readOnly",required:"required",selected:"selected"};function o(e,t){const n=i[t];return n?`${arguments.length>2&&void 0!==arguments[2]?arguments[2]:"Mui"}-${n}`:`${r.A.generate(e)}-${t}`}},2532(e,t,n){"use strict";n.d(t,{A:()=>i});var r=n(2372);function i(e,t){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"Mui";const i={};return t.forEach((t=>{i[t]=(0,r.Ay)(e,t,n)})),i}},1668(e,t,n){"use strict";function r(e){return e&&e.ownerDocument||document}n.d(t,{A:()=>r})},3940(e,t,n){"use strict";n.d(t,{A:()=>i});var r=n(1668);function i(e){return(0,r.A)(e).defaultView||window}},3030(e,t,n){"use strict";n.d(t,{A:()=>i});var r=n(8168);function i(e,t){const n=(0,r.A)({},t);return Object.keys(e).forEach((o=>{if(o.toString().match(/^(components|slots)$/))n[o]=(0,r.A)({},e[o],n[o]);else if(o.toString().match(/^(componentsProps|slotProps)$/)){const a=e[o]||{},s=t[o];n[o]={},s&&Object.keys(s)?a&&Object.keys(a)?(n[o]=(0,r.A)({},s),Object.keys(a).forEach((e=>{n[o][e]=i(a[e],s[e])}))):n[o]=s:n[o]=a}else void 0===n[o]&&(n[o]=e[o])})),n}},6564(e,t,n){"use strict";function r(e,t){"function"===typeof e?e(t):e&&(e.current=t)}n.d(t,{A:()=>r})},1052(e,t,n){"use strict";n.d(t,{A:()=>i});var r=n(5043);function i(e){let{controlled:t,default:n,name:i,state:o="value"}=e;const{current:a}=r.useRef(void 0!==t),[s,c]=r.useState(n);return[a?t:s,r.useCallback((e=>{a||c(e)}),[])]}},4440(e,t,n){"use strict";n.d(t,{A:()=>i});var r=n(5043);const i="undefined"!==typeof window?r.useLayoutEffect:r.useEffect},1782(e,t,n){"use strict";n.d(t,{A:()=>o});var r=n(5043),i=n(4440);const o=function(e){const t=r.useRef(e);return(0,i.A)((()=>{t.current=e})),r.useRef((function(){return(0,t.current)(...arguments)})).current}},3462(e,t,n){"use strict";n.d(t,{A:()=>o});var r=n(5043),i=n(6564);function o(){for(var e=arguments.length,t=new Array(e),n=0;nt.every((e=>null==e))?null:e=>{t.forEach((t=>{(0,i.A)(t,e)}))}),t)}},5844(e,t,n){"use strict";var r;n.d(t,{A:()=>s});var i=n(5043);let o=0;const a=(r||(r=n.t(i,2)))["useId".toString()];function s(e){if(void 0!==a){const t=a();return null!=e?e:t}return function(e){const[t,n]=i.useState(e),r=e||t;return i.useEffect((()=>{null==t&&(o+=1,n(`mui-${o}`))}),[t]),r}(e)}},9944(e,t){"use strict";var n=this&&this.__assign||function(){return n=Object.assign||function(e){for(var t,n=1,r=arguments.length;nr?1:r>n?-1:0}));for(var S=0,A=f;S"'+i(p.triggerBinding)+'"]:::'+p.triggerBinding.type+" --\x3e "+p.name+"\n");for(var C=0,E=p.inputBindings;C "+p.name+"\n"}for(var P=0,M=p.outputBindings;P "+p.name+".binding"+I.index+"."+I.type+'(["'+o(I)+'"]):::'+I.type+"\n"}for(var D=0,N=p.otherBindings;D0){var B="#FFE6C8",$="",z=!1;for(var H in t){var q=t[H],V=H.replace(/ /g,"");z=q.warningNotAddedToCsProjFile,$="",q.matchCondition&&(q.matchCondition.methods&&q.matchCondition.methods.length&&($+=($?":":"")+"["+q.matchCondition.methods.join(",")+"]"),q.matchCondition.route&&($+=($?":":"")+q.matchCondition.route)),$||($=H);var U="proxy."+V;if(h+='proxies.json -. "'+H+'" .-> '+U+'(["'+r+$+'"]):::proxy\n',h+="style "+U+" fill:"+B+"\n",q.backendUri){$=q.backendUri.replace(/'response./g,"'");var W="proxy."+V+".backendUri";h+=U+" "+s(q.requestOverrides)+" "+W+'["'+r+$+'"]:::http\n',h+="style "+W+" fill:"+B+"\n",U=W}var G="proxy."+V+".response";h+=U+" "+c(q.responseOverrides)+" "+G+'(["'+r+'."]):::http\n',h+="style "+G+" fill:"+B+"\n"}$="proxies.json";var Y=B;z&&($+=" #9888; Not added to .CSPROJ file!",Y="#FF8080"),h+='proxies.json["'+r+$+'"]\n',h+="style proxies.json fill:"+Y+"\n"}return h};var a=150;function s(e){if(!e)return"--\x3e";var t=JSON.stringify(e).replace(/"/g,"'").replace(/'backend.request./g,"'");return t.length>a&&(t=t.substr(0,a)+"..."),'-- "'+t+r+'" --\x3e'}function c(e){if(!e)return"--\x3e";e["response.body"]&&(e["response.body"]="...");var t=JSON.stringify(e).replace(/"/g,"'").replace(/'response./g,"'");return t.length>a&&(t=t.substr(0,a)+"..."),'-- "'+t+r+'" --\x3e'}},5747(e,t,n){"use strict";var r=n(3864),i=n(5061),o=n(4937),a=n(4590);e.exports=a||r.call(o,i)},5061(e){"use strict";e.exports=Function.prototype.apply},4937(e){"use strict";e.exports=Function.prototype.call},9543(e,t,n){"use strict";var r=n(3864),i=n(4902),o=n(4937),a=n(5747);e.exports=function(e){if(e.length<1||"function"!==typeof e[0])throw new i("a function is required");return a(r,o,e)}},4590(e){"use strict";e.exports="undefined"!==typeof Reflect&&Reflect&&Reflect.apply},2028(e,t,n){"use strict";var r=n(2),i=n(1712),o=i(r("String.prototype.indexOf"));e.exports=function(e,t){var n=r(e,!!t);return"function"===typeof n&&o(e,".prototype.")>-1?i(n):n}},1712(e,t,n){"use strict";var r=n(3864),i=n(2),o=n(5438),a=n(4902),s=i("%Function.prototype.apply%"),c=i("%Function.prototype.call%"),l=i("%Reflect.apply%",!0)||r.call(c,s),u=n(2090),h=i("%Math.max%");e.exports=function(e){if("function"!==typeof e)throw new a("a function is required");var t=l(r,c,arguments);return o(t,1+h(0,e.length-(arguments.length-1)),!0)};var f=function(){return l(r,s,arguments)};u?u(e.exports,"apply",{value:f}):e.exports.apply=f},3024(e,t,n){"use strict";function r(e){var t,n,i="";if("string"==typeof e||"number"==typeof e)i+=e;else if("object"==typeof e)if(Array.isArray(e))for(t=0;ti});const i=function(){for(var e,t,n=0,i="";ne.coolingFactor*e.maxNodeDisplacement&&(this.displacementX=e.coolingFactor*e.maxNodeDisplacement*i.sign(this.displacementX)),Math.abs(this.displacementY)>e.coolingFactor*e.maxNodeDisplacement&&(this.displacementY=e.coolingFactor*e.maxNodeDisplacement*i.sign(this.displacementY)),null==this.child||0==this.child.getNodes().length?this.moveBy(this.displacementX,this.displacementY):this.propogateDisplacementToChildren(this.displacementX,this.displacementY),e.totalDisplacement+=Math.abs(this.displacementX)+Math.abs(this.displacementY),this.springForceX=0,this.springForceY=0,this.repulsionForceX=0,this.repulsionForceY=0,this.gravitationForceX=0,this.gravitationForceY=0,this.displacementX=0,this.displacementY=0},o.prototype.propogateDisplacementToChildren=function(e,t){for(var n,r=this.getChild().getNodes(),i=0;i0)this.positionNodesRadially(e);else{this.reduceTrees(),this.graphManager.resetAllNodesToApplyGravitation();var t=new Set(this.getAllNodes()),n=this.nodesWithGravity.filter((function(e){return t.has(e)}));this.graphManager.setAllNodesToApplyGravitation(n),this.positionNodesRandomly()}}return this.initSpringEmbedder(),this.runSpringEmbedder(),!0},y.prototype.tick=function(){if(this.totalIterations++,this.totalIterations===this.maxIterations&&!this.isTreeGrowing&&!this.isGrowthFinished){if(!(this.prunedNodesAll.length>0))return!0;this.isTreeGrowing=!0}if(this.totalIterations%l.CONVERGENCE_CHECK_PERIOD==0&&!this.isTreeGrowing&&!this.isGrowthFinished){if(this.isConverged()){if(!(this.prunedNodesAll.length>0))return!0;this.isTreeGrowing=!0}this.coolingCycle++,0==this.layoutQuality?this.coolingAdjuster=this.coolingCycle:1==this.layoutQuality&&(this.coolingAdjuster=this.coolingCycle/3),this.coolingFactor=Math.max(this.initialCoolingFactor-Math.pow(this.coolingCycle,Math.log(100*(this.initialCoolingFactor-this.finalTemperature))/Math.log(this.maxCoolingCycle))/100*this.coolingAdjuster,this.finalTemperature),this.animationPeriod=Math.ceil(this.initialAnimationPeriod*Math.sqrt(this.coolingFactor))}if(this.isTreeGrowing){if(this.growTreeIterations%10==0)if(this.prunedNodesAll.length>0){this.graphManager.updateBounds(),this.updateGrid(),this.growTree(this.prunedNodesAll),this.graphManager.resetAllNodesToApplyGravitation();var e=new Set(this.getAllNodes()),t=this.nodesWithGravity.filter((function(t){return e.has(t)}));this.graphManager.setAllNodesToApplyGravitation(t),this.graphManager.updateBounds(),this.updateGrid(),this.coolingFactor=l.DEFAULT_COOLING_FACTOR_INCREMENTAL}else this.isTreeGrowing=!1,this.isGrowthFinished=!0;this.growTreeIterations++}if(this.isGrowthFinished){if(this.isConverged())return!0;this.afterGrowthIterations%10==0&&(this.graphManager.updateBounds(),this.updateGrid()),this.coolingFactor=l.DEFAULT_COOLING_FACTOR_INCREMENTAL*((100-this.afterGrowthIterations)/100),this.afterGrowthIterations++}var n=!this.isTreeGrowing&&!this.isGrowthFinished,r=this.growTreeIterations%10==1&&this.isTreeGrowing||this.afterGrowthIterations%10==1&&this.isGrowthFinished;return this.totalDisplacement=0,this.graphManager.updateBounds(),this.calcSpringForces(),this.calcRepulsionForces(n,r),this.calcGravitationalForces(),this.moveNodes(),this.animate(),!1},y.prototype.getPositionsData=function(){for(var e=this.graphManager.getAllNodes(),t={},n=0;n1)for(s=0;sr&&(r=Math.floor(a.y)),o=Math.floor(a.x+c.DEFAULT_COMPONENT_SEPERATION)}this.transform(new f(u.WORLD_CENTER_X-a.x/2,u.WORLD_CENTER_Y-a.y/2))},y.radialLayout=function(e,t,n){var r=Math.max(this.maxDiagonalInTree(e),c.DEFAULT_RADIAL_SEPARATION);y.branchRadialLayout(t,null,0,359,0,r);var i=m.calculateBounds(e),o=new b;o.setDeviceOrgX(i.getMinX()),o.setDeviceOrgY(i.getMinY()),o.setWorldOrgX(n.x),o.setWorldOrgY(n.y);for(var a=0;a1;){var b=m[0];m.splice(0,1);var v=u.indexOf(b);v>=0&&u.splice(v,1),p--,h--}f=null!=t?(u.indexOf(m[0])+1)%p:0;for(var w=Math.abs(r-n)/h,x=f;d!=h;x=++x%p){var k=u[x].getOtherEnd(e);if(k!=t){var S=(n+d*w)%360,A=(S+w)%360;y.branchRadialLayout(k,e,S,A,i+o,o),d++}}},y.maxDiagonalInTree=function(e){for(var t=p.MIN_VALUE,n=0;nt&&(t=r)}return t},y.prototype.calcRepulsionRange=function(){return 2*(this.level+1)*this.idealEdgeLength},y.prototype.groupZeroDegreeMembers=function(){var e=this,t={};this.memberGroups={},this.idToDummyNode={};for(var n=[],r=this.graphManager.getAllNodes(),i=0;i1){var r="DummyCompound_"+n;e.memberGroups[r]=t[n];var i=t[n][0].getParent(),o=new a(e.graphManager);o.id=r,o.paddingLeft=i.paddingLeft||0,o.paddingRight=i.paddingRight||0,o.paddingBottom=i.paddingBottom||0,o.paddingTop=i.paddingTop||0,e.idToDummyNode[r]=o;var s=e.getGraphManager().add(e.newGraph(),o),c=i.getChild();c.add(o);for(var l=0;l=0;e--){var t=this.compoundOrder[e],n=t.id,r=t.paddingLeft,i=t.paddingTop;this.adjustLocations(this.tiledMemberPack[n],t.rect.x,t.rect.y,r,i)}},y.prototype.repopulateZeroDegreeMembers=function(){var e=this,t=this.tiledZeroDegreePack;Object.keys(t).forEach((function(n){var r=e.idToDummyNode[n],i=r.paddingLeft,o=r.paddingTop;e.adjustLocations(t[n],r.rect.x,r.rect.y,i,o)}))},y.prototype.getToBeTiled=function(e){var t=e.id;if(null!=this.toBeTiled[t])return this.toBeTiled[t];var n=e.getChild();if(null==n)return this.toBeTiled[t]=!1,!1;for(var r=n.getNodes(),i=0;i0)return this.toBeTiled[t]=!1,!1;if(null!=o.getChild()){if(!this.getToBeTiled(o))return this.toBeTiled[t]=!1,!1}else this.toBeTiled[o.id]=!1}return this.toBeTiled[t]=!0,!0},y.prototype.getNodeDegree=function(e){e.id;for(var t=e.getEdges(),n=0,r=0;rc&&(c=u.rect.height)}n+=c+e.verticalPadding}},y.prototype.tileCompoundMembers=function(e,t){var n=this;this.tiledMemberPack=[],Object.keys(e).forEach((function(r){var i=t[r];n.tiledMemberPack[r]=n.tileNodes(e[r],i.paddingLeft+i.paddingRight),i.rect.width=n.tiledMemberPack[r].width,i.rect.height=n.tiledMemberPack[r].height}))},y.prototype.tileNodes=function(e,t){var n={rows:[],rowWidth:[],rowHeight:[],width:0,height:t,verticalPadding:c.TILING_PADDING_VERTICAL,horizontalPadding:c.TILING_PADDING_HORIZONTAL};e.sort((function(e,t){return e.rect.width*e.rect.height>t.rect.width*t.rect.height?-1:e.rect.width*e.rect.height0&&(o+=e.horizontalPadding),e.rowWidth[n]=o,e.width0&&(a+=e.verticalPadding);var s=0;a>e.rowHeight[n]&&(s=e.rowHeight[n],e.rowHeight[n]=a,s=e.rowHeight[n]-s),e.height+=s,e.rows[n].push(t)},y.prototype.getShortestRowIndex=function(e){for(var t=-1,n=Number.MAX_VALUE,r=0;rn&&(t=r,n=e.rowWidth[r]);return t},y.prototype.canAddHorizontal=function(e,t,n){var r=this.getShortestRowIndex(e);if(r<0)return!0;var i=e.rowWidth[r];if(i+e.horizontalPadding+t<=e.width)return!0;var o,a,s=0;return e.rowHeight[r]0&&(s=n+e.verticalPadding-e.rowHeight[r]),o=e.width-i>=t+e.horizontalPadding?(e.height+s)/(i+t+e.horizontalPadding):(e.height+s)/e.width,s=n+e.verticalPadding,(a=e.widtho&&t!=n){r.splice(-1,1),e.rows[n].push(i),e.rowWidth[t]=e.rowWidth[t]-o,e.rowWidth[n]=e.rowWidth[n]+o,e.width=e.rowWidth[instance.getLongestRowIndex(e)];for(var a=Number.MIN_VALUE,s=0;sa&&(a=r[s].height);t>0&&(a+=e.verticalPadding);var c=e.rowHeight[t]+e.rowHeight[n];e.rowHeight[t]=a,e.rowHeight[n]0)for(var u=i;u<=o;u++)c[0]+=this.grid[u][a-1].length+this.grid[u][a].length-1;if(o0)for(u=a;u<=s;u++)c[3]+=this.grid[i-1][u].length+this.grid[i][u].length-1;for(var h,f,d=p.MAX_VALUE,g=0;g0&&(a=n.getGraphManager().add(n.newGraph(),o),this.processChildrenList(a,h,n))}},h.prototype.stop=function(){return this.stopped=!0,this};var d=function(e){e("layout","cose-bilkent",h)};"undefined"!==typeof cytoscape&&d(cytoscape),e.exports=d}])},e.exports=r(n(620))},305(e,t,n){"use strict";function r(e,t){let n;if(void 0===t)for(const r of e)null!=r&&(n>r||void 0===n&&r>=r)&&(n=r);else{let r=-1;for(let i of e)null!=(i=t(i,++r,e))&&(n>i||void 0===n&&i>=i)&&(n=i)}return n}n.d(t,{A:()=>r})},9657(e,t,n){"use strict";n.d(t,{gX:()=>c,kb:()=>o,pD:()=>s,pG:()=>a});var r=n(305);function i(e){return e.target.depth}function o(e){return e.depth}function a(e,t){return t-1-e.height}function s(e,t){return e.sourceLinks.length?e.depth:t-1}function c(e){return e.targetLinks.length?e.depth:e.sourceLinks.length?(0,r.A)(e.sourceLinks,i)-1:0}},5486(e,t,n){"use strict";function r(e,t){let n=0;if(void 0===t)for(let r of e)(r=+r)&&(n+=r);else{let r=-1;for(let i of e)(i=+t(i,++r,e))&&(n+=i)}return n}function i(e,t){let n;if(void 0===t)for(const r of e)null!=r&&(n=r)&&(n=r);else{let r=-1;for(let i of e)null!=(i=t(i,++r,e))&&(n=i)&&(n=i)}return n}n.d(t,{A:()=>b});var o=n(305),a=n(9657);function s(e){return function(){return e}}function c(e,t){return u(e.source,t.source)||e.index-t.index}function l(e,t){return u(e.target,t.target)||e.index-t.index}function u(e,t){return e.y0-t.y0}function h(e){return e.value}function f(e){return e.index}function d(e){return e.nodes}function p(e){return e.links}function g(e,t){const n=e.get(t);if(!n)throw new Error("missing: "+t);return n}function m(e){let{nodes:t}=e;for(const n of t){let e=n.y0,t=e;for(const r of n.sourceLinks)r.y0=e+r.width/2,e+=r.width;for(const r of n.targetLinks)r.y1=t+r.width/2,t+=r.width}}function b(){let e,t,n,b=0,y=0,v=1,w=1,x=24,k=8,S=f,A=a.pD,_=d,T=p,C=6;function E(){const a={nodes:_.apply(null,arguments),links:T.apply(null,arguments)};return function(e){let{nodes:t,links:r}=e;for(const[n,o]of t.entries())o.index=n,o.sourceLinks=[],o.targetLinks=[];const i=new Map(t.map(((e,n)=>[S(e,n,t),e])));for(const[n,o]of r.entries()){o.index=n;let{source:e,target:t}=o;"object"!==typeof e&&(e=o.source=g(i,e)),"object"!==typeof t&&(t=o.target=g(i,t)),e.sourceLinks.push(o),t.targetLinks.push(o)}if(null!=n)for(const{sourceLinks:o,targetLinks:a}of t)o.sort(n),a.sort(n)}(a),function(e){let{nodes:t}=e;for(const n of t)n.value=void 0===n.fixedValue?Math.max(r(n.sourceLinks,h),r(n.targetLinks,h)):n.fixedValue}(a),function(e){let{nodes:t}=e;const n=t.length;let r=new Set(t),i=new Set,o=0;for(;r.size;){for(const e of r){e.depth=o;for(const{target:t}of e.sourceLinks)i.add(t)}if(++o>n)throw new Error("circular link");r=i,i=new Set}}(a),function(e){let{nodes:t}=e;const n=t.length;let r=new Set(t),i=new Set,o=0;for(;r.size;){for(const e of r){e.height=o;for(const{source:t}of e.targetLinks)i.add(t)}if(++o>n)throw new Error("circular link");r=i,i=new Set}}(a),function(n){const a=function(e){let{nodes:n}=e;const r=i(n,(e=>e.depth))+1,o=(v-b-x)/(r-1),a=new Array(r);for(const t of n){const e=Math.max(0,Math.min(r-1,Math.floor(A.call(null,t,r))));t.layer=e,t.x0=b+e*o,t.x1=t.x0+x,a[e]?a[e].push(t):a[e]=[t]}if(t)for(const i of a)i.sort(t);return a}(n);e=Math.min(k,(w-y)/(i(a,(e=>e.length))-1)),function(t){const n=(0,o.A)(t,(t=>(w-y-(t.length-1)*e)/r(t,h)));for(const r of t){let t=y;for(const i of r){i.y0=t,i.y1=t+i.value*n,t=i.y1+e;for(const e of i.sourceLinks)e.width=e.value*n}t=(w-t+e)/(r.length+1);for(let e=0;e0))continue;let i=(t/r-e.y0)*n;e.y0+=i,e.y1+=i,N(e)}void 0===t&&o.sort(u),M(o,r)}}function P(e,n,r){for(let i=e.length-2;i>=0;--i){const o=e[i];for(const e of o){let t=0,r=0;for(const{target:n,value:o}of e.sourceLinks){let i=o*(n.layer-e.layer);t+=j(e,n)*i,r+=i}if(!(r>0))continue;let i=(t/r-e.y0)*n;e.y0+=i,e.y1+=i,N(e)}void 0===t&&o.sort(u),M(o,r)}}function M(t,n){const r=t.length>>1,i=t[r];D(t,i.y0-e,r-1,n),I(t,i.y1+e,r+1,n),D(t,w,t.length-1,n),I(t,y,0,n)}function I(t,n,r,i){for(;r1e-6&&(o.y0+=a,o.y1+=a),n=o.y1+e}}function D(t,n,r,i){for(;r>=0;--r){const o=t[r],a=(o.y1-n)*i;a>1e-6&&(o.y0-=a,o.y1-=a),n=o.y0-e}}function N(e){let{sourceLinks:t,targetLinks:r}=e;if(void 0===n){for(const{source:{sourceLinks:e}}of r)e.sort(l);for(const{target:{targetLinks:e}}of t)e.sort(c)}}function L(e){if(void 0===n)for(const{sourceLinks:t,targetLinks:n}of e)t.sort(l),n.sort(c)}function R(t,n){let r=t.y0-(t.sourceLinks.length-1)*e/2;for(const{target:i,width:o}of t.sourceLinks){if(i===n)break;r+=o+e}for(const{source:e,width:i}of n.targetLinks){if(e===t)break;r-=i}return r}function j(t,n){let r=n.y0-(n.targetLinks.length-1)*e/2;for(const{source:i,width:o}of n.targetLinks){if(i===t)break;r+=o+e}for(const{target:e,width:i}of t.sourceLinks){if(e===n)break;r-=i}return r}return E.update=function(e){return m(e),e},E.nodeId=function(e){return arguments.length?(S="function"===typeof e?e:s(e),E):S},E.nodeAlign=function(e){return arguments.length?(A="function"===typeof e?e:s(e),E):A},E.nodeSort=function(e){return arguments.length?(t=e,E):t},E.nodeWidth=function(e){return arguments.length?(x=+e,E):x},E.nodePadding=function(t){return arguments.length?(k=e=+t,E):k},E.nodes=function(e){return arguments.length?(_="function"===typeof e?e:s(e),E):_},E.links=function(e){return arguments.length?(T="function"===typeof e?e:s(e),E):T},E.linkSort=function(e){return arguments.length?(n=e,E):n},E.size=function(e){return arguments.length?(b=y=0,v=+e[0],w=+e[1],E):[v-b,w-y]},E.extent=function(e){return arguments.length?(b=+e[0][0],v=+e[1][0],y=+e[0][1],w=+e[1][1],E):[[b,y],[v,w]]},E.iterations=function(e){return arguments.length?(C=+e,E):C},E}},6439(e,t,n){"use strict";n.d(t,{A:()=>w});var r=Math.PI,i=2*r,o=1e-6,a=i-o;function s(){this._x0=this._y0=this._x1=this._y1=null,this._=""}function c(){return new s}s.prototype=c.prototype={constructor:s,moveTo:function(e,t){this._+="M"+(this._x0=this._x1=+e)+","+(this._y0=this._y1=+t)},closePath:function(){null!==this._x1&&(this._x1=this._x0,this._y1=this._y0,this._+="Z")},lineTo:function(e,t){this._+="L"+(this._x1=+e)+","+(this._y1=+t)},quadraticCurveTo:function(e,t,n,r){this._+="Q"+ +e+","+ +t+","+(this._x1=+n)+","+(this._y1=+r)},bezierCurveTo:function(e,t,n,r,i,o){this._+="C"+ +e+","+ +t+","+ +n+","+ +r+","+(this._x1=+i)+","+(this._y1=+o)},arcTo:function(e,t,n,i,a){e=+e,t=+t,n=+n,i=+i,a=+a;var s=this._x1,c=this._y1,l=n-e,u=i-t,h=s-e,f=c-t,d=h*h+f*f;if(a<0)throw new Error("negative radius: "+a);if(null===this._x1)this._+="M"+(this._x1=e)+","+(this._y1=t);else if(d>o)if(Math.abs(f*l-u*h)>o&&a){var p=n-s,g=i-c,m=l*l+u*u,b=p*p+g*g,y=Math.sqrt(m),v=Math.sqrt(d),w=a*Math.tan((r-Math.acos((m+d-b)/(2*y*v)))/2),x=w/v,k=w/y;Math.abs(x-1)>o&&(this._+="L"+(e+x*h)+","+(t+x*f)),this._+="A"+a+","+a+",0,0,"+ +(f*p>h*g)+","+(this._x1=e+k*l)+","+(this._y1=t+k*u)}else this._+="L"+(this._x1=e)+","+(this._y1=t);else;},arc:function(e,t,n,s,c,l){e=+e,t=+t,l=!!l;var u=(n=+n)*Math.cos(s),h=n*Math.sin(s),f=e+u,d=t+h,p=1^l,g=l?s-c:c-s;if(n<0)throw new Error("negative radius: "+n);null===this._x1?this._+="M"+f+","+d:(Math.abs(this._x1-f)>o||Math.abs(this._y1-d)>o)&&(this._+="L"+f+","+d),n&&(g<0&&(g=g%i+i),g>a?this._+="A"+n+","+n+",0,1,"+p+","+(e-u)+","+(t-h)+"A"+n+","+n+",0,1,"+p+","+(this._x1=f)+","+(this._y1=d):g>o&&(this._+="A"+n+","+n+",0,"+ +(g>=r)+","+p+","+(this._x1=e+n*Math.cos(c))+","+(this._y1=t+n*Math.sin(c))))},rect:function(e,t,n,r){this._+="M"+(this._x0=this._x1=+e)+","+(this._y0=this._y1=+t)+"h"+ +n+"v"+ +r+"h"+-n+"Z"},toString:function(){return this._}};const l=c;var u=Array.prototype.slice;function h(e){return function(){return e}}function f(e){return e[0]}function d(e){return e[1]}function p(e){return e.source}function g(e){return e.target}function m(e){var t=p,n=g,r=f,i=d,o=null;function a(){var a,s=u.call(arguments),c=t.apply(this,s),h=n.apply(this,s);if(o||(o=a=l()),e(o,+r.apply(this,(s[0]=c,s)),+i.apply(this,s),+r.apply(this,(s[0]=h,s)),+i.apply(this,s)),a)return o=null,a+""||null}return a.source=function(e){return arguments.length?(t=e,a):t},a.target=function(e){return arguments.length?(n=e,a):n},a.x=function(e){return arguments.length?(r="function"===typeof e?e:h(+e),a):r},a.y=function(e){return arguments.length?(i="function"===typeof e?e:h(+e),a):i},a.context=function(e){return arguments.length?(o=null==e?null:e,a):o},a}function b(e,t,n,r,i){e.moveTo(t,n),e.bezierCurveTo(t=(t+r)/2,n,t,i,r,i)}function y(e){return[e.source.x1,e.y0]}function v(e){return[e.target.x0,e.y1]}function w(){return m(b).source(y).target(v)}Object.defineProperty(h,"name",{value:"default",configurable:!0}),Object.defineProperty(w,"name",{value:"default",configurable:!0})},446(e){e.exports=function(){"use strict";var e=1e3,t=6e4,n=36e5,r="millisecond",i="second",o="minute",a="hour",s="day",c="week",l="month",u="quarter",h="year",f="date",d="Invalid Date",p=/^(\d{4})[-/]?(\d{1,2})?[-/]?(\d{0,2})[Tt\s]*(\d{1,2})?:?(\d{1,2})?:?(\d{1,2})?[.:]?(\d+)?$/,g=/\[([^\]]+)]|Y{1,4}|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|a|A|m{1,2}|s{1,2}|Z{1,2}|SSS/g,m={name:"en",weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),ordinal:function(e){var t=["th","st","nd","rd"],n=e%100;return"["+e+(t[(n-20)%10]||t[n]||t[0])+"]"}},b=function(e,t,n){var r=String(e);return!r||r.length>=t?e:""+Array(t+1-r.length).join(n)+e},y={s:b,z:function(e){var t=-e.utcOffset(),n=Math.abs(t),r=Math.floor(n/60),i=n%60;return(t<=0?"+":"-")+b(r,2,"0")+":"+b(i,2,"0")},m:function e(t,n){if(t.date()1)return e(a[0])}else{var s=t.name;w[s]=t,i=s}return!r&&i&&(v=i),i||!r&&v},S=function(e,t){if(x(e))return e.clone();var n="object"==typeof t?t:{};return n.date=e,n.args=arguments,new _(n)},A=y;A.l=k,A.i=x,A.w=function(e,t){return S(e,{locale:t.$L,utc:t.$u,x:t.$x,$offset:t.$offset})};var _=function(){function m(e){this.$L=k(e.locale,null,!0),this.parse(e)}var b=m.prototype;return b.parse=function(e){this.$d=function(e){var t=e.date,n=e.utc;if(null===t)return new Date(NaN);if(A.u(t))return new Date;if(t instanceof Date)return new Date(t);if("string"==typeof t&&!/Z$/i.test(t)){var r=t.match(p);if(r){var i=r[2]-1||0,o=(r[7]||"0").substring(0,3);return n?new Date(Date.UTC(r[1],i,r[3]||1,r[4]||0,r[5]||0,r[6]||0,o)):new Date(r[1],i,r[3]||1,r[4]||0,r[5]||0,r[6]||0,o)}}return new Date(t)}(e),this.$x=e.x||{},this.init()},b.init=function(){var e=this.$d;this.$y=e.getFullYear(),this.$M=e.getMonth(),this.$D=e.getDate(),this.$W=e.getDay(),this.$H=e.getHours(),this.$m=e.getMinutes(),this.$s=e.getSeconds(),this.$ms=e.getMilliseconds()},b.$utils=function(){return A},b.isValid=function(){return!(this.$d.toString()===d)},b.isSame=function(e,t){var n=S(e);return this.startOf(t)<=n&&n<=this.endOf(t)},b.isAfter=function(e,t){return S(e)68?1900:2e3)},s=function(e){return function(t){this[e]=+t}},c=[/[+-]\d\d:?(\d\d)?|Z/,function(e){(this.zone||(this.zone={})).offset=function(e){if(!e)return 0;if("Z"===e)return 0;var t=e.match(/([+-]|\d\d)/g),n=60*t[1]+(+t[2]||0);return 0===n?0:"+"===t[0]?-n:n}(e)}],l=function(e){var t=o[e];return t&&(t.indexOf?t:t.s.concat(t.f))},u=function(e,t){var n,r=o.meridiem;if(r){for(var i=1;i<=24;i+=1)if(e.indexOf(r(i,0,t))>-1){n=i>12;break}}else n=e===(t?"pm":"PM");return n},h={A:[i,function(e){this.afternoon=u(e,!1)}],a:[i,function(e){this.afternoon=u(e,!0)}],S:[/\d/,function(e){this.milliseconds=100*+e}],SS:[n,function(e){this.milliseconds=10*+e}],SSS:[/\d{3}/,function(e){this.milliseconds=+e}],s:[r,s("seconds")],ss:[r,s("seconds")],m:[r,s("minutes")],mm:[r,s("minutes")],H:[r,s("hours")],h:[r,s("hours")],HH:[r,s("hours")],hh:[r,s("hours")],D:[r,s("day")],DD:[n,s("day")],Do:[i,function(e){var t=o.ordinal,n=e.match(/\d+/);if(this.day=n[0],t)for(var r=1;r<=31;r+=1)t(r).replace(/\[|\]/g,"")===e&&(this.day=r)}],M:[r,s("month")],MM:[n,s("month")],MMM:[i,function(e){var t=l("months"),n=(l("monthsShort")||t.map((function(e){return e.slice(0,3)}))).indexOf(e)+1;if(n<1)throw new Error;this.month=n%12||n}],MMMM:[i,function(e){var t=l("months").indexOf(e)+1;if(t<1)throw new Error;this.month=t%12||t}],Y:[/[+-]?\d+/,s("year")],YY:[n,function(e){this.year=a(e)}],YYYY:[/\d{4}/,s("year")],Z:c,ZZ:c};function f(n){var r,i;r=n,i=o&&o.formats;for(var a=(n=r.replace(/(\[[^\]]+])|(LTS?|l{1,4}|L{1,4})/g,(function(t,n,r){var o=r&&r.toUpperCase();return n||i[r]||e[r]||i[o].replace(/(\[[^\]]+])|(MMMM|MM|DD|dddd)/g,(function(e,t,n){return t||n.slice(1)}))}))).match(t),s=a.length,c=0;c-1)return new Date(("X"===t?1e3:1)*e);var r=f(t)(e),i=r.year,o=r.month,a=r.day,s=r.hours,c=r.minutes,l=r.seconds,u=r.milliseconds,h=r.zone,d=new Date,p=a||(i||o?1:d.getDate()),g=i||d.getFullYear(),m=0;i&&!o||(m=o>0?o-1:d.getMonth());var b=s||0,y=c||0,v=l||0,w=u||0;return h?new Date(Date.UTC(g,m,p,b,y,v,w+60*h.offset*1e3)):n?new Date(Date.UTC(g,m,p,b,y,v,w)):new Date(g,m,p,b,y,v,w)}catch(e){return new Date("")}}(t,s,r),this.init(),h&&!0!==h&&(this.$L=this.locale(h).$L),u&&t!=this.format(s)&&(this.$d=new Date("")),o={}}else if(s instanceof Array)for(var d=s.length,p=1;p<=d;p+=1){a[1]=s[p-1];var g=n.apply(this,a);if(g.isValid()){this.$d=g.$d,this.$L=g.$L,this.init();break}p===d&&(this.$d=new Date(""))}else i.call(this,e)}}}()},7140(e){e.exports=function(){"use strict";var e="day";return function(t,n,r){var i=function(t){return t.add(4-t.isoWeekday(),e)},o=n.prototype;o.isoWeekYear=function(){return i(this).year()},o.isoWeek=function(t){if(!this.$utils().u(t))return this.add(7*(t-this.isoWeek()),e);var n,o,a,s=i(this),c=(n=this.isoWeekYear(),a=4-(o=(this.$u?r.utc:r)().year(n).startOf("year")).isoWeekday(),o.isoWeekday()>4&&(a+=7),o.add(a,e));return s.diff(c,"week")+1},o.isoWeekday=function(e){return this.$utils().u(e)?this.day()||7:this.day(this.day()%7?e:e-7)};var a=o.startOf;o.startOf=function(e,t){var n=this.$utils(),r=!!n.u(t)||t;return"isoweek"===n.p(e)?r?this.date(this.date()-(this.isoWeekday()-1)).startOf("day"):this.date(this.date()-1-(this.isoWeekday()-1)+7).endOf("day"):a.bind(this)(e,t)}}}()},8287(e,t,n){var r=n(2678),i=n(8317),o=n(2702),a=n(3290),s=n(2488),c=n(3913),l=Date.prototype.getTime;function u(e,t,n){var d=n||{};return!!(d.strict?o(e,t):e===t)||(!e||!t||"object"!==typeof e&&"object"!==typeof t?d.strict?o(e,t):e==t:function(e,t,n){var o,d;if(typeof e!==typeof t)return!1;if(h(e)||h(t))return!1;if(e.prototype!==t.prototype)return!1;if(i(e)!==i(t))return!1;var p=a(e),g=a(t);if(p!==g)return!1;if(p||g)return e.source===t.source&&s(e)===s(t);if(c(e)&&c(t))return l.call(e)===l.call(t);var m=f(e),b=f(t);if(m!==b)return!1;if(m||b){if(e.length!==t.length)return!1;for(o=0;o=0;o--)if(y[o]!=v[o])return!1;for(o=y.length-1;o>=0;o--)if(!u(e[d=y[o]],t[d],n))return!1;return!0}(e,t,d))}function h(e){return null===e||void 0===e}function f(e){return!(!e||"object"!==typeof e||"number"!==typeof e.length)&&("function"===typeof e.copy&&"function"===typeof e.slice&&!(e.length>0&&"number"!==typeof e[0]))}e.exports=u},4992(e,t,n){"use strict";var r=n(2090),i=n(2557),o=n(4902),a=n(5558);e.exports=function(e,t,n){if(!e||"object"!==typeof e&&"function"!==typeof e)throw new o("`obj` must be an object or a function`");if("string"!==typeof t&&"symbol"!==typeof t)throw new o("`property` must be a string or a symbol`");if(arguments.length>3&&"boolean"!==typeof arguments[3]&&null!==arguments[3])throw new o("`nonEnumerable`, if provided, must be a boolean or null");if(arguments.length>4&&"boolean"!==typeof arguments[4]&&null!==arguments[4])throw new o("`nonWritable`, if provided, must be a boolean or null");if(arguments.length>5&&"boolean"!==typeof arguments[5]&&null!==arguments[5])throw new o("`nonConfigurable`, if provided, must be a boolean or null");if(arguments.length>6&&"boolean"!==typeof arguments[6])throw new o("`loose`, if provided, must be a boolean");var s=arguments.length>3?arguments[3]:null,c=arguments.length>4?arguments[4]:null,l=arguments.length>5?arguments[5]:null,u=arguments.length>6&&arguments[6],h=!!a&&a(e,t);if(r)r(e,t,{configurable:null===l&&h?h.configurable:!l,enumerable:null===s&&h?h.enumerable:!s,value:n,writable:null===c&&h?h.writable:!c});else{if(!u&&(s||c||l))throw new i("This environment does not support defining a property as non-configurable, non-writable, or non-enumerable.");e[t]=n}}},1779(e,t,n){"use strict";var r=n(2678),i="function"===typeof Symbol&&"symbol"===typeof Symbol("foo"),o=Object.prototype.toString,a=Array.prototype.concat,s=Object.defineProperty,c=s&&function(){var e={};try{for(var t in s(e,"x",{enumerable:!1,value:e}),e)return!1;return e.x===e}catch(n){return!1}}(),l=function(e,t,n,r){var i;(!(t in e)||"function"===typeof(i=r)&&"[object Function]"===o.call(i)&&r())&&(c?s(e,t,{configurable:!0,enumerable:!1,value:n,writable:!0}):e[t]=n)},u=function(e,t){var n=arguments.length>2?arguments[2]:{},o=r(t);i&&(o=a.call(o,Object.getOwnPropertySymbols(t)));for(var s=0;s1?n-1:0),i=1;i2&&void 0!==arguments[2]?arguments[2]:d;t&&t(e,null);let o=r.length;for(;o--;){let t=r[o];if("string"===typeof t){const e=i(t);e!==t&&(n(r)||(r[o]=e),t=e)}e[t]=!0}return e}function _(e){for(let t=0;t/gm),z=a(/\${[\w\W]*}/gm),H=a(/^data-[\-\w.\u00B7-\uFFFF]/),q=a(/^aria-[\-\w]+$/),V=a(/^(?:(?:(?:f|ht)tps?|mailto|tel|callto|sms|cid|xmpp):|[^a-z]|[a-z+.\-]+(?:[^a-z+.\-:]|$))/i),U=a(/^(?:\w+script|data):/i),W=a(/[\u0000-\u0020\u00A0\u1680\u180E\u2000-\u2029\u205F\u3000]/g),G=a(/^html$/i),Y=a(/^[a-z][.\w]*(-[.\w]+)+$/i);var K=Object.freeze({__proto__:null,MUSTACHE_EXPR:B,ERB_EXPR:$,TMPLIT_EXPR:z,DATA_ATTR:H,ARIA_ATTR:q,IS_ALLOWED_URI:V,IS_SCRIPT_OR_DATA:U,ATTR_WHITESPACE:W,DOCTYPE_NAME:G,CUSTOM_ELEMENT:Y});const X={element:1,attribute:2,text:3,cdataSection:4,entityReference:5,entityNode:6,progressingInstruction:7,comment:8,document:9,documentType:10,documentFragment:11,notation:12},Q=function(){return"undefined"===typeof window?null:window},J=function(e,t){if("object"!==typeof e||"function"!==typeof e.createPolicy)return null;let n=null;const r="data-tt-policy-suffix";t&&t.hasAttribute(r)&&(n=t.getAttribute(r));const i="dompurify"+(n?"#"+n:"");try{return e.createPolicy(i,{createHTML:e=>e,createScriptURL:e=>e})}catch(o){return console.warn("TrustedTypes policy "+i+" could not be created."),null}};function Z(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:Q();const n=e=>Z(e);if(n.version="3.1.6",n.removed=[],!t||!t.document||t.document.nodeType!==X.document)return n.isSupported=!1,n;let{document:r}=t;const i=r,a=i.currentScript,{DocumentFragment:c,HTMLTemplateElement:l,Node:k,Element:S,NodeFilter:_,NamedNodeMap:B=t.NamedNodeMap||t.MozNamedAttrMap,HTMLFormElement:$,DOMParser:z,trustedTypes:H}=t,q=S.prototype,U=C(q,"cloneNode"),W=C(q,"remove"),Y=C(q,"nextSibling"),ee=C(q,"childNodes"),te=C(q,"parentNode");if("function"===typeof l){const e=r.createElement("template");e.content&&e.content.ownerDocument&&(r=e.content.ownerDocument)}let ne,re="";const{implementation:ie,createNodeIterator:oe,createDocumentFragment:ae,getElementsByTagName:se}=r,{importNode:ce}=i;let le={};n.isSupported="function"===typeof e&&"function"===typeof te&&ie&&void 0!==ie.createHTMLDocument;const{MUSTACHE_EXPR:ue,ERB_EXPR:he,TMPLIT_EXPR:fe,DATA_ATTR:de,ARIA_ATTR:pe,IS_SCRIPT_OR_DATA:ge,ATTR_WHITESPACE:me,CUSTOM_ELEMENT:be}=K;let{IS_ALLOWED_URI:ye}=K,ve=null;const we=A({},[...E,...O,...P,...I,...N]);let xe=null;const ke=A({},[...L,...R,...j,...F]);let Se=Object.seal(s(null,{tagNameCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},attributeNameCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},allowCustomizedBuiltInElements:{writable:!0,configurable:!1,enumerable:!0,value:!1}})),Ae=null,_e=null,Te=!0,Ce=!0,Ee=!1,Oe=!0,Pe=!1,Me=!0,Ie=!1,De=!1,Ne=!1,Le=!1,Re=!1,je=!1,Fe=!0,Be=!1;const $e="user-content-";let ze=!0,He=!1,qe={},Ve=null;const Ue=A({},["annotation-xml","audio","colgroup","desc","foreignobject","head","iframe","math","mi","mn","mo","ms","mtext","noembed","noframes","noscript","plaintext","script","style","svg","template","thead","title","video","xmp"]);let We=null;const Ge=A({},["audio","video","img","source","image","track"]);let Ye=null;const Ke=A({},["alt","class","for","id","label","name","pattern","placeholder","role","summary","title","value","style","xmlns"]),Xe="http://www.w3.org/1998/Math/MathML",Qe="http://www.w3.org/2000/svg",Je="http://www.w3.org/1999/xhtml";let Ze=Je,et=!1,tt=null;const nt=A({},[Xe,Qe,Je],p);let rt=null;const it=["application/xhtml+xml","text/html"],ot="text/html";let at=null,st=null;const ct=r.createElement("form"),lt=function(e){return e instanceof RegExp||e instanceof Function},ut=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};if(!st||st!==e){if(e&&"object"===typeof e||(e={}),e=T(e),rt=-1===it.indexOf(e.PARSER_MEDIA_TYPE)?ot:e.PARSER_MEDIA_TYPE,at="application/xhtml+xml"===rt?p:d,ve=v(e,"ALLOWED_TAGS")?A({},e.ALLOWED_TAGS,at):we,xe=v(e,"ALLOWED_ATTR")?A({},e.ALLOWED_ATTR,at):ke,tt=v(e,"ALLOWED_NAMESPACES")?A({},e.ALLOWED_NAMESPACES,p):nt,Ye=v(e,"ADD_URI_SAFE_ATTR")?A(T(Ke),e.ADD_URI_SAFE_ATTR,at):Ke,We=v(e,"ADD_DATA_URI_TAGS")?A(T(Ge),e.ADD_DATA_URI_TAGS,at):Ge,Ve=v(e,"FORBID_CONTENTS")?A({},e.FORBID_CONTENTS,at):Ue,Ae=v(e,"FORBID_TAGS")?A({},e.FORBID_TAGS,at):{},_e=v(e,"FORBID_ATTR")?A({},e.FORBID_ATTR,at):{},qe=!!v(e,"USE_PROFILES")&&e.USE_PROFILES,Te=!1!==e.ALLOW_ARIA_ATTR,Ce=!1!==e.ALLOW_DATA_ATTR,Ee=e.ALLOW_UNKNOWN_PROTOCOLS||!1,Oe=!1!==e.ALLOW_SELF_CLOSE_IN_ATTR,Pe=e.SAFE_FOR_TEMPLATES||!1,Me=!1!==e.SAFE_FOR_XML,Ie=e.WHOLE_DOCUMENT||!1,Le=e.RETURN_DOM||!1,Re=e.RETURN_DOM_FRAGMENT||!1,je=e.RETURN_TRUSTED_TYPE||!1,Ne=e.FORCE_BODY||!1,Fe=!1!==e.SANITIZE_DOM,Be=e.SANITIZE_NAMED_PROPS||!1,ze=!1!==e.KEEP_CONTENT,He=e.IN_PLACE||!1,ye=e.ALLOWED_URI_REGEXP||V,Ze=e.NAMESPACE||Je,Se=e.CUSTOM_ELEMENT_HANDLING||{},e.CUSTOM_ELEMENT_HANDLING&<(e.CUSTOM_ELEMENT_HANDLING.tagNameCheck)&&(Se.tagNameCheck=e.CUSTOM_ELEMENT_HANDLING.tagNameCheck),e.CUSTOM_ELEMENT_HANDLING&<(e.CUSTOM_ELEMENT_HANDLING.attributeNameCheck)&&(Se.attributeNameCheck=e.CUSTOM_ELEMENT_HANDLING.attributeNameCheck),e.CUSTOM_ELEMENT_HANDLING&&"boolean"===typeof e.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements&&(Se.allowCustomizedBuiltInElements=e.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements),Pe&&(Ce=!1),Re&&(Le=!0),qe&&(ve=A({},N),xe=[],!0===qe.html&&(A(ve,E),A(xe,L)),!0===qe.svg&&(A(ve,O),A(xe,R),A(xe,F)),!0===qe.svgFilters&&(A(ve,P),A(xe,R),A(xe,F)),!0===qe.mathMl&&(A(ve,I),A(xe,j),A(xe,F))),e.ADD_TAGS&&(ve===we&&(ve=T(ve)),A(ve,e.ADD_TAGS,at)),e.ADD_ATTR&&(xe===ke&&(xe=T(xe)),A(xe,e.ADD_ATTR,at)),e.ADD_URI_SAFE_ATTR&&A(Ye,e.ADD_URI_SAFE_ATTR,at),e.FORBID_CONTENTS&&(Ve===Ue&&(Ve=T(Ve)),A(Ve,e.FORBID_CONTENTS,at)),ze&&(ve["#text"]=!0),Ie&&A(ve,["html","head","body"]),ve.table&&(A(ve,["tbody"]),delete Ae.tbody),e.TRUSTED_TYPES_POLICY){if("function"!==typeof e.TRUSTED_TYPES_POLICY.createHTML)throw x('TRUSTED_TYPES_POLICY configuration option must provide a "createHTML" hook.');if("function"!==typeof e.TRUSTED_TYPES_POLICY.createScriptURL)throw x('TRUSTED_TYPES_POLICY configuration option must provide a "createScriptURL" hook.');ne=e.TRUSTED_TYPES_POLICY,re=ne.createHTML("")}else void 0===ne&&(ne=J(H,a)),null!==ne&&"string"===typeof re&&(re=ne.createHTML(""));o&&o(e),st=e}},ht=A({},["mi","mo","mn","ms","mtext"]),ft=A({},["foreignobject","annotation-xml"]),dt=A({},["title","style","font","a","script"]),pt=A({},[...O,...P,...M]),gt=A({},[...I,...D]),mt=function(e){let t=te(e);t&&t.tagName||(t={namespaceURI:Ze,tagName:"template"});const n=d(e.tagName),r=d(t.tagName);return!!tt[e.namespaceURI]&&(e.namespaceURI===Qe?t.namespaceURI===Je?"svg"===n:t.namespaceURI===Xe?"svg"===n&&("annotation-xml"===r||ht[r]):Boolean(pt[n]):e.namespaceURI===Xe?t.namespaceURI===Je?"math"===n:t.namespaceURI===Qe?"math"===n&&ft[r]:Boolean(gt[n]):e.namespaceURI===Je?!(t.namespaceURI===Qe&&!ft[r])&&!(t.namespaceURI===Xe&&!ht[r])&&!gt[n]&&(dt[n]||!pt[n]):!("application/xhtml+xml"!==rt||!tt[e.namespaceURI]))},bt=function(e){f(n.removed,{element:e});try{te(e).removeChild(e)}catch(t){W(e)}},yt=function(e,t){try{f(n.removed,{attribute:t.getAttributeNode(e),from:t})}catch(r){f(n.removed,{attribute:null,from:t})}if(t.removeAttribute(e),"is"===e&&!xe[e])if(Le||Re)try{bt(t)}catch(r){}else try{t.setAttribute(e,"")}catch(r){}},vt=function(e){let t=null,n=null;if(Ne)e=""+e;else{const t=g(e,/^[\r\n\t ]+/);n=t&&t[0]}"application/xhtml+xml"===rt&&Ze===Je&&(e=''+e+"");const i=ne?ne.createHTML(e):e;if(Ze===Je)try{t=(new z).parseFromString(i,rt)}catch(a){}if(!t||!t.documentElement){t=ie.createDocument(Ze,"template",null);try{t.documentElement.innerHTML=et?re:i}catch(a){}}const o=t.body||t.documentElement;return e&&n&&o.insertBefore(r.createTextNode(n),o.childNodes[0]||null),Ze===Je?se.call(t,Ie?"html":"body")[0]:Ie?t.documentElement:o},wt=function(e){return oe.call(e.ownerDocument||e,e,_.SHOW_ELEMENT|_.SHOW_COMMENT|_.SHOW_TEXT|_.SHOW_PROCESSING_INSTRUCTION|_.SHOW_CDATA_SECTION,null)},xt=function(e){return e instanceof $&&("string"!==typeof e.nodeName||"string"!==typeof e.textContent||"function"!==typeof e.removeChild||!(e.attributes instanceof B)||"function"!==typeof e.removeAttribute||"function"!==typeof e.setAttribute||"string"!==typeof e.namespaceURI||"function"!==typeof e.insertBefore||"function"!==typeof e.hasChildNodes)},kt=function(e){return"function"===typeof k&&e instanceof k},St=function(e,t,r){le[e]&&u(le[e],(e=>{e.call(n,t,r,st)}))},At=function(e){let t=null;if(St("beforeSanitizeElements",e,null),xt(e))return bt(e),!0;const r=at(e.nodeName);if(St("uponSanitizeElement",e,{tagName:r,allowedTags:ve}),e.hasChildNodes()&&!kt(e.firstElementChild)&&w(/<[/\w]/g,e.innerHTML)&&w(/<[/\w]/g,e.textContent))return bt(e),!0;if(e.nodeType===X.progressingInstruction)return bt(e),!0;if(Me&&e.nodeType===X.comment&&w(/<[/\w]/g,e.data))return bt(e),!0;if(!ve[r]||Ae[r]){if(!Ae[r]&&Tt(r)){if(Se.tagNameCheck instanceof RegExp&&w(Se.tagNameCheck,r))return!1;if(Se.tagNameCheck instanceof Function&&Se.tagNameCheck(r))return!1}if(ze&&!Ve[r]){const t=te(e)||e.parentNode,n=ee(e)||e.childNodes;if(n&&t)for(let r=n.length-1;r>=0;--r){const i=U(n[r],!0);i.__removalCount=(e.__removalCount||0)+1,t.insertBefore(i,Y(e))}}return bt(e),!0}return e instanceof S&&!mt(e)?(bt(e),!0):"noscript"!==r&&"noembed"!==r&&"noframes"!==r||!w(/<\/no(script|embed|frames)/i,e.innerHTML)?(Pe&&e.nodeType===X.text&&(t=e.textContent,u([ue,he,fe],(e=>{t=m(t,e," ")})),e.textContent!==t&&(f(n.removed,{element:e.cloneNode()}),e.textContent=t)),St("afterSanitizeElements",e,null),!1):(bt(e),!0)},_t=function(e,t,n){if(Fe&&("id"===t||"name"===t)&&(n in r||n in ct))return!1;if(Ce&&!_e[t]&&w(de,t));else if(Te&&w(pe,t));else if(!xe[t]||_e[t]){if(!(Tt(e)&&(Se.tagNameCheck instanceof RegExp&&w(Se.tagNameCheck,e)||Se.tagNameCheck instanceof Function&&Se.tagNameCheck(e))&&(Se.attributeNameCheck instanceof RegExp&&w(Se.attributeNameCheck,t)||Se.attributeNameCheck instanceof Function&&Se.attributeNameCheck(t))||"is"===t&&Se.allowCustomizedBuiltInElements&&(Se.tagNameCheck instanceof RegExp&&w(Se.tagNameCheck,n)||Se.tagNameCheck instanceof Function&&Se.tagNameCheck(n))))return!1}else if(Ye[t]);else if(w(ye,m(n,me,"")));else if("src"!==t&&"xlink:href"!==t&&"href"!==t||"script"===e||0!==b(n,"data:")||!We[e])if(Ee&&!w(ge,m(n,me,"")));else if(n)return!1;return!0},Tt=function(e){return"annotation-xml"!==e&&g(e,be)},Ct=function(e){St("beforeSanitizeAttributes",e,null);const{attributes:t}=e;if(!t)return;const r={attrName:"",attrValue:"",keepAttr:!0,allowedAttributes:xe};let i=t.length;for(;i--;){const a=t[i],{name:s,namespaceURI:c,value:l}=a,f=at(s);let d="value"===s?l:y(l);if(r.attrName=f,r.attrValue=d,r.keepAttr=!0,r.forceKeepAttr=void 0,St("uponSanitizeAttribute",e,r),d=r.attrValue,Me&&w(/((--!?|])>)|<\/(style|title)/i,d)){yt(s,e);continue}if(r.forceKeepAttr)continue;if(yt(s,e),!r.keepAttr)continue;if(!Oe&&w(/\/>/i,d)){yt(s,e);continue}Pe&&u([ue,he,fe],(e=>{d=m(d,e," ")}));const p=at(e.nodeName);if(_t(p,f,d)){if(!Be||"id"!==f&&"name"!==f||(yt(s,e),d=$e+d),ne&&"object"===typeof H&&"function"===typeof H.getAttributeType)if(c);else switch(H.getAttributeType(p,f)){case"TrustedHTML":d=ne.createHTML(d);break;case"TrustedScriptURL":d=ne.createScriptURL(d)}try{c?e.setAttributeNS(c,s,d):e.setAttribute(s,d),xt(e)?bt(e):h(n.removed)}catch(o){}}}St("afterSanitizeAttributes",e,null)},Et=function e(t){let n=null;const r=wt(t);for(St("beforeSanitizeShadowDOM",t,null);n=r.nextNode();)St("uponSanitizeShadowNode",n,null),At(n)||(n.content instanceof c&&e(n.content),Ct(n));St("afterSanitizeShadowDOM",t,null)};return n.sanitize=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},r=null,o=null,a=null,s=null;if(et=!e,et&&(e="\x3c!--\x3e"),"string"!==typeof e&&!kt(e)){if("function"!==typeof e.toString)throw x("toString is not a function");if("string"!==typeof(e=e.toString()))throw x("dirty is not a string, aborting")}if(!n.isSupported)return e;if(De||ut(t),n.removed=[],"string"===typeof e&&(He=!1),He){if(e.nodeName){const t=at(e.nodeName);if(!ve[t]||Ae[t])throw x("root node is forbidden and cannot be sanitized in-place")}}else if(e instanceof k)r=vt("\x3c!----\x3e"),o=r.ownerDocument.importNode(e,!0),o.nodeType===X.element&&"BODY"===o.nodeName||"HTML"===o.nodeName?r=o:r.appendChild(o);else{if(!Le&&!Pe&&!Ie&&-1===e.indexOf("<"))return ne&&je?ne.createHTML(e):e;if(r=vt(e),!r)return Le?null:je?re:""}r&&Ne&&bt(r.firstChild);const l=wt(He?e:r);for(;a=l.nextNode();)At(a)||(a.content instanceof c&&Et(a.content),Ct(a));if(He)return e;if(Le){if(Re)for(s=ae.call(r.ownerDocument);r.firstChild;)s.appendChild(r.firstChild);else s=r;return(xe.shadowroot||xe.shadowrootmode)&&(s=ce.call(i,s,!0)),s}let h=Ie?r.outerHTML:r.innerHTML;return Ie&&ve["!doctype"]&&r.ownerDocument&&r.ownerDocument.doctype&&r.ownerDocument.doctype.name&&w(G,r.ownerDocument.doctype.name)&&(h="\n"+h),Pe&&u([ue,he,fe],(e=>{h=m(h,e," ")})),ne&&je?ne.createHTML(h):h},n.setConfig=function(){ut(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{}),De=!0},n.clearConfig=function(){st=null,De=!1},n.isValidAttribute=function(e,t,n){st||ut({});const r=at(e),i=at(t);return _t(r,i,n)},n.addHook=function(e,t){"function"===typeof t&&(le[e]=le[e]||[],f(le[e],t))},n.removeHook=function(e){if(le[e])return h(le[e])},n.removeHooks=function(e){le[e]&&(le[e]=[])},n.removeAllHooks=function(){le={}},n}return Z()}()},7297(e,t,n){"use strict";var r,i=n(9543),o=n(5558);try{r=[].__proto__===Array.prototype}catch(l){if(!l||"object"!==typeof l||!("code"in l)||"ERR_PROTO_ACCESS"!==l.code)throw l}var a=!!r&&o&&o(Object.prototype,"__proto__"),s=Object,c=s.getPrototypeOf;e.exports=a&&"function"===typeof a.get?i([a.get]):"function"===typeof c&&function(e){return c(null==e?e:s(e))}},5793(e){e.exports=function(){function e(t,n,r){function i(a,s){if(!n[a]){if(!t[a]){if(o)return o(a,!0);var c=new Error("Cannot find module '"+a+"'");throw c.code="MODULE_NOT_FOUND",c}var l=n[a]={exports:{}};t[a][0].call(l.exports,(function(e){return i(t[a][1][e]||e)}),l,l.exports,e,t,n,r)}return n[a].exports}for(var o=void 0,a=0;a0&&void 0!==arguments[0]?arguments[0]:{},r=n.defaultLayoutOptions,o=void 0===r?{}:r,s=n.algorithms,c=void 0===s?["layered","stress","mrtree","radial","force","disco","sporeOverlap","sporeCompaction","rectpacking"]:s,l=n.workerFactory,u=n.workerUrl;if(i(this,e),this.defaultLayoutOptions=o,this.initialized=!1,"undefined"===typeof u&&"undefined"===typeof l)throw new Error("Cannot construct an ELK without both 'workerUrl' and 'workerFactory'.");var h=l;"undefined"!==typeof u&&"undefined"===typeof l&&(h=function(e){return new Worker(e)});var f=h(u);if("function"!==typeof f.postMessage)throw new TypeError("Created worker does not provide the required 'postMessage' function.");this.worker=new a(f),this.worker.postMessage({cmd:"register",algorithms:c}).then((function(e){return t.initialized=!0})).catch(console.err)}return r(e,[{key:"layout",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=t.layoutOptions,r=void 0===n?this.defaultLayoutOptions:n,i=t.logging,o=void 0!==i&&i,a=t.measureExecutionTime,s=void 0!==a&&a;return e?this.worker.postMessage({cmd:"layout",graph:e,layoutOptions:r,options:{logging:o,measureExecutionTime:s}}):Promise.reject(new Error("Missing mandatory parameter 'graph'."))}},{key:"knownLayoutAlgorithms",value:function(){return this.worker.postMessage({cmd:"algorithms"})}},{key:"knownLayoutOptions",value:function(){return this.worker.postMessage({cmd:"options"})}},{key:"knownLayoutCategories",value:function(){return this.worker.postMessage({cmd:"categories"})}},{key:"terminateWorker",value:function(){this.worker&&this.worker.terminate()}}]),e}();n.default=o;var a=function(){function e(t){var n=this;if(i(this,e),void 0===t)throw new Error("Missing mandatory parameter 'worker'.");this.resolvers={},this.worker=t,this.worker.onmessage=function(e){setTimeout((function(){n.receive(n,e)}),0)}}return r(e,[{key:"postMessage",value:function(e){var t=this.id||0;this.id=t+1,e.id=t;var n=this;return new Promise((function(r,i){n.resolvers[t]=function(e,t){e?(n.convertGwtStyleError(e),i(e)):r(t)},n.worker.postMessage(e)}))}},{key:"receive",value:function(e,t){var n=t.data,r=e.resolvers[n.id];r&&(delete e.resolvers[n.id],n.error?r(n.error):r(null,n.data))}},{key:"terminate",value:function(){this.worker&&this.worker.terminate()}},{key:"convertGwtStyleError",value:function(e){if(e){var t=e.__java$exception;t&&(t.cause&&t.cause.backingJsObject&&(e.cause=t.cause.backingJsObject,this.convertGwtStyleError(e.cause)),delete e.__java$exception)}}}]),e}()},{}],2:[function(e,t,n){(function(e){(function(){"use strict";var r;function i(){}function o(){}function a(){}function s(){}function c(){}function l(){}function u(){}function h(){}function f(){}function d(){}function p(){}function g(){}function m(){}function b(){}function y(){}function v(){}function w(){}function x(){}function k(){}function S(){}function A(){}function _(){}function T(){}function C(){}function E(){}function O(){}function P(){}function M(){}function I(){}function D(){}function N(){}function L(){}function R(){}function j(){}function F(){}function B(){}function $(){}function z(){}function H(){}function q(){}function V(){}function U(){}function W(){}function G(){}function Y(){}function K(){}function X(){}function Q(){}function J(){}function Z(){}function ee(){}function te(){}function ne(){}function re(){}function ie(){}function oe(){}function ae(){}function se(){}function ce(){}function le(){}function ue(){}function he(){}function fe(){}function de(){}function pe(){}function ge(){}function me(){}function be(){}function ye(){}function ve(){}function we(){}function xe(){}function ke(){}function Se(){}function Ae(){}function _e(){}function Te(){}function Ce(){}function Ee(){}function Oe(){}function Pe(){}function Me(){}function Ie(){}function De(){}function Ne(){}function Le(){}function Re(){}function je(){}function Fe(){}function Be(){}function $e(){}function ze(){}function He(){}function qe(){}function Ve(){}function Ue(){}function We(){}function Ge(){}function Ye(){}function Ke(){}function Xe(){}function Qe(){}function Je(){}function Ze(){}function et(){}function tt(){}function nt(){}function rt(){}function it(){}function ot(){}function at(){}function st(){}function ct(){}function lt(){}function ut(){}function ht(){}function ft(){}function dt(){}function pt(){}function gt(){}function mt(){}function bt(){}function yt(){}function vt(){}function wt(){}function xt(){}function kt(){}function St(){}function At(){}function _t(){}function Tt(){}function Ct(){}function Et(){}function Ot(){}function Pt(){}function Mt(){}function It(){}function Dt(){}function Nt(){}function Lt(){}function Rt(){}function jt(){}function Ft(){}function Bt(){}function $t(){}function zt(){}function Ht(){}function qt(){}function Vt(){}function Ut(){}function Wt(){}function Gt(){}function Yt(){}function Kt(){}function Xt(){}function Qt(){}function Jt(){}function Zt(){}function en(){}function tn(){}function nn(){}function rn(){}function on(){}function an(){}function sn(){}function cn(){}function ln(){}function un(){}function hn(){}function fn(){}function dn(){}function pn(){}function gn(){}function mn(){}function bn(){}function yn(){}function vn(){}function wn(){}function xn(){}function kn(){}function Sn(){}function An(){}function _n(){}function Tn(){}function Cn(){}function En(){}function On(){}function Pn(){}function Mn(){}function In(){}function Dn(){}function Nn(){}function Ln(){}function Rn(){}function jn(){}function Fn(){}function Bn(){}function $n(){}function zn(){}function Hn(){}function qn(){}function Vn(){}function Un(){}function Wn(){}function Gn(){}function Yn(){}function Kn(){}function Xn(){}function Qn(){}function Jn(){}function Zn(){}function er(){}function tr(){}function nr(){}function rr(){}function ir(){}function or(){}function ar(){}function sr(){}function cr(){}function lr(){}function ur(){}function hr(){}function fr(){}function dr(){}function pr(){}function gr(){}function mr(){}function br(){}function yr(){}function vr(){}function wr(){}function xr(){}function kr(){}function Sr(){}function Ar(){}function _r(){}function Tr(){}function Cr(){}function Er(){}function Or(){}function Pr(){}function Mr(){}function Ir(){}function Dr(){}function Nr(){}function Lr(){}function Rr(){}function jr(){}function Fr(){}function Br(){}function $r(){}function zr(){}function Hr(){}function qr(){}function Vr(){}function Ur(){}function Wr(){}function Gr(){}function Yr(){}function Kr(){}function Xr(){}function Qr(){}function Jr(){}function Zr(){}function ei(){}function ti(){}function ni(){}function ri(){}function ii(){}function oi(){}function ai(){}function si(){}function ci(){}function li(){}function ui(){}function hi(){}function fi(){}function di(){}function pi(){}function gi(){}function mi(){}function bi(){}function yi(){}function vi(){}function wi(){}function xi(){}function ki(){}function Si(){}function Ai(){}function _i(){}function Ti(){}function Ci(){}function Ei(){}function Oi(){}function Pi(){}function Mi(){}function Ii(){}function Di(){}function Ni(){}function Li(){}function Ri(){}function ji(){}function Fi(){}function Bi(){}function $i(){}function zi(){}function Hi(){}function qi(){}function Vi(){}function Ui(){}function Wi(){}function Gi(){}function Yi(){}function Ki(){}function Xi(){}function Qi(){}function Ji(){}function Zi(){}function eo(){}function to(){}function no(){}function ro(){}function io(){}function oo(){}function ao(){}function so(){}function co(){}function lo(){}function uo(){}function ho(){}function fo(){}function po(){}function go(){}function mo(){}function bo(){}function yo(){}function vo(){}function wo(){}function xo(){}function ko(){}function So(){}function Ao(){}function _o(){}function To(){}function Co(){}function Eo(){}function Oo(){}function Po(){}function Mo(){}function Io(){}function Do(){}function No(){}function Lo(){}function Ro(){}function jo(){}function Fo(){}function Bo(){}function $o(){}function zo(){}function Ho(){}function qo(){}function Vo(){}function Uo(){}function Wo(){}function Go(){}function Yo(){}function Ko(){}function Xo(){}function Qo(){}function Jo(){}function Zo(){}function ea(){}function ta(){}function na(){}function ra(){}function ia(){}function oa(){}function aa(){}function sa(){}function ca(){}function la(){}function ua(){}function ha(){}function fa(){}function da(){}function pa(){}function ga(){}function ma(){}function ba(){}function ya(){}function va(){}function wa(){}function xa(){}function ka(){}function Sa(){}function Aa(){}function _a(){}function Ta(){}function Ca(){}function Ea(){}function Oa(){}function Pa(){}function Ma(){}function Ia(){}function Da(){}function Na(){}function La(){}function Ra(){}function ja(){}function Fa(){}function Ba(){}function $a(){}function za(){}function Ha(){}function qa(){}function Va(){}function Ua(){}function Wa(){}function Ga(){}function Ya(){}function Ka(){}function Xa(){}function Qa(){}function Ja(){}function Za(){}function es(){}function ts(){}function ns(){}function rs(){}function is(){}function os(){}function as(){}function ss(){}function cs(){}function ls(){}function us(){}function hs(){}function fs(){}function ds(){}function ps(){}function gs(){}function ms(){}function bs(){}function ys(){}function vs(){}function ws(){}function xs(){}function ks(){}function Ss(){}function As(){}function _s(){}function Ts(){}function Cs(){}function Es(){}function Os(){}function Ps(){}function Ms(){}function Is(){}function Ds(){}function Ns(){}function Ls(){}function Rs(){}function js(){}function Fs(){}function Bs(){}function $s(){}function zs(){}function Hs(){}function qs(){}function Vs(){}function Us(){}function Ws(){}function Gs(){}function Ys(){}function Ks(){}function Xs(){}function Qs(){}function Js(){}function Zs(){}function ec(){}function tc(){}function nc(){}function rc(){}function ic(){}function oc(){}function ac(){}function sc(){}function cc(){}function lc(){}function uc(){}function hc(){}function fc(){}function dc(){}function pc(){}function gc(){}function mc(){}function bc(){}function yc(){}function vc(){}function wc(){}function xc(){}function kc(){}function Sc(){}function Ac(){}function _c(){}function Tc(){}function Cc(){}function Ec(){}function Oc(){}function Pc(){}function Mc(){}function Ic(){}function Dc(){}function Nc(){}function Lc(){}function Rc(){}function jc(){}function Fc(){}function Bc(){}function $c(){}function zc(){}function Hc(){}function qc(){}function Vc(){}function Uc(){}function Wc(){}function Gc(){}function Yc(){}function Kc(){}function Xc(){}function Qc(){}function Jc(){}function Zc(){}function el(){}function tl(){}function nl(){}function rl(){}function il(){}function ol(){}function al(){}function sl(){}function cl(){}function ll(){}function ul(){}function hl(){}function fl(){}function dl(){}function pl(){}function gl(){}function ml(){}function bl(){}function yl(){}function vl(){}function wl(){}function xl(){}function kl(){}function Sl(){}function Al(){}function _l(){}function Tl(){}function Cl(){}function El(){}function Ol(){}function Pl(){}function Ml(){}function Il(){}function Dl(){}function Nl(){}function Ll(){}function Rl(){}function jl(){}function Fl(){}function Bl(){}function $l(){}function zl(){}function Hl(){}function ql(){}function Vl(){}function Ul(){}function Wl(){}function Gl(){}function Yl(){}function Kl(){}function Xl(){}function Ql(){}function Jl(){}function Zl(){}function eu(){}function tu(){}function nu(){}function ru(){}function iu(){}function ou(){}function au(){}function su(){}function cu(){}function lu(){}function uu(){}function hu(){}function fu(){}function du(){}function pu(){}function gu(){}function mu(){}function bu(){}function yu(){}function vu(){}function wu(){}function xu(){}function ku(){}function Su(){}function Au(){}function _u(){}function Tu(){}function Cu(){}function Eu(){}function Ou(){}function Pu(){}function Mu(){}function Iu(){}function Du(){}function Nu(){}function Lu(){}function Ru(){}function ju(){}function Fu(){}function Bu(){}function $u(){}function zu(){}function Hu(){}function qu(){}function Vu(){}function Uu(){}function Wu(){}function Gu(){}function Yu(){}function Ku(){}function Xu(){}function Qu(){}function Ju(){}function Zu(){}function eh(){}function th(){}function nh(){}function rh(){}function ih(){}function oh(){}function ah(){}function sh(){}function ch(){}function lh(){}function uh(){}function hh(){}function fh(){}function dh(){}function ph(){}function gh(){}function mh(){}function bh(){}function yh(){}function vh(){}function wh(){}function xh(){}function kh(){}function Sh(){}function Ah(){}function _h(){}function Th(){}function Ch(){}function Eh(){}function Oh(){}function Ph(){}function Mh(){}function Ih(){}function Dh(){}function Nh(){}function Lh(){}function Rh(e){}function jh(e){}function Fh(){mx()}function Bh(){YT()}function $h(){k_e()}function zh(){bde()}function Hh(){ixe()}function qh(){sPe()}function Vh(){iVe()}function Uh(){xAe()}function Wh(){zAe()}function Gh(){KT()}function Yh(){Hz()}function Kh(){XT()}function Xh(){Cce()}function Qh(){B9()}function Jh(){_ae()}function Zh(){J1()}function ef(){Cae()}function tf(){qee()}function nf(){X1()}function rf(){Efe()}function of(){Oae()}function af(){Eae()}function sf(){o5()}function cf(){Pae()}function lf(){AOe()}function uf(){JT()}function hf(){YJe()}function ff(){AJe()}function df(){Mae()}function pf(){Oce()}function gf(){Z1()}function mf(){CAe()}function bf(){t2()}function yf(){gqe()}function vf(){nLe()}function wf(){toe()}function xf(){Fge()}function kf(){XVe()}function Sf(){n4()}function Af(){eoe()}function _f(){_He()}function Tf(){APe()}function Cf(){OHe()}function Ef(){T$e()}function Of(){hOe()}function Pf(){cze()}function Mf(){Ake()}function If(){sz()}function Df(){Tte()}function Nf(){fOe()}function Lf(){WJe()}function Rf(){Ofe()}function jf(){Kye()}function Ff(){Pce()}function Bf(){tWe()}function $f(){vVe()}function zf(e){tQ(e)}function Hf(e){this.a=e}function qf(e){this.a=e}function Vf(e){this.a=e}function Uf(e){this.a=e}function Wf(e){this.a=e}function Gf(e){this.a=e}function Yf(e){this.a=e}function Kf(e){this.a=e}function Xf(e){this.a=e}function Qf(e){this.a=e}function Jf(e){this.a=e}function Zf(e){this.a=e}function ed(e){this.a=e}function td(e){this.a=e}function nd(e){this.a=e}function rd(e){this.a=e}function id(e){this.a=e}function od(e){this.a=e}function ad(e){this.a=e}function sd(e){this.a=e}function cd(e){this.a=e}function ld(e){this.a=e}function ud(e){this.b=e}function hd(e){this.c=e}function fd(e){this.a=e}function dd(e){this.a=e}function pd(e){this.a=e}function gd(e){this.a=e}function md(e){this.a=e}function bd(e){this.a=e}function yd(e){this.a=e}function vd(e){this.a=e}function wd(e){this.a=e}function xd(e){this.a=e}function kd(e){this.a=e}function Sd(e){this.a=e}function Ad(e){this.a=e}function _d(e){this.a=e}function Td(e){this.a=e}function Cd(e){this.a=e}function Ed(e){this.a=e}function Od(){this.a=[]}function Pd(e,t){e.a=t}function Md(e,t){e.a=t}function Id(e,t){e.b=t}function Dd(e,t){e.b=t}function Nd(e,t){e.b=t}function Ld(e,t){e.j=t}function Rd(e,t){e.g=t}function jd(e,t){e.i=t}function Fd(e,t){e.c=t}function Bd(e,t){e.c=t}function $d(e,t){e.d=t}function zd(e,t){e.d=t}function Hd(e,t){e.k=t}function qd(e,t){e.c=t}function Vd(e,t){e.c=t}function Ud(e,t){e.a=t}function Wd(e,t){e.a=t}function Gd(e,t){e.f=t}function Yd(e,t){e.a=t}function Kd(e,t){e.b=t}function Xd(e,t){e.d=t}function Qd(e,t){e.i=t}function Jd(e,t){e.o=t}function Zd(e,t){e.r=t}function ep(e,t){e.a=t}function tp(e,t){e.b=t}function np(e,t){e.e=t}function rp(e,t){e.f=t}function ip(e,t){e.g=t}function op(e,t){e.e=t}function ap(e,t){e.f=t}function sp(e,t){e.f=t}function cp(e,t){e.a=t}function lp(e,t){e.b=t}function up(e,t){e.n=t}function hp(e,t){e.a=t}function fp(e,t){e.c=t}function dp(e,t){e.c=t}function pp(e,t){e.c=t}function gp(e,t){e.a=t}function mp(e,t){e.a=t}function bp(e,t){e.d=t}function yp(e,t){e.d=t}function vp(e,t){e.e=t}function wp(e,t){e.e=t}function xp(e,t){e.g=t}function kp(e,t){e.f=t}function Sp(e,t){e.j=t}function Ap(e,t){e.a=t}function _p(e,t){e.a=t}function Tp(e,t){e.b=t}function Cp(e){e.b=e.a}function Ep(e){e.c=e.d.d}function Op(e){this.a=e}function Pp(e){this.a=e}function Mp(e){this.a=e}function Ip(e){this.a=e}function Dp(e){this.a=e}function Np(e){this.a=e}function Lp(e){this.a=e}function Rp(e){this.a=e}function jp(e){this.a=e}function Fp(e){this.a=e}function Bp(e){this.a=e}function $p(e){this.a=e}function zp(e){this.a=e}function Hp(e){this.a=e}function qp(e){this.b=e}function Vp(e){this.b=e}function Up(e){this.b=e}function Wp(e){this.a=e}function Gp(e){this.a=e}function Yp(e){this.c=e}function Kp(e){this.c=e}function Xp(e){this.c=e}function Qp(e){this.d=e}function Jp(e){this.a=e}function Zp(e){this.a=e}function eg(e){this.a=e}function tg(e){this.a=e}function ng(e){this.a=e}function rg(e){this.a=e}function ig(e){this.a=e}function og(e){this.a=e}function ag(e){this.a=e}function sg(e){this.a=e}function cg(e){this.a=e}function lg(e){this.a=e}function ug(e){this.a=e}function hg(e){this.a=e}function fg(e){this.a=e}function dg(e){this.a=e}function pg(e){this.a=e}function gg(e){this.a=e}function mg(e){this.a=e}function bg(e){this.a=e}function yg(e){this.a=e}function vg(e){this.a=e}function wg(e){this.a=e}function xg(e){this.a=e}function kg(e){this.a=e}function Sg(e){this.a=e}function Ag(e){this.a=e}function _g(e){this.a=e}function Tg(e){this.a=e}function Cg(e){this.a=e}function Eg(e){this.a=e}function Og(e){this.a=e}function Pg(e){this.a=e}function Mg(e){this.a=e}function Ig(e){this.a=e}function Dg(e){this.a=e}function Ng(e){this.a=e}function Lg(e){this.a=e}function Rg(e){this.a=e}function jg(e){this.a=e}function Fg(e){this.a=e}function Bg(e){this.a=e}function $g(e){this.a=e}function zg(e){this.a=e}function Hg(e){this.a=e}function qg(e){this.a=e}function Vg(e){this.a=e}function Ug(e){this.a=e}function Wg(e){this.e=e}function Gg(e){this.a=e}function Yg(e){this.a=e}function Kg(e){this.a=e}function Xg(e){this.a=e}function Qg(e){this.a=e}function Jg(e){this.a=e}function Zg(e){this.a=e}function em(e){this.a=e}function tm(e){this.a=e}function nm(e){this.a=e}function rm(e){this.a=e}function im(e){this.a=e}function om(e){this.a=e}function am(e){this.a=e}function sm(e){this.a=e}function cm(e){this.a=e}function lm(e){this.a=e}function um(e){this.a=e}function hm(e){this.a=e}function fm(e){this.a=e}function dm(e){this.a=e}function pm(e){this.a=e}function gm(e){this.a=e}function mm(e){this.a=e}function bm(e){this.a=e}function ym(e){this.a=e}function vm(e){this.a=e}function wm(e){this.a=e}function xm(e){this.a=e}function km(e){this.a=e}function Sm(e){this.a=e}function Am(e){this.a=e}function _m(e){this.a=e}function Tm(e){this.a=e}function Cm(e){this.a=e}function Em(e){this.a=e}function Om(e){this.a=e}function Pm(e){this.a=e}function Mm(e){this.a=e}function Im(e){this.a=e}function Dm(e){this.a=e}function Nm(e){this.a=e}function Lm(e){this.a=e}function Rm(e){this.a=e}function jm(e){this.a=e}function Fm(e){this.a=e}function Bm(e){this.a=e}function $m(e){this.a=e}function zm(e){this.a=e}function Hm(e){this.a=e}function qm(e){this.a=e}function Vm(e){this.a=e}function Um(e){this.a=e}function Wm(e){this.a=e}function Gm(e){this.c=e}function Ym(e){this.b=e}function Km(e){this.a=e}function Xm(e){this.a=e}function Qm(e){this.a=e}function Jm(e){this.a=e}function Zm(e){this.a=e}function eb(e){this.a=e}function tb(e){this.a=e}function nb(e){this.a=e}function rb(e){this.a=e}function ib(e){this.a=e}function ob(e){this.a=e}function ab(e){this.a=e}function sb(e){this.a=e}function cb(e){this.a=e}function lb(e){this.a=e}function ub(e){this.a=e}function hb(e){this.a=e}function fb(e){this.a=e}function db(e){this.a=e}function pb(e){this.a=e}function gb(e){this.a=e}function mb(e){this.a=e}function bb(e){this.a=e}function yb(e){this.a=e}function vb(e){this.a=e}function wb(e){this.a=e}function xb(e){this.a=e}function kb(e){this.a=e}function Sb(e){this.a=e}function Ab(e){this.a=e}function _b(e){this.a=e}function Tb(e){this.a=e}function Cb(e){this.a=e}function Eb(e){this.a=e}function Ob(e){this.a=e}function Pb(e){this.a=e}function Mb(e){this.a=e}function Ib(e){this.a=e}function Db(e){this.a=e}function Nb(e){this.a=e}function Lb(e){this.a=e}function Rb(e){this.a=e}function jb(e){this.a=e}function Fb(e){this.a=e}function Bb(e){this.a=e}function $b(e){this.a=e}function zb(e){this.a=e}function Hb(e){this.a=e}function qb(e){this.a=e}function Vb(e){this.a=e}function Ub(e){this.a=e}function Wb(e){this.a=e}function Gb(e){this.a=e}function Yb(e){this.a=e}function Kb(e){this.a=e}function Xb(e){this.a=e}function Qb(e){this.f=e}function Jb(e){this.a=e}function Zb(e){this.a=e}function ey(e){this.a=e}function ty(e){this.a=e}function ny(e){this.a=e}function ry(e){this.a=e}function iy(e){this.a=e}function oy(e){this.a=e}function ay(e){this.a=e}function sy(e){this.a=e}function cy(e){this.a=e}function ly(e){this.a=e}function uy(e){this.a=e}function hy(e){this.a=e}function fy(e){this.a=e}function dy(e){this.a=e}function py(e){this.a=e}function gy(e){this.a=e}function my(e){this.a=e}function by(e){this.a=e}function yy(e){this.a=e}function vy(e){this.a=e}function wy(e){this.a=e}function xy(e){this.a=e}function ky(e){this.a=e}function Sy(e){this.a=e}function Ay(e){this.a=e}function _y(e){this.a=e}function Ty(e){this.a=e}function Cy(e){this.a=e}function Ey(e){this.b=e}function Oy(e){this.a=e}function Py(e){this.a=e}function My(e){this.a=e}function Iy(e){this.a=e}function Dy(e){this.a=e}function Ny(e){this.a=e}function Ly(e){this.a=e}function Ry(e){this.b=e}function jy(e){this.a=e}function Fy(e){this.a=e}function By(e){this.a=e}function $y(e){this.a=e}function zy(e){this.c=e}function Hy(e){this.e=e}function qy(e){this.a=e}function Vy(e){this.a=e}function Uy(e){this.a=e}function Wy(e){this.d=e}function Gy(e){this.a=e}function Yy(e){this.a=e}function Ky(e){this.a=e}function Xy(e){this.e=e}function Qy(){this.a=0}function Jy(){NY(this)}function Zy(){OD(this)}function ev(){WX(this)}function tv(){Rh(this)}function nv(){this.c=ezt}function rv(e,t){e.b+=t}function iv(e,t){t.Wb(e)}function ov(e){return e.a}function av(e){return e.a}function sv(e){return e.a}function cv(e){return e.a}function lv(e){return e.a}function uv(e){return e.e}function hv(){return null}function fv(){return null}function dv(){yA(),RQe()}function pv(e){e.b.Of(e.e)}function gv(e){e.b=new iS}function mv(e,t){e.b=t-e.b}function bv(e,t){e.a=t-e.a}function yv(e,t){e.push(t)}function vv(e,t){e.sort(t)}function wv(e,t){t.jd(e.a)}function xv(e,t){DIe(t,e)}function kv(e,t,n){e.Yd(n,t)}function Sv(e,t){e.e=t,t.b=e}function Av(e){lz(),this.a=e}function _v(e){lz(),this.a=e}function Tv(e){lz(),this.a=e}function Cv(e){ZK(),this.a=e}function Ev(e){_Z(),$at.le(e)}function Ov(){Ov=_,new Jy}function Pv(){vR.call(this)}function Mv(){vR.call(this)}function Iv(){Pv.call(this)}function Dv(){Pv.call(this)}function Nv(){Pv.call(this)}function Lv(){Pv.call(this)}function Rv(){Pv.call(this)}function jv(){Pv.call(this)}function Fv(){Pv.call(this)}function Bv(){Pv.call(this)}function $v(){Pv.call(this)}function zv(){Pv.call(this)}function Hv(){Pv.call(this)}function qv(){this.a=this}function Vv(){this.Bb|=256}function Uv(){this.b=new uI}function Wv(e,t){e.length=t}function Gv(e,t){wL(e.a,t)}function Yv(e,t){IPe(e.c,t)}function Kv(e,t){BY(e.b,t)}function Xv(e,t){dke(e.a,t)}function Qv(e,t){Yge(e.a,t)}function Jv(e,t){kle(e.e,t)}function Zv(e){ENe(e.c,e.b)}function ew(e,t){e.kc().Nb(t)}function tw(e){this.a=Mme(e)}function nw(){this.a=new Jy}function rw(){this.a=new Jy}function iw(){this.a=new uT}function ow(){this.a=new Zy}function aw(){this.a=new Zy}function sw(){this.a=new Zy}function cw(){this.a=new ve}function lw(){this.a=new m9}function uw(){this.a=new ht}function hw(){this.a=new Y1}function fw(){this.a=new DB}function dw(){this.a=new Zy}function pw(){this.a=new Zy}function gw(){this.a=new Zy}function mw(){this.a=new Zy}function bw(){this.d=new Zy}function yw(){this.a=new r3}function vw(){this.a=new nw}function ww(){this.a=new Jy}function xw(){this.b=new Jy}function kw(){this.b=new Zy}function Sw(){this.e=new Zy}function Aw(){this.a=new lf}function _w(){this.d=new Zy}function Tw(){zZ.call(this)}function Cw(){zZ.call(this)}function Ew(){Zy.call(this)}function Ow(){Iv.call(this)}function Pw(){ow.call(this)}function Mw(){HB.call(this)}function Iw(){mw.call(this)}function Dw(){tv.call(this)}function Nw(){Dw.call(this)}function Lw(){tv.call(this)}function Rw(){Lw.call(this)}function jw(){sx.call(this)}function Fw(){sx.call(this)}function Bw(){sx.call(this)}function $w(){ux.call(this)}function zw(){tl.call(this)}function Hw(){tl.call(this)}function qw(){fT.call(this)}function Vw(){px.call(this)}function Uw(){px.call(this)}function Ww(){Jy.call(this)}function Gw(){Jy.call(this)}function Yw(){Jy.call(this)}function Kw(){Fae.call(this)}function Xw(){nw.call(this)}function Qw(){Vv.call(this)}function Jw(){NL.call(this)}function Zw(){Jy.call(this)}function ex(){NL.call(this)}function tx(){Jy.call(this)}function nx(){Jy.call(this)}function rx(){bl.call(this)}function ix(){rx.call(this)}function ox(){bl.call(this)}function ax(){Dh.call(this)}function sx(){this.a=new nw}function cx(){this.a=new Jy}function lx(){this.a=new Zy}function ux(){this.a=new Jy}function hx(){this.a=new fT}function fx(){this.j=new Zy}function dx(){this.a=new GA}function px(){this.a=new ml}function gx(){this.a=new Ls}function mx(){mx=_,pat=new o}function bx(){bx=_,kat=new wx}function yx(){yx=_,Sat=new vx}function vx(){rd.call(this,"")}function wx(){rd.call(this,"")}function xx(e){Mie.call(this,e)}function kx(e){Mie.call(this,e)}function Sx(e){Xf.call(this,e)}function Ax(e){H_.call(this,e)}function _x(e){H_.call(this,e)}function Tx(e){Ax.call(this,e)}function Cx(e){Ax.call(this,e)}function Ex(e){Ax.call(this,e)}function Ox(e){o7.call(this,e)}function Px(e){o7.call(this,e)}function Mx(e){F$.call(this,e)}function Ix(e){W_.call(this,e)}function Dx(e){K_.call(this,e)}function Nx(e){K_.call(this,e)}function Lx(e){K_.call(this,e)}function Rx(e){oPe.call(this,e)}function jx(e){Rx.call(this,e)}function Fx(e){qG.call(this,e)}function Bx(e){Fx.call(this,e)}function $x(){Ed.call(this,{})}function zx(){zx=_,Yat=new S}function Hx(){Hx=_,Oat=new WN}function qx(){qx=_,Lat=new i}function Vx(){Vx=_,Bat=new b}function Ux(){Ux=_,Hat=new w}function Wx(e){qL(),this.a=e}function Gx(e){Ece(),this.a=e}function Yx(e){iG(),this.f=e}function Kx(e){iG(),this.f=e}function Xx(e){az(),this.a=e}function Qx(e){e.b=null,e.c=0}function Jx(e,t){e.e=t,xBe(e,t)}function Zx(e,t){e.a=t,KMe(e)}function ek(e,t,n){e.a[t.g]=n}function tk(e,t,n){eTe(n,e,t)}function nk(e,t){B$(t.i,e.n)}function rk(e,t){xfe(e).Cd(t)}function ik(e,t){e.a.ec().Mc(t)}function ok(e,t){return e.g-t.g}function ak(e,t){return e*e/t}function sk(e){return tQ(e),e}function ck(e){return tQ(e),e}function lk(e){return tQ(e),e}function uk(e){return new Cd(e)}function hk(e){return new XK(e)}function fk(e){return tQ(e),e}function dk(e){return tQ(e),e}function pk(e){Fx.call(this,e)}function gk(e){Fx.call(this,e)}function mk(e){Fx.call(this,e)}function bk(e){qG.call(this,e)}function yk(e){Fx.call(this,e)}function vk(e){Fx.call(this,e)}function wk(e){Fx.call(this,e)}function xk(e){Fx.call(this,e)}function kk(e){Fx.call(this,e)}function Sk(e){Fx.call(this,e)}function Ak(e){Fx.call(this,e)}function _k(e){Fx.call(this,e)}function Tk(e){Fx.call(this,e)}function Ck(e){Fx.call(this,e)}function Ek(e){Fx.call(this,e)}function Ok(e){tQ(e),this.a=e}function Pk(e){return ufe(e),e}function Mk(e){GY(e,e.length)}function Ik(e){return e.b==e.c}function Dk(e){return!!e&&e.b}function Nk(e){return!!e&&e.k}function Lk(e){return!!e&&e.j}function Rk(e,t,n){e.c.Ef(t,n)}function jk(e,t){e.be(t),t.ae(e)}function Fk(e){lz(),this.a=KK(e)}function Bk(){this.a=yF(KK(SZe))}function $k(){throw uv(new Fv)}function zk(){throw uv(new Fv)}function Hk(){throw uv(new Fv)}function qk(){throw uv(new Fv)}function Vk(){throw uv(new Fv)}function Uk(){throw uv(new Fv)}function Wk(){Wk=_,_Z()}function Gk(){Np.call(this,"")}function Yk(){Np.call(this,"")}function Kk(){Np.call(this,"")}function Xk(){Np.call(this,"")}function Qk(e){gk.call(this,e)}function Jk(e){gk.call(this,e)}function Zk(e){vk.call(this,e)}function eS(e){Up.call(this,e)}function tS(e){eS.call(this,e)}function nS(e){mR.call(this,e)}function rS(e){XR.call(this,e,0)}function iS(){I2.call(this,12,3)}function oS(e,t){return z1(e,t)}function aS(e,t){return Ite(e,t)}function sS(e,t){return e.a-t.a}function cS(e,t){return e.a-t.a}function lS(e,t){return e.a-t.a}function uS(e,t){return t in e.a}function hS(e){return e.a?e.b:0}function fS(e){return e.a?e.b:0}function dS(e,t,n){t.Cd(e.a[n])}function pS(e,t,n){t.Pe(e.a[n])}function gS(e,t){e.b=new nD(t)}function mS(e,t){return e.b=t,e}function bS(e,t){return e.c=t,e}function yS(e,t){return e.f=t,e}function vS(e,t){return e.g=t,e}function wS(e,t){return e.a=t,e}function xS(e,t){return e.f=t,e}function kS(e,t){return e.k=t,e}function SS(e,t){return e.a=t,e}function AS(e,t){return e.e=t,e}function _S(e,t){return e.e=t,e}function TS(e,t){return e.f=t,e}function CS(e,t){e.b=!0,e.d=t}function ES(e,t){return e.b-t.b}function OS(e,t){return e.g-t.g}function PS(e,t){return e?0:t-1}function MS(e,t){return e?0:t-1}function IS(e,t){return e?t-1:0}function DS(e,t){return e.s-t.s}function NS(e,t){return t.rg(e)}function LS(e,t){return e.b=t,e}function RS(e,t){return e.a=t,e}function jS(e,t){return e.c=t,e}function FS(e,t){return e.d=t,e}function BS(e,t){return e.e=t,e}function $S(e,t){return e.f=t,e}function zS(e,t){return e.a=t,e}function HS(e,t){return e.b=t,e}function qS(e,t){return e.c=t,e}function VS(e,t){return e.c=t,e}function US(e,t){return e.b=t,e}function WS(e,t){return e.d=t,e}function GS(e,t){return e.e=t,e}function YS(e,t){return e.f=t,e}function KS(e,t){return e.g=t,e}function XS(e,t){return e.a=t,e}function QS(e,t){return e.i=t,e}function JS(e,t){return e.j=t,e}function ZS(e,t){AOe(),s2(t,e)}function eA(e,t,n){aG(e.a,t,n)}function tA(e){J$.call(this,e)}function nA(e){gbe.call(this,e)}function rA(e){SJ.call(this,e)}function iA(e){SJ.call(this,e)}function oA(e){Lie.call(this,e)}function aA(e){HJ.call(this,e)}function sA(e){HJ.call(this,e)}function cA(){TN.call(this,"")}function lA(){this.a=0,this.b=0}function uA(){this.b=0,this.a=0}function hA(e,t){e.b=0,Eoe(e,t)}function fA(e,t){return e.k=t,e}function dA(e,t){return e.j=t,e}function pA(e,t){e.c=t,e.b=!0}function gA(){gA=_,ict=nCe()}function mA(){mA=_,RFt=M_e()}function bA(){bA=_,jFt=YCe()}function yA(){yA=_,DBt=aae()}function vA(){vA=_,x$t=I_e()}function wA(){wA=_,Rzt=D_e()}function xA(){xA=_,jzt=UMe()}function kA(e){return e.e&&e.e()}function SA(e){return e.l|e.m<<22}function AA(e,t){return e.c._b(t)}function _A(e,t){return qpe(e.b,t)}function TA(e){return e?e.d:null}function CA(e){return e?e.g:null}function EA(e){return e?e.i:null}function OA(e){return vF(e),e.o}function PA(e,t){return e.a+=t,e}function MA(e,t){return e.a+=t,e}function IA(e,t){return e.a+=t,e}function DA(e,t){return e.a+=t,e}function NA(e,t){for(;e.Bd(t););}function LA(e){this.a=new lT(e)}function RA(){throw uv(new Fv)}function jA(){throw uv(new Fv)}function FA(){throw uv(new Fv)}function BA(){throw uv(new Fv)}function $A(){throw uv(new Fv)}function zA(){throw uv(new Fv)}function HA(e){this.a=new HG(e)}function qA(){this.a=new yFe(rOt)}function VA(){this.b=new yFe(ZTt)}function UA(){this.a=new yFe(gPt)}function WA(){this.b=new yFe(YMt)}function GA(){this.b=new yFe(YMt)}function YA(e){this.a=0,this.b=e}function KA(e){EXe(),cJe(this,e)}function XA(e){return VX(e),e.a}function QA(e){return e.b!=e.d.c}function JA(e,t){return e.d[t.p]}function ZA(e,t){return vBe(e,t)}function e_(e,t,n){e.splice(t,n)}function t_(e,t){for(;e.Re(t););}function n_(e){e.c?C$e(e):E$e(e)}function r_(){throw uv(new Fv)}function i_(){throw uv(new Fv)}function o_(){throw uv(new Fv)}function a_(){throw uv(new Fv)}function s_(){throw uv(new Fv)}function c_(){throw uv(new Fv)}function l_(){throw uv(new Fv)}function u_(){throw uv(new Fv)}function h_(){throw uv(new Fv)}function f_(){throw uv(new Fv)}function d_(){throw uv(new zv)}function p_(){throw uv(new zv)}function g_(e){this.a=new m_(e)}function m_(e){Zae(this,e,hPe())}function b_(e){return!e||BX(e)}function y_(e){return-1!=gHt[e]}function v_(){0!=qat&&(qat=0),Uat=-1}function w_(){null==uZe&&(uZe=[])}function x_(e,t){jL.call(this,e,t)}function k_(e,t){x_.call(this,e,t)}function S_(e,t){this.a=e,this.b=t}function A_(e,t){this.a=e,this.b=t}function __(e,t){this.a=e,this.b=t}function T_(e,t){this.a=e,this.b=t}function C_(e,t){this.a=e,this.b=t}function E_(e,t){this.a=e,this.b=t}function O_(e,t){this.a=e,this.b=t}function P_(e,t){this.e=e,this.d=t}function M_(e,t){this.b=e,this.c=t}function I_(e,t){this.b=e,this.a=t}function D_(e,t){this.b=e,this.a=t}function N_(e,t){this.b=e,this.a=t}function L_(e,t){this.b=e,this.a=t}function R_(e,t){this.a=e,this.b=t}function j_(e,t){this.a=e,this.b=t}function F_(e,t){this.a=e,this.f=t}function B_(e,t){this.g=e,this.i=t}function $_(e,t){this.f=e,this.g=t}function z_(e,t){this.b=e,this.c=t}function H_(e){BL(e.dc()),this.c=e}function q_(e,t){this.a=e,this.b=t}function V_(e,t){this.a=e,this.b=t}function U_(e){this.a=cV(KK(e),15)}function W_(e){this.a=cV(KK(e),15)}function G_(e){this.a=cV(KK(e),85)}function Y_(e){this.b=cV(KK(e),85)}function K_(e){this.b=cV(KK(e),51)}function X_(){this.q=new r.Date}function Q_(e,t){this.a=e,this.b=t}function J_(e,t){return CY(e.b,t)}function Z_(e,t){return e.b.Hc(t)}function eT(e,t){return e.b.Ic(t)}function tT(e,t){return e.b.Qc(t)}function nT(e,t){return e.b.Hc(t)}function rT(e,t){return e.c.uc(t)}function iT(e,t){return cge(e.c,t)}function oT(e,t){return e.a._b(t)}function aT(e,t){return e>t&&t0}function NC(e,t){return gpe(e,t)<0}function LC(e,t){return jW(e.a,t)}function RC(e,t){q1.call(this,e,t)}function jC(e){eX(),F$.call(this,e)}function FC(e,t){GW(e,e.length,t)}function BC(e,t){gK(e,e.length,t)}function $C(e,t){return e.a.get(t)}function zC(e,t){return CY(e.e,t)}function HC(e){return tQ(e),!1}function qC(e){this.a=cV(KK(e),229)}function VC(e){u4.call(this,e,21)}function UC(e,t){$_.call(this,e,t)}function WC(e,t){$_.call(this,e,t)}function GC(e,t){this.b=e,this.a=t}function YC(e,t){this.d=e,this.e=t}function KC(e,t){this.a=e,this.b=t}function XC(e,t){this.a=e,this.b=t}function QC(e,t){this.a=e,this.b=t}function JC(e,t){this.a=e,this.b=t}function ZC(e,t){this.a=e,this.b=t}function eE(e,t){this.b=e,this.a=t}function tE(e,t){this.b=e,this.a=t}function nE(e,t){$_.call(this,e,t)}function rE(e,t){$_.call(this,e,t)}function iE(e,t){$_.call(this,e,t)}function oE(e,t){$_.call(this,e,t)}function aE(e,t){$_.call(this,e,t)}function sE(e,t){$_.call(this,e,t)}function cE(e,t){$_.call(this,e,t)}function lE(e,t){this.b=e,this.a=t}function uE(e,t){$_.call(this,e,t)}function hE(e,t){this.b=e,this.a=t}function fE(e,t){$_.call(this,e,t)}function dE(e,t){this.b=e,this.a=t}function pE(e,t){$_.call(this,e,t)}function gE(e,t){$_.call(this,e,t)}function mE(e,t){$_.call(this,e,t)}function bE(e,t,n){e.splice(t,0,n)}function yE(e,t,n){e.Mb(n)&&t.Cd(n)}function vE(e,t,n){t.Pe(e.a.Ye(n))}function wE(e,t,n){t.Dd(e.a.Ze(n))}function xE(e,t,n){t.Cd(e.a.Kb(n))}function kE(e,t){return NR(e.c,t)}function SE(e,t){return NR(e.e,t)}function AE(e,t){$_.call(this,e,t)}function _E(e,t){$_.call(this,e,t)}function TE(e,t){$_.call(this,e,t)}function CE(e,t){$_.call(this,e,t)}function EE(e,t){$_.call(this,e,t)}function OE(e,t){$_.call(this,e,t)}function PE(e,t){this.a=e,this.b=t}function ME(e,t){this.a=e,this.b=t}function IE(e,t){this.a=e,this.b=t}function DE(e,t){this.a=e,this.b=t}function NE(e,t){this.a=e,this.b=t}function LE(e,t){this.a=e,this.b=t}function RE(e,t){this.b=e,this.a=t}function jE(e,t){this.b=e,this.a=t}function FE(e,t){this.b=e,this.a=t}function BE(e,t){this.c=e,this.d=t}function $E(e,t){this.e=e,this.d=t}function zE(e,t){this.a=e,this.b=t}function HE(e,t){this.a=e,this.b=t}function qE(e,t){this.a=e,this.b=t}function VE(e,t){this.b=e,this.a=t}function UE(e,t){this.b=t,this.c=e}function WE(e,t){$_.call(this,e,t)}function GE(e,t){$_.call(this,e,t)}function YE(e,t){$_.call(this,e,t)}function KE(e,t){$_.call(this,e,t)}function XE(e,t){$_.call(this,e,t)}function QE(e,t){$_.call(this,e,t)}function JE(e,t){$_.call(this,e,t)}function ZE(e,t){$_.call(this,e,t)}function eO(e,t){$_.call(this,e,t)}function tO(e,t){$_.call(this,e,t)}function nO(e,t){$_.call(this,e,t)}function rO(e,t){$_.call(this,e,t)}function iO(e,t){$_.call(this,e,t)}function oO(e,t){$_.call(this,e,t)}function aO(e,t){$_.call(this,e,t)}function sO(e,t){$_.call(this,e,t)}function cO(e,t){$_.call(this,e,t)}function lO(e,t){$_.call(this,e,t)}function uO(e,t){$_.call(this,e,t)}function hO(e,t){$_.call(this,e,t)}function fO(e,t){$_.call(this,e,t)}function dO(e,t){$_.call(this,e,t)}function pO(e,t){$_.call(this,e,t)}function gO(e,t){$_.call(this,e,t)}function mO(e,t){$_.call(this,e,t)}function bO(e,t){$_.call(this,e,t)}function yO(e,t){$_.call(this,e,t)}function vO(e,t){$_.call(this,e,t)}function wO(e,t){$_.call(this,e,t)}function xO(e,t){$_.call(this,e,t)}function kO(e,t){$_.call(this,e,t)}function SO(e,t){$_.call(this,e,t)}function AO(e,t){$_.call(this,e,t)}function _O(e,t){this.b=e,this.a=t}function TO(e,t){$_.call(this,e,t)}function CO(e,t){this.a=e,this.b=t}function EO(e,t){this.a=e,this.b=t}function OO(e,t){this.a=e,this.b=t}function PO(e,t){$_.call(this,e,t)}function MO(e,t){$_.call(this,e,t)}function IO(e,t){this.a=e,this.b=t}function DO(e,t){return Cq(),t!=e}function NO(e){return kF(e.a),e.b}function LO(e){return FNe(e,e.c),e}function RO(){return gA(),new ict}function jO(){qz(),this.a=new RB}function FO(){sBe(),this.a=new nw}function BO(){n2(),this.b=new nw}function $O(e,t){this.b=e,this.d=t}function zO(e,t){this.a=e,this.b=t}function HO(e,t){this.a=e,this.b=t}function qO(e,t){this.a=e,this.b=t}function VO(e,t){this.b=e,this.a=t}function UO(e,t){$_.call(this,e,t)}function WO(e,t){$_.call(this,e,t)}function GO(e,t){$_.call(this,e,t)}function YO(e,t){$_.call(this,e,t)}function KO(e,t){$_.call(this,e,t)}function XO(e,t){$_.call(this,e,t)}function QO(e,t){$_.call(this,e,t)}function JO(e,t){$_.call(this,e,t)}function ZO(e,t){$_.call(this,e,t)}function eP(e,t){$_.call(this,e,t)}function tP(e,t){$_.call(this,e,t)}function nP(e,t){$_.call(this,e,t)}function rP(e,t){$_.call(this,e,t)}function iP(e,t){$_.call(this,e,t)}function oP(e,t){$_.call(this,e,t)}function aP(e,t){$_.call(this,e,t)}function sP(e,t){$_.call(this,e,t)}function cP(e,t){$_.call(this,e,t)}function lP(e,t){$_.call(this,e,t)}function uP(e,t){$_.call(this,e,t)}function hP(e,t){$_.call(this,e,t)}function fP(e,t){$_.call(this,e,t)}function dP(e,t){$_.call(this,e,t)}function pP(e,t){$_.call(this,e,t)}function gP(e,t){this.b=e,this.a=t}function mP(e,t){this.b=e,this.a=t}function bP(e,t){this.b=e,this.a=t}function yP(e,t){this.b=e,this.a=t}function vP(e,t){this.a=e,this.b=t}function wP(e,t){this.a=e,this.b=t}function xP(e,t){this.a=e,this.b=t}function kP(e,t){this.a=e,this.b=t}function SP(e,t){$_.call(this,e,t)}function AP(e,t){$_.call(this,e,t)}function _P(e,t){$_.call(this,e,t)}function TP(e,t){$_.call(this,e,t)}function CP(e,t){$_.call(this,e,t)}function EP(e,t){$_.call(this,e,t)}function OP(e,t){$_.call(this,e,t)}function PP(e,t){$_.call(this,e,t)}function MP(e,t){$_.call(this,e,t)}function IP(e,t){$_.call(this,e,t)}function DP(e,t){$_.call(this,e,t)}function NP(e,t){$_.call(this,e,t)}function LP(e,t){$_.call(this,e,t)}function RP(e,t){$_.call(this,e,t)}function jP(e,t){$_.call(this,e,t)}function FP(e,t){$_.call(this,e,t)}function BP(e,t){$_.call(this,e,t)}function $P(e,t){$_.call(this,e,t)}function zP(e,t){$_.call(this,e,t)}function HP(e,t){$_.call(this,e,t)}function qP(e,t){this.a=e,this.b=t}function VP(e,t){this.a=e,this.b=t}function UP(e,t){this.a=e,this.b=t}function WP(e,t){this.a=e,this.b=t}function GP(e,t){this.a=e,this.b=t}function YP(e,t){this.a=e,this.b=t}function KP(e,t){this.a=e,this.b=t}function XP(e,t){this.a=e,this.b=t}function QP(e,t){this.a=e,this.b=t}function JP(e,t){this.a=e,this.b=t}function ZP(e,t){this.a=e,this.b=t}function eM(e,t){this.a=e,this.b=t}function tM(e,t){this.a=e,this.b=t}function nM(e,t){this.b=e,this.a=t}function rM(e,t){this.b=e,this.a=t}function iM(e,t){this.b=e,this.a=t}function oM(e,t){this.b=e,this.a=t}function aM(e,t){this.a=e,this.b=t}function sM(e,t){this.a=e,this.b=t}function cM(e,t){$_.call(this,e,t)}function lM(e,t){this.a=e,this.b=t}function uM(e,t){this.a=e,this.b=t}function hM(e,t){$_.call(this,e,t)}function fM(e,t){this.f=e,this.c=t}function dM(e,t){return NR(e.g,t)}function pM(e,t){return NR(t.b,e)}function gM(e,t){return xye(e.a,t)}function mM(e,t){return-e.b.af(t)}function bM(e,t){e&&vQ(MBt,e,t)}function yM(e,t){e.i=null,fse(e,t)}function vM(e,t,n){kTe(t,AMe(e,n))}function wM(e,t,n){kTe(t,AMe(e,n))}function xM(e,t){zje(e.a,cV(t,58))}function kM(e,t){ane(e.a,cV(t,12))}function SM(e,t){this.a=e,this.b=t}function AM(e,t){this.a=e,this.b=t}function _M(e,t){this.a=e,this.b=t}function TM(e,t){this.a=e,this.b=t}function CM(e,t){this.a=e,this.b=t}function EM(e,t){this.d=e,this.b=t}function OM(e,t){this.e=e,this.a=t}function PM(e,t){this.b=e,this.c=t}function MM(e,t){this.i=e,this.g=t}function IM(e,t){this.d=e,this.e=t}function DM(e,t){Ore(new LL(e),t)}function NM(e){return wye(e.c,e.b)}function LM(e){return e?e.md():null}function RM(e){return null==e?null:e}function jM(e){return typeof e===bZe}function FM(e){return typeof e===gZe}function BM(e){return typeof e===mZe}function $M(e,t){return 0==gpe(e,t)}function zM(e,t){return gpe(e,t)>=0}function HM(e,t){return 0!=gpe(e,t)}function qM(e,t){return Zce(e.Kc(),t)}function VM(e,t){return e.Rd().Xb(t)}function UM(e){return dbe(e),e.d.gc()}function WM(e){return BU(null==e),e}function GM(e,t){return e.a+=""+t,e}function YM(e,t){return e.a+=""+t,e}function KM(e,t){return e.a+=""+t,e}function XM(e,t){return e.a+=""+t,e}function QM(e,t){return e.a+=""+t,e}function JM(e,t){return e.a+=""+t,e}function ZM(e){return""+(tQ(e),e)}function eI(e){NY(this),Rce(this,e)}function tI(){Q1(),nG.call(this)}function nI(e,t){zG.call(this,e,t)}function rI(e,t){zG.call(this,e,t)}function iI(e,t){zG.call(this,e,t)}function oI(e,t){l7(e,t,e.c.b,e.c)}function aI(e,t){l7(e,t,e.a,e.a.a)}function sI(e){return c4(e,0),null}function cI(){this.b=0,this.a=!1}function lI(){this.b=0,this.a=!1}function uI(){this.b=new lT(sie(12))}function hI(){hI=_,hut=Mde(Dwe())}function fI(){fI=_,$pt=Mde(dFe())}function dI(){dI=_,dCt=Mde(cle())}function pI(){pI=_,Ov(),zat=new Jy}function gI(e){return e.a=0,e.b=0,e}function mI(e,t){return e.a=t.g+1,e}function bI(e,t){p$.call(this,e,t)}function yI(e,t){cB.call(this,e,t)}function vI(e,t){MM.call(this,e,t)}function wI(e,t){GR.call(this,e,t)}function xI(e,t){Zle.call(this,e,t)}function kI(e,t){SC(),vQ($Bt,e,t)}function SI(e,t){e.q.setTime(K3(t))}function AI(e){r.clearTimeout(e)}function _I(e){return KK(e),new rD(e)}function TI(e,t){return RM(e)===RM(t)}function CI(e,t){return e.a.a.a.cc(t)}function EI(e,t){return i0(e.a,0,t)}function OI(e){return AK(cV(e,74))}function PI(e){return t1((tQ(e),e))}function MI(e){return t1((tQ(e),e))}function II(e){return bN(e.l,e.m,e.h)}function DI(e,t){return gN(e.a,t.a)}function NI(e,t){return iK(e.a,t.a)}function LI(e,t){return cme(e.a,t.a)}function RI(e,t){return e.indexOf(t)}function jI(e,t){return 2==e.j[t.p]}function FI(e,t){return e==t?0:e?1:-1}function BI(e){return e<10?"0"+e:""+e}function $I(e){return typeof e===mZe}function zI(e){return e==Bft||e==Hft}function HI(e){return e==Bft||e==$ft}function qI(e,t){return gN(e.g,t.g)}function VI(e){return Sne(e.b.b,e,0)}function UI(){fW.call(this,0,0,0,0)}function WI(){tg.call(this,new c7)}function GI(e,t){Dte(e,0,e.length,t)}function YI(e,t){return wL(e.a,t),t}function KI(e,t){return Vz(),t.a+=e}function XI(e,t){return Vz(),t.a+=e}function QI(e,t){return Vz(),t.c+=e}function JI(e,t){return wL(e.c,t),e}function ZI(e,t){return mle(e.a,t),e}function eD(e){this.a=RO(),this.b=e}function tD(e){this.a=RO(),this.b=e}function nD(e){this.a=e.a,this.b=e.b}function rD(e){this.a=e,Fh.call(this)}function iD(e){this.a=e,Fh.call(this)}function oD(){mJ.call(this,0,0,0,0)}function aD(e){return mle(new pQ,e)}function sD(e){return RQ(cV(e,123))}function cD(e){return e.vh()&&e.wh()}function lD(e){return e!=cjt&&e!=ljt}function uD(e){return e==QLt||e==JLt}function hD(e){return e==eRt||e==XLt}function fD(e){return e==pAt||e==dAt}function dD(e,t){return gN(e.g,t.g)}function pD(e,t){return new Zle(t,e)}function gD(e,t){return new Zle(t,e)}function mD(e){return eV(e.b.Kc(),e.a)}function bD(e,t){lde(e,t),Poe(e,e.D)}function yD(e,t,n){Toe(e,t),boe(e,n)}function vD(e,t,n){woe(e,t),voe(e,n)}function wD(e,t,n){xoe(e,t),koe(e,n)}function xD(e,t,n){yoe(e,t),Aoe(e,n)}function kD(e,t,n){Soe(e,t),_oe(e,n)}function SD(e,t,n){MF.call(this,e,t,n)}function AD(e){fM.call(this,e,!0)}function _D(){UC.call(this,"Tail",3)}function TD(){UC.call(this,"Head",1)}function CD(e){oHe(),zce.call(this,e)}function ED(e){fW.call(this,e,e,e,e)}function OD(e){e.c=Oee(gat,_Ze,1,0,5,1)}function PD(e){return e.b&&lWe(e),e.a}function MD(e){return e.b&&lWe(e),e.c}function ID(e,t){Dct||(e.b=t)}function DD(e,t){return e[e.length]=t}function ND(e,t){return e[e.length]=t}function LD(e,t){return _ie(t,u1(e))}function RD(e,t){return _ie(t,u1(e))}function jD(e,t){return wae(qK(e.d),t)}function FD(e,t){return wae(qK(e.g),t)}function BD(e,t){return wae(qK(e.j),t)}function $D(e,t){cB.call(this,e.b,t)}function zD(e,t){tte(G6(e.a),v2(t))}function HD(e,t){tte(Mne(e.a),w2(t))}function qD(e,t,n){wD(n,n.i+e,n.j+t)}function VD(e,t,n){cX(e.c[t.g],t.g,n)}function UD(e,t,n){cV(e.c,71).Gi(t,n)}function WD(e,t,n){return cX(e,t,n),n}function GD(e){Cie(e.Sf(),new Pg(e))}function YD(e){return null!=e?Hse(e):0}function KD(e){return null==e?0:Hse(e)}function XD(e){XJe(),Xy.call(this,e)}function QD(e){this.a=e,Kq.call(this,e)}function JD(){JD=_,r.Math.log(2)}function ZD(){ZD=_,wC(),izt=KFt}function eN(){eN=_,vTt=new ibe(wRt)}function tN(){tN=_,new nN,new Zy}function nN(){new Jy,new Jy,new Jy}function rN(){throw uv(new Sk(uat))}function iN(){throw uv(new Sk(uat))}function oN(){throw uv(new Sk(hat))}function aN(){throw uv(new Sk(hat))}function sN(e){this.a=e,Y_.call(this,e)}function cN(e){this.a=e,Y_.call(this,e)}function lN(e,t){ZK(),this.a=e,this.b=t}function uN(e,t){KK(t),cJ(e).Jc(new d)}function hN(e,t){qW(e.c,e.c.length,t)}function fN(e){return e.at?1:0}function mN(e,t){return gpe(e,t)>0?e:t}function bN(e,t,n){return{l:e,m:t,h:n}}function yN(e,t){null!=e.a&&kM(t,e.a)}function vN(e){o2(e,null),c2(e,null)}function wN(e,t,n){return vQ(e.g,n,t)}function xN(e,t,n){return ave(t,n,e.c)}function kN(e,t,n){return vQ(e.k,n,t)}function SN(e,t,n){return mKe(e,t,n),n}function AN(e,t){return e2(),t.n.b+=e}function _N(e){HZ.call(this),this.b=e}function TN(e){IB.call(this),this.a=e}function CN(){UC.call(this,"Range",2)}function EN(e){this.b=e,this.a=new Zy}function ON(e){this.b=new et,this.a=e}function PN(e){e.a=new j,e.c=new j}function MN(e){e.a=new Jy,e.d=new Jy}function IN(e){l2(e,null),u2(e,null)}function DN(e,t){return wKe(e.a,t,null)}function NN(e,t){return vQ(e.a,t.a,t)}function LN(e){return new kP(e.a,e.b)}function RN(e){return new kP(e.c,e.d)}function jN(e){return new kP(e.c,e.d)}function FN(e,t){return iYe(e.c,e.b,t)}function BN(e,t){return null!=e&&_xe(e,t)}function $N(e,t){return-1!=Jue(e.Kc(),t)}function zN(e){return e.Ob()?e.Pb():null}function HN(e){this.b=(uZ(),new Yp(e))}function qN(e){this.a=e,Jy.call(this)}function VN(){GR.call(this,null,null)}function UN(){YR.call(this,null,null)}function WN(){$_.call(this,"INSTANCE",0)}function GN(){B_e(),this.a=new yFe(Ift)}function YN(e){return yve(e,0,e.length)}function KN(e,t){return new nR(e.Kc(),t)}function XN(e,t){return null!=e.a.Bc(t)}function QN(e,t){EGe(e),e.Gc(cV(t,15))}function JN(e,t,n){e.c.bd(t,cV(n,136))}function ZN(e,t,n){e.c.Ui(t,cV(n,136))}function eL(e,t){e.c&&(oU(t),z0(t))}function tL(e,t){e.q.setHours(t),OUe(e,t)}function nL(e,t){Fj(t,e.a.a.a,e.a.a.b)}function rL(e,t,n,r){cX(e.a[t.g],n.g,r)}function iL(e,t,n){return e.a[t.g][n.g]}function oL(e,t){return e.e[t.c.p][t.p]}function aL(e,t){return e.c[t.c.p][t.p]}function sL(e,t){return e.a[t.c.p][t.p]}function cL(e,t){return e.j[t.p]=sje(t)}function lL(e,t){return null!=e.a.Bc(t)}function uL(e,t){return ck(bF(t.a))<=e}function hL(e,t){return ck(bF(t.a))>=e}function fL(e,t){return i9(e.f,t.Pg())}function dL(e,t){return e.a*t.a+e.b*t.b}function pL(e,t){return e.a0?t/(e*e):100*t}function Aj(e,t){return e>0?t*t/e:t*t*100}function _j(e,t){return cV(are(e.a,t),34)}function Tj(e,t){return AOe(),qDe(e,t.e,t)}function Cj(e,t,n){return ZT(),n.Mg(e,t)}function Ej(e){return toe(),e.e.a+e.f.a/2}function Oj(e,t,n){return toe(),n.e.a-e*t}function Pj(e){return toe(),e.e.b+e.f.b/2}function Mj(e,t,n){return toe(),n.e.b-e*t}function Ij(e){e.d=new dj(e),e.e=new Jy}function Dj(){this.a=new F0,this.b=new F0}function Nj(e){this.c=e,this.a=1,this.b=1}function Lj(e){aJe(),gv(this),this.Ff(e)}function Rj(e,t,n){Tte(),e.pf(t)&&n.Cd(e)}function jj(e,t,n){return wL(t,Rbe(e,n))}function Fj(e,t,n){return e.a+=t,e.b+=n,e}function Bj(e,t,n){return e.a*=t,e.b*=n,e}function $j(e,t){return e.a=t.a,e.b=t.b,e}function zj(e){return e.a=-e.a,e.b=-e.b,e}function Hj(e,t,n){return e.a-=t,e.b-=n,e}function qj(e){fT.call(this),gae(this,e)}function Vj(){$_.call(this,"GROW_TREE",0)}function Uj(){$_.call(this,"POLYOMINO",0)}function Wj(e,t,n){fte.call(this,e,t,n,2)}function Gj(e,t,n){Nge(G6(e.a),t,v2(n))}function Yj(e,t){AC(),GR.call(this,e,t)}function Kj(e,t){_C(),YR.call(this,e,t)}function Xj(e,t){_C(),Kj.call(this,e,t)}function Qj(e,t){_C(),YR.call(this,e,t)}function Jj(e,t){return e.c.Fc(cV(t,136))}function Zj(e,t,n){Nge(Mne(e.a),t,w2(n))}function eF(e){this.c=e,xoe(e,0),koe(e,0)}function tF(e,t){ZD(),PW.call(this,e,t)}function nF(e,t){ZD(),tF.call(this,e,t)}function rF(e,t){ZD(),tF.call(this,e,t)}function iF(e,t){ZD(),PW.call(this,e,t)}function oF(e,t){ZD(),rF.call(this,e,t)}function aF(e,t){ZD(),iF.call(this,e,t)}function sF(e,t){ZD(),PW.call(this,e,t)}function cF(e,t,n){return t.zl(e.e,e.c,n)}function lF(e,t,n){return t.Al(e.e,e.c,n)}function uF(e,t,n){return XWe(Ine(e,t),n)}function hF(e,t){return ype(e.e,cV(t,54))}function fF(e){return null==e?null:MXe(e)}function dF(e){return null==e?null:yPe(e)}function pF(e){return null==e?null:obe(e)}function gF(e){return null==e?null:obe(e)}function mF(e){return BU(null==e||FM(e)),e}function bF(e){return BU(null==e||BM(e)),e}function yF(e){return BU(null==e||jM(e)),e}function vF(e){null==e.o&&aRe(e)}function wF(e){if(!e)throw uv(new Lv)}function xF(e){if(!e)throw uv(new Dv)}function kF(e){if(!e)throw uv(new zv)}function SF(e){if(!e)throw uv(new Rv)}function AF(e){if(!e)throw uv(new Bv)}function _F(){_F=_,FBt=new Vw,new Uw}function TF(){TF=_,GEt=new Ey("root")}function CF(){Fae.call(this),this.Bb|=C1e}function EF(e,t){this.d=e,Ep(this),this.b=t}function OF(e,t){Bee.call(this,e),this.a=t}function PF(e,t){Bee.call(this,e),this.a=t}function MF(e,t,n){M9.call(this,e,t,n,null)}function IF(e,t,n){M9.call(this,e,t,n,null)}function DF(e,t){this.c=e,P_.call(this,e,t)}function NF(e,t){this.a=e,DF.call(this,e,t)}function LF(e){this.q=new r.Date(K3(e))}function RF(e){return e>8?0:e+1}function jF(e,t){Dct||wL(e.a,t)}function FF(e,t){return KT(),Ale(t.d.i,e)}function BF(e,t){return Cce(),new sHe(t,e)}function $F(e,t,n){return e.Ne(t,n)<=0?n:t}function zF(e,t,n){return e.Ne(t,n)<=0?t:n}function HF(e,t){return cV(are(e.b,t),143)}function qF(e,t){return cV(are(e.c,t),233)}function VF(e){return cV(GU(e.a,e.b),294)}function UF(e){return new kP(e.c,e.d+e.a)}function WF(e){return tQ(e),e?1231:1237}function GF(e){return e2(),fD(cV(e,203))}function YF(){YF=_,fut=mme((Xye(),Qjt))}function KF(e,t){t.a?KNe(e,t):lL(e.a,t.b)}function XF(e,t,n){++e.j,e.tj(),Mee(e,t,n)}function QF(e,t,n){++e.j,e.qj(t,e.Zi(t,n))}function JF(e,t,n){e.fd(t).Rb(n)}function ZF(e,t,n){return n=Nqe(e,t,6,n)}function eB(e,t,n){return n=Nqe(e,t,3,n)}function tB(e,t,n){return n=Nqe(e,t,9,n)}function nB(e,t){return ZZ(t,K2e),e.f=t,e}function rB(e,t){return(t&vZe)%e.d.length}function iB(e,t,n){return hWe(e.c,e.b,t,n)}function oB(e,t){this.c=e,Lie.call(this,t)}function aB(e,t){this.a=e,Ry.call(this,t)}function sB(e,t){this.a=e,Ry.call(this,t)}function cB(e,t){Ey.call(this,e),this.a=t}function lB(e,t){zy.call(this,e),this.a=t}function uB(e,t){zy.call(this,e),this.a=t}function hB(e){lye.call(this,0,0),this.f=e}function fB(e,t,n){return e.a+=yve(t,0,n),e}function dB(e){return!e.a&&(e.a=new k),e.a}function pB(e,t){var n;return n=e.e,e.e=t,n}function gB(e,t){var n;return n=t,!!e.Fe(n)}function mB(e,t){return UR(),e==t?0:e?1:-1}function bB(e,t){e.a.bd(e.b,t),++e.b,e.c=-1}function yB(e){e.b?yB(e.b):e.f.c.zc(e.e,e.d)}function vB(e){NY(e.e),e.d.b=e.d,e.d.a=e.d}function wB(e,t,n){vT(),Pd(e,t.Ve(e.a,n))}function xB(e,t,n){return qY(e,cV(t,22),n)}function kB(e,t){return aS(new Array(t),e)}function SB(e){return bG(LG(e,32))^bG(e)}function AB(e){return String.fromCharCode(e)}function _B(e){return null==e?null:e.message}function TB(e,t,n){return e.apply(t,n)}function CB(e,t){e[q1e].call(e,t)}function EB(e,t){e[q1e].call(e,t)}function OB(e,t){return KT(),!Ale(t.d.i,e)}function PB(e,t,n,r){fW.call(this,e,t,n,r)}function MB(){HB.call(this),this.a=new lA}function IB(){this.n=new lA,this.o=new lA}function DB(){this.b=new lA,this.c=new Zy}function NB(){this.a=new Zy,this.b=new Zy}function LB(){this.a=new ht,this.b=new Uv}function RB(){this.b=new c7,this.a=new c7}function jB(){this.b=new nw,this.a=new nw}function FB(){this.b=new Jy,this.a=new Jy}function BB(){this.b=new VA,this.a=new Sa}function $B(){this.a=new uf,this.b=new so}function zB(){this.a=new Zy,this.d=new Zy}function HB(){this.n=new Lw,this.i=new oD}function qB(e){this.a=(yae(e,m0e),new j9(e))}function VB(e){this.a=(yae(e,m0e),new j9(e))}function UB(e){return e<100?null:new oA(e)}function WB(e,t){return e.n.a=(tQ(t),t+10)}function GB(e,t){return e.n.a=(tQ(t),t+10)}function YB(e,t){return t==e||lTe(yje(t),e)}function KB(e,t){return null==vQ(e.a,t,"")}function XB(e,t){return t.qi(e.a)}function QB(e,t){return e.a+=t.a,e.b+=t.b,e}function JB(e,t){return e.a-=t.a,e.b-=t.b,e}function ZB(e){return Wv(e.j.c,0),e.a=-1,e}function e$(e,t,n){return n=Nqe(e,t,11,n)}function t$(e,t,n){null!=n&&Wae(t,mSe(e,n))}function n$(e,t,n){null!=n&&Gae(t,mSe(e,n))}function r$(e,t,n,r){hY.call(this,e,t,n,r)}function i$(e,t,n,r){hY.call(this,e,t,n,r)}function o$(e,t,n,r){i$.call(this,e,t,n,r)}function a$(e,t,n,r){pY.call(this,e,t,n,r)}function s$(e,t,n,r){pY.call(this,e,t,n,r)}function c$(e,t,n,r){pY.call(this,e,t,n,r)}function l$(e,t,n,r){s$.call(this,e,t,n,r)}function u$(e,t,n,r){s$.call(this,e,t,n,r)}function h$(e,t,n,r){c$.call(this,e,t,n,r)}function f$(e,t,n,r){u$.call(this,e,t,n,r)}function d$(e,t,n,r){wY.call(this,e,t,n,r)}function p$(e,t){gk.call(this,Hrt+e+Ynt+t)}function g$(e,t){return e.jk().wi().ri(e,t)}function m$(e,t){return e.jk().wi().ti(e,t)}function b$(e,t){return tQ(e),RM(e)===RM(t)}function y$(e,t){return tQ(e),RM(e)===RM(t)}function v$(e,t){return e.b.Bd(new XC(e,t))}function w$(e,t){return e.b.Bd(new QC(e,t))}function x$(e,t){return e.b.Bd(new JC(e,t))}function k$(e,t){return e.e=cV(e.d.Kb(t),159)}function S$(e,t,n){return e.lastIndexOf(t,n)}function A$(e,t,n){return cme(e[t.a],e[n.a])}function _$(e,t){return whe(t,(AJe(),Pxt),e)}function T$(e,t){return gN(t.a.d.p,e.a.d.p)}function C$(e,t){return gN(e.a.d.p,t.a.d.p)}function E$(e,t){return cme(e.c-e.s,t.c-t.s)}function O$(e,t){return cme(e.b.e.a,t.b.e.a)}function P$(e,t){return cme(e.c.e.a,t.c.e.a)}function M$(e){return e.c?Sne(e.c.a,e,0):-1}function I$(e){return e==ijt||e==ajt||e==ojt}function D$(e,t){this.c=e,XY.call(this,e,t)}function N$(e,t,n){this.a=e,XR.call(this,t,n)}function L$(e){this.c=e,iI.call(this,JZe,0)}function R$(e,t,n){this.c=t,this.b=n,this.a=e}function j$(e){Cq(),this.d=e,this.a=new DL}function F$(e){lz(),this.a=(uZ(),new eS(e))}function B$(e,t){uD(e.f)?QLe(e,t):pEe(e,t)}function $$(e,t){lV.call(this,e,e.length,t)}function z$(e,t){Dct||t&&(e.d=t)}function H$(e,t){return BN(t,15)&&V$e(e.c,t)}function q$(e,t,n){return cV(e.c,71).Wk(t,n)}function V$(e,t,n){return cV(e.c,71).Xk(t,n)}function U$(e,t,n){return cF(e,cV(t,343),n)}function W$(e,t,n){return lF(e,cV(t,343),n)}function G$(e,t,n){return xCe(e,cV(t,343),n)}function Y$(e,t,n){return BEe(e,cV(t,343),n)}function K$(e,t){return null==t?null:Wpe(e.b,t)}function X$(e){return BM(e)?(tQ(e),e):e.ue()}function Q$(e){return!isNaN(e)&&!isFinite(e)}function J$(e){PN(this),zJ(this),Xse(this,e)}function Z$(e){OD(this),gV(this.c,0,e.Pc())}function ez(e,t,n){this.a=e,this.b=t,this.c=n}function tz(e,t,n){this.a=e,this.b=t,this.c=n}function nz(e,t,n){this.d=e,this.b=n,this.a=t}function rz(e){this.a=e,dT(),zle(Date.now())}function iz(e){IX(e.a),Iee(e.c,e.b),e.b=null}function oz(){oz=_,sct=new F,cct=new B}function az(){az=_,LBt=Oee(gat,_Ze,1,0,5,1)}function sz(){sz=_,W$t=Oee(gat,_Ze,1,0,5,1)}function cz(){cz=_,G$t=Oee(gat,_Ze,1,0,5,1)}function lz(){lz=_,new Av((uZ(),uZ(),Gst))}function uz(e){return jte(),Boe((Rte(),kct),e)}function hz(e){return xde(),Boe((dee(),Rct),e)}function fz(e){return $we(),Boe((w7(),Qct),e)}function dz(e){return Wre(),Boe((x7(),tlt),e)}function pz(e){return K$e(),Boe((cue(),wlt),e)}function gz(e){return Jie(),Boe((hee(),Elt),e)}function mz(e){return Fte(),Boe((uee(),Llt),e)}function bz(e){return Jne(),Boe((fee(),zlt),e)}function yz(e){return QJe(),Boe((hI(),hut),e)}function vz(e){return nue(),Boe(($te(),vut),e)}function wz(e){return vxe(),Boe((Hte(),_ut),e)}function xz(e){return yxe(),Boe((zte(),jut),e)}function kz(e){return zT(),Boe((i5(),$ut),e)}function Sz(e){return Gre(),Boe((k7(),vht),e)}function Az(e){return Qne(),Boe((pee(),vft),e)}function _z(e){return cOe(),Boe((Nre(),Oft),e)}function Tz(e){return Wue(),Boe((Vte(),Vft),e)}function Cz(e){return qve(),Boe((qte(),rdt),e)}function Ez(e,t){if(!e)throw uv(new vk(t))}function Oz(e){if(!e)throw uv(new wk(CZe))}function Pz(e,t){if(e!=t)throw uv(new Bv)}function Mz(e,t,n){this.a=e,this.b=t,this.c=n}function Iz(e,t,n){this.a=e,this.b=t,this.c=n}function Dz(e,t,n){this.a=e,this.b=t,this.c=n}function Nz(e,t,n){this.b=e,this.a=t,this.c=n}function Lz(e,t,n){this.b=e,this.c=t,this.a=n}function Rz(e,t,n){this.a=e,this.b=t,this.c=n}function jz(e,t,n){this.e=t,this.b=e,this.d=n}function Fz(e,t,n){this.b=e,this.a=t,this.c=n}function Bz(e,t,n){return vT(),e.a.Yd(t,n),t}function $z(e){var t;return(t=new we).e=e,t}function zz(e){var t;return(t=new bw).b=e,t}function Hz(){Hz=_,Ddt=new Nn,Ndt=new Ln}function qz(){qz=_,Qpt=new cr,Xpt=new lr}function Vz(){Vz=_,igt=new yi,ogt=new vi}function Uz(e){return mse(),Boe((U9(),Egt),e)}function Wz(e){return GJe(),Boe((fI(),$pt),e)}function Gz(e){return Vue(),Boe((Wte(),Kpt),e)}function Yz(e){return Uue(),Boe((Ute(),fgt),e)}function Kz(e){return mCe(),Boe((Lre(),vgt),e)}function Xz(e){return u$e(),Boe((sle(),Fgt),e)}function Qz(e){return vMe(),Boe((noe(),Ggt),e)}function Jz(e){return H9(),Boe((O7(),Qgt),e)}function Zz(e){return Aae(),Boe((q9(),nmt),e)}function eH(e){return iae(),Boe((V9(),smt),e)}function tH(e){return wve(),Boe((Rre(),pmt),e)}function nH(e){return Yre(),Boe((_7(),ymt),e)}function rH(e){return jOe(),Boe((ooe(),Qmt),e)}function iH(e){return i$e(),Boe((_he(),lbt),e)}function oH(e){return rue(),Boe((G9(),pbt),e)}function aH(e){return Zne(),Boe((Y9(),vbt),e)}function sH(e){return J5(),Boe((A7(),Sbt),e)}function cH(e){return _Te(),Boe((ioe(),qmt),e)}function lH(e){return Che(),Boe((W9(),Smt),e)}function uH(e){return tPe(),Boe((roe(),Mmt),e)}function hH(e){return Kte(),Boe((T7(),Lmt),e)}function fH(e){return Vbe(),Boe((Fre(),Nyt),e)}function dH(e){return kFe(),Boe((oue(),sAt),e)}function pH(e){return Epe(),Boe((K9(),fAt),e)}function gH(e){return Jxe(),Boe((Gte(),yAt),e)}function mH(e){return bxe(),Boe((jre(),_At),e)}function bH(e){return SHe(),Boe((The(),jAt),e)}function yH(e){return xve(),Boe((Yte(),qAt),e)}function vH(e){return ere(),Boe((C7(),GAt),e)}function wH(e){return oae(),Boe((J9(),JAt),e)}function xH(e){return rle(),Boe((X9(),r_t),e)}function kH(e){return Tfe(),Boe((Q9(),c_t),e)}function SH(e){return wde(),Boe((Z9(),d_t),e)}function AH(e){return rae(),Boe((eee(),y_t),e)}function _H(e){return Gue(),Boe((tee(),S_t),e)}function TH(e){return nae(),Boe((lee(),V_t),e)}function CH(e){return Z5(),Boe((E7(),eTt),e)}function EH(e){return d1(),Boe((I7(),dTt),e)}function OH(e){return p1(),Boe((D7(),bTt),e)}function PH(e){return $9(),Boe((N7(),jTt),e)}function MH(e){return f1(),Boe((L7(),WTt),e)}function IH(e){return EAe(),Boe((lne(),JTt),e)}function DH(e){return PHe(),Boe((dI(),dCt),e)}function NH(e){return Cfe(),Boe((nee(),yCt),e)}function LH(e){return yde(),Boe((cne(),FEt),e)}function RH(e){return r4(),Boe((P7(),HEt),e)}function jH(e){return bse(),Boe((M7(),QEt),e)}function FH(e){return GCe(),Boe((Bre(),iOt),e)}function BH(e){return vde(),Boe((ree(),dOt),e)}function $H(e){return Cte(),Boe((R7(),cOt),e)}function zH(e){return gSe(),Boe((sne(),tPt),e)}function HH(e){return nle(),Boe((iee(),aPt),e)}function qH(e){return Qye(),Boe((oee(),hPt),e)}function VH(e){return Zxe(),Boe((aee(),mPt),e)}function UH(e){return zme(),Boe((see(),IPt),e)}function WH(e){return a8(),Boe((j7(),AMt),e)}function GH(e){return Mce(),Boe((S7(),Idt),e)}function YH(e){return GOe(),Boe((aoe(),ydt),e)}function KH(e){return gne(),Boe((cee(),OMt),e)}function XH(e){return iue(),Boe((F7(),DMt),e)}function QH(e){return $je(),Boe(($re(),zMt),e)}function JH(e){return eC(),Boe((N5(),KMt),e)}function ZH(e){return jge(),Boe((mee(),WMt),e)}function eq(e){return tC(),Boe((L5(),JMt),e)}function tq(e){return z9(),Boe((B7(),nIt),e)}function nq(e){return bPe(),Boe((zre(),lIt),e)}function rq(e){return nC(),Boe((R5(),WIt),e)}function iq(e){return Yue(),Boe(($7(),XIt),e)}function oq(e){return jwe(),Boe((qre(),dDt),e)}function aq(e){return fMe(),Boe((ole(),SDt),e)}function sq(e){return eke(),Boe((soe(),LDt),e)}function cq(e){return ZTe(),Boe((coe(),tNt),e)}function lq(e){return Rge(),Boe((Hre(),nRt),e)}function uq(e){return Zie(),Boe((bee(),sRt),e)}function hq(e){return $me(),Boe((une(),dRt),e)}function fq(e){return jEe(),Boe((loe(),xRt),e)}function dq(e){return Ppe(),Boe((gee(),DRt),e)}function pq(e){return MAe(),Boe((hne(),BRt),e)}function gq(e){return YLe(),Boe((sue(),XRt),e)}function mq(e){return Ywe(),Boe((Vre(),rjt),e)}function bq(e){return NCe(),Boe((uoe(),hjt),e)}function yq(e){return nDe(),Boe((hoe(),vjt),e)}function vq(e){return FXe(),Boe((Ure(),Hjt),e)}function wq(e){return Xye(),Boe((fne(),Zjt),e)}function xq(e){return aqe(),Boe((aue(),uFt),e)}function kq(e){return Ope(),Boe((yee(),gFt),e)}function Sq(e,t){return tQ(e),e+(tQ(t),t)}function Aq(e){return Eq(),Boe((z7(),vFt),e)}function _q(e){return Ube(),Boe((dne(),_Ft),e)}function Tq(e){return _fe(),Boe((pne(),IFt),e)}function Cq(){Cq=_,FXe(),G_t=$jt,Y_t=wjt}function Eq(){Eq=_,mFt=new CU,bFt=new mY}function Oq(e){return!e.e&&(e.e=new Zy),e.e}function Pq(e,t){this.c=e,this.a=t,this.b=t-e}function Mq(e,t,n){this.a=e,this.b=t,this.c=n}function Iq(e,t,n){this.a=e,this.b=t,this.c=n}function Dq(e,t,n){this.a=e,this.b=t,this.c=n}function Nq(e,t,n){this.a=e,this.b=t,this.c=n}function Lq(e,t,n){this.a=e,this.b=t,this.c=n}function Rq(e,t,n){this.a=e,this.b=t,this.c=n}function jq(e,t,n){this.e=e,this.a=t,this.c=n}function Fq(e,t,n){ZD(),$0.call(this,e,t,n)}function Bq(e,t,n){ZD(),EX.call(this,e,t,n)}function $q(e,t,n){ZD(),EX.call(this,e,t,n)}function zq(e,t,n){ZD(),EX.call(this,e,t,n)}function Hq(e,t,n){ZD(),Bq.call(this,e,t,n)}function qq(e,t,n){ZD(),Bq.call(this,e,t,n)}function Vq(e,t,n){ZD(),qq.call(this,e,t,n)}function Uq(e,t,n){ZD(),$q.call(this,e,t,n)}function Wq(e,t,n){ZD(),zq.call(this,e,t,n)}function Gq(e){fW.call(this,e.d,e.c,e.a,e.b)}function Yq(e){fW.call(this,e.d,e.c,e.a,e.b)}function Kq(e){this.d=e,Ep(this),this.b=_G(e.d)}function Xq(e){return iLe(),Boe((ale(),TBt),e)}function Qq(e,t){return KK(e),KK(t),new A_(e,t)}function Jq(e,t){return KK(e),KK(t),new KV(e,t)}function Zq(e,t){return KK(e),KK(t),new XV(e,t)}function eV(e,t){return KK(e),KK(t),new L_(e,t)}function tV(e){return kF(0!=e.b),Iie(e,e.a.a)}function nV(e){return kF(0!=e.b),Iie(e,e.c.b)}function rV(e){return!e.c&&(e.c=new Fl),e.c}function iV(e){var t;return ore(t=new Zy,e),t}function oV(e){var t;return ore(t=new nw,e),t}function aV(e){var t;return Bse(t=new iw,e),t}function sV(e){var t;return Bse(t=new fT,e),t}function cV(e,t){return BU(null==e||_xe(e,t)),e}function lV(e,t,n){$G.call(this,t,n),this.a=e}function uV(e,t){this.c=e,this.b=t,this.a=!1}function hV(){this.a=";,;",this.b="",this.c=""}function fV(e,t,n){this.b=e,nI.call(this,t,n)}function dV(e,t,n){this.c=e,YC.call(this,t,n)}function pV(e,t,n){BE.call(this,e,t),this.b=n}function gV(e,t,n){dNe(n,0,e,t,n.length,!1)}function mV(e,t,n,r,i){e.b=t,e.c=n,e.d=r,e.a=i}function bV(e,t,n,r,i){e.d=t,e.c=n,e.a=r,e.b=i}function yV(e,t){t&&(e.b=t,e.a=(VX(t),t.a))}function vV(e,t){if(!e)throw uv(new vk(t))}function wV(e,t){if(!e)throw uv(new wk(t))}function xV(e,t){if(!e)throw uv(new mk(t))}function kV(e,t){return JT(),gN(e.d.p,t.d.p)}function SV(e,t){return toe(),cme(e.e.b,t.e.b)}function AV(e,t){return toe(),cme(e.e.a,t.e.a)}function _V(e,t){return gN(pU(e.d),pU(t.d))}function TV(e,t){return t&&NX(e,t.d)?t:null}function CV(e,t){return t==(FXe(),$jt)?e.c:e.d}function EV(e){return _le(IY($I(e)?Vle(e):e))}function OV(e){return new kP(e.c+e.b,e.d+e.a)}function PV(e){return null!=e&&!ybe(e,e$t,t$t)}function MV(e,t){return(fge(e)<<4|fge(t))&L0e}function IV(e,t,n,r,i){e.c=t,e.d=n,e.b=r,e.a=i}function DV(e){var t,n;t=e.b,n=e.c,e.b=n,e.c=t}function NV(e){var t,n;n=e.d,t=e.a,e.d=t,e.a=n}function LV(e,t){var n;return n=e.c,Qae(e,t),n}function RV(e,t){return e.g=t<0?-1:t,e}function jV(e,t){return zie(e),e.a*=t,e.b*=t,e}function FV(e,t,n){Pie.call(this,t,n),this.d=e}function BV(e,t,n){IM.call(this,e,t),this.c=n}function $V(e,t,n){IM.call(this,e,t),this.c=n}function zV(e){cz(),bl.call(this),this.ci(e)}function HV(){D9(),PX.call(this,(kC(),f$t))}function qV(e){return XJe(),new OW(0,e)}function VV(){VV=_,uZ(),Ezt=new Wp(dot)}function UV(){UV=_,new Vxe((yx(),Sat),(bx(),kat))}function WV(){WV=_,dst=Oee(gst,GZe,17,256,0,1)}function GV(){this.b=ck(bF(Qwe((iVe(),zht))))}function YV(e){this.b=e,this.a=kG(this.b.a).Od()}function KV(e,t){this.b=e,this.a=t,Fh.call(this)}function XV(e,t){this.a=e,this.b=t,Fh.call(this)}function QV(e,t,n){this.a=e,vI.call(this,t,n)}function JV(e,t,n){this.a=e,vI.call(this,t,n)}function ZV(e,t,n){eie(e,t,new XK(n))}function eU(e,t,n){var r;return r=e[t],e[t]=n,r}function tU(e){return Ite(e.slice(),e)}function nU(e){var t;return t=e.n,e.a.b+t.d+t.a}function rU(e){var t;return t=e.n,e.e.b+t.d+t.a}function iU(e){var t;return t=e.n,e.e.a+t.b+t.c}function oU(e){e.a.b=e.b,e.b.a=e.a,e.a=e.b=null}function aU(e,t){return l7(e,t,e.c.b,e.c),!0}function sU(e){return e.a?e.a:lJ(e)}function cU(e){return fZ(),dOe(e)==j1(mOe(e))}function lU(e){return fZ(),mOe(e)==j1(dOe(e))}function uU(e,t){return E_e(e,new BE(t.a,t.b))}function hU(e,t){return SQ(),Oke(e,t),new dQ(e,t)}function fU(e,t){return e.c=t)throw uv(new Ow)}function KG(e,t){return oge(e,(tQ(t),new cg(t)))}function XG(e,t){return oge(e,(tQ(t),new lg(t)))}function QG(e,t,n){return zJe(e,cV(t,12),cV(n,12))}function JG(e){return Ice(),0!=cV(e,12).g.c.length}function ZG(e){return Ice(),0!=cV(e,12).e.c.length}function eY(e,t){return Cce(),cme(t.a.o.a,e.a.o.a)}function tY(e,t){0!=(t.Bb&Qtt)&&!e.a.o&&(e.a.o=t)}function nY(e,t){t.Ug("General 'Rotator",1),fXe(e)}function rY(e,t,n){t.qf(n,ck(bF(oX(e.b,n)))*e.a)}function iY(e,t,n){return f$e(),Uce(e,t)&&Uce(e,n)}function oY(e){return nDe(),!e.Hc(pjt)&&!e.Hc(mjt)}function aY(e){return e.e?S9(e.e):null}function sY(e){return $I(e)?""+e:F$e(e)}function cY(e){var t;for(t=e;t.f;)t=t.f;return t}function lY(e,t,n){return cX(t,0,eW(t[0],n[0])),t}function uY(e,t,n,r){var i;(i=e.i).i=t,i.a=n,i.b=r}function hY(e,t,n,r){kL.call(this,e,t,n),this.b=r}function fY(e,t,n,r,i){dte.call(this,e,t,n,r,i,-1)}function dY(e,t,n,r,i){pte.call(this,e,t,n,r,i,-1)}function pY(e,t,n,r){BV.call(this,e,t,n),this.b=r}function gY(e){fM.call(this,e,!1),this.a=!1}function mY(){zP.call(this,"LOOKAHEAD_LAYOUT",1)}function bY(e){this.b=e,ZR.call(this,e),UL(this)}function yY(e){this.b=e,tj.call(this,e),WL(this)}function vY(e,t,n){this.a=e,r$.call(this,t,n,5,6)}function wY(e,t,n,r){this.b=e,kL.call(this,t,n,r)}function xY(e,t){this.b=e,hd.call(this,e.b),this.a=t}function kY(e){this.a=Bxe(e.a),this.b=new Z$(e.b)}function SY(e,t){ZK(),q_.call(this,e,Lpe(new Ok(t)))}function AY(e,t){return XJe(),new CX(e,t,0)}function _Y(e,t){return XJe(),new CX(6,e,t)}function TY(e,t){for(tQ(t);e.Ob();)t.Cd(e.Pb())}function CY(e,t){return jM(t)?MZ(e,t):!!BW(e.f,t)}function EY(e,t){return t.Vh()?ype(e.b,cV(t,54)):t}function OY(e,t){return y$(e.substr(0,t.length),t)}function PY(e){return new BG(new JL(e.a.length,e.a))}function MY(e){return new kP(e.c+e.b/2,e.d+e.a/2)}function IY(e){return bN(~e.l&h1e,~e.m&h1e,~e.h&f1e)}function DY(e){return typeof e===pZe||typeof e===yZe}function NY(e){e.f=new eD(e),e.i=new tD(e),++e.g}function LY(e){if(!e)throw uv(new zv);return e.d}function RY(e){var t;return kF(null!=(t=jhe(e))),t}function jY(e){var t;return kF(null!=(t=lme(e))),t}function FY(e,t){var n;return n9(t,n=e.a.gc()),n-t}function BY(e,t){return null==e.a.zc(t,e)}function $Y(e,t){return null==e.a.zc(t,(UR(),tst))}function zY(e){return new hW(null,sK(e,e.length))}function HY(e,t,n){return HWe(e,cV(t,42),cV(n,176))}function qY(e,t,n){return kse(e.a,t),eU(e.b,t.g,n)}function VY(e,t,n){YG(n,e.a.c.length),J7(e.a,n,t)}function UY(e,t,n,r){cde(t,n,e.length),WY(e,t,n,r)}function WY(e,t,n,r){var i;for(i=t;i0?r.Math.log(e/t):-100}function iK(e,t){return gpe(e,t)<0?-1:gpe(e,t)>0?1:0}function oK(e,t){QN(e,BN(t,160)?t:cV(t,2036).Rl())}function aK(e,t){if(null==e)throw uv(new kk(t))}function sK(e,t){return Nie(t,e.length),new TU(e,t)}function cK(e,t){return!!t&&Xse(e,t)}function lK(){return Hx(),que(oS(Iat,1),b0e,549,0,[Oat])}function uK(e){return 0==e.e?e:new YY(-e.e,e.d,e.a)}function hK(e,t){return cme(e.c.c+e.c.b,t.c.c+t.c.b)}function fK(e,t){l7(e.d,t,e.b.b,e.b),++e.a,e.c=null}function dK(e,t){return e.c?dK(e.c,t):wL(e.b,t),e}function pK(e,t,n){var r;return r=cre(e,t),K6(e,t,n),r}function gK(e,t,n){var r;for(r=0;r=e.g}function cX(e,t,n){return xF(null==n||oVe(e,n)),e[t]=n}function lX(e,t){return l4(t,e.length+1),e.substr(t)}function uX(e,t){for(tQ(t);e.c=e?new yT:tse(e-1)}function HX(e){return!e.a&&e.c?e.c.b:e.a}function qX(e){return BN(e,616)?e:new n1(e)}function VX(e){e.c?VX(e.c):(vme(e),e.d=!0)}function UX(e){e.c?e.c.$e():(e.d=!0,cFe(e))}function WX(e){e.b=!1,e.c=!1,e.d=!1,e.a=!1}function GX(e){return e.c.i.c==e.d.i.c}function YX(e,t){var n;(n=e.Ih(t))>=0?e.ki(n):GIe(e,t)}function KX(e,t){e.c<0||e.b.b0;)e=e<<1|(e<0?1:0);return e}function EQ(e,t){var n;return n=new dX(e),yv(t.c,n),n}function OQ(e,t){e.u.Hc((nDe(),pjt))&&vDe(e,t),wee(e,t)}function PQ(e,t){return RM(e)===RM(t)||null!=e&&cge(e,t)}function MQ(e,t){return jW(e.a,t)?e.b[cV(t,22).g]:null}function IQ(){return zT(),que(oS(sht,1),b0e,489,0,[Fut])}function DQ(){return eC(),que(oS(QMt,1),b0e,490,0,[GMt])}function NQ(){return tC(),que(oS(tIt,1),b0e,558,0,[XMt])}function LQ(){return nC(),que(oS(KIt,1),b0e,539,0,[VIt])}function RQ(e){return!e.n&&(e.n=new hY(fBt,e,1,7)),e.n}function jQ(e){return!e.c&&(e.c=new hY(pBt,e,9,9)),e.c}function FQ(e){return!e.c&&(e.c=new h$(oBt,e,5,8)),e.c}function BQ(e){return!e.b&&(e.b=new h$(oBt,e,4,7)),e.b}function $Q(e){return e.j.c.length=0,sJ(e.c),ZB(e.a),e}function zQ(e){return e.e==pot&&wp(e,awe(e.g,e.b)),e.e}function HQ(e){return e.f==pot&&kp(e,t_e(e.g,e.b)),e.f}function qQ(e,t,n,r){return Lle(e,t,n,!1),bge(e,r),e}function VQ(e,t){this.b=e,XY.call(this,e,t),UL(this)}function UQ(e,t){this.b=e,D$.call(this,e,t),WL(this)}function WQ(e){this.d=e,this.a=this.d.b,this.b=this.d.c}function GQ(e,t){this.b=e,this.c=t,this.a=new hT(this.b)}function YQ(e,t){return l4(t,e.length),e.charCodeAt(t)}function KQ(e,t){Ame(e,ck(Noe(t,"x")),ck(Noe(t,"y")))}function XQ(e,t){Ame(e,ck(Noe(t,"x")),ck(Noe(t,"y")))}function QQ(e,t){return vme(e),new hW(e,new rne(t,e.a))}function JQ(e,t){return vme(e),new hW(e,new h9(t,e.a))}function ZQ(e,t){return vme(e),new OF(e,new l9(t,e.a))}function eJ(e,t){return vme(e),new PF(e,new u9(t,e.a))}function tJ(e,t){return new kZ(cV(KK(e),50),cV(KK(t),50))}function nJ(e,t){return cme(e.d.c+e.d.b/2,t.d.c+t.d.b/2)}function rJ(e,t,n){n.a?koe(e,t.b-e.f/2):xoe(e,t.a-e.g/2)}function iJ(e,t){return cme(e.g.c+e.g.b/2,t.g.c+t.g.b/2)}function oJ(e,t){return UT(),cme((tQ(e),e),(tQ(t),t))}function aJ(e){return null!=e&&Z_(qBt,e.toLowerCase())}function sJ(e){var t;for(t=e.Kc();t.Ob();)t.Pb(),t.Qb()}function cJ(e){var t;return!(t=e.b)&&(e.b=t=new Jf(e)),t}function lJ(e){return ose(e)||null}function uJ(e,t){var n,r;return(n=e/t)>(r=t1(n))&&++r,r}function hJ(e,t,n){var r;(r=cV(e.d.Kb(n),159))&&r.Nb(t)}function fJ(e,t,n){FWe(e.a,n),Aue(n),_Le(e.b,n),kGe(t,n)}function dJ(e,t,n,r){this.a=e,this.c=t,this.b=n,this.d=r}function pJ(e,t,n,r){this.c=e,this.b=t,this.a=n,this.d=r}function gJ(e,t,n,r){this.c=e,this.b=t,this.d=n,this.a=r}function mJ(e,t,n,r){this.c=e,this.d=t,this.b=n,this.a=r}function bJ(e,t,n,r){this.a=e,this.d=t,this.c=n,this.b=r}function yJ(e,t,n,r){this.a=e,this.e=t,this.d=n,this.c=r}function vJ(e,t,n,r){this.a=e,this.c=t,this.d=n,this.b=r}function wJ(e,t,n){this.a=I0e,this.d=e,this.b=t,this.c=n}function xJ(e,t,n,r){$_.call(this,e,t),this.a=n,this.b=r}function kJ(e,t){this.d=(tQ(e),e),this.a=16449,this.c=t}function SJ(e){this.a=new Zy,this.e=Oee(JHt,GZe,53,e,0,2)}function AJ(e){e.Ug("No crossing minimization",1),e.Vg()}function _J(){Fx.call(this,"There is no more element.")}function TJ(e,t,n,r){this.a=e,this.b=t,this.c=n,this.d=r}function CJ(e,t,n,r){this.a=e,this.b=t,this.c=n,this.d=r}function EJ(e,t,n,r){this.e=e,this.a=t,this.c=n,this.d=r}function OJ(e,t,n,r){this.a=e,this.c=t,this.d=n,this.b=r}function PJ(e,t,n,r){ZD(),f9.call(this,t,n,r),this.a=e}function MJ(e,t,n,r){ZD(),f9.call(this,t,n,r),this.a=e}function IJ(e,t,n){var r;return r=nQe(e),t.ti(n,r)}function DJ(e){var t;return qie(t=new nv,e),t}function NJ(e){var t;return kOe(t=new nv,e),t}function LJ(e,t){return Xce(t,oX(e.f,t)),null}function RJ(e){return!e.b&&(e.b=new hY(aBt,e,12,3)),e.b}function jJ(e){return BU(null==e||DY(e)&&!(e.Tm===A)),e}function FJ(e){return e.n&&(e.e!==_0e&&e.je(),e.j=null),e}function BJ(e){if(dbe(e.d),e.d.d!=e.c)throw uv(new Bv)}function $J(e){return kF(e.b0&&W_e(this)}function qJ(e,t){this.a=e,EF.call(this,e,cV(e.d,15).fd(t))}function VJ(e,t){return cme(_W(e)*AW(e),_W(t)*AW(t))}function UJ(e,t){return cme(_W(e)*AW(e),_W(t)*AW(t))}function WJ(e){return zDe(e)&&sk(mF(GLe(e,(AJe(),ukt))))}function GJ(e,t){return qDe(e,cV(sOe(t,(AJe(),qkt)),17),t)}function YJ(e,t){return cV(sOe(e,(VJe(),Ybt)),15).Fc(t),t}function KJ(e,t){return e.b=t.b,e.c=t.c,e.d=t.d,e.a=t.a,e}function XJ(e,t,n,r){this.b=e,this.c=r,iI.call(this,t,n)}function QJ(e,t,n){e.i=0,e.e=0,t!=n&&tfe(e,t,n)}function JJ(e,t,n){e.i=0,e.e=0,t!=n&&nfe(e,t,n)}function ZJ(e,t,n){return QT(),sbe(cV(oX(e.e,t),529),n)}function eZ(e){return e.f||(e.f=new P_(e,e.c))}function tZ(e,t){return Hpe(e.j,t.s,t.c)+Hpe(t.e,e.s,e.c)}function nZ(e,t){e.e&&!e.e.a&&(rv(e.e,t),nZ(e.e,t))}function rZ(e,t){e.d&&!e.d.a&&(rv(e.d,t),rZ(e.d,t))}function iZ(e,t){return-cme(_W(e)*AW(e),_W(t)*AW(t))}function oZ(e){return cV(e.ld(),149).Pg()+":"+obe(e.md())}function aZ(){HOe(this,new Bf),this.wb=(tX(),k$t),vA()}function sZ(e){this.b=new Zy,Pue(this.b,this.b),this.a=e}function cZ(e,t){new fT,this.a=new qw,this.b=e,this.c=t}function lZ(){lZ=_,Qst=new D,Jst=new D,Zst=new N}function uZ(){uZ=_,Gst=new E,Yst=new P,Kst=new M}function hZ(){hZ=_,Vct=new pe,Wct=new tG,Uct=new ge}function fZ(){fZ=_,aht=new Zy,oht=new Jy,iht=new Zy}function dZ(e,t){if(null==e)throw uv(new kk(t));return e}function pZ(e){return!e.a&&(e.a=new hY(dBt,e,10,11)),e.a}function gZ(e){return!e.q&&(e.q=new hY(b$t,e,11,10)),e.q}function mZ(e){return!e.s&&(e.s=new hY(s$t,e,21,17)),e.s}function bZ(e){return KK(e),Fke(new BG(rR(e.a.Kc(),new u)))}function yZ(e,t){return Sde(e),Sde(t),ok(cV(e,22),cV(t,22))}function vZ(e,t,n){eie(e,t,new Cd(X$(n)))}function wZ(e,t,n,r,i,o){pte.call(this,e,t,n,r,i,o?-2:-1)}function xZ(e,t,n,r){IM.call(this,t,n),this.b=e,this.a=r}function kZ(e,t){Tx.call(this,new HG(e)),this.a=e,this.b=t}function SZ(e){this.b=e,this.c=e,e.e=null,e.c=null,this.a=1}function AZ(e){var t;Vz(),(t=cV(e.g,10)).n.a=e.d.c+t.d.b}function _Z(){var e,t;_Z=_,t=!sve(),e=new v,$at=t?new y:e}function TZ(e){return uZ(),BN(e,59)?new nS(e):new mR(e)}function CZ(e){return BN(e,16)?new sW(cV(e,16)):oV(e.Kc())}function EZ(e){return new KL(e,e.e.Rd().gc()*e.c.Rd().gc())}function OZ(e){return new XL(e,e.e.Rd().gc()*e.c.Rd().gc())}function PZ(e){return e&&e.hashCode?e.hashCode():RR(e)}function MZ(e,t){return null==t?!!BW(e.f,null):$W(e.i,t)}function IZ(e,t){var n;return(n=XN(e.a,t))&&(t.d=null),n}function DZ(e,t,n){return!!e.f&&e.f.ef(t,n)}function NZ(e,t,n,r){cX(e.c[t.g],n.g,r),cX(e.c[n.g],t.g,r)}function LZ(e,t,n,r){cX(e.c[t.g],t.g,n),cX(e.b[t.g],t.g,r)}function RZ(e,t,n){return ck(bF(n.a))<=e&&ck(bF(n.b))>=t}function jZ(e,t){this.g=e,this.d=que(oS(bdt,1),n5e,10,0,[t])}function FZ(e){this.c=e,this.b=new HA(cV(KK(new me),50))}function BZ(e){this.c=e,this.b=new HA(cV(KK(new St),50))}function $Z(e){this.b=e,this.a=new HA(cV(KK(new Ze),50))}function zZ(){this.b=new nw,this.d=new fT,this.e=new Pw}function HZ(){this.c=new lA,this.d=new lA,this.e=new lA}function qZ(){this.a=new qw,this.b=(yae(3,m0e),new j9(3))}function VZ(e,t){this.e=e,this.a=gat,this.b=Nze(t),this.c=t}function UZ(e){this.c=e.c,this.d=e.d,this.b=e.b,this.a=e.a}function WZ(e,t,n,r,i,o){this.a=e,jae.call(this,t,n,r,i,o)}function GZ(e,t,n,r,i,o){this.a=e,jae.call(this,t,n,r,i,o)}function YZ(e,t,n,r,i,o,a){return new r7(e.e,t,n,r,i,o,a)}function KZ(e,t,n){return n>=0&&y$(e.substr(n,t.length),t)}function XZ(e,t){return BN(t,149)&&y$(e.b,cV(t,149).Pg())}function QZ(e,t){return e.a?t.Gh().Kc():cV(t.Gh(),71).Ii()}function JZ(e,t){var n;return p7(n=e.b.Qc(t),e.b.gc()),n}function ZZ(e,t){if(null==e)throw uv(new kk(t));return e}function e0(e){return e.u||(x8(e),e.u=new aB(e,e)),e.u}function t0(e){this.a=(uZ(),BN(e,59)?new nS(e):new mR(e))}function n0(e){return cV(Ile(e,16),29)||e.ii()}function r0(e,t){var n;return n=OA(e.Rm),null==t?n:n+": "+t}function i0(e,t,n){return Fee(t,n,e.length),e.substr(t,n-t)}function o0(e,t){HB.call(this),Xie(this),this.a=e,this.c=t}function a0(e){e&&r0(e,e.ie()),String.fromCharCode(10)}function s0(e){Wk(),r.setTimeout((function(){throw e}),0)}function c0(){return $we(),que(oS(elt,1),b0e,436,0,[Kct,Yct])}function l0(){return Wre(),que(oS(ylt,1),b0e,435,0,[Jct,Zct])}function u0(){return Gre(),que(oS(yft,1),b0e,432,0,[mht,bht])}function h0(){return Mce(),que(oS(Ldt,1),b0e,517,0,[Pdt,Odt])}function f0(){return J5(),que(oS(Dyt,1),b0e,429,0,[wbt,xbt])}function d0(){return Yre(),que(oS(kmt,1),b0e,428,0,[gmt,mmt])}function p0(){return H9(),que(oS(tmt,1),b0e,431,0,[Ygt,Kgt])}function g0(){return ere(),que(oS(QAt,1),b0e,430,0,[VAt,UAt])}function m0(){return Z5(),que(oS(oTt,1),b0e,531,0,[J_t,Q_t])}function b0(){return bse(),que(oS(rOt,1),b0e,501,0,[YEt,KEt])}function y0(){return d1(),que(oS(mTt,1),b0e,523,0,[hTt,uTt])}function v0(){return p1(),que(oS(RTt,1),b0e,522,0,[pTt,gTt])}function w0(){return $9(),que(oS(UTt,1),b0e,528,0,[LTt,NTt])}function x0(){return Kte(),que(oS(Hmt,1),b0e,488,0,[Dmt,Imt])}function k0(){return a8(),que(oS(EMt,1),b0e,491,0,[xMt,kMt])}function S0(){return iue(),que(oS(NMt,1),b0e,492,0,[PMt,MMt])}function A0(){return r4(),que(oS(XEt,1),b0e,433,0,[$Et,BEt])}function _0(){return Cte(),que(oS(fOt,1),b0e,434,0,[oOt,aOt])}function T0(){return f1(),que(oS(QTt,1),b0e,465,0,[qTt,VTt])}function C0(){return z9(),que(oS(cIt,1),b0e,438,0,[eIt,ZMt])}function E0(){return Yue(),que(oS(QIt,1),b0e,437,0,[YIt,GIt])}function O0(){return Eq(),que(oS(AFt,1),b0e,347,0,[mFt,bFt])}function P0(e,t,n,r){return n>=0?e.Uh(t,n,r):e.Ch(null,n,r)}function M0(e){return 0==e.b.b?e.a.sf():tV(e.b)}function I0(e){if(5!=e.p)throw uv(new Rv);return bG(e.f)}function D0(e){if(5!=e.p)throw uv(new Rv);return bG(e.k)}function N0(e){return RM(e.a)===RM((Pce(),X$t))&&nYe(e),e.a}function L0(e,t){e.b=t,e.c>0&&e.b>0&&(e.g=yW(e.c,e.b,e.a))}function R0(e,t){e.c=t,e.c>0&&e.b>0&&(e.g=yW(e.c,e.b,e.a))}function j0(e,t){ep(this,new kP(e.a,e.b)),tp(this,sV(t))}function F0(){Cx.call(this,new lT(sie(12))),BL(!0),this.a=2}function B0(e,t,n){XJe(),Xy.call(this,e),this.b=t,this.a=n}function $0(e,t,n){ZD(),Hy.call(this,t),this.a=e,this.b=n}function z0(e){var t;t=e.c.d.b,e.b=t,e.a=e.c.d,t.a=e.c.d.b=e}function H0(e){return 0==e.b?null:(kF(0!=e.b),Iie(e,e.a.a))}function q0(e,t){return null==t?LM(BW(e.f,null)):$C(e.i,t)}function V0(e,t,n,r,i){return new MPe(e,(jte(),vct),t,n,r,i)}function U0(e,t){return Y6(t),Qoe(e,Oee(JHt,K0e,28,t,15,1),t)}function W0(e,t){return dZ(e,"set1"),dZ(t,"set2"),new V_(e,t)}function G0(e,t){var n=jat[e.charCodeAt(0)];return null==n?e:n}function Y0(e,t){var n;return bKe(e,t,n=new z),n.d}function K0(e,t,n,r){var i;i=new MB,t.a[n.g]=i,qY(e.b,r,i)}function X0(e,t){return QB(zj(Ioe(e.f,t)),e.f.d)}function Q0(e){Iae(e.a),GD(e.a),Mbe(new Mg(e.a))}function J0(e,t){rze(e,!0),Cie(e.e.Rf(),new Lz(e,!0,t))}function Z0(e,t){return fZ(),e==j1(dOe(t))||e==j1(mOe(t))}function e1(e,t){return toe(),cV(sOe(t,(XVe(),MEt)),17).a==e}function t1(e){return 0|Math.max(Math.min(e,vZe),-2147483648)}function n1(e){this.a=cV(KK(e),277),this.b=(uZ(),new yR(e))}function r1(e,t,n){this.i=new Zy,this.b=e,this.g=t,this.a=n}function i1(e,t,n){this.a=new Zy,this.e=e,this.f=t,this.c=n}function o1(e,t,n){this.c=new Zy,this.e=e,this.f=t,this.b=n}function a1(e){HB.call(this),Xie(this),this.a=e,this.c=!0}function s1(e){function t(){}return t.prototype=e||{},new t}function c1(e){if(e.Ae())return null;var t=e.n;return lZe[t]}function l1(e){return e.Db>>16!=3?null:cV(e.Cb,27)}function u1(e){return e.Db>>16!=9?null:cV(e.Cb,27)}function h1(e){return e.Db>>16!=6?null:cV(e.Cb,74)}function f1(){f1=_,qTt=new WO(G2e,0),VTt=new WO(Y2e,1)}function d1(){d1=_,hTt=new PO(Y2e,0),uTt=new PO(G2e,1)}function p1(){p1=_,pTt=new MO(o4e,0),gTt=new MO("UP",1)}function g1(){g1=_,Mat=Mde((Hx(),que(oS(Iat,1),b0e,549,0,[Oat])))}function m1(e){var t;return Lhe(t=new LA(sie(e.length)),e),t}function b1(e,t){return e.b+=t.b,e.c+=t.c,e.d+=t.d,e.a+=t.a,e}function y1(e,t){return!!Eue(e,t)&&(fae(e),!0)}function v1(e,t){if(null==t)throw uv(new jv);return Sve(e,t)}function w1(e,t){var n;n=e.q.getHours(),e.q.setDate(t),OUe(e,n)}function x1(e,t,n){var r;(r=e.Ih(t))>=0?e.bi(r,n):fje(e,t,n)}function k1(e,t){var n;return(n=e.Ih(t))>=0?e.Wh(n):NDe(e,t)}function S1(e,t){var n;for(KK(t),n=e.a;n;n=n.c)t.Yd(n.g,n.i)}function A1(e,t,n){var r;r=qhe(e,t,n),e.b=new Lse(r.c.length)}function _1(e,t,n){K1(),e&&vQ(IBt,e,t),e&&vQ(MBt,e,n)}function T1(e,t){return qz(),UR(),cV(t.a,17).a0}function P1(e){var t;return t=e.d,t=e.bj(e.f),tte(e,t),t.Ob()}function M1(e,t){var n;return GEe(n=new aW(t),e),new Z$(n)}function I1(e){if(0!=e.p)throw uv(new Rv);return HM(e.f,0)}function D1(e){if(0!=e.p)throw uv(new Rv);return HM(e.k,0)}function N1(e){return e.Db>>16!=7?null:cV(e.Cb,241)}function L1(e){return e.Db>>16!=6?null:cV(e.Cb,241)}function R1(e){return e.Db>>16!=7?null:cV(e.Cb,167)}function j1(e){return e.Db>>16!=11?null:cV(e.Cb,27)}function F1(e){return e.Db>>16!=17?null:cV(e.Cb,29)}function B1(e){return e.Db>>16!=3?null:cV(e.Cb,155)}function $1(e){return vme(e),QQ(e,new kg(new nw))}function z1(e,t){var n=e.a=e.a||[];return n[t]||(n[t]=e.ve(t))}function H1(e,t){var n;n=e.q.getHours(),e.q.setMonth(t),OUe(e,n)}function q1(e,t){IL(this),this.f=t,this.g=e,FJ(this),this.je()}function V1(e,t){this.a=e,this.c=LN(this.a),this.b=new UZ(t)}function U1(e,t,n){this.a=t,this.c=e,this.b=(KK(n),new Z$(n))}function W1(e,t,n){this.a=t,this.c=e,this.b=(KK(n),new Z$(n))}function G1(e){this.a=e,this.b=Oee(K_t,GZe,2043,e.e.length,0,2)}function Y1(){this.a=new WI,this.e=new nw,this.g=0,this.i=0}function K1(){K1=_,IBt=new Jy,MBt=new Jy,bM(rct,new hl)}function X1(){X1=_,A_t=pG(new pQ,(cOe(),Cft),(GJe(),Ppt))}function Q1(){Q1=_,__t=pG(new pQ,(cOe(),Cft),(GJe(),Ppt))}function J1(){J1=_,C_t=pG(new pQ,(cOe(),Cft),(GJe(),Ppt))}function Z1(){Z1=_,tTt=MU(new pQ,(cOe(),Cft),(GJe(),npt))}function e2(){e2=_,aTt=MU(new pQ,(cOe(),Cft),(GJe(),npt))}function t2(){t2=_,lTt=MU(new pQ,(cOe(),Cft),(GJe(),npt))}function n2(){n2=_,yTt=MU(new pQ,(cOe(),Cft),(GJe(),npt))}function r2(e,t,n,r,i,o){return new Fne(e.e,t,e.Lj(),n,r,i,o)}function i2(e,t,n){return null==t?YMe(e.f,null,n):wme(e.i,t,n)}function o2(e,t){e.c&&yne(e.c.g,e),e.c=t,e.c&&wL(e.c.g,e)}function a2(e,t){e.c&&yne(e.c.a,e),e.c=t,e.c&&wL(e.c.a,e)}function s2(e,t){e.i&&yne(e.i.j,e),e.i=t,e.i&&wL(e.i.j,e)}function c2(e,t){e.d&&yne(e.d.e,e),e.d=t,e.d&&wL(e.d.e,e)}function l2(e,t){e.a&&yne(e.a.k,e),e.a=t,e.a&&wL(e.a.k,e)}function u2(e,t){e.b&&yne(e.b.f,e),e.b=t,e.b&&wL(e.b.f,e)}function h2(e,t){gX(e,e.b,e.c),cV(e.b.b,68),t&&cV(t.b,68).b}function f2(e,t){return cme(cV(e.c,65).c.e.b,cV(t.c,65).c.e.b)}function d2(e,t){return cme(cV(e.c,65).c.e.a,cV(t.c,65).c.e.a)}function p2(e){return kde(),UR(),0!=cV(e.a,86).d.e}function g2(e,t){BN(e.Cb,184)&&(cV(e.Cb,184).tb=null),Use(e,t)}function m2(e,t){BN(e.Cb,90)&&xIe(x8(cV(e.Cb,90)),4),Use(e,t)}function b2(e,t){Cme(e,t),BN(e.Cb,90)&&xIe(x8(cV(e.Cb,90)),2)}function y2(e,t){null!=t.c&&bX(e,new XK(t.c))}function v2(e){var t;return vA(),qie(t=new nv,e),t}function w2(e){var t;return vA(),qie(t=new nv,e),t}function x2(e){for(var t;;)if(t=e.Pb(),!e.Ob())return t}function k2(e,t,n){return wL(e.a,(SQ(),Oke(t,n),new B_(t,n))),e}function S2(e,t){return CC(),nre(t)?new EU(t,e):new PM(t,e)}function A2(e){return oHe(),gpe(e,0)>=0?jye(e):uK(jye(kne(e)))}function _2(e){var t;return t=cV(tU(e.b),9),new ez(e.a,t,e.c)}function T2(e,t){var n;return(n=cV(Wpe(eZ(e.a),t),16))?n.gc():0}function C2(e,t,n){var r;uge(t,n,e.c.length),r=n-t,e_(e.c,t,r)}function E2(e,t,n){uge(t,n,e.gc()),this.c=e,this.a=t,this.b=n-t}function O2(e){this.c=new fT,this.b=e.b,this.d=e.c,this.a=e.a}function P2(e){this.a=r.Math.cos(e),this.b=r.Math.sin(e)}function M2(e,t,n,r){this.c=e,this.d=r,l2(this,t),u2(this,n)}function I2(e,t){_x.call(this,new lT(sie(e))),yae(t,WZe),this.a=t}function D2(e,t,n){return new MPe(e,(jte(),yct),null,!1,t,n)}function N2(e,t,n){return new MPe(e,(jte(),wct),t,n,null,!1)}function L2(){return xde(),que(oS(jct,1),b0e,108,0,[Ect,Oct,Pct])}function R2(){return Jne(),que(oS(uut,1),b0e,472,0,[Blt,Flt,jlt])}function j2(){return Fte(),que(oS(Rlt,1),b0e,471,0,[Mlt,Plt,Ilt])}function F2(){return Jie(),que(oS(Olt,1),b0e,237,0,[Alt,_lt,Tlt])}function B2(){return Qne(),que(oS(Eft,1),b0e,391,0,[mft,gft,bft])}function $2(){return mse(),que(oS(jgt,1),b0e,372,0,[Tgt,_gt,Agt])}function z2(){return Aae(),que(oS(amt,1),b0e,322,0,[Zgt,Jgt,emt])}function H2(){return iae(),que(oS(dmt,1),b0e,351,0,[rmt,omt,imt])}function q2(){return Che(),que(oS(Pmt,1),b0e,460,0,[wmt,vmt,xmt])}function V2(){return rue(),que(oS(ybt,1),b0e,299,0,[hbt,fbt,ubt])}function U2(){return Zne(),que(oS(kbt,1),b0e,311,0,[mbt,bbt,gbt])}function W2(){return Epe(),que(oS(bAt,1),b0e,390,0,[cAt,lAt,uAt])}function G2(){return oae(),que(oS(n_t,1),b0e,463,0,[XAt,YAt,KAt])}function Y2(){return rle(),que(oS(s_t,1),b0e,387,0,[ZAt,e_t,t_t])}function K2(){return Tfe(),que(oS(f_t,1),b0e,349,0,[a_t,i_t,o_t])}function X2(){return wde(),que(oS(b_t,1),b0e,350,0,[l_t,u_t,h_t])}function Q2(){return rae(),que(oS(k_t,1),b0e,352,0,[m_t,p_t,g_t])}function J2(){return Gue(),que(oS(R_t,1),b0e,388,0,[w_t,x_t,v_t])}function Z2(){return nae(),que(oS(U_t,1),b0e,464,0,[$_t,z_t,H_t])}function e4(e){return Vhe(que(oS(CDt,1),GZe,8,0,[e.i.n,e.n,e.a]))}function t4(){return Cfe(),que(oS(jEt,1),b0e,392,0,[mCt,gCt,pCt])}function n4(){n4=_,qEt=pG(new pQ,(EAe(),KTt),(PHe(),nCt))}function r4(){r4=_,$Et=new QO("DFS",0),BEt=new QO("BFS",1)}function i4(e,t,n){var r;(r=new ia).b=t,r.a=n,++t.b,wL(e.d,r)}function o4(e,t,n){var r;QB(r=new nD(n.d),e),Ame(t,r.a,r.b)}function a4(e,t){bL(e,bG(_4(NG(t,24),K1e)),bG(_4(t,K1e)))}function s4(e,t){if(e<0||e>t)throw uv(new gk(u2e+e+h2e+t))}function c4(e,t){if(e<0||e>=t)throw uv(new gk(u2e+e+h2e+t))}function l4(e,t){if(e<0||e>=t)throw uv(new Qk(u2e+e+h2e+t))}function u4(e,t){this.b=(tQ(e),e),this.a=0==(t&A1e)?64|t|YZe:t}function h4(e){return vme(e),lZ(),lZ(),wie(e,Jst)}function f4(e,t,n){var r;return(r=cWe(e,t,!1)).b<=t&&r.a<=n}function d4(){return gne(),que(oS(IMt,1),b0e,439,0,[_Mt,CMt,TMt])}function p4(){return zme(),que(oS(wMt,1),b0e,394,0,[OPt,PPt,EPt])}function g4(){return Qye(),que(oS(gPt,1),b0e,445,0,[sPt,cPt,lPt])}function m4(){return Zxe(),que(oS(MPt,1),b0e,456,0,[fPt,pPt,dPt])}function b4(){return vde(),que(oS(ePt,1),b0e,393,0,[lOt,uOt,hOt])}function y4(){return nle(),que(oS(uPt,1),b0e,300,0,[rPt,iPt,nPt])}function v4(){return Ppe(),que(oS(FRt,1),b0e,346,0,[PRt,ORt,MRt])}function w4(){return jge(),que(oS(YMt,1),b0e,444,0,[HMt,qMt,VMt])}function x4(){return Zie(),que(oS(fRt,1),b0e,278,0,[rRt,iRt,oRt])}function k4(){return Ope(),que(oS(yFt,1),b0e,280,0,[fFt,hFt,dFt])}function S4(e){return KK(e),BN(e,16)?new Z$(cV(e,16)):iV(e.Kc())}function A4(e,t){return e&&e.equals?e.equals(t):RM(e)===RM(t)}function _4(e,t){return _le(PG($I(e)?Vle(e):e,$I(t)?Vle(t):t))}function T4(e,t){return _le(MG($I(e)?Vle(e):e,$I(t)?Vle(t):t))}function C4(e,t){return _le(IG($I(e)?Vle(e):e,$I(t)?Vle(t):t))}function E4(e,t){var n;return wF(!!(n=(tQ(e),e).g)),tQ(t),n(t)}function O4(e,t){var n,r;return r=FY(e,t),n=e.a.fd(r),new z_(e,n)}function P4(e){return e.Db>>16!=6?null:cV(QNe(e),241)}function M4(e){if(2!=e.p)throw uv(new Rv);return bG(e.f)&L0e}function I4(e){if(2!=e.p)throw uv(new Rv);return bG(e.k)&L0e}function D4(e){return kF(e.ar?1:0}function J4(e,t){var n;return n=Ane(t),cV(oX(e.c,n),17).a}function Z4(e,t,n){var r;r=e.d[t.p],e.d[t.p]=e.d[n.p],e.d[n.p]=r}function e3(e,t,n){var r;e.n&&t&&n&&(r=new Jc,wL(e.e,r))}function t3(e,t){if(BY(e.a,t),t.d)throw uv(new Fx(b2e));t.d=e}function n3(e,t){this.a=new Zy,this.d=new Zy,this.f=e,this.c=t}function r3(){this.c=new GN,this.a=new b9,this.b=new xw,WT()}function i3(){Kue(),this.b=new Jy,this.a=new Jy,this.c=new Zy}function o3(e,t,n){this.d=e,this.j=t,this.e=n,this.o=-1,this.p=3}function a3(e,t,n){this.d=e,this.k=t,this.f=n,this.o=-1,this.p=5}function s3(e,t,n,r,i,o){zoe.call(this,e,t,n,r,i),o&&(this.o=-2)}function c3(e,t,n,r,i,o){Hoe.call(this,e,t,n,r,i),o&&(this.o=-2)}function l3(e,t,n,r,i,o){_8.call(this,e,t,n,r,i),o&&(this.o=-2)}function u3(e,t,n,r,i,o){Uoe.call(this,e,t,n,r,i),o&&(this.o=-2)}function h3(e,t,n,r,i,o){T8.call(this,e,t,n,r,i),o&&(this.o=-2)}function f3(e,t,n,r,i,o){qoe.call(this,e,t,n,r,i),o&&(this.o=-2)}function d3(e,t,n,r,i,o){Voe.call(this,e,t,n,r,i),o&&(this.o=-2)}function p3(e,t,n,r,i,o){C8.call(this,e,t,n,r,i),o&&(this.o=-2)}function g3(e,t,n,r){Hy.call(this,n),this.b=e,this.c=t,this.d=r}function m3(e,t){this.f=e,this.a=(D9(),kzt),this.c=kzt,this.b=t}function b3(e,t){this.g=e,this.d=(D9(),Szt),this.a=Szt,this.b=t}function y3(e,t){!e.c&&(e.c=new ple(e,0)),zWe(e.c,(cYe(),eHt),t)}function v3(e,t){return fRe(e,t,BN(t,102)&&0!=(cV(t,19).Bb&C1e))}function w3(e,t){return iK(zle(e.q.getTime()),zle(t.q.getTime()))}function x3(e){return LU(e.e.Rd().gc()*e.c.Rd().gc(),16,new Gf(e))}function k3(e){return!!e.u&&0!=G6(e.u.a).i&&!(e.n&&xke(e.n))}function S3(e){return!!e.a&&0!=Mne(e.a.a).i&&!(e.b&&kke(e.b))}function A3(e,t){return 0==t?!!e.o&&0!=e.o.f:Kwe(e,t)}function _3(e,t,n){var r;return!!(r=cV(e.Zb().xc(t),16))&&r.Hc(n)}function T3(e,t,n){var r;return!!(r=cV(e.Zb().xc(t),16))&&r.Mc(n)}function C3(e,t){var n;return n=1-t,e.a[n]=Sse(e.a[n],n),Sse(e,t)}function E3(e,t){var n;return n=_4(e,I1e),T4(DG(t,32),n)}function O3(e,t,n){KK(e),yAe(new U1(new Z$(e),t,n))}function P3(e,t,n){KK(e),vAe(new W1(new Z$(e),t,n))}function M3(e,t,n,r,i,o){return Lle(e,t,n,o),mge(e,r),vge(e,i),e}function I3(e,t,n,r){return e.a+=""+i0(null==t?OZe:obe(t),n,r),e}function D3(e,t){this.a=e,Qp.call(this,e),s4(t,e.gc()),this.b=t}function N3(e){this.a=Oee(gat,_Ze,1,bhe(r.Math.max(8,e))<<1,5,1)}function L3(e){return cV(_we(e,Oee(bdt,n5e,10,e.c.length,0,1)),199)}function R3(e){return cV(_we(e,Oee(sdt,t5e,18,e.c.length,0,1)),483)}function j3(e){return e.a?0==e.e.length?e.a.a:e.a.a+""+e.e:e.c}function F3(e){for(;e.d>0&&0==e.a[--e.d];);0==e.a[e.d++]&&(e.e=0)}function B3(e){return kF(e.b.b!=e.d.a),e.c=e.b=e.b.b,--e.a,e.c.c}function $3(e,t,n){e.a=t,e.c=n,e.b.a.$b(),zJ(e.d),Wv(e.e.a.c,0)}function z3(e,t){var n;e.e=new gx,hN(n=VBe(t),e.c),S$e(e,n,0)}function H3(e,t,n,r){var i;(i=new mc).a=t,i.b=n,i.c=r,aU(e.a,i)}function q3(e,t,n,r){var i;(i=new mc).a=t,i.b=n,i.c=r,aU(e.b,i)}function V3(e,t,n){if(e<0||tn)throw uv(new gk(XPe(e,t,n)))}function U3(e,t){if(e<0||e>=t)throw uv(new gk(SIe(e,t)));return e}function W3(e){if(!("stack"in e))try{throw e}catch(t){}return e}function G3(e){return QT(),BN(e.g,10)?cV(e.g,10):null}function Y3(e){return!cJ(e).dc()&&(uN(e,new p),!0)}function K3(e){var t;return $I(e)?-0==(t=e)?0:t:Vne(e)}function X3(e,t){return!!BN(t,44)&&lSe(e.a,cV(t,44))}function Q3(e,t){return!!BN(t,44)&&lSe(e.a,cV(t,44))}function J3(e,t){return!!BN(t,44)&&lSe(e.a,cV(t,44))}function Z3(e){var t;return VX(e),t=new L,t_(e.a,new vg(t)),t}function e5(){var e,t;return e=new nv,wL(mzt,t=e),t}function t5(e){var t;return VX(e),t=new R,t_(e.a,new wg(t)),t}function n5(e,t){return e.a<=e.b&&(t.Dd(e.a++),!0)}function r5(e){gce.call(this,e,(jte(),bct),null,!1,null,!1)}function i5(){i5=_,$ut=Mde((zT(),que(oS(sht,1),b0e,489,0,[Fut])))}function o5(){o5=_,N_t=kQ(Rpe(1),Rpe(4)),D_t=kQ(Rpe(1),Rpe(2))}function a5(e,t){return new Iq(t,Hj(LN(t.e),e,e),(UR(),!0))}function s5(e){return new j9((yae(e,v0e),aie(Ime(Ime(5,e),e/10|0))))}function c5(e){return LU(e.e.Rd().gc()*e.c.Rd().gc(),273,new Wf(e))}function l5(e){return cV(_we(e,Oee(Mdt,r5e,12,e.c.length,0,1)),2042)}function u5(e){return e2(),!v8(e)&&!(!v8(e)&&e.c.i.c==e.d.i.c)}function h5(e,t){return eoe(),cV(sOe(t,(XVe(),wEt)),17).a>=e.gc()}function f5(e,t){$Qe(t,e),DV(e.d),DV(cV(sOe(e,(AJe(),Tkt)),214))}function d5(e,t){zQe(t,e),NV(e.d),NV(cV(sOe(e,(AJe(),Tkt)),214))}function p5(e,t,n){e.d&&yne(e.d.e,e),e.d=t,e.d&&VW(e.d.e,n,e)}function g5(e,t,n){return n.f.c.length>0?HY(e.a,t,n):HY(e.b,t,n)}function m5(e,t,n){var r;r=dwe();try{return TB(e,t,n)}finally{y7(r)}}function b5(e,t){var n,r;return r=null,(n=v1(e,t))&&(r=n.pe()),r}function y5(e,t){var n,r;return r=null,(n=v1(e,t))&&(r=n.se()),r}function v5(e,t){var n,r;return r=null,(n=cre(e,t))&&(r=n.se()),r}function w5(e,t){var n,r;return r=null,(n=v1(e,t))&&(r=cMe(n)),r}function x5(e,t,n){var r;return r=Ave(n),xHe(e.g,r,t),xHe(e.i,t,n),t}function k5(e,t,n){this.d=new Um(this),this.e=e,this.i=t,this.f=n}function S5(e,t,n,r){this.e=null,this.c=e,this.d=t,this.a=n,this.b=r}function A5(e,t,n,r){MN(this),this.c=e,this.e=t,this.f=n,this.b=r}function _5(e,t,n,r){this.d=e,this.n=t,this.g=n,this.o=r,this.p=-1}function T5(e,t,n,r){return BN(n,59)?new JR(e,t,n,r):new UG(e,t,n,r)}function C5(e){return BN(e,16)?cV(e,16).dc():!e.Kc().Ob()}function E5(e){if(e.e.g!=e.b)throw uv(new Bv);return!!e.c&&e.d>0}function O5(e){return kF(e.b!=e.d.c),e.c=e.b,e.b=e.b.a,++e.a,e.c.c}function P5(e,t){tQ(t),cX(e.a,e.c,t),e.c=e.c+1&e.a.length-1,QSe(e)}function M5(e,t){tQ(t),e.b=e.b-1&e.a.length-1,cX(e.a,e.b,t),QSe(e)}function I5(e){var t;t=e.Gh(),this.a=BN(t,71)?cV(t,71).Ii():t.Kc()}function D5(e){return new u4(Yie(cV(e.a.md(),16).gc(),e.a.ld()),16)}function N5(){N5=_,KMt=Mde((eC(),que(oS(QMt,1),b0e,490,0,[GMt])))}function L5(){L5=_,JMt=Mde((tC(),que(oS(tIt,1),b0e,558,0,[XMt])))}function R5(){R5=_,WIt=Mde((nC(),que(oS(KIt,1),b0e,539,0,[VIt])))}function j5(){return qve(),que(oS(adt,1),b0e,389,0,[tdt,Zft,Jft,edt])}function F5(){return jte(),que(oS(Sct,1),b0e,304,0,[bct,yct,vct,wct])}function B5(){return vxe(),que(oS(Tut,1),b0e,332,0,[xut,wut,kut,Sut])}function $5(){return yxe(),que(oS(But,1),b0e,406,0,[Dut,Iut,Nut,Lut])}function z5(){return nue(),que(oS(Aut,1),b0e,417,0,[but,put,gut,mut])}function H5(){return Wue(),que(oS(ndt,1),b0e,416,0,[Bft,Hft,$ft,zft])}function q5(){return Uue(),que(oS(ygt,1),b0e,421,0,[sgt,cgt,lgt,ugt])}function V5(){return Vue(),que(oS(agt,1),b0e,371,0,[Gpt,Upt,Wpt,Vpt])}function U5(){return Jxe(),que(oS(AAt,1),b0e,203,0,[gAt,mAt,pAt,dAt])}function W5(){return xve(),que(oS(WAt,1),b0e,284,0,[BAt,FAt,$At,zAt])}function G5(e){return e.j==(FXe(),Fjt)&&NR($Ne(e),wjt)}function Y5(e,t){var n;o2(n=t.a,t.c.d),c2(n,t.d.d),Wce(n.a,e.n)}function K5(e,t){var n;return!(n=cV(are(e.b,t),67))&&(n=new fT),n}function X5(e){return QT(),BN(e.g,154)?cV(e.g,154):null}function Q5(e){e.a=null,e.e=null,Wv(e.b.c,0),Wv(e.f.c,0),e.c=null}function J5(){J5=_,wbt=new lO(V2e,0),xbt=new lO("TOP_LEFT",1)}function Z5(){Z5=_,J_t=new TO("UPPER",0),Q_t=new TO("LOWER",1)}function e6(e,t){return dL(new kP(t.e.a+t.f.a/2,t.e.b+t.f.b/2),e)}function t6(e,t){return cV(xR(KG(cV(J8(e.k,t),15).Oc(),Bgt)),113)}function n6(e,t){return cV(xR(XG(cV(J8(e.k,t),15).Oc(),Bgt)),113)}function r6(){return EAe(),que(oS(ZTt,1),b0e,405,0,[GTt,YTt,KTt,XTt])}function i6(){return yde(),que(oS(zEt,1),b0e,353,0,[REt,NEt,LEt,DEt])}function o6(){return gSe(),que(oS(oPt,1),b0e,354,0,[ZOt,QOt,JOt,XOt])}function a6(){return Xye(),que(oS(lFt,1),b0e,386,0,[Xjt,Qjt,Kjt,Yjt])}function s6(){return MAe(),que(oS(KRt,1),b0e,291,0,[jRt,NRt,LRt,RRt])}function c6(){return $me(),que(oS(wRt,1),b0e,223,0,[hRt,lRt,cRt,uRt])}function l6(){return Ube(),que(oS(TFt,1),b0e,320,0,[SFt,wFt,kFt,xFt])}function u6(){return _fe(),que(oS(LFt,1),b0e,415,0,[EFt,OFt,CFt,PFt])}function h6(e){return K1(),CY(IBt,e)?cV(oX(IBt,e),341).Qg():null}function f6(e,t,n){return t<0?NDe(e,n):cV(n,69).wk().Bk(e,e.hi(),t)}function d6(e,t,n){var r;return r=Ave(n),xHe(e.j,r,t),vQ(e.k,t,n),t}function p6(e,t,n){var r;return r=Ave(n),xHe(e.d,r,t),vQ(e.e,t,n),t}function g6(e){var t;return mA(),t=new nl,e&&Mje(t,e),t}function m6(e){var t;return t=e.aj(e.i),e.i>0&&UVe(e.g,0,t,0,e.i),t}function b6(e,t){var n;for(n=e.j.c.length;n>24}function x6(e){if(1!=e.p)throw uv(new Rv);return bG(e.k)<<24>>24}function k6(e){if(7!=e.p)throw uv(new Rv);return bG(e.k)<<16>>16}function S6(e){if(7!=e.p)throw uv(new Rv);return bG(e.f)<<16>>16}function A6(e,t){return 0==t.e||0==e.e?$st:(d$e(),xFe(e,t))}function _6(e,t){return RM(t)===RM(e)?"(this Map)":null==t?OZe:obe(t)}function T6(e,t,n){return jG(bF(LM(BW(e.f,t))),bF(LM(BW(e.f,n))))}function C6(e,t,n){var r;r=cV(oX(e.g,n),60),wL(e.a.c,new KP(t,r))}function E6(e,t,n){e.i=0,e.e=0,t!=n&&(nfe(e,t,n),tfe(e,t,n))}function O6(e,t,n,r,i){wL(t,cIe(i,zRe(i,n,r))),IOe(e,i,t)}function P6(e,t,n,r,i){this.i=e,this.a=t,this.e=n,this.j=r,this.f=i}function M6(e,t){HZ.call(this),this.a=e,this.b=t,wL(this.a.b,this)}function I6(e){this.b=new Jy,this.c=new Jy,this.d=new Jy,this.a=e}function D6(e,t){var n;return n=new Xk,e.Gd(n),n.a+="..",t.Hd(n),n.a}function N6(e,t){var n;for(n=t;n;)Fj(e,n.i,n.j),n=j1(n);return e}function L6(e,t,n){var r;return r=Ave(n),vQ(e.b,r,t),vQ(e.c,t,n),t}function R6(e){var t;for(t=0;e.Ob();)e.Pb(),t=Ime(t,1);return aie(t)}function j6(e,t){var n;return CC(),cPe(n=cV(e,69).vk(),t),n.xl(t)}function F6(e,t,n){if(n){var r=n.oe();e.a[t]=r(n)}else delete e.a[t]}function B6(e,t){var n;n=e.q.getHours(),e.q.setFullYear(t+Y0e),OUe(e,n)}function $6(e,t){return cV(null==t?LM(BW(e.f,null)):$C(e.i,t),288)}function z6(e,t){return e==(GOe(),gdt)&&t==gdt?4:e==gdt||t==gdt?8:32}function H6(e,t,n){return aUe(e,t,n,BN(t,102)&&0!=(cV(t,19).Bb&C1e))}function q6(e,t,n){return LUe(e,t,n,BN(t,102)&&0!=(cV(t,19).Bb&C1e))}function V6(e,t,n){return ERe(e,t,n,BN(t,102)&&0!=(cV(t,19).Bb&C1e))}function U6(e){e.b!=e.c&&(e.a=Oee(gat,_Ze,1,8,5,1),e.b=0,e.c=0)}function W6(e){return kF(e.a=0&&e.a[n]===t[n];n--);return n<0}function m7(e){var t;return e?new aW(e):(Bse(t=new WI,e),t)}function b7(e,t){var n,r;r=!1;do{r|=n=She(e,t)}while(n);return r}function y7(e){e&&Ere((Vx(),Bat)),--qat,e&&-1!=Uat&&(AI(Uat),Uat=-1)}function v7(e){aEe(),bL(this,bG(_4(NG(e,24),K1e)),bG(_4(e,K1e)))}function w7(){w7=_,Qct=Mde(($we(),que(oS(elt,1),b0e,436,0,[Kct,Yct])))}function x7(){x7=_,tlt=Mde((Wre(),que(oS(ylt,1),b0e,435,0,[Jct,Zct])))}function k7(){k7=_,vht=Mde((Gre(),que(oS(yft,1),b0e,432,0,[mht,bht])))}function S7(){S7=_,Idt=Mde((Mce(),que(oS(Ldt,1),b0e,517,0,[Pdt,Odt])))}function A7(){A7=_,Sbt=Mde((J5(),que(oS(Dyt,1),b0e,429,0,[wbt,xbt])))}function _7(){_7=_,ymt=Mde((Yre(),que(oS(kmt,1),b0e,428,0,[gmt,mmt])))}function T7(){T7=_,Lmt=Mde((Kte(),que(oS(Hmt,1),b0e,488,0,[Dmt,Imt])))}function C7(){C7=_,GAt=Mde((ere(),que(oS(QAt,1),b0e,430,0,[VAt,UAt])))}function E7(){E7=_,eTt=Mde((Z5(),que(oS(oTt,1),b0e,531,0,[J_t,Q_t])))}function O7(){O7=_,Qgt=Mde((H9(),que(oS(tmt,1),b0e,431,0,[Ygt,Kgt])))}function P7(){P7=_,HEt=Mde((r4(),que(oS(XEt,1),b0e,433,0,[$Et,BEt])))}function M7(){M7=_,QEt=Mde((bse(),que(oS(rOt,1),b0e,501,0,[YEt,KEt])))}function I7(){I7=_,dTt=Mde((d1(),que(oS(mTt,1),b0e,523,0,[hTt,uTt])))}function D7(){D7=_,bTt=Mde((p1(),que(oS(RTt,1),b0e,522,0,[pTt,gTt])))}function N7(){N7=_,jTt=Mde(($9(),que(oS(UTt,1),b0e,528,0,[LTt,NTt])))}function L7(){L7=_,WTt=Mde((f1(),que(oS(QTt,1),b0e,465,0,[qTt,VTt])))}function R7(){R7=_,cOt=Mde((Cte(),que(oS(fOt,1),b0e,434,0,[oOt,aOt])))}function j7(){j7=_,AMt=Mde((a8(),que(oS(EMt,1),b0e,491,0,[xMt,kMt])))}function F7(){F7=_,DMt=Mde((iue(),que(oS(NMt,1),b0e,492,0,[PMt,MMt])))}function B7(){B7=_,nIt=Mde((z9(),que(oS(cIt,1),b0e,438,0,[eIt,ZMt])))}function $7(){$7=_,XIt=Mde((Yue(),que(oS(QIt,1),b0e,437,0,[YIt,GIt])))}function z7(){z7=_,vFt=Mde((Eq(),que(oS(AFt,1),b0e,347,0,[mFt,bFt])))}function H7(){return Rge(),que(oS(aRt,1),b0e,88,0,[ZLt,JLt,QLt,XLt,eRt])}function q7(){return FXe(),que(oS(Jjt,1),G3e,64,0,[Bjt,xjt,wjt,Fjt,$jt])}function V7(e,t,n){return cV(null==t?YMe(e.f,null,n):wme(e.i,t,n),288)}function U7(e){return(e.k==(GOe(),gdt)||e.k==fdt)&&vj(e,(VJe(),Nbt))}function W7(e){return e.c&&e.d?G4(e.c)+"->"+G4(e.d):"e_"+RR(e)}function G7(e,t){var n,r;for(tQ(t),r=e.Kc();r.Ob();)n=r.Pb(),t.Cd(n)}function Y7(e,t){var n;vZ(n=new $x,"x",t.a),vZ(n,"y",t.b),bX(e,n)}function K7(e,t){var n;vZ(n=new $x,"x",t.a),vZ(n,"y",t.b),bX(e,n)}function X7(e,t){var n;for(n=t;n;)Fj(e,-n.i,-n.j),n=j1(n);return e}function Q7(e,t){var n,r;for(n=t,r=0;n>0;)r+=e.a[n],n-=n&-n;return r}function J7(e,t,n){var r;return c4(t,e.c.length),r=e.c[t],e.c[t]=n,r}function Z7(e,t,n){e.a.c.length=0,lYe(e,t,n),0==e.a.c.length||bqe(e,t)}function e8(e){e.i=0,BC(e.b,null),BC(e.c,null),e.a=null,e.e=null,++e.g}function t8(){t8=_,Dct=!0,Mct=!1,Ict=!1,Lct=!1,Nct=!1}function n8(e){t8(),Dct||(this.c=e,this.e=!0,this.a=new Zy)}function r8(e,t){this.c=0,this.b=t,rI.call(this,e,17493),this.a=this.c}function i8(e){DJe(),gv(this),this.a=new fT,Ife(this,e),aU(this.a,e)}function o8(){OD(this),this.b=new kP(k1e,k1e),this.a=new kP(S1e,S1e)}function a8(){a8=_,xMt=new sP(R5e,0),kMt=new sP("TARGET_WIDTH",1)}function s8(e,t){return(vme(e),XA(new hW(e,new rne(t,e.a)))).Bd(Fct)}function c8(){return cOe(),que(oS(Ift,1),b0e,367,0,[Sft,Aft,_ft,Tft,Cft])}function l8(){return mCe(),que(oS(Cgt,1),b0e,375,0,[pgt,mgt,bgt,ggt,dgt])}function u8(){return wve(),que(oS(bmt,1),b0e,348,0,[lmt,cmt,hmt,fmt,umt])}function h8(){return bxe(),que(oS(RAt,1),b0e,323,0,[SAt,wAt,xAt,vAt,kAt])}function f8(){return Vbe(),que(oS(aAt,1),b0e,171,0,[Iyt,Eyt,Oyt,Pyt,Myt])}function d8(){return GCe(),que(oS(sOt,1),b0e,368,0,[tOt,JEt,nOt,ZEt,eOt])}function p8(){return $je(),que(oS(UMt,1),b0e,373,0,[RMt,LMt,FMt,jMt,BMt])}function g8(){return bPe(),que(oS(UIt,1),b0e,324,0,[rIt,iIt,sIt,oIt,aIt])}function m8(){return jwe(),que(oS(kDt,1),b0e,170,0,[uDt,lDt,sDt,hDt,cDt])}function b8(){return Ywe(),que(oS(ujt,1),b0e,256,0,[ZRt,tjt,QRt,JRt,ejt])}function y8(e){return Wk(),function(){return m5(e,this,arguments)}}function v8(e){return!(!e.c||!e.d)&&!!e.c.i&&e.c.i==e.d.i}function w8(e,t){return!!BN(t,143)&&y$(e.c,cV(t,143).c)}function x8(e){return e.t||(e.t=new Ny(e),Nge(new Xx(e),0,e.t)),e.t}function k8(e){this.b=e,LL.call(this,e),this.a=cV(Ile(this.b.a,4),129)}function S8(e){this.b=e,ej.call(this,e),this.a=cV(Ile(this.b.a,4),129)}function A8(e,t,n,r,i){d9.call(this,t,r,i),jh(this),this.c=e,this.b=n}function _8(e,t,n,r,i){o3.call(this,t,r,i),jh(this),this.c=e,this.a=n}function T8(e,t,n,r,i){a3.call(this,t,r,i),jh(this),this.c=e,this.a=n}function C8(e,t,n,r,i){d9.call(this,t,r,i),jh(this),this.c=e,this.a=n}function E8(e,t){return cV(are(e.d,t),23)||cV(are(e.e,t),23)}function O8(e,t){var n,r;return n=t.ld(),!!(r=e.Fe(n))&&PQ(r.e,t.md())}function P8(e,t){var n;return new B_(n=t.ld(),e.e.pc(n,cV(t.md(),16)))}function M8(e,t){var n;return null==(n=e.a.get(t))?Oee(gat,_Ze,1,0,5,1):n}function I8(e){var t;return t=e.length,y$(T1e.substr(T1e.length-t,t),e)}function D8(e){if(uLe(e))return e.c=e.a,e.a.Pb();throw uv(new zv)}function N8(e,t){return 0==t||0==e.e?e:t>0?kBe(e,t):ive(e,-t)}function L8(e,t){return 0==t||0==e.e?e:t>0?ive(e,t):kBe(e,-t)}function R8(e){RC.call(this,null==e?OZe:obe(e),BN(e,82)?cV(e,82):null)}function j8(e){var t;return e.c||BN(t=e.r,90)&&(e.c=cV(t,29)),e.c}function F8(e){var t;return Gle(t=new qZ,e),whe(t,(AJe(),dkt),null),t}function B8(e){var t,n;return t=e.c.i,n=e.d.i,t.k==(GOe(),fdt)&&n.k==fdt}function $8(e){return bN(e&h1e,e>>22&h1e,e<0?f1e:0)}function z8(e){var t,n,r;for(n=0,r=(t=e).length;n=0?e.Lh(r,n,!0):JDe(e,t,n)}function V8(e,t,n){return cme(dL(Nwe(e),LN(t.b)),dL(Nwe(e),LN(n.b)))}function U8(e,t,n){return cme(dL(Nwe(e),LN(t.e)),dL(Nwe(e),LN(n.e)))}function W8(e,t){return r.Math.min(ate(t.a,e.d.d.c),ate(t.b,e.d.d.c))}function G8(e,t){e._i(e.i+1),xL(e,e.i,e.Zi(e.i,t)),e.Mi(e.i++,t),e.Ni()}function Y8(e){var t,n;++e.j,t=e.g,n=e.i,e.g=null,e.i=0,e.Oi(n,t),e.Ni()}function K8(e,t,n){var r;Rce(r=new qN(e.a),e.a.a),YMe(r.f,t,n),e.a.a=r}function X8(e,t,n,r){var i;for(i=0;it)throw uv(new gk(rIe(e,t,"index")));return e}function r9(e,t){var n;return c4(t,e.c.length),n=e.c[t],e_(e.c,t,1),n}function i9(e,t){var n,r;return tQ(e),n=e,tQ(t),n==(r=t)?0:nt.p?-1:0}function _9(e){var t;return e.a||BN(t=e.r,156)&&(e.a=cV(t,156)),e.a}function T9(e,t,n){return++e.e,--e.f,cV(e.d[t].gd(n),136).md()}function C9(e){var t;return t=e.ld(),Qq(cV(e.md(),16).Nc(),new Kf(t))}function E9(e,t){return!!CY(e.a,t)&&(c9(e.a,t),!0)}function O9(e,t,n){return U3(t,e.e.Rd().gc()),U3(n,e.c.Rd().gc()),e.a[t][n]}function P9(e,t,n){this.a=e,this.b=t,this.c=n,wL(e.t,this),wL(t.i,this)}function M9(e,t,n,r){this.f=e,this.e=t,this.d=n,this.b=r,this.c=r?r.d:null}function I9(){this.b=new fT,this.a=new fT,this.b=new fT,this.a=new fT}function D9(){var e,t;D9=_,vA(),t=new Vv,kzt=t,e=new Kw,Szt=e}function N9(e){return vme(e),new OF(e,new fV(e,e.a.e,4|e.a.d))}function L9(e){var t;for(VX(e),t=0;e.a.Bd(new le);)t=Ime(t,1);return t}function R9(e,t){return tQ(t),e.c=0,"Initial capacity must not be negative")}function F9(){F9=_,ADt=new Ey("org.eclipse.elk.labels.labelManager")}function B9(){B9=_,qpt=new cB("separateLayerConnections",(Vue(),Gpt))}function $9(){$9=_,LTt=new UO("REGULAR",0),NTt=new UO("CRITICAL",1)}function z9(){z9=_,eIt=new fP("FIXED",0),ZMt=new fP("CENTER_NODE",1)}function H9(){H9=_,Ygt=new KE("QUADRATIC",0),Kgt=new KE("SCANLINE",1)}function q9(){q9=_,nmt=Mde((Aae(),que(oS(amt,1),b0e,322,0,[Zgt,Jgt,emt])))}function V9(){V9=_,smt=Mde((iae(),que(oS(dmt,1),b0e,351,0,[rmt,omt,imt])))}function U9(){U9=_,Egt=Mde((mse(),que(oS(jgt,1),b0e,372,0,[Tgt,_gt,Agt])))}function W9(){W9=_,Smt=Mde((Che(),que(oS(Pmt,1),b0e,460,0,[wmt,vmt,xmt])))}function G9(){G9=_,pbt=Mde((rue(),que(oS(ybt,1),b0e,299,0,[hbt,fbt,ubt])))}function Y9(){Y9=_,vbt=Mde((Zne(),que(oS(kbt,1),b0e,311,0,[mbt,bbt,gbt])))}function K9(){K9=_,fAt=Mde((Epe(),que(oS(bAt,1),b0e,390,0,[cAt,lAt,uAt])))}function X9(){X9=_,r_t=Mde((rle(),que(oS(s_t,1),b0e,387,0,[ZAt,e_t,t_t])))}function Q9(){Q9=_,c_t=Mde((Tfe(),que(oS(f_t,1),b0e,349,0,[a_t,i_t,o_t])))}function J9(){J9=_,JAt=Mde((oae(),que(oS(n_t,1),b0e,463,0,[XAt,YAt,KAt])))}function Z9(){Z9=_,d_t=Mde((wde(),que(oS(b_t,1),b0e,350,0,[l_t,u_t,h_t])))}function eee(){eee=_,y_t=Mde((rae(),que(oS(k_t,1),b0e,352,0,[m_t,p_t,g_t])))}function tee(){tee=_,S_t=Mde((Gue(),que(oS(R_t,1),b0e,388,0,[w_t,x_t,v_t])))}function nee(){nee=_,yCt=Mde((Cfe(),que(oS(jEt,1),b0e,392,0,[mCt,gCt,pCt])))}function ree(){ree=_,dOt=Mde((vde(),que(oS(ePt,1),b0e,393,0,[lOt,uOt,hOt])))}function iee(){iee=_,aPt=Mde((nle(),que(oS(uPt,1),b0e,300,0,[rPt,iPt,nPt])))}function oee(){oee=_,hPt=Mde((Qye(),que(oS(gPt,1),b0e,445,0,[sPt,cPt,lPt])))}function aee(){aee=_,mPt=Mde((Zxe(),que(oS(MPt,1),b0e,456,0,[fPt,pPt,dPt])))}function see(){see=_,IPt=Mde((zme(),que(oS(wMt,1),b0e,394,0,[OPt,PPt,EPt])))}function cee(){cee=_,OMt=Mde((gne(),que(oS(IMt,1),b0e,439,0,[_Mt,CMt,TMt])))}function lee(){lee=_,V_t=Mde((nae(),que(oS(U_t,1),b0e,464,0,[$_t,z_t,H_t])))}function uee(){uee=_,Llt=Mde((Fte(),que(oS(Rlt,1),b0e,471,0,[Mlt,Plt,Ilt])))}function hee(){hee=_,Elt=Mde((Jie(),que(oS(Olt,1),b0e,237,0,[Alt,_lt,Tlt])))}function fee(){fee=_,zlt=Mde((Jne(),que(oS(uut,1),b0e,472,0,[Blt,Flt,jlt])))}function dee(){dee=_,Rct=Mde((xde(),que(oS(jct,1),b0e,108,0,[Ect,Oct,Pct])))}function pee(){pee=_,vft=Mde((Qne(),que(oS(Eft,1),b0e,391,0,[mft,gft,bft])))}function gee(){gee=_,DRt=Mde((Ppe(),que(oS(FRt,1),b0e,346,0,[PRt,ORt,MRt])))}function mee(){mee=_,WMt=Mde((jge(),que(oS(YMt,1),b0e,444,0,[HMt,qMt,VMt])))}function bee(){bee=_,sRt=Mde((Zie(),que(oS(fRt,1),b0e,278,0,[rRt,iRt,oRt])))}function yee(){yee=_,gFt=Mde((Ope(),que(oS(yFt,1),b0e,280,0,[fFt,hFt,dFt])))}function vee(e,t){return!e.o&&(e.o=new fte((tJe(),WFt),_Bt,e,0)),xye(e.o,t)}function wee(e,t){var n;e.C&&((n=cV(MQ(e.b,t),127).n).d=e.C.d,n.a=e.C.a)}function xee(e){var t,n,r,i;i=e.d,t=e.a,n=e.b,r=e.c,e.d=n,e.a=r,e.b=i,e.c=t}function kee(e){return!e.g&&(e.g=new gl),!e.g.b&&(e.g.b=new Py(e)),e.g.b}function See(e){return!e.g&&(e.g=new gl),!e.g.c&&(e.g.c=new Dy(e)),e.g.c}function Aee(e){return!e.g&&(e.g=new gl),!e.g.d&&(e.g.d=new My(e)),e.g.d}function _ee(e){return!e.g&&(e.g=new gl),!e.g.a&&(e.g.a=new Iy(e)),e.g.a}function Tee(e,t,n,r){return n&&(r=n.Rh(t,nye(n.Dh(),e.c.uk()),null,r)),r}function Cee(e,t,n,r){return n&&(r=n.Th(t,nye(n.Dh(),e.c.uk()),null,r)),r}function Eee(e,t,n,r){var i;return FVe(i=Oee(JHt,K0e,28,t+1,15,1),e,t,n,r),i}function Oee(e,t,n,r,i,o){var a;return a=CSe(i,r),10!=i&&que(oS(e,o),t,n,i,a),a}function Pee(e,t,n){var r,i;for(i=new Zle(t,e),r=0;rn||t=0?e.Lh(n,!0,!0):JDe(e,t,!0)}function wte(e,t,n){var r;return r=qhe(e,t,n),e.b=new Lse(r.c.length),ZBe(e,r)}function xte(e){if(e.b<=0)throw uv(new zv);return--e.b,e.a-=e.c.c,Rpe(e.a)}function kte(e){var t;if(!e.a)throw uv(new _J);return t=e.a,e.a=j1(e.a),t}function Ste(e){for(;!e.a;)if(!x$(e.c,new xg(e)))return!1;return!0}function Ate(e){return KK(e),BN(e,204)?cV(e,204):new ld(e)}function _te(e){Tte(),cV(e.of((WJe(),dLt)),181).Fc((nDe(),gjt)),e.qf(fLt,null)}function Tte(){Tte=_,tDt=new uc,rDt=new hc,nDt=jfe((WJe(),fLt),tDt,UNt,rDt)}function Cte(){Cte=_,oOt=new eP("LEAF_NUMBER",0),aOt=new eP("NODE_SIZE",1)}function Ete(e){e.a=Oee(JHt,K0e,28,e.b+1,15,1),e.c=Oee(JHt,K0e,28,e.b,15,1),e.d=0}function Ote(e,t){e.a.Ne(t.d,e.b)>0&&(wL(e.c,new pV(t.c,t.d,e.d)),e.b=t.d)}function Pte(e,t){if(null==e.g||t>=e.i)throw uv(new bI(t,e.i));return e.g[t]}function Mte(e,t,n){if(mfe(e,n),null!=n&&!e.fk(n))throw uv(new Dv);return n}function Ite(e,t){return 10!=kre(t)&&que(Sde(t),t.Sm,t.__elementTypeId$,kre(t),e),e}function Dte(e,t,n,r){lZ(),r=r||Qst,iIe(e.slice(t,n),e,t,n,-t,r)}function Nte(e,t,n,r,i){return t<0?JDe(e,n,r):cV(n,69).wk().yk(e,e.hi(),t,r,i)}function Lte(e,t){return cme(ck(bF(sOe(e,(VJe(),dyt)))),ck(bF(sOe(t,dyt))))}function Rte(){Rte=_,kct=Mde((jte(),que(oS(Sct,1),b0e,304,0,[bct,yct,vct,wct])))}function jte(){jte=_,bct=new UC("All",0),yct=new TD,vct=new CN,wct=new _D}function Fte(){Fte=_,Mlt=new aE(G2e,0),Plt=new aE(V2e,1),Ilt=new aE(Y2e,2)}function Bte(){Bte=_,tWe(),lHt=k1e,cHt=S1e,hHt=new jp(k1e),uHt=new jp(S1e)}function $te(){$te=_,vut=Mde((nue(),que(oS(Aut,1),b0e,417,0,[but,put,gut,mut])))}function zte(){zte=_,jut=Mde((yxe(),que(oS(But,1),b0e,406,0,[Dut,Iut,Nut,Lut])))}function Hte(){Hte=_,_ut=Mde((vxe(),que(oS(Tut,1),b0e,332,0,[xut,wut,kut,Sut])))}function qte(){qte=_,rdt=Mde((qve(),que(oS(adt,1),b0e,389,0,[tdt,Zft,Jft,edt])))}function Vte(){Vte=_,Vft=Mde((Wue(),que(oS(ndt,1),b0e,416,0,[Bft,Hft,$ft,zft])))}function Ute(){Ute=_,fgt=Mde((Uue(),que(oS(ygt,1),b0e,421,0,[sgt,cgt,lgt,ugt])))}function Wte(){Wte=_,Kpt=Mde((Vue(),que(oS(agt,1),b0e,371,0,[Gpt,Upt,Wpt,Vpt])))}function Gte(){Gte=_,yAt=Mde((Jxe(),que(oS(AAt,1),b0e,203,0,[gAt,mAt,pAt,dAt])))}function Yte(){Yte=_,qAt=Mde((xve(),que(oS(WAt,1),b0e,284,0,[BAt,FAt,$At,zAt])))}function Kte(){Kte=_,Dmt=new rO(U3e,0),Imt=new rO("IMPROVE_STRAIGHTNESS",1)}function Xte(e,t){var n,r;return r=t/e.c.Rd().gc()|0,n=t%e.c.Rd().gc(),O9(e,r,n)}function Qte(e){var t;if(e.nl())for(t=e.i-1;t>=0;--t)Gie(e,t);return m6(e)}function Jte(e){var t,n;if(!e.b)return null;for(n=e.b;t=n.a[0];)n=t;return n}function Zte(e){var t,n;if(!e.b)return null;for(n=e.b;t=n.a[1];)n=t;return n}function ene(e){return BN(e,180)?""+cV(e,180).a:null==e?null:obe(e)}function tne(e){return BN(e,180)?""+cV(e,180).a:null==e?null:obe(e)}function nne(e,t){if(t.a)throw uv(new Fx(b2e));BY(e.a,t),t.a=e,!e.j&&(e.j=t)}function rne(e,t){iI.call(this,t.zd(),-16449&t.yd()),tQ(e),this.a=e,this.c=t}function ine(e,t){return new Iq(t,Fj(LN(t.e),t.f.a+e,t.f.b+e),(UR(),!1))}function one(e,t){return Cq(),wL(e,new KP(t,Rpe(t.e.c.length+t.g.c.length)))}function ane(e,t){return Cq(),wL(e,new KP(t,Rpe(t.e.c.length+t.g.c.length)))}function sne(){sne=_,tPt=Mde((gSe(),que(oS(oPt,1),b0e,354,0,[ZOt,QOt,JOt,XOt])))}function cne(){cne=_,FEt=Mde((yde(),que(oS(zEt,1),b0e,353,0,[REt,NEt,LEt,DEt])))}function lne(){lne=_,JTt=Mde((EAe(),que(oS(ZTt,1),b0e,405,0,[GTt,YTt,KTt,XTt])))}function une(){une=_,dRt=Mde(($me(),que(oS(wRt,1),b0e,223,0,[hRt,lRt,cRt,uRt])))}function hne(){hne=_,BRt=Mde((MAe(),que(oS(KRt,1),b0e,291,0,[jRt,NRt,LRt,RRt])))}function fne(){fne=_,Zjt=Mde((Xye(),que(oS(lFt,1),b0e,386,0,[Xjt,Qjt,Kjt,Yjt])))}function dne(){dne=_,_Ft=Mde((Ube(),que(oS(TFt,1),b0e,320,0,[SFt,wFt,kFt,xFt])))}function pne(){pne=_,IFt=Mde((_fe(),que(oS(LFt,1),b0e,415,0,[EFt,OFt,CFt,PFt])))}function gne(){gne=_,_Mt=new cP(m9e,0),CMt=new cP(w8e,1),TMt=new cP(U3e,2)}function mne(e,t,n,r,i){return tQ(e),tQ(t),tQ(n),tQ(r),tQ(i),new KY(e,t,r)}function bne(e,t){var n;return(n=cV(c9(e.e,t),400))?(oU(n),n.e):null}function yne(e,t){var n;return-1!=(n=Sne(e,t,0))&&(r9(e,n),!0)}function vne(e,t,n){var r;return VX(e),(r=new se).a=t,e.a.Nb(new eE(r,n)),r.a}function wne(e){var t;return VX(e),t=Oee(nqt,O1e,28,0,15,1),t_(e.a,new yg(t)),t}function xne(e){var t;if(!sse(e))throw uv(new zv);return e.e=1,t=e.d,e.d=null,t}function kne(e){var t;return $I(e)&&(t=0-e,!isNaN(t))?t:_le(mhe(e))}function Sne(e,t,n){for(;n=0?Lxe(e,n,!0,!0):JDe(e,t,!0)}function Yne(e){var t;return null==(t=Foe(Ile(e,32)))&&(Nve(e),t=Foe(Ile(e,32))),t}function Kne(e){var t;return e.Oh()||(t=rX(e.Dh())-e.ji(),e.$h().Mk(t)),e.zh()}function Xne(e,t){Out=new tt,Rut=t,cV((Eut=e).b,68),jee(Eut,Out,null),TGe(Eut)}function Qne(){Qne=_,mft=new gE("XY",0),gft=new gE("X",1),bft=new gE("Y",2)}function Jne(){Jne=_,Blt=new sE("TOP",0),Flt=new sE(V2e,1),jlt=new sE(X2e,2)}function Zne(){Zne=_,mbt=new cO(U3e,0),bbt=new cO("TOP",1),gbt=new cO(X2e,2)}function ere(){ere=_,VAt=new bO("INPUT_ORDER",0),UAt=new bO("PORT_DEGREE",1)}function tre(){tre=_,Qat=bN(h1e,h1e,524287),Jat=bN(0,0,d1e),Zat=$8(1),$8(2),est=$8(0)}function nre(e){var t;return e.d!=e.r&&(t=d_e(e),e.e=!!t&&t.lk()==lit,e.d=t),e.e}function rre(e,t,n){var r;return r=e.g[t],xL(e,t,e.Zi(t,n)),e.Ri(t,n,r),e.Ni(),r}function ire(e,t){var n;return(n=e.dd(t))>=0&&(e.gd(n),!0)}function ore(e,t){var n;for(KK(e),KK(t),n=!1;t.Ob();)n|=e.Fc(t.Pb());return n}function are(e,t){var n;return(n=cV(oX(e.e,t),400))?(eL(e,n),n.e):null}function sre(e){var t,n;return t=e/60|0,0==(n=e%60)?""+t:t+":"+n}function cre(e,t){var n=e.a[t],r=(Ehe(),Kat)[typeof n];return r?r(n):Yde(typeof n)}function lre(e,t){return vme(e),new hW(e,new L$(new h9(t,e.a)))}function ure(e){var t;return null!=(t=0==e.b.c.length?null:GU(e.b,0))&&Ese(e,0),t}function hre(e,t){var n,r,i;i=t.c.i,r=(n=cV(oX(e.f,i),60)).d.c-n.e.c,hce(t.a,r,0)}function fre(e,t){var n;for(++e.d,++e.c[t],n=t+1;n=0;)++t[0]}function gre(e,t){xoe(e,null==t||Q$((tQ(t),t))||isNaN((tQ(t),t))?0:(tQ(t),t))}function mre(e,t){koe(e,null==t||Q$((tQ(t),t))||isNaN((tQ(t),t))?0:(tQ(t),t))}function bre(e,t){woe(e,null==t||Q$((tQ(t),t))||isNaN((tQ(t),t))?0:(tQ(t),t))}function yre(e,t){voe(e,null==t||Q$((tQ(t),t))||isNaN((tQ(t),t))?0:(tQ(t),t))}function vre(e,t,n){return dL(new kP(n.e.a+n.f.a/2,n.e.b+n.f.b/2),e)==(tQ(t),t)}function wre(e,t){return BN(t,102)&&0!=(cV(t,19).Bb&C1e)?new xI(t,e):new Zle(t,e)}function xre(e,t){return BN(t,102)&&0!=(cV(t,19).Bb&C1e)?new xI(t,e):new Zle(t,e)}function kre(e){return null==e.__elementTypeCategory$?10:e.__elementTypeCategory$}function Sre(e,t){return t==(oz(),oz(),cct)?e.toLocaleLowerCase():e.toLowerCase()}function Are(e){if(!e.e)throw uv(new zv);return e.c=e.a=e.e,e.e=e.e.e,--e.d,e.a.f}function _re(e){if(!e.c)throw uv(new zv);return e.e=e.a=e.c,e.c=e.c.c,++e.d,e.a.f}function Tre(e){var t;for(++e.a,t=e.c.a.length;e.ae.a[r]&&(r=n);return r}function Ire(e){var t;return!!(t=cV(sOe(e,(VJe(),Tbt)),313))&&t.a==e}function Dre(e){var t;return!!(t=cV(sOe(e,(VJe(),Tbt)),313))&&t.i==e}function Nre(){Nre=_,Oft=Mde((cOe(),que(oS(Ift,1),b0e,367,0,[Sft,Aft,_ft,Tft,Cft])))}function Lre(){Lre=_,vgt=Mde((mCe(),que(oS(Cgt,1),b0e,375,0,[pgt,mgt,bgt,ggt,dgt])))}function Rre(){Rre=_,pmt=Mde((wve(),que(oS(bmt,1),b0e,348,0,[lmt,cmt,hmt,fmt,umt])))}function jre(){jre=_,_At=Mde((bxe(),que(oS(RAt,1),b0e,323,0,[SAt,wAt,xAt,vAt,kAt])))}function Fre(){Fre=_,Nyt=Mde((Vbe(),que(oS(aAt,1),b0e,171,0,[Iyt,Eyt,Oyt,Pyt,Myt])))}function Bre(){Bre=_,iOt=Mde((GCe(),que(oS(sOt,1),b0e,368,0,[tOt,JEt,nOt,ZEt,eOt])))}function $re(){$re=_,zMt=Mde(($je(),que(oS(UMt,1),b0e,373,0,[RMt,LMt,FMt,jMt,BMt])))}function zre(){zre=_,lIt=Mde((bPe(),que(oS(UIt,1),b0e,324,0,[rIt,iIt,sIt,oIt,aIt])))}function Hre(){Hre=_,nRt=Mde((Rge(),que(oS(aRt,1),b0e,88,0,[ZLt,JLt,QLt,XLt,eRt])))}function qre(){qre=_,dDt=Mde((jwe(),que(oS(kDt,1),b0e,170,0,[uDt,lDt,sDt,hDt,cDt])))}function Vre(){Vre=_,rjt=Mde((Ywe(),que(oS(ujt,1),b0e,256,0,[ZRt,tjt,QRt,JRt,ejt])))}function Ure(){Ure=_,Hjt=Mde((FXe(),que(oS(Jjt,1),G3e,64,0,[Bjt,xjt,wjt,Fjt,$jt])))}function Wre(){Wre=_,Jct=new rE("BY_SIZE",0),Zct=new rE("BY_SIZE_AND_SHAPE",1)}function Gre(){Gre=_,mht=new pE("EADES",0),bht=new pE("FRUCHTERMAN_REINGOLD",1)}function Yre(){Yre=_,gmt=new eO("READING_DIRECTION",0),mmt=new eO("ROTATION",1)}function Kre(){Kre=_,Gft=new Tt,Yft=new Pt,Uft=new Mt,Wft=new Ot,Kft=new It}function Xre(e){this.b=new Zy,this.a=new Zy,this.c=new Zy,this.d=new Zy,this.e=e}function Qre(e){this.g=e,this.f=new Zy,this.a=r.Math.min(this.g.c.c,this.g.d.c)}function Jre(e,t,n){HB.call(this),Xie(this),this.a=e,this.c=n,this.b=t.d,this.f=t.e}function Zre(e,t,n){var r;for(r=new Kp(n);r.a=0&&t0?t-1:t,fA(dA(Roe(RV(new hx,n),e.n),e.j),e.k)}function iie(e){var t;t=new Jw,tte((!e.q&&(e.q=new hY(b$t,e,11,10)),e.q),t)}function oie(e){return(0!=(2&e.i)?"interface ":0!=(1&e.i)?"":"class ")+(vF(e),e.o)}function aie(e){return gpe(e,vZe)>0?vZe:gpe(e,A0e)<0?A0e:bG(e)}function sie(e){return e<3?(yae(e,d0e),e+1):e=-.01&&e.a<=Z2e&&(e.a=0),e.b>=-.01&&e.b<=Z2e&&(e.b=0),e}function Sie(e){var t,n;for(f$e(),n=V8e,t=0;tn&&(n=e[t]);return n}function Aie(e,t){var n;if(!(n=_Fe(e.Dh(),t)))throw uv(new vk(Utt+t+Ytt));return n}function _ie(e,t){var n;for(n=e;j1(n);)if((n=j1(n))==t)return!0;return!1}function Tie(e,t){var n,r,i;for(r=t.a.ld(),n=cV(t.a.md(),16).gc(),i=0;ie||e>t)throw uv(new Jk("fromIndex: 0, toIndex: "+e+X1e+t))}function Lie(e){if(e<0)throw uv(new vk("Illegal Capacity: "+e));this.g=this.aj(e)}function Rie(e,t){return JD(),sae(S0e),r.Math.abs(e-t)<=S0e||e==t||isNaN(e)&&isNaN(t)}function jie(e,t){var n,r,i,o;for(i=0,o=(r=e.d).length;i0&&(e.a/=t,e.b/=t),e}function Hie(e){var t;return e.w?e.w:((t=P4(e))&&!t.Vh()&&(e.w=t),t)}function qie(e,t){var n,r;r=e.a,n=wge(e,t,null),r!=t&&!e.e&&(n=CKe(e,t,n)),n&&n.oj()}function Vie(e,t,n){var r,i;r=t;do{i=ck(e.p[r.p])+n,e.p[r.p]=i,r=e.a[r.p]}while(r!=t)}function Uie(e,t,n){var r=function(){return e.apply(r,arguments)};return t.apply(r,n),r}function Wie(e){var t;return null==e?null:DEe(t=cV(e,195),t.length)}function Gie(e,t){if(null==e.g||t>=e.i)throw uv(new bI(t,e.i));return e.Wi(t,e.g[t])}function Yie(e,t){var n,r;for(uZ(),r=new Zy,n=0;n=14&&t<=16)),e}function Boe(e,t){var n;return tQ(t),vV(!!(n=e[":"+t]),"Enum constant undefined: "+t),n}function $oe(e,t,n,r,i,o){var a;return joe(n,a=YK(e,t)),a.i=i?8:0,a.f=r,a.e=i,a.g=o,a}function zoe(e,t,n,r,i){this.d=t,this.k=r,this.f=i,this.o=-1,this.p=1,this.c=e,this.a=n}function Hoe(e,t,n,r,i){this.d=t,this.k=r,this.f=i,this.o=-1,this.p=2,this.c=e,this.a=n}function qoe(e,t,n,r,i){this.d=t,this.k=r,this.f=i,this.o=-1,this.p=6,this.c=e,this.a=n}function Voe(e,t,n,r,i){this.d=t,this.k=r,this.f=i,this.o=-1,this.p=7,this.c=e,this.a=n}function Uoe(e,t,n,r,i){this.d=t,this.j=r,this.e=i,this.o=-1,this.p=4,this.c=e,this.a=n}function Woe(e,t){var n,r,i,o;for(i=0,o=(r=t).length;i=0))throw uv(new vk("tolerance ("+e+") must be >= 0"));return e}function cae(e,t){var n;return BN(t,44)?e.c.Mc(t):(n=xye(e,t),Tve(e,t),n)}function lae(e,t,n){return Fde(e,t),Use(e,n),Coe(e,0),Eoe(e,1),yge(e,!0),gge(e,!0),e}function uae(e,t){var n;if(n=e.gc(),t<0||t>n)throw uv(new p$(t,n));return new D$(e,t)}function hae(e,t){e.b=r.Math.max(e.b,t.d),e.e+=t.r+(0==e.a.c.length?0:e.c),wL(e.a,t)}function fae(e){SF(e.c>=0),jve(e.d,e.c)<0&&(e.a=e.a-1&e.d.a.length-1,e.b=e.d.c),e.c=-1}function dae(e){var t;for(t=e.c.Cc().Kc();t.Ob();)cV(t.Pb(),16).$b();e.c.$b(),e.d=0}function pae(e){var t,n,r,i;for(r=0,i=(n=e.a).length;r=0}function zae(e,t){e.r>0&&e.c0&&0!=e.g&&zae(e.i,t/e.r*e.i.d))}function Hae(e,t){var n;n=e.c,e.c=t,0!=(4&e.Db)&&0==(1&e.Db)&&kle(e,new fY(e,1,1,n,e.c))}function qae(e,t){var n;n=e.c,e.c=t,0!=(4&e.Db)&&0==(1&e.Db)&&kle(e,new fY(e,1,4,n,e.c))}function Vae(e,t){var n;n=e.k,e.k=t,0!=(4&e.Db)&&0==(1&e.Db)&&kle(e,new fY(e,1,2,n,e.k))}function Uae(e,t){var n;n=e.D,e.D=t,0!=(4&e.Db)&&0==(1&e.Db)&&kle(e,new fY(e,1,2,n,e.D))}function Wae(e,t){var n;n=e.f,e.f=t,0!=(4&e.Db)&&0==(1&e.Db)&&kle(e,new fY(e,1,8,n,e.f))}function Gae(e,t){var n;n=e.i,e.i=t,0!=(4&e.Db)&&0==(1&e.Db)&&kle(e,new fY(e,1,7,n,e.i))}function Yae(e,t){var n;n=e.a,e.a=t,0!=(4&e.Db)&&0==(1&e.Db)&&kle(e,new fY(e,1,8,n,e.a))}function Kae(e,t){var n;n=e.b,e.b=t,0!=(4&e.Db)&&0==(1&e.Db)&&kle(e,new fY(e,1,0,n,e.b))}function Xae(e,t){var n;n=e.b,e.b=t,0!=(4&e.Db)&&0==(1&e.Db)&&kle(e,new fY(e,1,0,n,e.b))}function Qae(e,t){var n;n=e.c,e.c=t,0!=(4&e.Db)&&0==(1&e.Db)&&kle(e,new fY(e,1,1,n,e.c))}function Jae(e,t){var n;n=e.d,e.d=t,0!=(4&e.Db)&&0==(1&e.Db)&&kle(e,new fY(e,1,1,n,e.d))}function Zae(e,t,n){var r;e.b=t,e.a=n,r=512==(512&e.a)?new ax:new Dh,e.c=UBe(r,e.b,e.a)}function ese(e,t){return _Be(e.e,t)?(CC(),nre(t)?new EU(t,e):new PM(t,e)):new CM(t,e)}function tse(e){return 0>e?new yT:new PF(null,new r8(e+1,e))}function nse(e,t){var n;return uZ(),n=new lT(1),jM(e)?i2(n,e,t):YMe(n.f,e,t),new Yp(n)}function rse(e,t){var n,r;return n=e.c,(r=t.e[e.p])>0?cV(GU(n.a,r-1),10):null}function ise(e,t){var n,r;return(n=e.o+e.p)<(r=t.o+t.p)?-1:n==r?0:1}function ose(e){var t;return BN(t=sOe(e,(VJe(),iyt)),167)?Xbe(cV(t,167)):null}function ase(e){var t;return(e=r.Math.max(e,2))>(t=bhe(e))?(t<<=1)>0?t:g0e:t}function sse(e){switch($L(3!=e.e),e.e){case 2:return!1;case 0:return!0}return a9(e)}function cse(e,t){var n;return!!BN(t,8)&&(n=cV(t,8),e.a==n.a&&e.b==n.b)}function lse(e,t){var n;n=new tt,cV(t.b,68),cV(t.b,68),cV(t.b,68),Cie(t.a,new Nq(e,n,t))}function use(e,t){var n,r;for(r=t.vc().Kc();r.Ob();)iTe(e,(n=cV(r.Pb(),44)).ld(),n.md())}function hse(e,t){var n;n=e.d,e.d=t,0!=(4&e.Db)&&0==(1&e.Db)&&kle(e,new fY(e,1,11,n,e.d))}function fse(e,t){var n;n=e.j,e.j=t,0!=(4&e.Db)&&0==(1&e.Db)&&kle(e,new fY(e,1,13,n,e.j))}function dse(e,t){var n;n=e.b,e.b=t,0!=(4&e.Db)&&0==(1&e.Db)&&kle(e,new fY(e,1,21,n,e.b))}function pse(e,t){0==(t8(),Dct?null:t.c).length&&jF(t,new V),i2(e.a,Dct?null:t.c,t)}function gse(e,t){t.Ug("Hierarchical port constraint processing",1),axe(e),xJe(e),t.Vg()}function mse(){mse=_,Tgt=new YE("START",0),_gt=new YE("MIDDLE",1),Agt=new YE("END",2)}function bse(){bse=_,YEt=new JO("P1_NODE_PLACEMENT",0),KEt=new JO("P2_EDGE_ROUTING",1)}function yse(){yse=_,Kht=new Ey(_3e),Xht=new Ey(T3e),Yht=new Ey(C3e),Ght=new Ey(E3e)}function vse(e){var t;return Pz(e.f.g,e.d),kF(e.b),e.c=e.a,t=cV(e.a.Pb(),44),e.b=Cue(e),t}function wse(e){return null==e.b?(_C(),_C(),nzt):e.ul()?e.tl():e.sl()}function xse(e,t){var n;return!((n=null==t?-1:Sne(e.b,t,0))<0)&&(Ese(e,n),!0)}function kse(e,t){var n;return tQ(t),n=t.g,!e.b[n]&&(cX(e.b,n,t),++e.c,!0)}function Sse(e,t){var n,r;return n=1-t,r=e.a[n],e.a[n]=r.a[t],r.a[t]=e,e.b=!0,r.b=!1,r}function Ase(e,t){var n,r;for(r=t.Kc();r.Ob();)n=cV(r.Pb(),272),e.b=!0,BY(e.e,n),n.b=e}function _se(e,t){var n,r;return n=cV(sOe(e,(AJe(),iSt)),8),r=cV(sOe(t,iSt),8),cme(n.b,r.b)}function Tse(e,t,n){var r,i;return i=t>>5,r=31&t,_4(LG(e.n[n][i],bG(DG(r,1))),3)}function Cse(e,t,n){var r,i,o;for(o=e.a.length-1,i=e.b,r=0;r0?1:0:(!e.c&&(e.c=A2(zle(e.f))),e.c).e}function tce(e,t){t?null==e.B&&(e.B=e.D,e.D=null):null!=e.B&&(e.D=e.B,e.B=null)}function nce(e,t){return Wue(),e==Bft&&t==Hft||e==Hft&&t==Bft||e==zft&&t==$ft||e==$ft&&t==zft}function rce(e,t){return Wue(),e==Bft&&t==$ft||e==Bft&&t==zft||e==Hft&&t==zft||e==Hft&&t==$ft}function ice(e,t){return JD(),sae(Z2e),r.Math.abs(0-t)<=Z2e||0==t||isNaN(0)&&isNaN(t)?0:e/t}function oce(e,t){return ck(bF(xR(oge(JQ(new hW(null,new u4(e.c.b,16)),new $m(e)),t))))}function ace(e,t){return ck(bF(xR(oge(JQ(new hW(null,new u4(e.c.b,16)),new Bm(e)),t))))}function sce(){return i$e(),que(oS(dbt,1),b0e,259,0,[Zmt,tbt,nbt,rbt,ibt,obt,sbt,Jmt,ebt,abt])}function cce(){return SHe(),que(oS(HAt,1),b0e,243,0,[NAt,OAt,IAt,PAt,MAt,TAt,DAt,LAt,CAt,EAt])}function lce(e,t){t.Ug("General Compactor",1),zbe(cV(GLe(e,(APe(),IOt)),393)).Cg(e)}function uce(e,t){var n,r;return n=cV(GLe(e,(APe(),BOt)),17),r=cV(GLe(t,BOt),17),gN(n.a,r.a)}function hce(e,t,n){var r,i;for(i=Bwe(e,0);i.b!=i.d.c;)(r=cV(O5(i),8)).a+=t,r.b+=n;return e}function fce(e,t,n){var r;for(r=e.b[n&e.f];r;r=r.b)if(n==r.a&&RX(t,r.g))return r;return null}function dce(e,t,n){var r;for(r=e.c[n&e.f];r;r=r.d)if(n==r.f&&RX(t,r.i))return r;return null}function pce(e,t,n){var r,i,o;for(r=0,i=0;i>>31;0!=r&&(e[n]=r)}function gce(e,t,n,r,i,o){var a;this.c=e,tSe(e,a=new Zy,t,e.b,n,r,i,o),this.a=new D3(a,0)}function mce(){this.c=new YA(0),this.b=new YA(B8e),this.d=new YA(F8e),this.a=new YA($4e)}function bce(e,t,n,r,i,o,a){$_.call(this,e,t),this.d=n,this.e=r,this.c=i,this.b=o,this.a=e9(a)}function yce(e,t,n,r,i,o,a,s,c,l,u,h,f){return nIe(e,t,n,r,i,o,a,s,c,l,u,h,f),Tme(e,!1),e}function vce(e){return e.b.c.i.k==(GOe(),fdt)?cV(sOe(e.b.c.i,(VJe(),iyt)),12):e.b.c}function wce(e){return e.b.d.i.k==(GOe(),fdt)?cV(sOe(e.b.d.i,(VJe(),iyt)),12):e.b.d}function xce(e){var t;return $M((t=t5(e)).a,0)?(mT(),mT(),hct):(mT(),new gj(t.b))}function kce(e){var t;return $M((t=Z3(e)).a,0)?(gT(),gT(),uct):(gT(),new pj(t.b))}function Sce(e){var t;return $M((t=Z3(e)).a,0)?(gT(),gT(),uct):(gT(),new pj(t.c))}function Ace(e){switch(e.g){case 2:return FXe(),$jt;case 4:return FXe(),wjt;default:return e}}function _ce(e){switch(e.g){case 1:return FXe(),Fjt;case 3:return FXe(),xjt;default:return e}}function Tce(e){switch(e.g){case 0:return new Ks;case 1:return new Xs;default:return null}}function Cce(){Cce=_,Hpt=new cB("edgelabelcenterednessanalysis.includelabel",(UR(),tst))}function Ece(){Ece=_,B_t=Ive(mI(MU(MU(new pQ,(cOe(),_ft),(GJe(),wpt)),Tft,upt),Cft),vpt)}function Oce(){Oce=_,W_t=Ive(mI(MU(MU(new pQ,(cOe(),_ft),(GJe(),wpt)),Tft,upt),Cft),vpt)}function Pce(){Pce=_,Y$t=new Xw,X$t=que(oS(s$t,1),wit,179,0,[]),K$t=que(oS(b$t,1),xit,62,0,[])}function Mce(){Mce=_,Pdt=new CE("TO_INTERNAL_LTR",0),Odt=new CE("TO_INPUT_DIRECTION",1)}function Ice(){Ice=_,Sdt=new $t,xdt=new zt,kdt=new Ht,wdt=new qt,Adt=new Vt,_dt=new Ut}function Dce(e,t){t.Ug(m5e,1),Mbe(BT(new Mg((GT(),new yJ(e,!1,!1,new Ft))))),t.Vg()}function Nce(e,t,n){n.Ug("DFS Treeifying phase",1),Uye(e,t),UFe(e,t),e.a=null,e.b=null,n.Vg()}function Lce(e,t){return UR(),jM(e)?i9(e,yF(t)):BM(e)?jG(e,bF(t)):FM(e)?RG(e,mF(t)):e.Fd(t)}function Rce(e,t){var n,r;for(tQ(t),r=t.vc().Kc();r.Ob();)n=cV(r.Pb(),44),e.zc(n.ld(),n.md())}function jce(e,t,n){var r;for(r=n.Kc();r.Ob();)if(!H6(e,t,r.Pb()))return!1;return!0}function Fce(e,t,n,r,i){var o;return n&&(o=nye(t.Dh(),e.c),i=n.Rh(t,-1-(-1==o?r:o),null,i)),i}function Bce(e,t,n,r,i){var o;return n&&(o=nye(t.Dh(),e.c),i=n.Th(t,-1-(-1==o?r:o),null,i)),i}function $ce(e){var t;if(-2==e.b){if(0==e.e)t=-1;else for(t=0;0==e.a[t];t++);e.b=t}return e.b}function zce(e){if(tQ(e),0==e.length)throw uv(new Zk("Zero length BigInteger"));UHe(this,e)}function Hce(e){this.i=e.gc(),this.i>0&&(this.g=this.aj(this.i+(this.i/8|0)+1),e.Qc(this.g))}function qce(e,t,n){this.g=e,this.d=t,this.e=n,this.a=new Zy,jIe(this),uZ(),hN(this.a,null)}function Vce(e,t){t.q=e,e.d=r.Math.max(e.d,t.r),e.b+=t.d+(0==e.a.c.length?0:e.c),wL(e.a,t)}function Uce(e,t){var n,r,i,o;return i=e.c,n=e.c+e.b,o=e.d,r=e.d+e.a,t.a>i&&t.ao&&t.b(i=e.a.length)?n=i:l4(t,n+1),e.a=i0(e.a,0,t)+""+r+lX(e.a,n)}function yle(e,t){e.a=Ime(e.a,1),e.c=r.Math.min(e.c,t),e.b=r.Math.max(e.b,t),e.d=Ime(e.d,t)}function vle(e,t){return t1||e.Ob())return++e.a,e.g=0,t=e.i,e.Ob(),t;throw uv(new zv)}function Ble(e){switch(e.a.g){case 1:return new FO;case 3:return new GSe;default:return new yf}}function $le(e,t){switch(t){case 1:return!!e.n&&0!=e.n.i;case 2:return null!=e.k}return A3(e,t)}function zle(e){return b1e>22),i=e.h+t.h+(r>>22),bN(n&h1e,r&h1e,i&f1e)}function Sue(e,t){var n,r,i;return n=e.l-t.l,r=e.m-t.m+(n>>22),i=e.h-t.h+(r>>22),bN(n&h1e,r&h1e,i&f1e)}function Aue(e){var t,n;for(zXe(e),n=new Kp(e.d);n.a(r=e.gc()))throw uv(new p$(t,r));return e.Si()&&(n=M1(e,n)),e.Ei(t,n)}function phe(e,t,n,r,i){var o,a;for(a=n;a<=i;a++)for(o=t;o<=r;o++)nSe(e,o,a)||Hze(e,o,a,!0,!1)}function ghe(e){var t,n,r;for(f$e(),n=Oee(CDt,GZe,8,2,0,1),r=0,t=0;t<2;t++)r+=.5,n[t]=Kke(r,e);return n}function mhe(e){var t,n;return bN(t=1+~e.l&h1e,n=~e.m+(0==t?1:0)&h1e,~e.h+(0==t&&0==n?1:0)&f1e)}function bhe(e){var t;if(e<0)return A0e;if(0==e)return 0;for(t=g0e;0==(t&e);t>>=1);return t}function yhe(e,t,n){return!(e>=128)&&HM(e<64?_4(DG(1,e),n):_4(DG(1,e-64),t),0)}function vhe(e,t,n){return null==n?(!e.q&&(e.q=new Jy),c9(e.q,t)):(!e.q&&(e.q=new Jy),vQ(e.q,t,n)),e}function whe(e,t,n){return null==n?(!e.q&&(e.q=new Jy),c9(e.q,t)):(!e.q&&(e.q=new Jy),vQ(e.q,t,n)),e}function xhe(e){var t,n;return Gle(n=new g9,e),whe(n,(yse(),Kht),e),wUe(e,n,t=new Jy),GKe(e,n,t),n}function khe(e){var t,n;return t=e.t-e.k[e.o.p]*e.d+e.j[e.o.p]>e.f,n=e.u+e.e[e.o.p]*e.d>e.f*e.s*e.d,t||n}function She(e,t){var n,r,i;for(n=!1,r=e.a[t].length,i=0;i=0,"Negative initial capacity"),vV(t>=0,"Non-positive load factor"),NY(this)}function Nhe(e,t,n,r,i){var o,a;if(a=e.length,o=n.length,t<0||r<0||i<0||t+i>a||r+i>o)throw uv(new Iv)}function Lhe(e,t){var n,r,i,o,a;for(uZ(),a=!1,i=0,o=(r=t).length;i1||t>=0&&e.b<3)}function Jhe(e){var t,n,r;t=1+~e.l&h1e,n=~e.m+(0==t?1:0)&h1e,r=~e.h+(0==t&&0==n?1:0)&f1e,e.l=t,e.m=n,e.h=r}function Zhe(e){var t,n,r;for(uZ(),r=1,n=e.Kc();n.Ob();)r=31*r+(null!=(t=n.Pb())?Hse(t):0),r|=0;return r}function efe(e,t,n,r,i){var o;return o=mLe(e,t),n&&Jhe(o),i&&(e=uSe(e,t),Xat=r?mhe(e):bN(e.l,e.m,e.h)),o}function tfe(e,t,n){e.g=yMe(e,t,(FXe(),wjt),e.b),e.d=yMe(e,n,wjt,e.b),0!=e.g.c&&0!=e.d.c&&MOe(e)}function nfe(e,t,n){e.g=yMe(e,t,(FXe(),$jt),e.j),e.d=yMe(e,n,$jt,e.j),0!=e.g.c&&0!=e.d.c&&MOe(e)}function rfe(e,t){switch(t){case 7:return!!e.e&&0!=e.e.i;case 8:return!!e.d&&0!=e.d.i}return Fbe(e,t)}function ife(e,t){switch(t.g){case 0:BN(e.b,641)||(e.b=new fle);break;case 1:BN(e.b,642)||(e.b=new GV)}}function ofe(e){if(0===e.g)return new nc;throw uv(new vk(det+(null!=e.f?e.f:""+e.g)))}function afe(e){if(0===e.g)return new ec;throw uv(new vk(det+(null!=e.f?e.f:""+e.g)))}function sfe(e,t,n){return!XA(QQ(new hW(null,new u4(e.c,16)),new ug(new VP(t,n)))).Bd((vT(),Fct))}function cfe(e,t){return dL(Nwe(cV(sOe(t,(XVe(),oEt)),88)),new kP(e.c.e.a-e.b.e.a,e.c.e.b-e.b.e.b))<=0}function lfe(e,t){for(;null!=e.g||e.c?null==e.g||0!=e.i&&cV(e.g[e.i-1],51).Ob():P1(e);)xM(t,KRe(e))}function ufe(e){var t;for(t=new Kp(e.a.b);t.ar?1:0}function xfe(e){return wL(e.c,(Kue(),ZIt)),Rie(e.a,ck(bF(Qwe((fye(),KSt)))))?new Gc:new Gb(e)}function kfe(e){for(;!e.d||!e.d.Ob();){if(!e.b||Ik(e.b))return null;e.d=cV(RY(e.b),51)}return e.d}function Sfe(e){switch(e.g){case 1:return F8e;default:case 2:return 0;case 3:return $4e;case 4:return B8e}}function Afe(){var e;return XJe(),YHt||(e=nj(wQe("M",!0)),e=EW(wQe("M",!1),e),YHt=e)}function _fe(){_fe=_,EFt=new cM("ELK",0),OFt=new cM("JSON",1),CFt=new cM("DOT",2),PFt=new cM("SVG",3)}function Tfe(){Tfe=_,a_t=new wO("STACKED",0),i_t=new wO("REVERSE_STACKED",1),o_t=new wO("SEQUENCED",2)}function Cfe(){Cfe=_,mCt=new KO(U3e,0),gCt=new KO("MIDDLE_TO_MIDDLE",1),pCt=new KO("AVOID_OVERLAP",2)}function Efe(){Efe=_,tgt=new Ar,ngt=new _r,egt=new kr,Zpt=new Tr,tQ(new Sr),Jpt=new I}function Ofe(){Ofe=_,CRt=new ED(15),TRt=new $D((WJe(),KNt),CRt),ERt=yLt,kRt=aNt,SRt=$Nt,_Rt=qNt,ARt=HNt}function Pfe(e,t){var n,r,i,o,a;for(i=0,o=(r=t).length;i=e.b.c.length||($fe(e,2*t+1),(n=2*t+2)0&&(t.Cd(n),n.i&&Zge(n))}function Hfe(e,t,n){var r;for(r=n-1;r>=0&&e[r]===t[r];r--);return r<0?0:NC(_4(e[r],I1e),_4(t[r],I1e))?-1:1}function qfe(e,t,n){var r,i;this.g=e,this.c=t,this.a=this,this.d=this,i=ase(n),r=Oee(Nat,f0e,227,i,0,1),this.b=r}function Vfe(e,t,n,r,i){var o,a;for(a=n;a<=i;a++)for(o=t;o<=r;o++)if(nSe(e,o,a))return!0;return!1}function Ufe(e,t){var n;for(n=e.Zb().Cc().Kc();n.Ob();)if(cV(n.Pb(),16).Hc(t))return!0;return!1}function Wfe(e,t,n){var r,i,o,a;for(tQ(n),a=!1,o=e.fd(t),i=n.Kc();i.Ob();)r=i.Pb(),o.Rb(r),a=!0;return a}function Gfe(e,t){var n,r;return r=cV(Ile(e.a,4),129),n=Oee(RBt,qrt,424,t,0,1),null!=r&&UVe(r,0,n,0,r.length),n}function Yfe(e,t){var n;return n=new Z$e(0!=(256&e.f),e.i,e.a,e.d,0!=(16&e.f),e.j,e.g,t),null!=e.e||(n.c=e),n}function Kfe(e,t){var n;return e===t||!!BN(t,85)&&(n=cV(t,85),PPe(kG(e),n.vc()))}function Xfe(e,t,n){var r,i;for(i=n.Kc();i.Ob();)if(r=cV(i.Pb(),44),e.Be(t,r.md()))return!0;return!1}function Qfe(e,t,n){return e.d[t.p][n.p]||(Fxe(e,t,n),e.d[t.p][n.p]=!0,e.d[n.p][t.p]=!0),e.a[t.p][n.p]}function Jfe(e,t){return!(!e||e==t||!vj(t,(VJe(),Gbt)))&&cV(sOe(t,(VJe(),Gbt)),10)!=e}function Zfe(e){switch(e.i){case 2:return!0;case 1:return!1;case-1:++e.c;default:return e.$l()}}function ede(e){switch(e.i){case-2:return!0;case-1:return!1;case 1:--e.c;default:return e._l()}}function tde(e){q1.call(this,"The given string does not match the expected format for individual spacings.",e)}function nde(e,t){var n;t.Ug("Min Size Preprocessing",1),n=RMe(e),kxe(e,(fze(),_Pt),n.a),kxe(e,kPt,n.b),t.Vg()}function rde(e){var t,n,r;for(t=0,r=Oee(CDt,GZe,8,e.b,0,1),n=Bwe(e,0);n.b!=n.d.c;)r[t++]=cV(O5(n),8);return r}function ide(e,t,n){var r,i;for(r=new fT,i=Bwe(n,0);i.b!=i.d.c;)aU(r,new nD(cV(O5(i),8)));Wfe(e,t,r)}function ode(e,t){var n;return n=Ime(e,t),NC(C4(e,t),0)|zM(C4(e,n),0)?n:Ime(JZe,C4(LG(n,63),1))}function ade(e,t){var n,r;return(n=cV(e.d.Bc(t),16))?((r=e.e.hc()).Gc(n),e.e.d-=n.gc(),n.$b(),r):null}function sde(e){var t;if((t=e.a.c.length)>0)return YG(t-1,e.a.c.length),r9(e.a,t-1);throw uv(new $v)}function cde(e,t,n){if(e>t)throw uv(new vk(s2e+e+c2e+t));if(e<0||t>n)throw uv(new Jk(s2e+e+l2e+t+X1e+n))}function lde(e,t){null==e.D&&null!=e.B&&(e.D=e.B,e.B=null),Uae(e,null==t?null:(tQ(t),t)),e.C&&e.hl(null)}function ude(e,t){var n;n=null!=Qwe((fye(),KSt))&&null!=t.Sg()?ck(bF(t.Sg()))/ck(bF(Qwe(KSt))):1,vQ(e.b,t,n)}function hde(e,t){var n,r;if(0!=(r=e.c[t]))for(e.c[t]=0,e.d-=r,n=t+1;nj8e?e-n>j8e:n-e>j8e)}function Xde(e,t){var n;for(n=0;ni&&(qTe(t.q,i),r=n!=t.q.d)),r}function Zde(e,t){var n,i,o,a,s;return a=t.i,s=t.j,i=a-(n=e.f).i,o=s-n.j,r.Math.sqrt(i*i+o*o)}function epe(e,t){var n;return(n=Fve(e))||(!ZFt&&(ZFt=new Cl),JWe(),tte((n=new Wy(lRe(t))).El(),e)),n}function tpe(e,t){var n,r;return(n=cV(e.c.Bc(t),16))?((r=e.hc()).Gc(n),e.d-=n.gc(),n.$b(),e.mc(r)):e.jc()}function npe(e,t){var n,r;for(r=0!=cje(e.d,1),n=!0;n;)n=!1,n=t.c.mg(t.e,r),n|=CFe(e,t,r,!1),r=!r;Vse(e)}function rpe(e,t,n,r){var i,o;e.a=t,o=r?0:1,e.f=(i=new $Pe(e.c,e.a,n,o),new nze(n,e.a,i,e.e,e.b,e.c==(nae(),z_t)))}function ipe(e){var t;return kF(e.a!=e.b),t=e.d.a[e.a],AF(e.b==e.d.c&&null!=t),e.c=e.a,e.a=e.a+1&e.d.a.length-1,t}function ope(e){var t;if(0!=e.c)return e.c;for(t=0;t=e.c.b:e.a<=e.c.b))throw uv(new zv);return t=e.a,e.a+=e.c.c,++e.b,Rpe(t)}function spe(e){var t;return Gle(t=new TN(e.a),e),whe(t,(VJe(),iyt),e),t.o.a=e.g,t.o.b=e.f,t.n.a=e.i,t.n.b=e.j,t}function cpe(e){return(FXe(),Ijt).Hc(e.j)?ck(bF(sOe(e,(VJe(),kyt)))):Vhe(que(oS(CDt,1),GZe,8,0,[e.i.n,e.n,e.a])).b}function lpe(e){var t;return t=aD(F_t),cV(sOe(e,(VJe(),Hbt)),21).Hc((i$e(),ibt))&&MU(t,(cOe(),_ft),(GJe(),Ept)),t}function upe(e){var t,n;for(n=new nw,t=new Kp(e);t.a=0?t:-t;r>0;)r%2==0?(n*=n,r=r/2|0):(i*=n,r-=1);return t<0?1/i:i}function bpe(e,t){var n,r,i;for(i=1,n=e,r=t>=0?t:-t;r>0;)r%2==0?(n*=n,r=r/2|0):(i*=n,r-=1);return t<0?1/i:i}function ype(e,t){var n,r,i,o;return(o=hIe((r=t,(i=e?Fve(e):null)&&i.Gl(),r)))==t&&(n=Fve(e))&&n.Gl(),o}function vpe(e,t,n){var r,i;return i=e.f,e.f=t,0!=(4&e.Db)&&0==(1&e.Db)&&(r=new fY(e,1,0,i,t),n?n.nj(r):n=r),n}function wpe(e,t,n){var r,i;return i=e.b,e.b=t,0!=(4&e.Db)&&0==(1&e.Db)&&(r=new fY(e,1,3,i,t),n?n.nj(r):n=r),n}function xpe(e,t,n){var r,i;return i=e.a,e.a=t,0!=(4&e.Db)&&0==(1&e.Db)&&(r=new fY(e,1,1,i,t),n?n.nj(r):n=r),n}function kpe(e){var t,n,r,i;if(null!=e)for(n=0;n=r||t-129&&e<128?(WV(),!(n=dst[t=e+128])&&(n=dst[t]=new Op(e)),n):new Op(e)}function jpe(e){var t,n;return e>-129&&e<128?(nW(),!(n=kst[t=e+128])&&(n=kst[t]=new Mp(e)),n):new Mp(e)}function Fpe(e,t){e.a.c.length>0&&Ife(cV(GU(e.a,e.a.c.length-1),579),t)||wL(e.a,new i8(t))}function Bpe(e){var t,n;Vz(),t=e.d.c-e.e.c,Cie((n=cV(e.g,154)).b,new Cm(t)),Cie(n.c,new Em(t)),G7(n.i,new Om(t))}function $pe(e){var t;return(t=new Kk).a+="VerticalSegment ",XM(t,e.e),t.a+=" ",QM(t,FL(new Bk,new Kp(e.k))),t.a}function zpe(e,t){var n,r;for(n=0,r=Lme(e,t).Kc();r.Ob();)n+=null!=sOe(cV(r.Pb(),12),(VJe(),fyt))?1:0;return n}function Hpe(e,t,n){var r,i,o;for(r=0,o=Bwe(e,0);o.b!=o.d.c&&!((i=ck(bF(O5(o))))>n);)i>=t&&++r;return r}function qpe(e,t){KK(e);try{return e._b(t)}catch(n){if(BN(n=_ue(n),212)||BN(n,169))return!1;throw uv(n)}}function Vpe(e,t){KK(e);try{return e.Hc(t)}catch(n){if(BN(n=_ue(n),212)||BN(n,169))return!1;throw uv(n)}}function Upe(e,t){KK(e);try{return e.Mc(t)}catch(n){if(BN(n=_ue(n),212)||BN(n,169))return!1;throw uv(n)}}function Wpe(e,t){KK(e);try{return e.xc(t)}catch(n){if(BN(n=_ue(n),212)||BN(n,169))return null;throw uv(n)}}function Gpe(e,t){KK(e);try{return e.Bc(t)}catch(n){if(BN(n=_ue(n),212)||BN(n,169))return null;throw uv(n)}}function Ype(e,t){switch(t.g){case 2:case 1:return Lme(e,t);case 3:case 4:return Tbe(Lme(e,t))}return uZ(),uZ(),Gst}function Kpe(e){var t;return 0!=(64&e.Db)?vRe(e):((t=new hR(vRe(e))).a+=" (name: ",YM(t,e.zb),t.a+=")",t.a)}function Xpe(e){var t;return(t=cV(are(e.c.c,""),233))||(t=new O2(qS(HS(new gc,""),"Other")),Mwe(e.c.c,"",t)),t}function Qpe(e,t,n){var r,i;return i=e.sb,e.sb=t,0!=(4&e.Db)&&0==(1&e.Db)&&(r=new fY(e,1,4,i,t),n?n.nj(r):n=r),n}function Jpe(e,t,n){var r,i;return i=e.r,e.r=t,0!=(4&e.Db)&&0==(1&e.Db)&&(r=new fY(e,1,8,i,e.r),n?n.nj(r):n=r),n}function Zpe(e,t,n){var r;return r=new Fne(e.e,4,13,t.c||(JJe(),D$t),null,Hxe(e,t),!1),n?n.nj(r):n=r,n}function ege(e,t,n){var r;return r=new Fne(e.e,3,13,null,t.c||(JJe(),D$t),Hxe(e,t),!1),n?n.nj(r):n=r,n}function tge(e,t){var n,r;return!(r=(n=cV(t,691)).el())&&n.fl(r=BN(t,90)?new EM(e,cV(t,29)):new m3(e,cV(t,156))),r}function nge(e,t,n){var r;e._i(e.i+1),r=e.Zi(t,n),t!=e.i&&UVe(e.g,t,e.g,t+1,e.i-t),cX(e.g,t,r),++e.i,e.Mi(t,n),e.Ni()}function rge(e,t){var n;return t.a&&(n=t.a.a.length,e.a?QM(e.a,e.b):e.a=new fR(e.d),I3(e.a,t.a,t.d.length,n)),e}function ige(e,t){var n;e.c=t,e.a=Qbe(t),e.a<54&&(e.f=(n=t.d>1?E3(t.a[0],t.a[1]):E3(t.a[0],0),K3(t.e>0?n:kne(n))))}function oge(e,t){var n;return n=new se,e.a.Bd(n)?(qL(),new Wx(tQ(vne(e,n.a,t)))):(VX(e),qL(),qL(),lct)}function age(e,t){var n;0!=e.c.length&&(GI(n=cV(_we(e,Oee(bdt,n5e,10,e.c.length,0,1)),199),new Pn),KDe(n,t))}function sge(e,t){var n;0!=e.c.length&&(GI(n=cV(_we(e,Oee(bdt,n5e,10,e.c.length,0,1)),199),new Mn),KDe(n,t))}function cge(e,t){return jM(e)?y$(e,t):BM(e)?b$(e,t):FM(e)?(tQ(e),RM(e)===RM(t)):EG(e)?e.Fb(t):RW(e)?TI(e,t):A4(e,t)}function lge(e,t,n){if(t<0)GIe(e,n);else{if(!n.rk())throw uv(new vk(Utt+n.xe()+Wtt));cV(n,69).wk().Ek(e,e.hi(),t)}}function uge(e,t,n){if(e<0||t>n)throw uv(new gk(s2e+e+l2e+t+", size: "+n));if(e>t)throw uv(new vk(s2e+e+c2e+t))}function hge(e){var t;return 0!=(64&e.Db)?vRe(e):((t=new hR(vRe(e))).a+=" (source: ",YM(t,e.d),t.a+=")",t.a)}function fge(e){return e>=65&&e<=70?e-65+10:e>=97&&e<=102?e-97+10:e>=48&&e<=57?e-48:0}function dge(e){var t,n,r,i;for(QJe(),r=0,i=(n=Dwe()).length;r=0?jye(e):uK(jye(kne(e))))}function Tge(e,t,n,r,i,o){this.e=new Zy,this.f=(oae(),XAt),wL(this.e,e),this.d=t,this.a=n,this.b=r,this.f=i,this.c=o}function Cge(e,t,n){e.n=QU(eqt,[GZe,_1e],[376,28],14,[n,t1(r.Math.ceil(t/32))],2),e.o=t,e.p=n,e.j=t-1>>1,e.k=n-1>>1}function Ege(e){return e=((e=((e-=e>>1&1431655765)>>2&858993459)+(858993459&e))>>4)+e&252645135,e+=e>>8,63&(e+=e>>16)}function Oge(e,t){var n,r;for(r=new LL(e);r.e!=r.i.gc();)if(n=cV(Zwe(r),142),RM(t)===RM(n))return!0;return!1}function Pge(e,t,n){var r,i;return(i=ARe(e.b,t))&&(r=cV(XWe(Ine(e,i),""),29))?uRe(e,r,t,n):null}function Mge(e,t,n){var r,i;return(i=ARe(e.b,t))&&(r=cV(XWe(Ine(e,i),""),29))?hRe(e,r,t,n):null}function Ige(e,t){var n;if(null==(n=goe(e.i,t)))throw uv(new Tk("Node did not exist in input."));return Xce(t,n),null}function Dge(e,t){var n;if(BN(n=_Fe(e,t),331))return cV(n,35);throw uv(new vk(Utt+t+"' is not a valid attribute"))}function Nge(e,t,n){var r;if(t>(r=e.gc()))throw uv(new p$(t,r));if(e.Si()&&e.Hc(n))throw uv(new vk(Wnt));e.Gi(t,n)}function Lge(e,t){t.Ug("Sort end labels",1),wT(QQ(lre(new hW(null,new u4(e.b,16)),new pn),new gn),new mn),t.Vg()}function Rge(){Rge=_,ZLt=new CP(J2e,0),JLt=new CP(Y2e,1),QLt=new CP(G2e,2),XLt=new CP(o4e,3),eRt=new CP("UP",4)}function jge(){jge=_,HMt=new hP("P1_STRUCTURE",0),qMt=new hP("P2_PROCESSING_ORDER",1),VMt=new hP("P3_EXECUTION",2)}function Fge(){Fge=_,UEt=Ive(Ive(mC(Ive(Ive(mC(MU(new pQ,(EAe(),YTt),(PHe(),hCt)),KTt),sCt),lCt),XTt),rCt),uCt)}function Bge(e){switch(cV(sOe(e,(VJe(),Wbt)),311).g){case 1:whe(e,Wbt,(Zne(),gbt));break;case 2:whe(e,Wbt,(Zne(),bbt))}}function $ge(e){switch(e){case 0:return new Bw;case 1:return new jw;case 2:return new Fw;default:throw uv(new Lv)}}function zge(e){switch(e.g){case 2:return JLt;case 1:return QLt;case 4:return XLt;case 3:return eRt;default:return ZLt}}function Hge(e,t){switch(e.b.g){case 0:case 1:return t;case 2:case 3:return new mJ(t.d,0,t.a,t.b);default:return null}}function qge(e){switch(e.g){case 1:return $jt;case 2:return xjt;case 3:return wjt;case 4:return Fjt;default:return Bjt}}function Vge(e){switch(e.g){case 1:return Fjt;case 2:return $jt;case 3:return xjt;case 4:return wjt;default:return Bjt}}function Uge(e){switch(e.g){case 1:return wjt;case 2:return Fjt;case 3:return $jt;case 4:return xjt;default:return Bjt}}function Wge(e,t,n,r){switch(t){case 1:return!e.n&&(e.n=new hY(fBt,e,1,7)),e.n;case 2:return e.k}return aAe(e,t,n,r)}function Gge(e,t,n){var r,i;return e.Pj()?(i=e.Qj(),r=HDe(e,t,n),e.Jj(e.Ij(7,Rpe(n),r,t,i)),r):HDe(e,t,n)}function Yge(e,t){var n,r,i;null==e.d?(++e.e,--e.f):(i=t.ld(),T9(e,r=((n=t.Bi())&vZe)%e.d.length,SRe(e,r,n,i)))}function Kge(e,t){var n;n=0!=(e.Bb&p0e),t?e.Bb|=p0e:e.Bb&=-1025,0!=(4&e.Db)&&0==(1&e.Db)&&kle(e,new A8(e,1,10,n,t))}function Xge(e,t){var n;n=0!=(e.Bb&A1e),t?e.Bb|=A1e:e.Bb&=-4097,0!=(4&e.Db)&&0==(1&e.Db)&&kle(e,new A8(e,1,12,n,t))}function Qge(e,t){var n;n=0!=(e.Bb&uit),t?e.Bb|=uit:e.Bb&=-8193,0!=(4&e.Db)&&0==(1&e.Db)&&kle(e,new A8(e,1,15,n,t))}function Jge(e,t){var n;n=0!=(e.Bb&hit),t?e.Bb|=hit:e.Bb&=-2049,0!=(4&e.Db)&&0==(1&e.Db)&&kle(e,new A8(e,1,11,n,t))}function Zge(e){var t;e.g&&(EBe((t=e.c.kg()?e.f:e.a).a,e.o,!0),EBe(t.a,e.o,!1),whe(e.o,(AJe(),Qkt),(NCe(),ijt)))}function eme(e){var t;if(!e.a)throw uv(new wk("Cannot offset an unassigned cut."));t=e.c-e.b,e.b+=t,rZ(e,t),nZ(e,t)}function tme(e,t){var n;if(null==(n=oX(e.k,t)))throw uv(new Tk("Port did not exist in input."));return Xce(t,n),null}function nme(e){var t,n;for(n=dRe(Hie(e)).Kc();n.Ob();)if(Vqe(e,t=yF(n.Pb())))return u7((xC(),i$t),t);return null}function rme(e){var t,n;for(n=e.p.a.ec().Kc();n.Ob();)if((t=cV(n.Pb(),218)).f&&e.b[t.c]<-1e-10)return t;return null}function ime(e){var t,n;for(n=AX(new Kk,91),t=!0;e.Ob();)t||(n.a+=SZe),t=!1,XM(n,e.Pb());return(n.a+="]",n).a}function ome(e){var t,n,r;for(t=new Zy,r=new Kp(e.b);r.at?1:e==t?0==e?cme(1/e,1/t):0:isNaN(e)?isNaN(t)?0:1:-1}function lme(e){var t;return null==(t=e.a[e.c-1&e.a.length-1])?null:(e.c=e.c-1&e.a.length-1,cX(e.a,e.c,null),t)}function ume(e){var t,n,r;for(r=0,n=e.length,t=0;t=1?JLt:XLt:t}function yme(e){switch(cV(sOe(e,(AJe(),Yxt)),223).g){case 1:return new ro;case 3:return new co;default:return new no}}function vme(e){if(e.c)vme(e.c);else if(e.d)throw uv(new wk("Stream already terminated, can't be modified or used"))}function wme(e,t,n){var r;return r=e.a.get(t),e.a.set(t,void 0===n?null:n),void 0===r?(++e.c,++e.b.g):++e.d,r}function xme(e,t,n){var r,i;for(i=e.a.ec().Kc();i.Ob();)if(r=cV(i.Pb(),10),xue(n,cV(GU(t,r.p),16)))return r;return null}function kme(e,t,n){var r;return r=0,t&&(hD(e.a)?r+=t.f.a/2:r+=t.f.b/2),n&&(hD(e.a)?r+=n.f.a/2:r+=n.f.b/2),r}function Sme(e,t,n){var r;!(r=n)&&(r=RV(new hx,0)),r.Ug(F3e,2),Gxe(e.b,t,r.eh(1)),WGe(e,t,r.eh(1)),uQe(t,r.eh(1)),r.Vg()}function Ame(e,t,n){var r;return mA(),Toe(r=new el,t),boe(r,n),e&&tte((!e.a&&(e.a=new kL(nBt,e,5)),e.a),r),r}function _me(e){var t;return 0!=(64&e.Db)?vRe(e):((t=new hR(vRe(e))).a+=" (identifier: ",YM(t,e.k),t.a+=")",t.a)}function Tme(e,t){var n;n=0!=(e.Bb&Qtt),t?e.Bb|=Qtt:e.Bb&=-32769,0!=(4&e.Db)&&0==(1&e.Db)&&kle(e,new A8(e,1,18,n,t))}function Cme(e,t){var n;n=0!=(e.Bb&Qtt),t?e.Bb|=Qtt:e.Bb&=-32769,0!=(4&e.Db)&&0==(1&e.Db)&&kle(e,new A8(e,1,18,n,t))}function Eme(e,t){var n;n=0!=(e.Bb&YZe),t?e.Bb|=YZe:e.Bb&=-16385,0!=(4&e.Db)&&0==(1&e.Db)&&kle(e,new A8(e,1,16,n,t))}function Ome(e,t){var n;n=0!=(e.Bb&C1e),t?e.Bb|=C1e:e.Bb&=-65537,0!=(4&e.Db)&&0==(1&e.Db)&&kle(e,new A8(e,1,20,n,t))}function Pme(e){var t;return t=Oee(QHt,D0e,28,2,15,1),e-=C1e,t[0]=(e>>10)+E1e&L0e,t[1]=56320+(1023&e)&L0e,yve(t,0,t.length)}function Mme(e){var t;return(t=JOe(e))>34028234663852886e22?k1e:t<-34028234663852886e22?S1e:t}function Ime(e,t){var n;return $I(e)&&$I(t)&&b1e<(n=e+t)&&n"+Y4(t.c):"e_"+Hse(t),e.b&&e.c?Y4(e.b)+"->"+Y4(e.c):"e_"+Hse(e))}function Fme(e,t){return y$(t.b&&t.c?Y4(t.b)+"->"+Y4(t.c):"e_"+Hse(t),e.b&&e.c?Y4(e.b)+"->"+Y4(e.c):"e_"+Hse(e))}function Bme(e,t){return JD(),sae(S0e),r.Math.abs(e-t)<=S0e||e==t||isNaN(e)&&isNaN(t)?0:et?1:FI(isNaN(e),isNaN(t))}function $me(){$me=_,hRt=new OP(J2e,0),lRt=new OP("POLYLINE",1),cRt=new OP("ORTHOGONAL",2),uRt=new OP("SPLINES",3)}function zme(){zme=_,OPt=new aP("ASPECT_RATIO_DRIVEN",0),PPt=new aP("MAX_SCALE_DRIVEN",1),EPt=new aP("AREA_DRIVEN",2)}function Hme(e,t,n){try{Yhe(e,t,n)}catch(r){throw BN(r=_ue(r),606)?uv(new R8(r)):uv(r)}return t}function qme(e){var t,n;for(t=0,n=e.length;tt&&r.Ne(e[o-1],e[o])>0;--o)a=e[o],cX(e,o,e[o-1]),cX(e,o-1,a)}function Zme(e,t){var n,r,i,o,a;if(n=t.f,Mwe(e.c.d,n,t),null!=t.g)for(o=0,a=(i=t.g).length;ot){B3(n);break}}fK(n,t)}function tbe(e,t){var n,i;i=ck(bF(Pye(G3(t),(AJe(),gSt)))),S_e(t,n=r.Math.max(0,i/2-.5),1),wL(e,new RE(t,n))}function nbe(e,t,n){n.Ug("Straight Line Edge Routing",1),n.dh(t,f9e),LWe(e,cV(GLe(t,(TF(),GEt)),27)),n.dh(t,p9e)}function rbe(e,t){0==e.n.c.length&&wL(e.n,new o1(e.s,e.t,e.i)),wL(e.b,t),Gke(cV(GU(e.n,e.n.c.length-1),209),t),eUe(e,t)}function ibe(e){var t;this.a=new ez(t=cV(e.e&&e.e(),9),cV(kB(t,t.length),9),0),this.b=Oee(gat,_Ze,1,this.a.a.length,5,1)}function obe(e){return Array.isArray(e)&&e.Tm===A?OA(Sde(e))+"@"+(Hse(e)>>>0).toString(16):e.toString()}function abe(e,t){return e.h==d1e&&0==e.m&&0==e.l?(t&&(Xat=bN(0,0,0)),II((tre(),Zat))):(t&&(Xat=bN(e.l,e.m,e.h)),bN(0,0,0))}function sbe(e,t){switch(t.g){case 2:return e.b;case 1:return e.c;case 4:return e.d;case 3:return e.a;default:return!1}}function cbe(e,t){switch(t.g){case 2:return e.b;case 1:return e.c;case 4:return e.d;case 3:return e.a;default:return!1}}function lbe(e,t,n,r){switch(t){case 3:return e.f;case 4:return e.g;case 5:return e.i;case 6:return e.j}return Wge(e,t,n,r)}function ube(e,t){if(t==e.d)return e.e;if(t==e.e)return e.d;throw uv(new vk("Node "+t+" not part of edge "+e))}function hbe(e,t){var n;if(BN(n=_Fe(e.Dh(),t),102))return cV(n,19);throw uv(new vk(Utt+t+"' is not a valid reference"))}function fbe(e,t,n,r){if(t<0)fje(e,n,r);else{if(!n.rk())throw uv(new vk(Utt+n.xe()+Wtt));cV(n,69).wk().Ck(e,e.hi(),t,r)}}function dbe(e){var t;if(e.b){if(dbe(e.b),e.b.d!=e.c)throw uv(new Bv)}else e.d.dc()&&(t=cV(e.f.c.xc(e.e),16))&&(e.d=t)}function pbe(e){var t,n;for(YF(),t=e.o.b,n=cV(cV(J8(e.r,(FXe(),Fjt)),21),87).Kc();n.Ob();)cV(n.Pb(),117).e.b+=t}function gbe(e){var t,n,r;for(this.a=new WI,r=new Kp(e);r.a=i)return t.c+n;return t.c+t.b.gc()}function bbe(e,t){var n,r,i,o;for(_F(),i=t,Dte(r=Qte(e),0,r.length,i),n=0;n0&&(r+=i,++n);return n>1&&(r+=e.d*(n-1)),r}function kbe(e){var t,n,r;return r=mEe(e),!b_(e.c)&&(eie(r,"knownLayouters",n=new Od),t=new Ay(n),G7(e.c,t)),r}function Sbe(e){var t,n,r;for((r=new Gk).a+="[",t=0,n=e.gc();t0&&(l4(t-1,e.length),58==e.charCodeAt(t-1))&&!ybe(e,e$t,t$t)}function Ebe(e,t){var n;return RM(e)===RM(t)||!!BN(t,92)&&(n=cV(t,92),e.e==n.e&&e.d==n.d&&g7(e,n.a))}function Obe(e){switch(FXe(),e.g){case 4:return xjt;case 1:return wjt;case 3:return Fjt;case 2:return $jt;default:return Bjt}}function Pbe(e){var t,n;if(e.b)return e.b;for(n=Dct?null:e.d;n;){if(t=Dct?null:n.b)return t;n=Dct?null:n.d}return bT(),_ct}function Mbe(e){var t,n;for(n=ck(bF(e.a.of((WJe(),ILt)))),t=new Kp(e.a.Sf());t.a>5),15,1))[n]=1<3;)i*=10,--o;e=(e+(i>>1))/i|0}return r.i=e,!0}function nye(e,t){var n,r,i;if(null==e.i&&nUe(e),n=e.i,-1!=(r=t.Lj()))for(i=n.length;r=0;--r)for(t=n[r],i=0;i>1,this.k=t-1>>1}function uye(e){Tte(),cV(e.of((WJe(),UNt)),181).Hc((aqe(),sFt))&&(cV(e.of(dLt),181).Fc((nDe(),bjt)),cV(e.of(UNt),181).Mc(sFt))}function hye(e){var t,n;t=e.d==(vMe(),zgt),n=gCe(e),whe(e.a,(AJe(),dxt),t&&!n||!t&&n?(eke(),IDt):(eke(),MDt))}function fye(){fye=_,ZT(),AJe(),KSt=_St,XSt=e9(que(oS(fDt,1),y8e,149,0,[pSt,gSt,bSt,ySt,xSt,kSt,SSt,ASt,CSt,OSt,mSt,vSt,TSt]))}function dye(e,t){var n;return(n=cV(f7(e,hte(new Y,new G,new ne,que(oS(jct,1),b0e,108,0,[(xde(),Oct)]))),15)).Qc(DU(n.gc()))}function pye(e,t){var n,r;if((r=new sg(e.a.ad(t,!0))).a.gc()<=1)throw uv(new jv);return(n=r.a.ec().Kc()).Pb(),cV(n.Pb(),40)}function gye(e,t,n){var r;return r=ck(e.p[t.i.p])+ck(e.d[t.i.p])+t.n.b+t.a.b,ck(e.p[n.i.p])+ck(e.d[n.i.p])+n.n.b+n.a.b-r}function mye(e,t){return e.i>0&&(t.lengthe.i&&cX(t,e.i,null),t}function bye(e){var t;return 0!=(64&e.Db)?Kpe(e):((t=new hR(Kpe(e))).a+=" (instanceClassName: ",YM(t,e.D),t.a+=")",t.a)}function yye(e){var t,n,r,i;for(i=0,n=0,r=e.length;n0&&(e._j(),-1!=SRe(e,((n=null==t?0:Hse(t))&vZe)%e.d.length,n,t))}function kye(e,t){var n,i;e.a=Ime(e.a,1),e.c=r.Math.min(e.c,t),e.b=r.Math.max(e.b,t),e.d+=t,n=t-e.f,i=e.e+n,e.f=i-e.e-n,e.e=i}function Sye(e,t){switch(t){case 3:return void voe(e,0);case 4:return void woe(e,0);case 5:return void xoe(e,0);case 6:return void koe(e,0)}Mpe(e,t)}function Aye(e,t){switch(t.g){case 1:return Jq(e.j,(Ice(),xdt));case 2:return Jq(e.j,(Ice(),Sdt));default:return uZ(),uZ(),Gst}}function _ye(e){var t;switch(ZK(),(t=e.Pc()).length){case 0:return Aat;case 1:return new qU(KK(t[0]));default:return new t0(qme(t))}}function Tye(e,t){e.Xj();try{e.d.bd(e.e++,t),e.f=e.d.j,e.g=-1}catch(n){throw BN(n=_ue(n),77)?uv(new Bv):uv(n)}}function Cye(){Cye=_,fzt=new Ol,ozt=new Pl,azt=new Ml,szt=new Il,czt=new Dl,lzt=new Nl,uzt=new Ll,hzt=new Rl,dzt=new jl}function Eye(e,t){var n,r;return pI(),r=null,t==(n=dB((Ux(),Ux(),Hat)))&&(r=cV(q0(zat,e),624)),r||(r=new QK(e),t==n&&i2(zat,e,r)),r}function Oye(e){return Jxe(),(e.q?e.q:(uZ(),uZ(),Yst))._b((AJe(),Ikt))?cV(sOe(e,Ikt),203):cV(sOe(HX(e),Dkt),203)}function Pye(e,t){var n,r;return r=null,vj(e,(AJe(),wSt))&&(n=cV(sOe(e,wSt),96)).pf(t)&&(r=n.of(t)),null==r&&(r=sOe(HX(e),t)),r}function Mye(e,t){var n,r,i;return!!BN(t,44)&&(r=(n=cV(t,44)).ld(),RX(i=Wpe(e.Rc(),r),n.md())&&(null!=i||e.Rc()._b(r)))}function Iye(e,t){var n,r;return e.f>0&&(e._j(),n=ZDe(e,((r=null==t?0:Hse(t))&vZe)%e.d.length,r,t))?n.md():null}function Dye(e,t,n){var r,i,o;return e.Pj()?(r=e.i,o=e.Qj(),nge(e,r,t),i=e.Ij(3,null,t,r,o),n?n.nj(i):n=i):nge(e,e.i,t),n}function Nye(e,t,n){var r,i;return r=new Fne(e.e,4,10,BN(i=t.c,90)?cV(i,29):(JJe(),R$t),null,Hxe(e,t),!1),n?n.nj(r):n=r,n}function Lye(e,t,n){var r,i;return r=new Fne(e.e,3,10,null,BN(i=t.c,90)?cV(i,29):(JJe(),R$t),Hxe(e,t),!1),n?n.nj(r):n=r,n}function Rye(e){var t;return YF(),t=new nD(cV(e.e.of((WJe(),qNt)),8)),e.B.Hc((aqe(),nFt))&&(t.a<=0&&(t.a=20),t.b<=0&&(t.b=20)),t}function jye(e){var t,n;return oHe(),n=bG(e),0!=(t=bG(LG(e,32)))?new R4(n,t):n>10||n<0?new Z6(1,n):jst[n]}function Fye(e,t){var n;return $I(e)&&$I(t)&&b1e<(n=e%t)&&n