diff --git a/.github/ISSUE_TEMPLATE/bug_report.yaml b/.github/ISSUE_TEMPLATE/bug_report.yaml new file mode 100644 index 000000000..f44401b2f --- /dev/null +++ b/.github/ISSUE_TEMPLATE/bug_report.yaml @@ -0,0 +1,55 @@ +name: Report a bug +description: Let us know so we can fix it! +labels: ["needs triage", "bug"] +body: + - type: markdown + attributes: + value: | + Thanks for helping us improve Cesium for Unreal! + + First, check if the issue already exists in the [issues](https://github.com/CesiumGS/cesium-unreal/issues) page. If it does, please leave a **comment** on the existing issue instead. + + Otherwise, if you can't find a similar issue, describe what is happening using the text fields below. + - type: textarea + id: what-happened + attributes: + label: What happened? + description: Also tell us, what did you expect to happen? + validations: + required: true + - type: textarea + id: environment + attributes: + label: Environment + description: What environment are you experiencing this issue in? + value: | + Cesium for Unreal version: + Unreal Engine Version: + Operating System: + validations: + required: true + - type: textarea + id: repro + attributes: + label: Reproduction steps + description: "How do you trigger this bug? Please walk us through it step by step, starting from either a blank project or the Cesium for Unreal Samples. (We can triage bugs much faster when we have these steps.)" + value: | + 1. + 2. + 3. + ... + validations: + required: false + - type: textarea + id: evidence + attributes: + label: Supporting evidence + description: Providing screenshots, videos, or GIFs of the issue helps us a lot, especially for visual bugs. If there were any error messages or logs in the console, please include those too. + validations: + required: false + - type: markdown + attributes: + value: | + If you can also contribute a fix, we'd absolutely appreciate it! Fixing a bug in Cesium for Unreal often means fixing a bug for numerous applications and end users. Check out the contributor guide to get started: [CONTRIBUTING.md](https://github.com/CesiumGS/cesium-unreal/tree/main/CONTRIBUTING.md) + + Let us know you're working on it, and we'd be happy to provide advice and feedback. diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml new file mode 100644 index 000000000..3bc02c5ad --- /dev/null +++ b/.github/ISSUE_TEMPLATE/config.yml @@ -0,0 +1,5 @@ +blank_issues_enabled: true +contact_links: +- name: Ask a question + url: https://community.cesium.com/c/cesium-for-unreal/10 + about: Please use the community forum for general questions. The Cesium team and community actively monitor it and love to see what people are working on! We reserve GitHub for confirmed bug reports and feature requests. diff --git a/.github/ISSUE_TEMPLATE/feature_request.yaml b/.github/ISSUE_TEMPLATE/feature_request.yaml new file mode 100644 index 000000000..4baceef2d --- /dev/null +++ b/.github/ISSUE_TEMPLATE/feature_request.yaml @@ -0,0 +1,20 @@ +name: Request a feature +description: New ideas & improvements to Cesium for Unreal are always welcome. +labels: ["needs triage", "enhancement"] +body: + - type: markdown + attributes: + value: | + Thanks for helping us improve Cesium for Unreal! + + When suggesting an idea, give examples of the intended use case. Features that benefit the wider community are more likely to be prioritized. + - type: textarea + id: new-feature + attributes: + label: Feature + validations: + required: true + - type: markdown + attributes: + value: | + The best way to get your ideas into Cesium for Unreal is to help us! We love contributions and are always happy to be provide feedback and advice. Check out the contributor guide to get started: [CONTRIBUTING.md](https://github.com/CesiumGS/cesium-unreal/tree/main/CONTRIBUTING.md) \ No newline at end of file diff --git a/.github/actions/install-unreal-macos/action.yml b/.github/actions/install-unreal-macos/action.yml index 11e21a452..d4ecd33c5 100644 --- a/.github/actions/install-unreal-macos/action.yml +++ b/.github/actions/install-unreal-macos/action.yml @@ -28,7 +28,7 @@ runs: shell: bash run: | df -h - unzip -q ue.zip "${{ inputs.unreal-program-name }}/Engine/*" -d $HOME -x "${{ inputs.unreal-program-name }}/Engine/Binaries/Mac/LiveLinkHub-Mac-Shipping.app/*" "${{ inputs.unreal-program-name }}/Engine/Binaries/Mac/Android/*" "${{ inputs.unreal-program-name }}/Engine/Binaries/Mac/UnrealGame.app/*" "${{ inputs.unreal-program-name }}/Engine/Binaries/Mac/UnrealGame-Mac-Shipping.app/*" "${{ inputs.unreal-program-name }}/Engine/Binaries/Mac/UnrealGame-Mac-DebugGame.app/*" "${{ inputs.unreal-program-name }}/Engine/Binaries/Mac/UnrealGame-Mac-DebugGame" "${{ inputs.unreal-program-name }}/Engine/Binaries/Mac/UnrealGame" "${{ inputs.unreal-program-name }}/Engine/Binaries/Mac/UnrealGame-Mac-Shipping" "${{ inputs.unreal-program-name }}/Engine/Binaries/Mac/*.dSYM" + unzip -q ue.zip "${{ inputs.unreal-program-name }}/Engine/*" -d $HOME -x $(cat "$GITHUB_WORKSPACE/.github/actions/install-unreal-macos/exclude-from-unzip.lst") df -h rm ue.zip df -h diff --git a/.github/actions/install-unreal-macos/exclude-from-unzip.lst b/.github/actions/install-unreal-macos/exclude-from-unzip.lst new file mode 100644 index 000000000..c0660d002 --- /dev/null +++ b/.github/actions/install-unreal-macos/exclude-from-unzip.lst @@ -0,0 +1,36 @@ +UE_5.3/Engine/Binaries/Mac/LiveLinkHub-Mac-Shipping.app/* +UE_5.3/Engine/Binaries/Mac/UnrealGame-Mac-DebugGame.app/* +UE_5.3/Engine/Binaries/Mac/UnrealGame.app/* +UE_5.3/Engine/Binaries/Mac/UnrealGame-Mac-Shipping.app/* +UE_5.3/Engine/Binaries/Mac/Android/* +UE_5.3/Engine/Binaries/Mac/UnrealGame-Mac-DebugGame +UE_5.3/Engine/Binaries/Mac/UnrealGame +UE_5.3/Engine/Binaries/Mac/UnrealGame-Mac-Shipping +UE_5.3/Engine/Binaries/Mac/*.dSYM +UE_5.3/Engine/Plugins/Experimental/NNERuntimeIREE/* +UE_5.3/Engine/Plugins/Experimental/Avalanche/* +UE_5.4/Engine/Binaries/Mac/LiveLinkHub-Mac-Shipping.app/* +UE_5.4/Engine/Binaries/Mac/UnrealGame-Mac-DebugGame.app/* +UE_5.4/Engine/Binaries/Mac/UnrealGame.app/* +UE_5.4/Engine/Binaries/Mac/UnrealGame-Mac-Shipping.app/* +UE_5.4/Engine/Binaries/Mac/Android/* +UE_5.4/Engine/Binaries/Mac/ZenDashboard.app/* +UE_5.4/Engine/Binaries/Mac/UnrealEditorServices.app/* +UE_5.4/Engine/Binaries/Mac/UnrealEditor-Mac-DebugGame.app/* +UE_5.4/Engine/Binaries/Mac/UnrealGame-Mac-DebugGame +UE_5.4/Engine/Binaries/Mac/UnrealGame +UE_5.4/Engine/Binaries/Mac/UnrealGame-Mac-Shipping +UE_5.4/Engine/Binaries/ThirdParty/DotNet/6.0.302/mac-x64/* +UE_5.4/Engine/Binaries/ThirdParty/CEF3/* +UE_5.4/Engine/Binaries/DotNET/AutomationTool/AutomationScripts/Platforms/Windows/* +UE_5.4/Engine/Intermediate/ScriptModules/Win.Automation.json +UE_5.4/Engine/Binaries/DotNET/AutomationTool/AutomationScripts/Platforms/Android/* +UE_5.4/Engine/Intermediate/ScriptModules/Android.Automation.json +UE_5.4/Engine/Binaries/DotNET/AutomationTool/AutomationScripts/Platforms/Linux/* +UE_5.4/Engine/Intermediate/ScriptModules/Linux.Automation.json +UE_5.4/Engine/Binaries/DotNET/AutomationTool/AutomationScripts/Platforms/TVOS/* +UE_5.4/Engine/Intermediate/ScriptModules/TVOS.Automation.json +UE_5.4/Engine/Binaries/DotNET/AutomationTool/AutomationScripts/Platforms/SteamDeck/* +UE_5.4/Engine/Intermediate/ScriptModules/SteamDeck.Automation.json +UE_5.4/Engine/Binaries/DotNET/Android/* +*.dSYM diff --git a/.github/actions/vcpkg-cache/action.yml b/.github/actions/vcpkg-cache/action.yml new file mode 100644 index 000000000..e700c4551 --- /dev/null +++ b/.github/actions/vcpkg-cache/action.yml @@ -0,0 +1,15 @@ +name: Configure vcpkg caching +inputs: + id: + required: true + type: string +runs: + using: composite + steps: + - name: Cache vcpkg artifacts + uses: actions/cache@v4 + with: + path: ${{ runner.os == 'Windows' && '/.ezvcpkg' || '~/.ezvcpkg' }} + key: vcpkg-${{ inputs.id }}-${{ hashFiles('extern/vcpkg-overlays/**/vcpkg.json', 'extern/vcpkg-overlays/triplets/**/*', 'extern/*toolchain.cmake') }}-${{ hashFiles('extern/cesium-native/CMakeLists.txt', 'extern/CMakeLists.txt') }} + restore-keys: | + vcpkg-${{ inputs.id }}-${{ hashFiles('extern/vcpkg-overlays/**/vcpkg.json', 'extern/vcpkg-overlays/triplets/**/*', 'extern/*toolchain.cmake') }}- diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index b44306f74..8d12b2c60 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -1,5 +1,5 @@ name: Cesium for Unreal -on: [push] +on: [push, workflow_dispatch] jobs: QuickChecks: name: "Quick Checks" @@ -11,139 +11,31 @@ jobs: run: | npm install npm run format -- --dry-run -Werror - Windows52: - uses: ./.github/workflows/buildWindows.yml - secrets: inherit - with: - runner-label: windows-2022 - unreal-engine-version: "5.2.0" - unreal-engine-zip: "s3://cesium-unreal-engine/5.2.1/UE_5.2.1.zip" - unreal-program-name: "UE_5.2" - upload-package-base-name: "CesiumForUnreal-52-windows" - # These are specified in the Unreal Engine release notes under "IDE Version the Build farm compiles against" - # and using them ensures we're compiling our plugin in the exact same way that Unreal Engine itself is compiled. - cmake-generator: "Visual Studio 17 2022" - cmake-toolchain: "version=14.34" - cmake-platform: "x64,version=10.0.18362.0" - visual-studio-version: "2022" - visual-studio-components: "Microsoft.VisualStudio.Component.VC.14.34.17.4.x86.x64,Microsoft.VisualStudio.Component.Windows10SDK.18362" - TestWindows52: - needs: [Windows52] - uses: ./.github/workflows/testWindows.yml - secrets: inherit - with: - runner-label: windows-2022 - unreal-engine-zip: "s3://cesium-unreal-engine/5.2.1/UE_5.2.1.zip" - unreal-program-name: "UE_5.2" - test-package-base-name: "CesiumForUnreal-52-windows" - Android52: - uses: ./.github/workflows/buildAndroid.yml - secrets: inherit - with: - runner-label: windows-2022 - unreal-engine-version: "5.2.0" - unreal-engine-zip: "s3://cesium-unreal-engine/5.2.1/UE_5.2.1.zip" - unreal-program-name: "UE_5.2" - upload-package-base-name: "CesiumForUnreal-52-android" - android-ndk-version: "r25b" - Linux52: - uses: ./.github/workflows/buildLinux.yml - secrets: inherit - with: - runner-label: ubuntu-22.04 - unreal-engine-version: "5.2.0" - unreal-engine-zip: "s3://cesium-unreal-engine/Linux_Unreal_Engine_5.2.0.zip" - unreal-program-name: "UE_5.2" - upload-package-base-name: "CesiumForUnreal-52-linux" - clang-version: "v21_clang-15.0.1-centos7" - macOS52: - uses: ./.github/workflows/buildMac.yml - secrets: inherit - with: - runner-label: macos-12 - unreal-engine-version: "5.2.0" - unreal-engine-zip: "s3://cesium-unreal-engine/UE_52_macOS.zip" - unreal-program-name: "UE_5.2" - upload-package-base-name: "CesiumForUnreal-52-macos" - xcode-version: "14.2" - iOS52: - uses: ./.github/workflows/buildiOS.yml - secrets: inherit - with: - runner-label: macos-12 - unreal-engine-version: "5.2.0" - unreal-engine-zip: "s3://cesium-unreal-engine/UE_52_macOS.zip" - unreal-program-name: "UE_5.2" - upload-package-base-name: "CesiumForUnreal-52-ios" - xcode-version: "14.2" - Combine52: + Documentation: runs-on: ubuntu-latest - needs: [Windows52, Linux52, Android52, MacOS52, iOS52] steps: + - name: Install Doxygen + run: | + cd ~ + wget https://github.com/doxygen/doxygen/releases/download/Release_1_12_0/doxygen-1.12.0.linux.bin.tar.gz + tar xzf doxygen-1.12.0.linux.bin.tar.gz + export PATH=$PWD/doxygen-1.12.0/bin:$PATH + echo "PATH=$PATH" >> "$GITHUB_ENV" + doxygen --version - name: Check out repository code uses: actions/checkout@v4 - - name: Set environment variables - run: | - export CESIUM_UNREAL_VERSION=$GITHUB_REF_NAME - export BUILD_CESIUM_UNREAL_PACKAGE_NAME="CesiumForUnreal-52-${CESIUM_UNREAL_VERSION}" - export BUILD_CESIUM_UNREAL_SOURCE_ONLY_PACKAGE_NAME="CesiumForUnreal-52-SourceOnly-${CESIUM_UNREAL_VERSION}" - # Make these available to subsequent steps - echo "CESIUM_UNREAL_VERSION=$CESIUM_UNREAL_VERSION" >> $GITHUB_ENV - echo "BUILD_CESIUM_UNREAL_PACKAGE_NAME=$BUILD_CESIUM_UNREAL_PACKAGE_NAME" >> $GITHUB_ENV - echo "BUILD_CESIUM_UNREAL_SOURCE_ONLY_PACKAGE_NAME=$BUILD_CESIUM_UNREAL_SOURCE_ONLY_PACKAGE_NAME" >> $GITHUB_ENV - - name: Download iOS build - uses: actions/download-artifact@v4 - with: - name: CesiumForUnreal-52-ios-${{ env.CESIUM_UNREAL_VERSION}} - path: combine - - name: Download macOS build - uses: actions/download-artifact@v4 with: - name: CesiumForUnreal-52-macos-${{ env.CESIUM_UNREAL_VERSION}} - path: combine - - name: Download Android build - uses: actions/download-artifact@v4 - with: - name: CesiumForUnreal-52-android-${{ env.CESIUM_UNREAL_VERSION}} - path: combine - - name: Download Linux build - uses: actions/download-artifact@v4 - with: - name: CesiumForUnreal-52-linux-${{ env.CESIUM_UNREAL_VERSION}} - path: combine - - name: Download Windows build - uses: actions/download-artifact@v4 - with: - name: CesiumForUnreal-52-windows-${{ env.CESIUM_UNREAL_VERSION}} - path: combine - - name: Publish combined package artifact - if: ${{ success() }} - uses: actions/upload-artifact@v4 - with: - name: ${{ env.BUILD_CESIUM_UNREAL_PACKAGE_NAME}} - path: combine - - name: Publish combined package artifact for the Unreal Marketplace + submodules: recursive + - name: Generate Documentation + run: | + npm install + npm run doxygen + - name: Publish Documentation Artifact if: ${{ success() }} uses: actions/upload-artifact@v4 with: - name: ${{ env.BUILD_CESIUM_UNREAL_SOURCE_ONLY_PACKAGE_NAME}} - path: | - combine - # These are built by Epic, and including them seems to confuse their process. - !combine/CesiumForUnreal/Binaries/**/* - !combine/CesiumForUnreal/Intermediate/**/* - TestPackage52: - needs: [Combine52] - uses: ./.github/workflows/testPackageOnWindows.yml - secrets: inherit - with: - runner-label: windows-2022 - unreal-engine-zip: "s3://cesium-unreal-engine/5.2.1/UE_5.2.1.zip" - unreal-program-name: "UE_5.2" - unreal-engine-association: "5.2" - test-package-base-name: "CesiumForUnreal-52" - visual-studio-version: "2022" - visual-studio-components: "Microsoft.VisualStudio.Component.VC.14.34.17.4.x86.x64,Microsoft.VisualStudio.Component.Windows10SDK.18362" + name: ReferenceDocumentation + path: Documentation/Reference Windows53: uses: ./.github/workflows/buildWindows.yml secrets: inherit @@ -189,29 +81,19 @@ jobs: unreal-program-name: "UE_5.3" upload-package-base-name: "CesiumForUnreal-53-linux" clang-version: "v22_clang-16.0.6-centos7" - macOS53: - uses: ./.github/workflows/buildMac.yml - secrets: inherit - with: - runner-label: macos-12 - unreal-engine-version: "5.3.0" - unreal-engine-zip: "s3://cesium-unreal-engine/5.3.0/UE_53_macOS.zip" - unreal-program-name: "UE_5.3" - upload-package-base-name: "CesiumForUnreal-53-macos" - xcode-version: "14.2" - iOS53: - uses: ./.github/workflows/buildiOS.yml + Apple53: + uses: ./.github/workflows/buildApple.yml secrets: inherit with: - runner-label: macos-12 + runner-label: macos-14 unreal-engine-version: "5.3.0" unreal-engine-zip: "s3://cesium-unreal-engine/5.3.0/UE_53_macOS.zip" unreal-program-name: "UE_5.3" - upload-package-base-name: "CesiumForUnreal-53-ios" - xcode-version: "14.2" + upload-package-base-name: "CesiumForUnreal-53-apple" + xcode-version: "15.4" Combine53: runs-on: ubuntu-latest - needs: [Windows53, Android53, Linux53, MacOS53, iOS53] + needs: [Windows53, Android53, Linux53, Apple53] steps: - name: Check out repository code uses: actions/checkout@v4 @@ -224,15 +106,10 @@ jobs: echo "CESIUM_UNREAL_VERSION=$CESIUM_UNREAL_VERSION" >> $GITHUB_ENV echo "BUILD_CESIUM_UNREAL_PACKAGE_NAME=$BUILD_CESIUM_UNREAL_PACKAGE_NAME" >> $GITHUB_ENV echo "BUILD_CESIUM_UNREAL_SOURCE_ONLY_PACKAGE_NAME=$BUILD_CESIUM_UNREAL_SOURCE_ONLY_PACKAGE_NAME" >> $GITHUB_ENV - - name: Download iOS build - uses: actions/download-artifact@v4 - with: - name: CesiumForUnreal-53-ios-${{ env.CESIUM_UNREAL_VERSION}} - path: combine - - name: Download macOS build + - name: Download Apple build uses: actions/download-artifact@v4 with: - name: CesiumForUnreal-53-macos-${{ env.CESIUM_UNREAL_VERSION}} + name: CesiumForUnreal-53-apple-${{ env.CESIUM_UNREAL_VERSION}} path: combine - name: Download Android build uses: actions/download-artifact@v4 @@ -322,29 +199,19 @@ jobs: unreal-program-name: "UE_5.4" upload-package-base-name: "CesiumForUnreal-54-linux" clang-version: "v22_clang-16.0.6-centos7" - macOS54: - uses: ./.github/workflows/buildMac.yml - secrets: inherit - with: - runner-label: macos-13 - unreal-engine-version: "5.4.0" - unreal-engine-zip: "s3://cesium-unreal-engine/5.4.0/UE_54_macOS.zip" - unreal-program-name: "UE_5.4" - upload-package-base-name: "CesiumForUnreal-54-macos" - xcode-version: "14.2" - iOS54: - uses: ./.github/workflows/buildiOS.yml + Apple54: + uses: ./.github/workflows/buildApple.yml secrets: inherit with: - runner-label: macos-13 + runner-label: macos-14 unreal-engine-version: "5.4.0" unreal-engine-zip: "s3://cesium-unreal-engine/5.4.0/UE_54_macOS.zip" unreal-program-name: "UE_5.4" - upload-package-base-name: "CesiumForUnreal-54-ios" - xcode-version: "14.2" + upload-package-base-name: "CesiumForUnreal-54-apple" + xcode-version: "15.4" Combine54: runs-on: ubuntu-latest - needs: [Windows54, Android54, Linux54, MacOS54, iOS54] + needs: [Windows54, Android54, Linux54, Apple54] steps: - name: Check out repository code uses: actions/checkout@v4 @@ -357,15 +224,10 @@ jobs: echo "CESIUM_UNREAL_VERSION=$CESIUM_UNREAL_VERSION" >> $GITHUB_ENV echo "BUILD_CESIUM_UNREAL_PACKAGE_NAME=$BUILD_CESIUM_UNREAL_PACKAGE_NAME" >> $GITHUB_ENV echo "BUILD_CESIUM_UNREAL_SOURCE_ONLY_PACKAGE_NAME=$BUILD_CESIUM_UNREAL_SOURCE_ONLY_PACKAGE_NAME" >> $GITHUB_ENV - - name: Download iOS build - uses: actions/download-artifact@v4 - with: - name: CesiumForUnreal-54-ios-${{ env.CESIUM_UNREAL_VERSION}} - path: combine - - name: Download macOS build + - name: Download Apple build uses: actions/download-artifact@v4 with: - name: CesiumForUnreal-54-macos-${{ env.CESIUM_UNREAL_VERSION}} + name: CesiumForUnreal-54-apple-${{ env.CESIUM_UNREAL_VERSION}} path: combine - name: Download Android build uses: actions/download-artifact@v4 @@ -410,3 +272,121 @@ jobs: test-package-base-name: "CesiumForUnreal-54" visual-studio-version: "2022" visual-studio-components: "Microsoft.VisualStudio.Component.VC.14.34.17.4.x86.x64,Microsoft.VisualStudio.Component.Windows10SDK.18362" + Windows55: + uses: ./.github/workflows/buildWindows.yml + secrets: inherit + with: + runner-label: "windows-2022" + unreal-engine-version: "5.5.0" + unreal-engine-zip: "s3://cesium-unreal-engine/5.5.0/UE_5.5.zip" + unreal-program-name: "UE_5.5" + upload-package-base-name: "CesiumForUnreal-55-windows" + # These are specified in the Unreal Engine release notes under "IDE Version the Build farm compiles against" + # and using them ensures we're compiling our plugin in the exact same way that Unreal Engine itself is compiled. + cmake-generator: "Visual Studio 17 2022" + cmake-toolchain: "version=14.38" + cmake-platform: "x64,version=10.0.22621.0" + visual-studio-version: "2022" + visual-studio-components: "Microsoft.VisualStudio.Component.VC.14.38.17.8.x86.x64,Microsoft.VisualStudio.Component.Windows11SDK.22621" + TestWindows55: + needs: [Windows55] + uses: ./.github/workflows/testWindows.yml + secrets: inherit + with: + runner-label: windows-2022 + unreal-engine-zip: "s3://cesium-unreal-engine/5.5.0/UE_5.5.zip" + unreal-program-name: "UE_5.5" + test-package-base-name: "CesiumForUnreal-55-windows" + Android55: + uses: ./.github/workflows/buildAndroid.yml + secrets: inherit + with: + runner-label: windows-2022 + unreal-engine-version: "5.5.0" + unreal-engine-zip: "s3://cesium-unreal-engine/5.5.0/UE_5.5.zip" + unreal-program-name: "UE_5.5" + upload-package-base-name: "CesiumForUnreal-55-android" + android-ndk-version: "r25b" + Linux55: + uses: ./.github/workflows/buildLinux.yml + secrets: inherit + with: + runner-label: ubuntu-22.04 + unreal-engine-version: "5.5.0" + unreal-engine-zip: "s3://cesium-unreal-engine/5.5.0/Linux_Unreal_Engine_5.5.0.zip" + unreal-program-name: "UE_5.5" + upload-package-base-name: "CesiumForUnreal-55-linux" + clang-version: "v23_clang-18.1.0-rockylinux8" + Apple55: + uses: ./.github/workflows/buildApple.yml + secrets: inherit + with: + runner-label: macos-14 + unreal-engine-version: "5.5.0" + unreal-engine-zip: "s3://cesium-unreal-engine/5.5.0/UE_55_macOS.zip" + unreal-program-name: "UE_5.5" + upload-package-base-name: "CesiumForUnreal-55-apple" + xcode-version: "15.4" + Combine55: + runs-on: ubuntu-latest + needs: [Windows55, Android55, Linux55, Apple55] + steps: + - name: Check out repository code + uses: actions/checkout@v4 + - name: Set environment variables + run: | + export CESIUM_UNREAL_VERSION=$GITHUB_REF_NAME + export BUILD_CESIUM_UNREAL_PACKAGE_NAME="CesiumForUnreal-55-${CESIUM_UNREAL_VERSION}" + export BUILD_CESIUM_UNREAL_SOURCE_ONLY_PACKAGE_NAME="CesiumForUnreal-55-SourceOnly-${CESIUM_UNREAL_VERSION}" + # Make these available to subsequent steps + echo "CESIUM_UNREAL_VERSION=$CESIUM_UNREAL_VERSION" >> $GITHUB_ENV + echo "BUILD_CESIUM_UNREAL_PACKAGE_NAME=$BUILD_CESIUM_UNREAL_PACKAGE_NAME" >> $GITHUB_ENV + echo "BUILD_CESIUM_UNREAL_SOURCE_ONLY_PACKAGE_NAME=$BUILD_CESIUM_UNREAL_SOURCE_ONLY_PACKAGE_NAME" >> $GITHUB_ENV + - name: Download Apple build + uses: actions/download-artifact@v4 + with: + name: CesiumForUnreal-55-apple-${{ env.CESIUM_UNREAL_VERSION}} + path: combine + - name: Download Android build + uses: actions/download-artifact@v4 + with: + name: CesiumForUnreal-55-android-${{ env.CESIUM_UNREAL_VERSION}} + path: combine + - name: Download Linux build + uses: actions/download-artifact@v4 + with: + name: CesiumForUnreal-55-linux-${{ env.CESIUM_UNREAL_VERSION}} + path: combine + - name: Download Windows build + uses: actions/download-artifact@v4 + with: + name: CesiumForUnreal-55-windows-${{ env.CESIUM_UNREAL_VERSION}} + path: combine + - name: Publish combined package artifact + if: ${{ success() }} + uses: actions/upload-artifact@v4 + with: + name: ${{ env.BUILD_CESIUM_UNREAL_PACKAGE_NAME}} + path: combine + - name: Publish combined package artifact for the Unreal Marketplace + if: ${{ success() }} + uses: actions/upload-artifact@v4 + with: + name: ${{ env.BUILD_CESIUM_UNREAL_SOURCE_ONLY_PACKAGE_NAME}} + path: | + combine + # These are built by Epic, and including them seems to confuse their process. + !combine/CesiumForUnreal/Binaries/**/* + !combine/CesiumForUnreal/Intermediate/**/* + TestPackage55: + needs: [Combine55] + uses: ./.github/workflows/testPackageOnWindows.yml + secrets: inherit + with: + runner-label: windows-2022 + unreal-engine-zip: "s3://cesium-unreal-engine/5.5.0/UE_5.5.zip" + unreal-program-name: "UE_5.5" + unreal-engine-association: "5.5" + test-package-base-name: "CesiumForUnreal-55" + visual-studio-version: "2022" + visual-studio-components: "Microsoft.VisualStudio.Component.VC.14.38.17.8.x86.x64,Microsoft.VisualStudio.Component.Windows11SDK.22621" diff --git a/.github/workflows/buildAndroid.yml b/.github/workflows/buildAndroid.yml index 01f800abf..bc63ba42d 100644 --- a/.github/workflows/buildAndroid.yml +++ b/.github/workflows/buildAndroid.yml @@ -43,6 +43,10 @@ jobs: uses: actions/checkout@v4 with: submodules: recursive + - name: Configure vcpkg caching + uses: ./.github/actions/vcpkg-cache + with: + id: ${{ inputs.upload-package-base-name }} - name: Set environment variables run: | $env:CESIUM_UNREAL_VERSION=$env:GITHUB_REF_NAME @@ -52,25 +56,28 @@ jobs: echo "BUILD_CESIUM_UNREAL_PACKAGE_NAME=${ENV:BUILD_CESIUM_UNREAL_PACKAGE_NAME}" >> $ENV:GITHUB_ENV - name: Install nasm uses: ilammy/setup-nasm@v1.5.1 + - name: Install Unreal Engine + uses: ./.github/actions/install-unreal-windows + with: + unreal-engine-zip: ${{ inputs.unreal-engine-zip }} + unreal-program-name: ${{ inputs.unreal-program-name }} + aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }} + aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }} - name: Build cesium-native run: | # CMake gets confused by the Windows backslashes $env:ANDROID_NDK_ROOT=$env:ANDROID_NDK_ROOT.replace('\', '/') + $env:ANDROID_NDK_HOME=$env:ANDROID_NDK_ROOT + $env:UNREAL_ENGINE_ROOT="D:/Program Files/Epic Games/${{ inputs.unreal-program-name }}" + $env:CESIUM_VCPKG_RELEASE_ONLY="TRUE" cd extern cmake -B build-android -S . -G Ninja -DCMAKE_TOOLCHAIN_FILE="unreal-android-toolchain.cmake" -DCMAKE_POSITION_INDEPENDENT_CODE=ON -DCMAKE_BUILD_TYPE=Release cmake --build build-android --config Release --target install -j8 cd .. rm -r -fo extern - - name: Install Unreal Engine - uses: ./.github/actions/install-unreal-windows - with: - unreal-engine-zip: ${{ inputs.unreal-engine-zip }} - unreal-program-name: ${{ inputs.unreal-program-name }} - aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }} - aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }} - name: Overwrite plugin engine version run: | - ((Get-Content -path CesiumForUnreal.uplugin -Raw) -replace '"EngineVersion": "5.1.0"','"EngineVersion": "${{ inputs.unreal-engine-version }}"') | Set-Content -Path CesiumForUnreal.uplugin + ((Get-Content -path CesiumForUnreal.uplugin -Raw) -replace '"EngineVersion": "5.3.0"','"EngineVersion": "${{ inputs.unreal-engine-version }}"') | Set-Content -Path CesiumForUnreal.uplugin - name: Customize BuildConfiguration.xml run: | mkdir -p "$env:USERPROFILE\AppData\Roaming\Unreal Engine\UnrealBuildTool" @@ -92,10 +99,6 @@ jobs: if: ${{ failure() }} run: | cat "C:\Users\runneradmin\AppData\Roaming\Unreal Engine\AutomationTool\Logs\D+Program+Files+Epic+Games+${{ inputs.unreal-program-name }}\UBT-UnrealGame-Android-Development.txt" - - name: Compress debug sections - run: | - dir packages/CesiumForUnreal/Intermediate/Build/Android/UnrealGame/Development/CesiumRuntime/*.o | Foreach-Object { & $ENV:ANDROID_NDK_ROOT/toolchains/llvm/prebuilt/windows-x86_64/bin/llvm-objcopy.exe --compress-debug-sections $_.FullName } - dir packages/CesiumForUnreal/Intermediate/Build/Android/UnrealGame/Shipping/CesiumRuntime/*.o | Foreach-Object { & $ENV:ANDROID_NDK_ROOT/toolchains/llvm/prebuilt/windows-x86_64/bin/llvm-objcopy.exe --compress-debug-sections $_.FullName } - name: Publish plugin package artifact if: ${{ success() }} uses: actions/upload-artifact@v4 diff --git a/.github/workflows/buildApple.yml b/.github/workflows/buildApple.yml new file mode 100644 index 000000000..426360390 --- /dev/null +++ b/.github/workflows/buildApple.yml @@ -0,0 +1,148 @@ +name: Build macOS + +on: + workflow_call: + inputs: + runner-label: + required: true + type: string + unreal-engine-version: + required: true + type: string + unreal-engine-zip: + required: true + type: string + unreal-program-name: + required: true + type: string + upload-package-base-name: + required: true + type: string + xcode-version: + required: true + type: string +jobs: + build: + runs-on: ${{ inputs.runner-label }} + steps: + - name: Customize BuildConfiguration.xml + run: | + mkdir -p ~/.config/Unreal\ Engine/UnrealBuildTool + # - We limit parallel actions because our builds use a lot more memory than UBT thinks they will. + # - We set the source code control Provider to None so UBT includes all files in the unity build. + printf '\n\n \n 2\n \n None\n\n' > ~/.config/Unreal\ Engine/UnrealBuildTool/BuildConfiguration.xml + # In UE 5.5, UBT apparently loads from ~/Documents instead of ~/.config + mkdir -p ~/Documents/Unreal\ Engine/UnrealBuildTool + cp ~/.config/Unreal\ Engine/UnrealBuildTool/BuildConfiguration.xml ~/Documents/Unreal\ Engine/UnrealBuildTool/BuildConfiguration.xml + - name: Make some more disk space + run: | + df -h + ls /Applications + brew uninstall google-chrome + sudo rm -rf /Users/runner/Library/Android + sudo rm -rf /Applications/Xcode_14.3.app + sudo rm -rf /Applications/Xcode_14.3.1.app + sudo rm -rf /Applications/Xcode_15.0.1.app + sudo rm -rf /Applications/Xcode_15.0.app + sudo rm -rf /Applications/Xcode_15.1.0.app + sudo rm -rf /Applications/Xcode_15.1.app + sudo rm -rf /Applications/Xcode_15.2.0.app + sudo rm -rf /Applications/Xcode_15.2.app + sudo rm -rf /Applications/Xcode_15.3.0.app + sudo rm -rf /Applications/Xcode_15.3.app + sudo rm -rf /Applications/Xcode_16.0.0.app + sudo rm -rf /Applications/Xcode_16.0.app + sudo rm -rf /Applications/Xcode_16.1.0.app + sudo rm -rf /Applications/Xcode_16.1.app + sudo rm -rf /Applications/Xcode_16.1_beta.app + sudo rm -rf /Applications/Xcode_16_beta_6.app + ls /Applications + df -h + - name: Set XCode version + uses: maxim-lobanov/setup-xcode@v1 + with: + xcode-version: "${{ inputs.xcode-version }}" + - name: Check out repository code + uses: actions/checkout@v4 + with: + submodules: recursive + - name: Configure vcpkg caching + uses: ./.github/actions/vcpkg-cache + with: + id: ${{ inputs.upload-package-base-name }} + - name: Install Unreal Engine + uses: ./.github/actions/install-unreal-macos + with: + unreal-engine-zip: ${{ inputs.unreal-engine-zip }} + aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }} + aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }} + unreal-program-name: ${{ inputs.unreal-program-name }} + - name: Set environment variables + run: | + export CESIUM_UNREAL_VERSION=$GITHUB_REF_NAME + export BUILD_CESIUM_UNREAL_PACKAGE_NAME="${{ inputs.upload-package-base-name }}-${CESIUM_UNREAL_VERSION}" + # Make these available to subsequent steps + echo "CESIUM_UNREAL_VERSION=${CESIUM_UNREAL_VERSION}" >> $GITHUB_ENV + echo "BUILD_CESIUM_UNREAL_PACKAGE_NAME=${BUILD_CESIUM_UNREAL_PACKAGE_NAME}" >> $GITHUB_ENV + - name: Install nasm + uses: ilammy/setup-nasm@v1.5.1 + - name: Build cesium-native for macOS ARM64 + run: | + export UNREAL_ENGINE_ROOT=$HOME/${{ inputs.unreal-program-name }} + export CESIUM_VCPKG_RELEASE_ONLY=TRUE + mkdir -p extern/build-arm64 + cd extern/build-arm64 + cmake .. -DCMAKE_BUILD_TYPE=Release -DCMAKE_OSX_DEPLOYMENT_TARGET=10.15 -DCMAKE_OSX_ARCHITECTURES=arm64 -DCMAKE_SYSTEM_NAME=Darwin -DCMAKE_SYSTEM_PROCESSOR=arm64 + cmake --build . -j4 --target install + - name: Build cesium-native for macOS x86_64 + run: | + export UNREAL_ENGINE_ROOT=$HOME/${{ inputs.unreal-program-name }} + export CESIUM_VCPKG_RELEASE_ONLY=TRUE + mkdir -p extern/build-x64 + cd extern/build-x64 + cmake .. -DCMAKE_BUILD_TYPE=Release -DCMAKE_OSX_DEPLOYMENT_TARGET=10.15 -DCMAKE_OSX_ARCHITECTURES=x86_64 -DCMAKE_SYSTEM_NAME=Darwin -DCMAKE_SYSTEM_PROCESSOR=x86_64 + cmake --build . -j4 --target install + - name: Create universal macOS libs for cesium-native + run: | + mkdir -p ${GITHUB_WORKSPACE}/Source/ThirdParty/lib/Darwin-universal-Release + for f in ${GITHUB_WORKSPACE}/Source/ThirdParty/lib/Darwin-x86_64-Release/*.a + do + arm64f=${GITHUB_WORKSPACE}/Source/ThirdParty/lib/Darwin-arm64-Release/$(basename -- $f) + x64f=${GITHUB_WORKSPACE}/Source/ThirdParty/lib/Darwin-x86_64-Release/$(basename -- $f) + universalf=${GITHUB_WORKSPACE}/Source/ThirdParty/lib/Darwin-universal-Release/$(basename -- $f) + if diff $arm64f $x64f; then + # arm64 and x64 files are identical, so just copy one to the universal directory. + cp $arm64f $universalf + else + lipo -create -output $universalf $arm64f $x64f + fi + done + rm -rf ${GITHUB_WORKSPACE}/Source/ThirdParty/lib/Darwin-x86_64-Release + rm -rf ${GITHUB_WORKSPACE}/Source/ThirdParty/lib/Darwin-arm64-Release + - name: Build cesium-native for iOS + run: | + mkdir -p extern/build-ios + cd extern + export UNREAL_ENGINE_ROOT=$HOME/${{ inputs.unreal-program-name }} + export CESIUM_VCPKG_RELEASE_ONLY=TRUE + cmake -B build-ios -S . -GXcode -DCMAKE_TOOLCHAIN_FILE="unreal-ios-toolchain.cmake" -DCMAKE_BUILD_TYPE=Release + cmake --build build-ios -j4 --target install --config Release + - name: Remove extern directory + run: | + rm -rf extern + - name: Build plugin for macOS and iOS + run: | + sed -i '' 's/\"EngineVersion\": \"5.3.0\"/\"EngineVersion\": \"${{ inputs.unreal-engine-version }}\"/g' CesiumForUnreal.uplugin + export UNREAL_ENGINE_DIR=$HOME/${{ inputs.unreal-program-name }} + cd $UNREAL_ENGINE_DIR/Engine/Build/BatchFiles + ./RunUAT.sh BuildPlugin -Plugin="$GITHUB_WORKSPACE/CesiumForUnreal.uplugin" -Package="$GITHUB_WORKSPACE/packages/CesiumForUnreal" -CreateSubFolder -TargetPlatforms=Mac+iOS -Architecture_Mac=arm64+x64 + - name: Print log + if: ${{ failure() }} + run: | + cat "/Users/runner/Library/Logs/Unreal Engine/LocalBuildLogs/UBT-UnrealEditor-Mac-Development.txt" + - name: Publish plugin package artifact + if: ${{ success() }} + uses: actions/upload-artifact@v4 + with: + name: ${{ env.BUILD_CESIUM_UNREAL_PACKAGE_NAME}} + path: packages diff --git a/.github/workflows/buildLinux.yml b/.github/workflows/buildLinux.yml index 448cb2fcf..5aa1990a1 100644 --- a/.github/workflows/buildLinux.yml +++ b/.github/workflows/buildLinux.yml @@ -34,10 +34,12 @@ jobs: sudo swapon --show cat /proc/meminfo apt list --installed + sudo dpkg-query -Wf '${Installed-Size}\t${Package}\n' | sort -n + sudo snap list - name: Removed unneeded packages to gain disk space run: | sudo apt update - sudo apt remove google-chrome-stable clang-13 clang-14 clang-15 llvm-13-dev llvm-13-linker-tools llvm-13-runtime llvm-13-tools llvm-13 llvm-14-dev llvm-14-linker-tools llvm-14-runtime llvm-14-tools llvm-14 llvm-15-dev llvm-15-linker-tools llvm-15-runtime llvm-15-tools llvm-15 x11-common xserver-common aspnetcore-runtime-6.0 aspnetcore-runtime-7.0 aspnetcore-runtime-8.0 aspnetcore-targeting-pack-6.0 aspnetcore-targeting-pack-7.0 aspnetcore-targeting-pack-8.0 docker-ce-cli docker-ce dotnet-apphost-pack-6.0 dotnet-apphost-pack-7.0 dotnet-apphost-pack-8.0 dotnet-host dotnet-hostfxr-6.0 dotnet-hostfxr-7.0 dotnet-hostfxr-8.0 dotnet-runtime-6.0 dotnet-runtime-7.0 dotnet-runtime-8.0 dotnet-runtime-deps-6.0 dotnet-runtime-deps-7.0 dotnet-runtime-deps-8.0 dotnet-sdk-6.0 dotnet-sdk-7.0 dotnet-sdk-8.0 dotnet-targeting-pack-6.0 dotnet-targeting-pack-7.0 dotnet-targeting-pack-8.0 eatmydata emacsen-common firebird3.0-common-doc firebird3.0-common firefox kubectl mercurial-common mercurial microsoft-edge-stable mssql-tools mysql-client-8.0 mysql-client-core-8.0 mysql-client mysql-common mysql-server-8.0 php8.1 postgresql-14 + sudo apt remove google-chrome-stable clang-13 clang-14 clang-15 llvm-13-dev llvm-13-linker-tools llvm-13-runtime llvm-13-tools llvm-13 llvm-14-dev llvm-14-linker-tools llvm-14-runtime llvm-14-tools llvm-14 llvm-15-dev llvm-15-linker-tools llvm-15-runtime llvm-15-tools llvm-15 x11-common xserver-common aspnetcore-runtime-6.0 aspnetcore-runtime-7.0 aspnetcore-runtime-8.0 aspnetcore-targeting-pack-6.0 aspnetcore-targeting-pack-7.0 aspnetcore-targeting-pack-8.0 docker-ce-cli docker-ce dotnet-apphost-pack-6.0 dotnet-apphost-pack-7.0 dotnet-apphost-pack-8.0 dotnet-host dotnet-hostfxr-6.0 dotnet-hostfxr-7.0 dotnet-hostfxr-8.0 dotnet-runtime-6.0 dotnet-runtime-7.0 dotnet-runtime-8.0 dotnet-runtime-deps-6.0 dotnet-runtime-deps-7.0 dotnet-runtime-deps-8.0 dotnet-sdk-6.0 dotnet-sdk-7.0 dotnet-sdk-8.0 dotnet-targeting-pack-6.0 dotnet-targeting-pack-7.0 dotnet-targeting-pack-8.0 eatmydata emacsen-common firebird3.0-common-doc firebird3.0-common firefox kubectl mercurial-common mercurial microsoft-edge-stable mssql-tools mysql-client-8.0 mysql-client-core-8.0 mysql-client mysql-common mysql-server-8.0 php8.1 postgresql-14 azure-cli microsoft-edge-stable google-cloud-cli temurin-21-jdk temurin-17-jdk temurin-11-jdk temurin-8-jdk powershell google-cloud-cli-anthoscli mysql-server-core-8.0 containerd.io libllvm15 libllvm14 libllvm13 mono-devel libclang-common-15-dev libclang-common-14-dev libclang-common-13-dev df -h - name: Create some space to work in /mnt run: | @@ -47,6 +49,10 @@ jobs: uses: actions/checkout@v4 with: submodules: recursive + - name: Configure vcpkg caching + uses: ./.github/actions/vcpkg-cache + with: + id: ${{ inputs.upload-package-base-name }} - name: Install Unreal Engine uses: ./.github/actions/install-unreal-linux with: @@ -63,12 +69,13 @@ jobs: run: | echo "CESIUM_UNREAL_VERSION=$GITHUB_REF_NAME" >> "$GITHUB_ENV" echo "BUILD_CESIUM_UNREAL_PACKAGE_NAME=${{ inputs.upload-package-base-name }}-$GITHUB_REF_NAME" >> "$GITHUB_ENV" - echo "UNREAL_ENGINE_DIR=/mnt/work/${{ inputs.unreal-program-name }}" >> "$GITHUB_ENV" + echo "UNREAL_ENGINE_ROOT=/mnt/work/${{ inputs.unreal-program-name }}" >> "$GITHUB_ENV" echo "LINUX_MULTIARCH_ROOT=/mnt/work/${{ inputs.unreal-program-name }}/Engine/Extras/ThirdPartyNotUE/SDKs/HostLinux/Linux_x64/${{ inputs.clang-version }}/" >> "$GITHUB_ENV" - name: Build cesium-native run: | export UNREAL_ENGINE_COMPILER_DIR="${LINUX_MULTIARCH_ROOT}x86_64-unknown-linux-gnu" - export UNREAL_ENGINE_LIBCXX_DIR="${UNREAL_ENGINE_DIR}/Engine/Source/ThirdParty/Unix/LibCxx" + export UNREAL_ENGINE_LIBCXX_DIR="${UNREAL_ENGINE_ROOT}/Engine/Source/ThirdParty/Unix/LibCxx" + export CESIUM_VCPKG_RELEASE_ONLY=TRUE cd extern cmake -B build -S . -G Ninja -DCMAKE_TOOLCHAIN_FILE="unreal-linux-toolchain.cmake" -DCMAKE_POSITION_INDEPENDENT_CODE=ON -DCMAKE_BUILD_TYPE=Release cmake --build build --config Release --target install -j8 @@ -90,8 +97,8 @@ jobs: printf '\n\n \n 2\n \n None\n\n' > ~/.config/Unreal\ Engine/UnrealBuildTool/BuildConfiguration.xml - name: Build plugin run: | - sed -i 's/\"EngineVersion\": \"5.1.0\"/\"EngineVersion\": \"${{ inputs.unreal-engine-version }}\"/g' CesiumForUnreal.uplugin - cd $UNREAL_ENGINE_DIR/Engine/Build/BatchFiles + sed -i 's/\"EngineVersion\": \"5.3.0\"/\"EngineVersion\": \"${{ inputs.unreal-engine-version }}\"/g' CesiumForUnreal.uplugin + cd $UNREAL_ENGINE_ROOT/Engine/Build/BatchFiles ./RunUAT.sh BuildPlugin -Plugin="$GITHUB_WORKSPACE/CesiumForUnreal.uplugin" -Package="$GITHUB_WORKSPACE/packages/CesiumForUnreal" -CreateSubFolder -TargetPlatforms=Linux - name: Fix RPATH run: | @@ -99,26 +106,6 @@ jobs: patchelf --print-rpath libUnrealEditor-CesiumRuntime.so export UPDATED_RPATH=`patchelf --print-rpath libUnrealEditor-CesiumRuntime.so | sed 's/${ORIGIN}[^:]*\/SunPosition\/Binaries\/Linux/${ORIGIN}\/..\/..\/..\/..\/Runtime\/SunPosition\/Binaries\/Linux/'` patchelf --force-rpath --set-rpath "$UPDATED_RPATH" libUnrealEditor-CesiumRuntime.so - - name: Compress debug sections - run: | - for f in packages/CesiumForUnreal/Binaries/Linux/*.so; do objcopy --compress-debug-sections $f; done - for f in packages/CesiumForUnreal/Binaries/Linux/*.debug; do objcopy --compress-debug-sections $f; done - if [ -d "packages/CesiumForUnreal/Intermediate/Build/Linux/x64" ]; then - for f in packages/CesiumForUnreal/Intermediate/Build/Linux/x64/UnrealGame/Development/CesiumRuntime/*.o; do - objcopy --compress-debug-sections $f - done - for f in packages/CesiumForUnreal/Intermediate/Build/Linux/x64/UnrealGame/Shipping/CesiumRuntime/*.o; do - objcopy --compress-debug-sections $f - done - fi - if [ -d "packages/CesiumForUnreal/Intermediate/Build/Linux/B4D820EA" ]; then - for f in packages/CesiumForUnreal/Intermediate/Build/Linux/B4D820EA/UnrealGame/Development/CesiumRuntime/*.o; do - objcopy --compress-debug-sections $f - done - for f in packages/CesiumForUnreal/Intermediate/Build/Linux/B4D820EA/UnrealGame/Shipping/CesiumRuntime/*.o; do - objcopy --compress-debug-sections $f - done - fi - name: Print disk space free run: | df -h diff --git a/.github/workflows/buildMac.yml b/.github/workflows/buildMac.yml deleted file mode 100644 index 5756e2d6f..000000000 --- a/.github/workflows/buildMac.yml +++ /dev/null @@ -1,102 +0,0 @@ -name: Build macOS - -on: - workflow_call: - inputs: - runner-label: - required: true - type: string - unreal-engine-version: - required: true - type: string - unreal-engine-zip: - required: true - type: string - unreal-program-name: - required: true - type: string - upload-package-base-name: - required: true - type: string - xcode-version: - required: true - type: string -jobs: - build: - runs-on: ${{ inputs.runner-label }} - steps: - # - name: Install XCode ${{ inputs.xcode-version }} - # env: - # AWS_REGION: us-east-1 - # AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }} - # AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }} - # run: | - # aws s3 cp s3://cesium-unreal-engine/Xcode/Xcode_${{ inputs.xcode-version }}.xip . --no-progress - # export ORIGINAL_DIR=$PWD - # cd /Applications - # xip -x $ORIGINAL_DIR/Xcode_${{ inputs.xcode-version }}.xip - # rm $ORIGINAL_DIR/Xcode_${{ inputs.xcode-version }}.xip - - name: Set XCode version - uses: maxim-lobanov/setup-xcode@v1 - with: - xcode-version: "${{ inputs.xcode-version }}" - - name: Check out repository code - uses: actions/checkout@v4 - with: - submodules: recursive - - name: Install Unreal Engine - uses: ./.github/actions/install-unreal-macos - with: - unreal-engine-zip: ${{ inputs.unreal-engine-zip }} - aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }} - aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }} - unreal-program-name: ${{ inputs.unreal-program-name }} - - name: Set environment variables - run: | - export CESIUM_UNREAL_VERSION=$GITHUB_REF_NAME - export BUILD_CESIUM_UNREAL_PACKAGE_NAME="${{ inputs.upload-package-base-name }}-${CESIUM_UNREAL_VERSION}" - # Make these available to subsequent steps - echo "CESIUM_UNREAL_VERSION=${CESIUM_UNREAL_VERSION}" >> $GITHUB_ENV - echo "BUILD_CESIUM_UNREAL_PACKAGE_NAME=${BUILD_CESIUM_UNREAL_PACKAGE_NAME}" >> $GITHUB_ENV - - name: Install nasm - uses: ilammy/setup-nasm@v1.5.1 - - name: Build cesium-native - run: | - mkdir -p extern/build - cd extern/build - INSTALL_LIBDIR=`cmake .. -LA | grep CMAKE_INSTALL_LIBDIR` - INSTALL_LIBDIR=${INSTALL_LIBDIR##CMAKE_INSTALL_LIBDIR:PATH=} - cmake .. -DCMAKE_BUILD_TYPE=Release -DCMAKE_OSX_DEPLOYMENT_TARGET=10.15 -DCMAKE_OSX_ARCHITECTURES=arm64 - cmake --build . -j4 --target install - mv $INSTALL_LIBDIR ${INSTALL_LIBDIR}-silicon - cmake .. -DCMAKE_BUILD_TYPE=Release -DCMAKE_OSX_DEPLOYMENT_TARGET=10.15 -DCMAKE_OSX_ARCHITECTURES=x86_64 - cmake --build . -j4 --target install - for f in ${INSTALL_LIBDIR}/*.a - do - lipo -create -output $f ${INSTALL_LIBDIR}-silicon/$(basename -- $f) $f - done - rm -r -f ${INSTALL_LIBDIR}-silicon - cd ../.. - rm -rf extern - - name: Customize BuildConfiguration.xml - run: | - mkdir -p ~/.config/Unreal\ Engine/UnrealBuildTool - # - We limit parallel actions because our builds use a lot more memory than UBT thinks they will. - # - We set the source code control Provider to None so UBT includes all files in the unity build. - printf '\n\n \n 2\n \n None\n\n' > ~/.config/Unreal\ Engine/UnrealBuildTool/BuildConfiguration.xml - - name: Build plugin - run: | - sed -i '' 's/\"EngineVersion\": \"5.1.0\"/\"EngineVersion\": \"${{ inputs.unreal-engine-version }}\"/g' CesiumForUnreal.uplugin - export UNREAL_ENGINE_DIR=$HOME/${{ inputs.unreal-program-name }} - cd $UNREAL_ENGINE_DIR/Engine/Build/BatchFiles - ./RunUAT.sh BuildPlugin -Plugin="$GITHUB_WORKSPACE/CesiumForUnreal.uplugin" -Package="$GITHUB_WORKSPACE/packages/CesiumForUnreal" -CreateSubFolder -TargetPlatforms=Mac - - name: Print log - if: ${{ failure() }} - run: | - cat "/Users/runner/Library/Logs/Unreal Engine/LocalBuildLogs/UBT-UnrealEditor-Mac-Development.txt" - - name: Publish plugin package artifact - if: ${{ success() }} - uses: actions/upload-artifact@v4 - with: - name: ${{ env.BUILD_CESIUM_UNREAL_PACKAGE_NAME}} - path: packages diff --git a/.github/workflows/buildWindows.yml b/.github/workflows/buildWindows.yml index fc7eb36cb..9d6383e7b 100644 --- a/.github/workflows/buildWindows.yml +++ b/.github/workflows/buildWindows.yml @@ -69,6 +69,10 @@ jobs: if: ${{ inputs.extra-choco-packages }} run: | choco install -y ${{ inputs.extra-choco-packages }} + - name: Configure vcpkg caching + uses: ./.github/actions/vcpkg-cache + with: + id: ${{ inputs.upload-package-base-name }} - name: Set environment variables run: | $env:CESIUM_UNREAL_VERSION=$env:GITHUB_REF_NAME @@ -99,6 +103,8 @@ jobs: - name: Build cesium-native run: | cd extern + $env:UNREAL_ENGINE_ROOT="D:/Program Files/Epic Games/${{ inputs.unreal-program-name }}" + $env:CESIUM_VCPKG_RELEASE_ONLY="TRUE" $toolchainOption=If ("${{ inputs.cmake-toolchain }}") {"-T ${{ inputs.cmake-toolchain }}"} Else {""} cmake -B build -S . -A "${{ inputs.cmake-platform }}" -G "${{ inputs.cmake-generator }}" $toolchainOption cmake --build build --config Release --target install -j8 @@ -106,7 +112,7 @@ jobs: rm -r -fo extern - name: Overwrite plugin engine version run: | - ((Get-Content -path CesiumForUnreal.uplugin -Raw) -replace '"EngineVersion": "5.1.0"','"EngineVersion": "${{ inputs.unreal-engine-version }}"') | Set-Content -Path CesiumForUnreal.uplugin + ((Get-Content -path CesiumForUnreal.uplugin -Raw) -replace '"EngineVersion": "5.3.0"','"EngineVersion": "${{ inputs.unreal-engine-version }}"') | Set-Content -Path CesiumForUnreal.uplugin - name: Customize BuildConfiguration.xml run: | mkdir -p "$env:USERPROFILE\AppData\Roaming\Unreal Engine\UnrealBuildTool" diff --git a/.github/workflows/buildiOS.yml b/.github/workflows/buildiOS.yml deleted file mode 100644 index 846d8df99..000000000 --- a/.github/workflows/buildiOS.yml +++ /dev/null @@ -1,93 +0,0 @@ -name: Build iOS - -on: - workflow_call: - inputs: - runner-label: - required: true - type: string - unreal-engine-version: - required: true - type: string - unreal-engine-zip: - required: true - type: string - unreal-program-name: - required: true - type: string - upload-package-base-name: - required: true - type: string - xcode-version: - required: true - type: string -jobs: - build: - runs-on: ${{ inputs.runner-label }} - steps: - # - name: Install XCode ${{ inputs.xcode-version }} - # env: - # AWS_REGION: us-east-1 - # AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }} - # AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }} - # run: | - # aws s3 cp s3://cesium-unreal-engine/Xcode/Xcode_${{ inputs.xcode-version }}.xip . --no-progress - # export ORIGINAL_DIR=$PWD - # cd /Applications - # xip -x $ORIGINAL_DIR/Xcode_${{ inputs.xcode-version }}.xip - # rm $ORIGINAL_DIR/Xcode_${{ inputs.xcode-version }}.xip - - name: Set XCode version - uses: maxim-lobanov/setup-xcode@v1 - with: - xcode-version: "${{ inputs.xcode-version }}" - #"${{ inputs.xcode-version }}" - - name: Check out repository code - uses: actions/checkout@v4 - with: - submodules: recursive - - name: Set environment variables - run: | - export CESIUM_UNREAL_VERSION=$GITHUB_REF_NAME - export BUILD_CESIUM_UNREAL_PACKAGE_NAME="${{ inputs.upload-package-base-name }}-${CESIUM_UNREAL_VERSION}" - # Make these available to subsequent steps - echo "CESIUM_UNREAL_VERSION=${CESIUM_UNREAL_VERSION}" >> $GITHUB_ENV - echo "BUILD_CESIUM_UNREAL_PACKAGE_NAME=${BUILD_CESIUM_UNREAL_PACKAGE_NAME}" >> $GITHUB_ENV - - name: Install nasm - uses: ilammy/setup-nasm@v1.5.1 - - name: Install Unreal Engine - uses: ./.github/actions/install-unreal-macos - with: - unreal-engine-zip: ${{ inputs.unreal-engine-zip }} - aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }} - aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }} - unreal-program-name: ${{ inputs.unreal-program-name }} - - name: Build cesium-native - run: | - mkdir -p extern/build-ios - cd extern - cmake -B build-ios -S . -GXcode -DCMAKE_SYSTEM_NAME=iOS -DCMAKE_OSX_ARCHITECTURES=arm64 -DCMAKE_OSX_DEPLOYMENT_TARGET=15 -DCMAKE_POSITION_INDEPENDENT_CODE=ON -DCMAKE_BUILD_TYPE=Release - cmake --build build-ios -j4 --target install --config Release - cd .. - rm -rf extern - - name: Customize BuildConfiguration.xml - run: | - mkdir -p ~/.config/Unreal\ Engine/UnrealBuildTool - # - We limit parallel actions because our builds use a lot more memory than UBT thinks they will. - # - We set the source code control Provider to None so UBT includes all files in the unity build. - printf '\n\n \n 2\n \n None\n\n' > ~/.config/Unreal\ Engine/UnrealBuildTool/BuildConfiguration.xml - - name: Build plugin - run: | - sed -i '' 's/\"EngineVersion\": \"5.1.0\"/\"EngineVersion\": \"${{ inputs.unreal-engine-version }}\"/g' CesiumForUnreal.uplugin - export UNREAL_ENGINE_DIR=$HOME/${{ inputs.unreal-program-name }} - cd $UNREAL_ENGINE_DIR/Engine/Build/BatchFiles - ./RunUAT.sh BuildPlugin -Plugin="$GITHUB_WORKSPACE/CesiumForUnreal.uplugin" -Package="$GITHUB_WORKSPACE/packages/CesiumForUnreal" -CreateSubFolder -TargetPlatforms=iOS -NoHostPlatform - - name: Print log - if: ${{ failure() }} - run: | - cat "/Users/runner/Library/Logs/Unreal Engine/LocalBuildLogs/UBT-UnrealEditor-Mac-Development.txt" - - name: Publish plugin package artifact - if: ${{ success() }} - uses: actions/upload-artifact@v4 - with: - name: ${{ env.BUILD_CESIUM_UNREAL_PACKAGE_NAME}} - path: packages diff --git a/.github/workflows/prod.yml b/.github/workflows/prod.yml new file mode 100644 index 000000000..f7bac494a --- /dev/null +++ b/.github/workflows/prod.yml @@ -0,0 +1,42 @@ +name: prod +on: + push: + branches: + - 'cesium.com' + - 'cesium.com-staging' +jobs: + deploy-docs: + runs-on: ubuntu-22.04 + env: + AWS_ACCESS_KEY_ID: ${{ secrets.NATIVE_ACCESS_KEY }} + AWS_SECRET_ACCESS_KEY: ${{ secrets.NATIVE_SECRET_KEY }} + AWS_REGION: us-east-1 + steps: + - name: Install Doxygen + run: | + cd ~ + wget https://github.com/doxygen/doxygen/releases/download/Release_1_12_0/doxygen-1.12.0.linux.bin.tar.gz + tar xzf doxygen-1.12.0.linux.bin.tar.gz + export PATH=$PWD/doxygen-1.12.0/bin:$PATH + echo "PATH=$PATH" >> "$GITHUB_ENV" + doxygen --version + - name: Check out repository code + uses: actions/checkout@v4 + with: + submodules: recursive + - name: Mark documentation official + if: ${{ github.ref_name == 'cesium.com' }} + run: | + sed -i 's/PRE-RELEASE/ /g' Documentation/Doxyfile + - name: Generate Documentation + run: | + npm install + npm run doxygen + - name: Deploy to cesium.com + if: ${{ github.ref_name == 'cesium.com' }} + run: | + aws s3 sync Documentation/Reference/html/ s3://cesium-website/cesium-unreal/ref-doc/ --cache-control "public, max-age=1800" --delete + - name: Deploy to cesium.com staging + if: ${{ github.ref_name == 'cesium.com-staging' }} + run: | + aws s3 sync Documentation/Reference/html/ s3://cesium-website/cesium-unreal/ref-doc-staging/ --cache-control "public, max-age=1800" --delete diff --git a/.gitmodules b/.gitmodules index ea20ad97f..cd261dd04 100644 --- a/.gitmodules +++ b/.gitmodules @@ -7,3 +7,6 @@ [submodule "extern/tidy-html5"] path = extern/tidy-html5 url = https://github.com/htacg/tidy-html5 +[submodule "extern/swl-variant"] + path = extern/swl-variant + url = https://github.com/kring/swl-variant.git diff --git a/CHANGES.md b/CHANGES.md index 94ff056e5..2d149f067 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -1,11 +1,150 @@ # Change Log -### ? - ? +### v2.13.3 - 2025-02-12 + +This release updates [cesium-native](https://github.com/CesiumGS/cesium-native) from v0.44.2 to v0.44.3. See the [changelog](https://github.com/CesiumGS/cesium-native/blob/main/CHANGES.md) for a complete list of changes in cesium-native. + +### v2.13.2 - 2025-02-10 + +This release updates [cesium-native](https://github.com/CesiumGS/cesium-native) from v0.44.1 to v0.44.2. See the [changelog](https://github.com/CesiumGS/cesium-native/blob/main/CHANGES.md) for a complete list of changes in cesium-native. + +### v2.13.1 - 2025-02-03 + +This release updates [cesium-native](https://github.com/CesiumGS/cesium-native) from v0.44.0 to v0.44.1. See the [changelog](https://github.com/CesiumGS/cesium-native/blob/main/CHANGES.md) for a complete list of changes in cesium-native. + +### v2.13.0 - 2025-02-03 + +##### Additions :tada: + +- Added `CesiumUrlTemplateRasterOverlay`, allowing a raster overlay to be added using tiles requested based on a specified URL template. +- Added `EstimateTimeZoneForLongitude` method to `ACesiumSunSky` to set a reasonable `TimeZone` value at the given longitude. +- The "Place Georeference Origin Here" button on `ACesiumGeoreference` will now adjust the time zone of the `ACesiumSunSky` instances that reference it, based on the new origin's longitude. This improves user experience when moving the origin to locations where it would be nighttime in the current time zone. +- Added `RequestHeaders` property to `Cesium3DTileset`, allowing per-tileset headers to be specified. +- Added `RequestHeaders` properties to `CesiumTileMapServiceRasterOverlay`, `CesiumUrlTemplateRasterOverlay`, `CesiumWebMapServiceRasterOverlay`, + and `CesiumWebMapTileServiceRasterOverlay`, allowing per-raster-overlay HTTP headers to be specified. ##### Fixes :wrench: -- Removed unnecessary alpha check when selecting translucent base materials. +- Fixed another bug in `CesiumSubLevelSwitcherComponent` that could prevent all sub-levels from loading if a single sub-level failed to load. +- Fixed a crash in `UCesiumIonServer` when running in a packaged build where tilesets are only created at runtime. +- Worked around a limitation in Unreal's `FMatrix` -> `FTransform` conversion that prevented models with a small scale factor (e.g., where vertex positions are expressed in millimeters) from rendering because their scale was treated as 0.0. +- Fixed a crash when calling `SampleHeightMostDetailed` blueprint function without a valid tileset. +- Removed duplicate "Enable Water Mask" checkbox on `Cesium3DTileset` resulting from EditCondition flag. + +In addition to the above, this release updates [cesium-native](https://github.com/CesiumGS/cesium-native) from v0.43.0 to v0.44.0. See the [changelog](https://github.com/CesiumGS/cesium-native/blob/main/CHANGES.md) for a complete list of changes in cesium-native. + +### v2.12.0 - 2025-01-02 + +##### Breaking Changes :mega: + +- Removed support for Unreal Engine 5.2. Unreal Engine 5.3 or later is now required. +- Renamed `FCesiumFeatureIdAttribute::GetFeatureIDForVertex` to `FCesiumFeatureIdAttribute::GetFeatureID`. +- Renamed `FCesiumFeatureIdAttribute::GetVertexCount` to `FCesiumFeatureIdAttribute::GetCount`. + +##### Additions :tada: + +- Added support for metadata querying and styling on instanced models. + +##### Fixes :wrench: + +- Fixed a bug in `CesiumSubLevelSwitcherComponent` that could prevent all sub-levels from loading if a single sub-level failed to load. + +This release updates [cesium-native](https://github.com/CesiumGS/cesium-native) from v0.42.0 to v0.43.0. See the [changelog](https://github.com/CesiumGS/cesium-native/blob/main/CHANGES.md) for a complete list of changes in cesium-native. + +### v2.11.1 - 2025-02-14 + +This release updates [cesium-native](https://github.com/CesiumGS/cesium-native) from v0.42.0 to v0.42.1 in order to fix a critical bug when using Google Photorealistic 3D Tiles. See the [changelog](https://github.com/CesiumGS/cesium-native/blob/main/CHANGES.md) for a complete list of changes in cesium-native. + +### v2.11.0 - 2024-12-02 + +This is the last release of Cesium for Unreal that will support Unreal Engine v5.2. Future versions will require Unreal Engine v5.3+. + +##### Additions :tada: + +- Added support for Unreal Engine 5.5. +- Added a "From Ellipsoid" option to `Cesium3DTileset` to generate a tileset by tessellating the surface of the ellipsoid, producing a simple globe tileset without terrain features. + +##### Fixes :wrench: + +- Fixed a crash that could occur when using `SampleHeightMostDetailed` on a `Cesium3DTileset` with a raster overlay. +- `CesiumPolygonRasterOverlay` now references `CesiumCartographicPolygon` instances using `TSoftObjectPtr`, which allows, for example, a raster overlay in the persistent level to use a polygon in a sub-level. +- Fixed an overlay artifact bug that could occur when a `Cesium3DTileset` had three or more overlays. + +In addition to the above, this release updates [cesium-native](https://github.com/CesiumGS/cesium-native) from v0.41.0 to v0.42.0. See the [changelog](https://github.com/CesiumGS/cesium-native/blob/main/CHANGES.md) for a complete list of changes in cesium-native. + +### v2.10.0 - 2024-11-01 + +##### Additions :tada: + +- Added `CircumscribedGroundHeight` property to `CesiumSunSky`. It defaults to 0, which is consistent with the previous behavior. It can be set to a larger value (like 40) to avoid dark splotchy artifacts when zoomed out far from the globe in certain tilesets where geometry extends very far beyond the ellipsoid in the low-detail representation, such as Google Photorealistic 3D Tiles. +- Added a shared assets system that ensures external images referenced by different glTFs will only be loaded once per image. Previously, these images would be loaded again for each glTF that referenced them. This significantly reduces memory usage for tilesets that reuse the same textures. + +##### Fixes :wrench: + +- Fixed a bug that caused incorrect lighting for tilesets using `KHR_materials_unlit`. +- Reduced the memory used by tiles with `KHR_materials_unlit`. +- `CesiumGlobeAnchor` properties are no longer shown on the main `CesiumSunSky` Details panel, because it is almost never necessary to set these. They can still be set on the component's own Details panel if needed. +- Fixed error messages in the Unreal log about uninitialized fields in `FCesiumSampleHeightResult`. + +In addition to the above, this release updates [cesium-native](https://github.com/CesiumGS/cesium-native) from v0.40.1 to v0.41.0. See the [changelog](https://github.com/CesiumGS/cesium-native/blob/main/CHANGES.md) for a complete list of changes in cesium-native. + +### v2.9.0 - 2024-10-01 + +##### Additions :tada: + +- Added `SampleHeightMostDetailed` function to `Cesium3DTileset`, which asynchronously queries the height of a tileset at a list of positions. It is callable from both C++ and Blueprints. + +##### Fixes :wrench: + +- Drastically reduced tile mesh memory usage in UE 5.3 and 5.4 by working around a bug that causes those engine versions to add more texture coordinate sets than necessary. +- Fixed a bug where the `scale`, `noData`, and `default` values of a property in `EXT_strutural_metadata` were not correctly passed to the tileset's material. + +This release updates [cesium-native](https://github.com/CesiumGS/cesium-native) from v0.39.0 to v0.40.1. See the [changelog](https://github.com/CesiumGS/cesium-native/blob/main/CHANGES.md) for a complete list of changes in cesium-native. + +### v2.8.0 - 2024-09-02 + +##### Additions :tada: + +- Added universal (Intel and Apple Silicon) binaries for Unreal Engine 5.2. Unreal Engine 5.3 and 5.4 already had universal binaries. +- Raster overlays now have `bAllowAnyoneToDestroyMe` set to true by default. This allows them to be dynamically removed and destroyed at runtime via the Blueprint `Destroy Component` function called from anywhere, including Level Blueprints. Previously, attempting to delete a raster overlay from outside the Actor would result in an error. + +##### Fixes :wrench: + +- Fixed a bug introduced in the previous release that caused instanced tilesets to render incorrectly. +- Debug sections are no longer compressed on Linux and Android, improving compatibility. +- Fixed a bug where calling `Refresh` on a `CesiumRasterOverlay` would cause the overlay to appear on the Cesium3DTileset, even if inactive. + +This release updates [cesium-native](https://github.com/CesiumGS/cesium-native) from v0.38.0 to v0.39.0. See the [changelog](https://github.com/CesiumGS/cesium-native/blob/main/CHANGES.md) for a complete list of changes in cesium-native. + +### v2.7.1 - 2024-08-01 + +##### Fixes :wrench: + +- Improved collision and line tracing against tilesets by working around an overly-aggressive degenerate triangle check in the Chaos physics engine. +- Fixed a bug that could cause a `bad_any_cast` exception when trying to access glTF extensions on non-Windows platforms. This commonly popped up when loading tilesets with metadata. +- Fixed a bug that caused the `GetInteger64` functions on `CesiumMetadataValue`, `CesiumPropertyArray`, and `CesiumPropertyTableProperty` to always return the default value on non-Windows platforms. +- Fixed issue with `UCesiumGlobeAnchorComponent::GetEllipsoid` that caused compilation errors on some machines. + +In addition to the above, this release updates [cesium-native](https://github.com/CesiumGS/cesium-native) from v0.37.0 to v0.38.0. See the [changelog](https://github.com/CesiumGS/cesium-native/blob/main/CHANGES.md) for a complete list of changes in cesium-native. + +### v2.7.0 - 2024-07-01 + +##### Additions :tada: + +- Cesium for Unreal now supports using non-WGS84 ellipsoids. + - An `CesiumEllipsoid` asset may be specified in the `Ellipsoid` field of a `CesiumGeoreference`. + - To create a `CesiumEllipsoid` asset, right-click in the Content Drawer and select "Data Asset" under "Miscellaneous." Choose "Cesium Ellipsoid" from the menu that appears. + +##### Fixes :wrench: + +- Fixed two problems with `CesiumCartographicRasterOverlay`: + - Small tiles would never be excluded, even with "Exclude Selected Tiles" enabled. + - Pieces of tiles would sometimes not have the raster overlay correctly applied to them. When using with clipping, this would cause bits of tiles to randomly appear inside the clipping polygon. +- Removed an unnecessary alpha check when selecting translucent base materials. - Fixed a crash caused by `CesiumSunSky` when no viewport is activated in the Editor. +- Fixed build issues in Unreal 5.4.2 relating to `UStaticMesh` and `glm::toMat4`. + +In addition to the above, this release updates [cesium-native](https://github.com/CesiumGS/cesium-native) from v0.36.0 to v0.37.0. See the [changelog](https://github.com/CesiumGS/cesium-native/blob/main/CHANGES.md) for a complete list of changes in cesium-native. ### v2.6.0 - 2024-06-03 @@ -101,7 +240,7 @@ In addition to the above, this release updates [cesium-native](https://github.co ##### Additions :tada: - - Added support for multiple Cesium ion servers by creating `CesiumIonServer` data assets. +- Added support for multiple Cesium ion servers by creating `CesiumIonServer` data assets. In addition to the above, this release updates [cesium-native](https://github.com/CesiumGS/cesium-native) from v0.30.0 to v0.31.0. See the [changelog](https://github.com/CesiumGS/cesium-native/blob/main/CHANGES.md) for a complete list of changes in cesium-native. @@ -109,8 +248,8 @@ In addition to the above, this release updates [cesium-native](https://github.co ##### Additions :tada: - - Added support for styling with property textures in `EXT_structural_metadata`. - - Significantly improved tile download performance by adding `HttpThreadActiveFrameTimeInSeconds=0.001` to `Engine.ini`. This results in a major performance improvement for all tilesets, particularly Google Photorealistic 3D Tiles. +- Added support for styling with property textures in `EXT_structural_metadata`. +- Significantly improved tile download performance by adding `HttpThreadActiveFrameTimeInSeconds=0.001` to `Engine.ini`. This results in a major performance improvement for all tilesets, particularly Google Photorealistic 3D Tiles. - Added `HttpMaxConnectionsPerServer=40` to `Engine.ini`. By default, only 16 connections are allowed, which limits the performance when downloading tiles. ##### Fixes :wrench: @@ -130,7 +269,7 @@ This release no longer supports Unreal Engine v5.0. Unreal Engine v5.1, v5.2, or ##### Breaking Changes :mega: - Removed `FCesiumIntegerColor`, `FCesiumFloatColor`, `UCesiumFeatureTexturePropertyBlueprintLibrary::GetIntegerColorFromTextureCoordinates` and `UCesiumFeatureTexturePropertyBlueprintLibrary::GetFloatColorFromTextureCoordinates`. Check out the [upgrade guide](Documentation/upgrade-to-2.0-guide.md) for how retrieve metadata from property textures with the new API. -- Renamed `GetTextureCoordinateIndex` to `GetUnrealUVChannel` in both `UCesiumFeatureIdTextureBlueprintLibrary` and `UCesiumPropertyTexturePropertyBlueprintLibrary`. Contrary to what the documentation claimed, this function retrieved the index of the texture coordinate set in the *Unreal static mesh*, which is not necessarily equal to the texture coordinate set index in the *glTF primitive*. For the latter value, use `GetGltfTextureCoordinateSetIndex` instead. +- Renamed `GetTextureCoordinateIndex` to `GetUnrealUVChannel` in both `UCesiumFeatureIdTextureBlueprintLibrary` and `UCesiumPropertyTexturePropertyBlueprintLibrary`. Contrary to what the documentation claimed, this function retrieved the index of the texture coordinate set in the _Unreal static mesh_, which is not necessarily equal to the texture coordinate set index in the _glTF primitive_. For the latter value, use `GetGltfTextureCoordinateSetIndex` instead. - Removed the old "exclusion zones" feature, which has been deprecated since v1.11.0. Use `CesiumCartographicPolygon` or `CesiumTileExcluder` instead. ##### Additions :tada: @@ -279,7 +418,7 @@ In addition to the above, this release updates [cesium-native](https://github.co ##### Fixes :wrench: - Added a workaround for an apparent bug in Unreal Engine 5.1 that prevented collisions from working with Cesium3DTilesets. -- Fixed a bug that could cause the `AGlobeAwareDefaultPawn` / `DynamicPawn` to suddenly move to a very high height for one render frame just as it arrives at its destination during a flight. +- Fixed a bug that could cause the `AGlobeAwareDefaultPawn` / `DynamicPawn` to suddenly move to a very high height for one render frame just as it arrives at its destination during a flight. In addition to the above, this release updates [cesium-native](https://github.com/CesiumGS/cesium-native) from v0.25.0 to v0.25.1. See the [changelog](https://github.com/CesiumGS/cesium-native/blob/main/CHANGES.md) for a complete list of changes in cesium-native. @@ -342,7 +481,7 @@ This will be the _last_ release that supports Unreal Engine v4.27. Future versio ##### Additions :tada: -- The `FlyToAltitudeProfileCurve`, `FlyToProgressCurve`, `FlyToMaximumAltitudeCurve`, `FlyToDuration`, and `FlyToGranularityDegrees` properties of `GlobeAwareDefaultPawn` / `DynamicPawn` may now be read and written from Blueprints. +- The `FlyToAltitudeProfileCurve`, `FlyToProgressCurve`, `FlyToMaximumAltitudeCurve`, `FlyToDuration`, and `FlyToGranularityDegrees` properties of `GlobeAwareDefaultPawn` / `DynamicPawn` may now be read and written from Blueprints. - Added an option on `Cesium3DTileset` to ignore the `KHR_materials_unlit` extension entirely and use normal lighting and shadows. - Added `CreateNavCollision` property to `Cesium3DTileset`. When enabled, `CreateNavCollision` is called on the static meshes created for tiles. diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index df5d6aeef..84f75e9ac 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -1,5 +1,11 @@ +# Contribution Guide {#contributing-unreal} + Thanks for contributing to Cesium for Unreal! + + Here are the guidelines that we use for all contributions to this project: - [Submitting an issue](#submitting-an-issue), @@ -8,26 +14,28 @@ Here are the guidelines that we use for all contributions to this project: To ensure an inclusive community, contributors and users in the Cesium community should follow the [code of conduct](./CODE_OF_CONDUCT.md). -# Submitting an Issue +# Submitting an Issue {#submitting-an-issue} -If you have a question, do not submit an issue; instead, search the [Cesium community forum](https://community.cesium.com/). The forum is very active and there are years of informative archives for the Cesium platform, often with answers from the core Cesium team. If you do not find an answer to your question, start a new thread and you'll likely get a quick response. +If you have a question, **do not submit an issue**. Instead, search the [Cesium community forum](https://community.cesium.com/) for your question. The forum is very active and there are years of informative archives for the Cesium platform, often with answers from the core Cesium team. If you do not find an answer to your question, start a new thread and you'll likely get a quick response. -If you think you've found a bug in Cesium for Unreal, first search the [issues](https://github.com/CesiumGS/cesium-unreal/issues). If an issue already exists, please add a comment expressing your interest and any additional information. This helps us prioritize issues. +If you think you've found a bug in Cesium for Unreal, first search the existing [issues](https://github.com/CesiumGS/cesium-unreal/issues). If an issue already exists, please add a **comment** expressing your interest and any additional information. This helps us stay organized and prioritize issues. -If a related issue does not exist, submit a new one. Please be concise and include as much of the following information as is relevant: +If a related issue does not exist, then you can submit a new one. Please include as much of the following information as is relevant: -- The version of Cesium for Unreal. Did this work in a previous version? -- Your operating system and version, Unreal Engine version, and video card. Are they all up-to-date? Is the issue specific to one of them? -- If possible, an Unreal project (and data or IDs of Cesium ion assets that have been used) where the issue can be reproduced. +- What version of Cesium for Unreal were you using? Do other versions have the same issue? +- What version of Unreal Engine were you using? +- What is your operating system and version, and your video card? Are they up-to-date? Is the issue specific to one of them? - Can the issue be reproduced in the [Cesium for Unreal Samples](https://github.com/CesiumGS/cesium-unreal-samples)? -- A Screenshot, video or animated .gif if appropriate. Screenshots are particularly useful for exceptions and rendering artifacts. -- Information about whether the issue appeared in the Unreal Editor or in the play mode. -- If the issue is about a crash of the Unreal Editor, include the stack trace that is shown together with the error message. -- Depending on the type of the issue, it can be helpful to see the log files that have been created before encountering the unexpected behavior. The log files is stored as `Saved\Logs\cesiumunreal.log` in your project directory. -- A link to the thread if this was discussed on the [Cesium community forum](https://community.cesium.com/) or elsewhere. -- Ideas for how to fix or workaround the issue. Also mention if you are willing to help fix it. If so, the Cesium team can often provide guidance and the issue may get fixed more quickly with your help. +- Does the issue occur in the Unreal Editor? In Play Mode? Both? +- Are there any error messages in the console? Any stack traces or logs? Please include them if so. Logs are stored as `Saved\Logs\cesiumunreal.log` in your project directory. +- Share a screenshot, video or animated `.gif` if appropriate. Screenshots are particularly useful for exceptions and rendering artifacts. +- Link to threads on the [Cesium community forum](https://community.cesium.com/) if this was discussed on there. +- Include step-by-step instructions for us to reproduce the issue from scratch. +- Any ideas for how to fix or workaround the issue. Also mention if you are willing to help fix it. If so, the Cesium team can often provide guidance and the issue may get fixed more quickly with your help. + +**Note**: It is difficult for us to debug everyone's individual projects. We can triage issues faster when we receive steps to reproduce the issue from scratch—either from [Cesium for Unreal Samples](https://github.com/CesiumGS/cesium-unreal-samples) or from a blank project. We will only request your Unreal project and/or data as a last resort. -# Getting Started Contributing +# Getting Started Contributing {#getting-started-contributing} Everyone is welcome to contribute to Cesium for Unreal! @@ -35,20 +43,21 @@ In addition to contributing code, we appreciate many types of contributions: - Being active on the [Cesium community forum](https://community.cesium.com/) by answering questions and providing input on Cesium's direction. - Showcasing your Cesium for Unreal apps on [Cesium blog](https://cesium.com/blog/categories/userstories/). Contact us at hello@cesium.com. -- Writing tutorials, creating examples, and improving the reference documentation. See the issues labeled [category - doc](https://github.com/CesiumGS/cesium-unreal/labels/category%20-%20doc). +- Writing tutorials, creating examples, and improving the reference documentation. See the issues labeled [documentation](https://github.com/CesiumGS/cesium-unreal/labels/documentation). - Submitting issues as [described above](#submitting-an-issue). - Triaging issues. Browse the [issues](https://github.com/CesiumGS/cesium-unreal/issues) and comment on issues that are no longer reproducible or on issues for which you have additional information. For ideas for Cesium for Unreal code contributions, see: -- issues labeled [`good first issue`](https://github.com/CesiumGS/cesium-unreal/labels/good%20first%20issue) and -- issues labeled [`type - roadmap`](https://github.com/CesiumGS/cesium-unreal/labels/type%20-%20roadmap). +- issues labeled [`good first issue`](https://github.com/CesiumGS/cesium-unreal/labels/good%20first%20issue), +- issues labeled [`low hanging fruit`](https://github.com/CesiumGS/cesium-unreal/labels/low%20hanging%20fruit), and +- issues labeled [`enhancement`](https://github.com/CesiumGS/cesium-unreal/labels/enhancement). -See the [build guide](https://github.com/CesiumGS/cesium-unreal#computer-developing-with-unreal-engine) for how to build and run Cesium for Unreal. +See [Developer Setup](https://cesium.com/learn/cesium-unreal/ref-doc/developer-setup-unreal.html) for how to build and run Cesium for Unreal. Always feel free to introduce yourself on the [Cesium community forum](https://community.cesium.com/) to brainstorm ideas and ask for guidance. -# Opening a Pull Request +# Opening a Pull Request {#opening-a-pull-request} We love pull requests. We strive to promptly review them, provide feedback, and merge. Interest in Cesium is at an all-time high so the core team is busy. Following the tips in this guide will help your pull request get merged quickly. @@ -56,14 +65,7 @@ We love pull requests. We strive to promptly review them, provide feedback, and ## Contributor License Agreement (CLA) -Before we can review a pull request, we require a signed Contributor License Agreement. There is a CLA for: - -- [individuals](https://docs.google.com/forms/d/e/1FAIpQLScU-yvQdcdjCFHkNXwdNeEXx5Qhu45QXuWX_uF5qiLGFSEwlA/viewform) and -- [corporations](https://docs.google.com/forms/d/e/1FAIpQLSeYEaWlBl1tQEiegfHMuqnH9VxyfgXGyIw13C2sN7Fj3J3GVA/viewform). - -This only needs to be completed once, and enables contributions to all of the projects under the [CesiumGS](https://github.com/CesiumGS) organization, including Cesium for Unreal. The CLA ensures you retain copyright to your contributions, and provides us the right to use, modify, and redistribute your contributions using the [Apache 2.0 License](LICENSE). If you have already signed a CLA for CesiumJS or other contributions to Cesium, you will not need to sign it again. - -If you have any questions, feel free to reach out to [hello@cesium.com](mailto:hello@cesium)! +Before we can review a pull request, we require a signed Contributor License Agreement. The CLA forms can be found in our `community` repo [here](https://github.com/CesiumGS/community/tree/main/CLAs). ## Pull Request Guidelines @@ -71,12 +73,11 @@ Our code is our lifeblood so maintaining Cesium's high code quality is important - For an overview of our workflow see [github pull request workflows](https://cesium.com/blog/2013/10/08/github-pull-request-workflows/). - Pull request tips - - After you open a pull request, the friendly [cesium-concierge](https://github.com/CesiumGS/cesium-concierge) bot will comment with a short automated review. At least one human will also review your pull request. + - After you open a pull request, one or more Cesium teammates will review your pull request. - If your pull request fixes an existing issue, include a link to the issue in the description (like this: [#1](https://github.com/CesiumGS/cesium-unreal/issues/1)). Likewise, if your pull request fixes an issue reported on the Cesium forum, include a link to the thread. - If your pull request needs additional work, include a [task list](https://github.com/blog/1375%0A-task-lists-in-gfm-issues-pulls-comments). - - Once you are done making new commits to address feedback, add a comment to the pull request such as `"this is ready"` since GitHub doesn't notify us about commits. - - Follow the [Coding Guide](https://github.com/CesiumGS/cesium-native/blob/main/doc/style-guide.md). - - Verify your is formatted, as described in the Coding Guide. + - Once you are done making new commits to address feedback, add a comment to the pull request such as `"this is ready"` so we know to take another look. + - Verify that your code conforms to our [Style Guide](https://cesium.com/learn/cesium-native/ref-doc/style-guide.html). ## Code of Conduct diff --git a/CesiumForUnreal.uplugin b/CesiumForUnreal.uplugin index 5bad3ddc9..e67e4be94 100644 --- a/CesiumForUnreal.uplugin +++ b/CesiumForUnreal.uplugin @@ -1,7 +1,7 @@ { "FileVersion": 3, - "Version": 60, - "VersionName": "2.6.0", + "Version": 72, + "VersionName": "2.13.3", "FriendlyName": "Cesium for Unreal", "Description": "Unlock the 3D geospatial ecosystem in Unreal Engine with real-world 3D content and a high accuracy full-scale WGS84 globe.", "Category": "Geospatial", @@ -10,7 +10,7 @@ "DocsURL": "https://cesium.com/learn/unreal/", "MarketplaceURL": "com.epicgames.launcher://ue/marketplace/content/87b0d05800a545d49bf858ef3458c4f7", "SupportURL": "https://community.cesium.com", - "EngineVersion": "5.2.0", + "EngineVersion": "5.3.0", "CanContainContent": true, "IsBetaVersion": false, "IsExperimentalVersion": false, diff --git a/Config/Engine.ini b/Config/Engine.ini index 0387c9315..65028cd35 100644 --- a/Config/Engine.ini +++ b/Config/Engine.ini @@ -158,4 +158,8 @@ AspectRatioAxisConstraint=AspectRatio_MaintainXFOV +PropertyRedirects=(OldName="CesiumWebMapTileServiceRasterOverlay.South", NewName="CesiumWebMapTileServiceRasterOverlay.RectangleSouth") +PropertyRedirects=(OldName="CesiumWebMapTileServiceRasterOverlay.East", NewName="CesiumWebMapTileServiceRasterOverlay.RectangleEast") +PropertyRedirects=(OldName="CesiumWebMapTileServiceRasterOverlay.North", NewName="CesiumWebMapTileServiceRasterOverlay.RectangleNorth") -+PropertyRedirects=(OldName="CesiumWebMapTileServiceRasterOverlay.UseWebMercatorProjection", NewName="CesiumWebMapTileServiceRasterOverlay.UseWebMercatorProjection_DEPRECATED") \ No newline at end of file ++PropertyRedirects=(OldName="CesiumWebMapTileServiceRasterOverlay.UseWebMercatorProjection", NewName="CesiumWebMapTileServiceRasterOverlay.UseWebMercatorProjection_DEPRECATED") + ++FunctionRedirects=(OldName="CesiumFeatureIdAttributeBlueprintLibrary.GetFeatureIDForVertex", NewName="CesiumFeatureIdAttributeBlueprintLibrary.GetFeatureID") ++PropertyRedirects=(OldName="CesiumFeatureIdAttributeBlueprintLibrary.GetFeatureIDForVertex.VertexIndex", NewName="CesiumFeatureIdAttributeBlueprintLibrary.GetFeatureID.Index") ++FunctionRedirects=(OldName="CesiumFeatureIdAttributeBlueprintLibrary.GetVertexCount", NewName="CesiumFeatureIdAttributeBlueprintLibrary.GetCount") diff --git a/Content/Materials/M_CesiumBaseMaterial.uasset b/Content/Materials/M_CesiumBaseMaterial.uasset index a26815908..047e3a80b 100644 Binary files a/Content/Materials/M_CesiumBaseMaterial.uasset and b/Content/Materials/M_CesiumBaseMaterial.uasset differ diff --git a/Content/Materials/MaterialFunctions/CesiumGetFeatureIdsFromInstance.uasset b/Content/Materials/MaterialFunctions/CesiumGetFeatureIdsFromInstance.uasset new file mode 100644 index 000000000..ee69ced3f Binary files /dev/null and b/Content/Materials/MaterialFunctions/CesiumGetFeatureIdsFromInstance.uasset differ diff --git a/Content/WGS84.uasset b/Content/WGS84.uasset new file mode 100644 index 000000000..40cdf8399 Binary files /dev/null and b/Content/WGS84.uasset differ diff --git a/Documentation/Assets/mermaid.min.js b/Documentation/Assets/mermaid.min.js new file mode 100644 index 000000000..fd60dd6f2 --- /dev/null +++ b/Documentation/Assets/mermaid.min.js @@ -0,0 +1,2314 @@ +"use strict";var __esbuild_esm_mermaid=(()=>{var ixe=Object.create;var Z1=Object.defineProperty;var axe=Object.getOwnPropertyDescriptor;var sxe=Object.getOwnPropertyNames;var oxe=Object.getPrototypeOf,lxe=Object.prototype.hasOwnProperty;var o=(t,e)=>Z1(t,"name",{value:e,configurable:!0});var M=(t,e)=>()=>(t&&(e=t(t=0)),e);var Ei=(t,e)=>()=>(e||t((e={exports:{}}).exports,e),e.exports),vr=(t,e)=>{for(var r in e)Z1(t,r,{get:e[r],enumerable:!0})},$b=(t,e,r,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let i of sxe(e))!lxe.call(t,i)&&i!==r&&Z1(t,i,{get:()=>e[i],enumerable:!(n=axe(e,i))||n.enumerable});return t},Sr=(t,e,r)=>($b(t,e,"default"),r&&$b(r,e,"default")),Ji=(t,e,r)=>(r=t!=null?ixe(oxe(t)):{},$b(e||!t||!t.__esModule?Z1(r,"default",{value:t,enumerable:!0}):r,t)),cxe=t=>$b(Z1({},"__esModule",{value:!0}),t);var Vb=Ei((_S,LS)=>{"use strict";(function(t,e){typeof _S=="object"&&typeof LS<"u"?LS.exports=e():typeof define=="function"&&define.amd?define(e):(t=typeof globalThis<"u"?globalThis:t||self).dayjs=e()})(_S,function(){"use strict";var t=1e3,e=6e4,r=36e5,n="millisecond",i="second",a="minute",s="hour",l="day",u="week",h="month",f="quarter",d="year",p="date",m="Invalid Date",g=/^(\d{4})[-/]?(\d{1,2})?[-/]?(\d{0,2})[Tt\s]*(\d{1,2})?:?(\d{1,2})?:?(\d{1,2})?[.:]?(\d+)?$/,y=/\[([^\]]+)]|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,v={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:o(function(k){var R=["th","st","nd","rd"],C=k%100;return"["+k+(R[(C-20)%10]||R[C]||R[0])+"]"},"ordinal")},x=o(function(k,R,C){var O=String(k);return!O||O.length>=R?k:""+Array(R+1-O.length).join(C)+k},"m"),b={s:x,z:o(function(k){var R=-k.utcOffset(),C=Math.abs(R),O=Math.floor(C/60),N=C%60;return(R<=0?"+":"-")+x(O,2,"0")+":"+x(N,2,"0")},"z"),m:o(function k(R,C){if(R.date()1)return k(F[0])}else{var B=R.name;_[B]=R,N=B}return!O&&N&&(w=N),N||!O&&w},"t"),S=o(function(k,R){if(E(k))return k.clone();var C=typeof R=="object"?R:{};return C.date=k,C.args=arguments,new I(C)},"O"),A=b;A.l=L,A.i=E,A.w=function(k,R){return S(k,{locale:R.$L,utc:R.$u,x:R.$x,$offset:R.$offset})};var I=function(){function k(C){this.$L=L(C.locale,null,!0),this.parse(C),this.$x=this.$x||C.x||{},this[T]=!0}o(k,"M");var R=k.prototype;return R.parse=function(C){this.$d=function(O){var N=O.date,P=O.utc;if(N===null)return new Date(NaN);if(A.u(N))return new Date;if(N instanceof Date)return new Date(N);if(typeof N=="string"&&!/Z$/i.test(N)){var F=N.match(g);if(F){var B=F[2]-1||0,G=(F[7]||"0").substring(0,3);return P?new Date(Date.UTC(F[1],B,F[3]||1,F[4]||0,F[5]||0,F[6]||0,G)):new Date(F[1],B,F[3]||1,F[4]||0,F[5]||0,F[6]||0,G)}}return new Date(N)}(C),this.init()},R.init=function(){var C=this.$d;this.$y=C.getFullYear(),this.$M=C.getMonth(),this.$D=C.getDate(),this.$W=C.getDay(),this.$H=C.getHours(),this.$m=C.getMinutes(),this.$s=C.getSeconds(),this.$ms=C.getMilliseconds()},R.$utils=function(){return A},R.isValid=function(){return this.$d.toString()!==m},R.isSame=function(C,O){var N=S(C);return this.startOf(O)<=N&&N<=this.endOf(O)},R.isAfter=function(C,O){return S(C){"use strict";IF=Ji(Vb(),1),au={trace:0,debug:1,info:2,warn:3,error:4,fatal:5},Y={trace:o((...t)=>{},"trace"),debug:o((...t)=>{},"debug"),info:o((...t)=>{},"info"),warn:o((...t)=>{},"warn"),error:o((...t)=>{},"error"),fatal:o((...t)=>{},"fatal")},J1=o(function(t="fatal"){let e=au.fatal;typeof t=="string"?t.toLowerCase()in au&&(e=au[t]):typeof t=="number"&&(e=t),Y.trace=()=>{},Y.debug=()=>{},Y.info=()=>{},Y.warn=()=>{},Y.error=()=>{},Y.fatal=()=>{},e<=au.fatal&&(Y.fatal=console.error?console.error.bind(console,Ao("FATAL"),"color: orange"):console.log.bind(console,"\x1B[35m",Ao("FATAL"))),e<=au.error&&(Y.error=console.error?console.error.bind(console,Ao("ERROR"),"color: orange"):console.log.bind(console,"\x1B[31m",Ao("ERROR"))),e<=au.warn&&(Y.warn=console.warn?console.warn.bind(console,Ao("WARN"),"color: orange"):console.log.bind(console,"\x1B[33m",Ao("WARN"))),e<=au.info&&(Y.info=console.info?console.info.bind(console,Ao("INFO"),"color: lightblue"):console.log.bind(console,"\x1B[34m",Ao("INFO"))),e<=au.debug&&(Y.debug=console.debug?console.debug.bind(console,Ao("DEBUG"),"color: lightgreen"):console.log.bind(console,"\x1B[32m",Ao("DEBUG"))),e<=au.trace&&(Y.trace=console.debug?console.debug.bind(console,Ao("TRACE"),"color: lightgreen"):console.log.bind(console,"\x1B[32m",Ao("TRACE")))},"setLogLevel"),Ao=o(t=>`%c${(0,IF.default)().format("ss.SSS")} : ${t} : `,"format")});var uxe,up,DS,OF,Ub=M(()=>{"use strict";uxe=Object.freeze({left:0,top:0,width:16,height:16}),up=Object.freeze({rotate:0,vFlip:!1,hFlip:!1}),DS=Object.freeze({...uxe,...up}),OF=Object.freeze({...DS,body:"",hidden:!1})});var hxe,PF,BF=M(()=>{"use strict";Ub();hxe=Object.freeze({width:null,height:null}),PF=Object.freeze({...hxe,...up})});var Hb,NS,Wb,FF=M(()=>{"use strict";Hb=/^[a-z0-9]+(-[a-z0-9]+)*$/,NS=o((t,e,r,n="")=>{let i=t.split(":");if(t.slice(0,1)==="@"){if(i.length<2||i.length>3)return null;n=i.shift().slice(1)}if(i.length>3||!i.length)return null;if(i.length>1){let l=i.pop(),u=i.pop(),h={provider:i.length>0?i[0]:n,prefix:u,name:l};return e&&!Wb(h)?null:h}let a=i[0],s=a.split("-");if(s.length>1){let l={provider:n,prefix:s.shift(),name:s.join("-")};return e&&!Wb(l)?null:l}if(r&&n===""){let l={provider:n,prefix:"",name:a};return e&&!Wb(l,r)?null:l}return null},"stringToIcon"),Wb=o((t,e)=>t?!!((t.provider===""||t.provider.match(Hb))&&(e&&t.prefix===""||t.prefix.match(Hb))&&t.name.match(Hb)):!1,"validateIconName")});function zF(t,e){let r={};!t.hFlip!=!e.hFlip&&(r.hFlip=!0),!t.vFlip!=!e.vFlip&&(r.vFlip=!0);let n=((t.rotate||0)+(e.rotate||0))%4;return n&&(r.rotate=n),r}var GF=M(()=>{"use strict";o(zF,"mergeIconTransformations")});function RS(t,e){let r=zF(t,e);for(let n in OF)n in up?n in t&&!(n in r)&&(r[n]=up[n]):n in e?r[n]=e[n]:n in t&&(r[n]=t[n]);return r}var $F=M(()=>{"use strict";Ub();GF();o(RS,"mergeIconData")});function VF(t,e){let r=t.icons,n=t.aliases||Object.create(null),i=Object.create(null);function a(s){if(r[s])return i[s]=[];if(!(s in i)){i[s]=null;let l=n[s]&&n[s].parent,u=l&&a(l);u&&(i[s]=[l].concat(u))}return i[s]}return o(a,"resolve"),(e||Object.keys(r).concat(Object.keys(n))).forEach(a),i}var UF=M(()=>{"use strict";o(VF,"getIconsTree")});function HF(t,e,r){let n=t.icons,i=t.aliases||Object.create(null),a={};function s(l){a=RS(n[l]||i[l],a)}return o(s,"parse"),s(e),r.forEach(s),RS(t,a)}function MS(t,e){if(t.icons[e])return HF(t,e,[]);let r=VF(t,[e])[e];return r?HF(t,e,r):null}var WF=M(()=>{"use strict";$F();UF();o(HF,"internalGetIconData");o(MS,"getIconData")});function IS(t,e,r){if(e===1)return t;if(r=r||100,typeof t=="number")return Math.ceil(t*e*r)/r;if(typeof t!="string")return t;let n=t.split(fxe);if(n===null||!n.length)return t;let i=[],a=n.shift(),s=dxe.test(a);for(;;){if(s){let l=parseFloat(a);isNaN(l)?i.push(a):i.push(Math.ceil(l*e*r)/r)}else i.push(a);if(a=n.shift(),a===void 0)return i.join("");s=!s}}var fxe,dxe,YF=M(()=>{"use strict";fxe=/(-?[0-9.]*[0-9]+[0-9.]*)/g,dxe=/^-?[0-9.]*[0-9]+[0-9.]*$/g;o(IS,"calculateSize")});function pxe(t,e="defs"){let r="",n=t.indexOf("<"+e);for(;n>=0;){let i=t.indexOf(">",n),a=t.indexOf("",a);if(s===-1)break;r+=t.slice(i+1,a).trim(),t=t.slice(0,n).trim()+t.slice(s+1)}return{defs:r,content:t}}function mxe(t,e){return t?""+t+""+e:e}function qF(t,e,r){let n=pxe(t);return mxe(n.defs,e+n.content+r)}var XF=M(()=>{"use strict";o(pxe,"splitSVGDefs");o(mxe,"mergeDefsAndContent");o(qF,"wrapSVGContent")});function OS(t,e){let r={...DS,...t},n={...PF,...e},i={left:r.left,top:r.top,width:r.width,height:r.height},a=r.body;[r,n].forEach(y=>{let v=[],x=y.hFlip,b=y.vFlip,w=y.rotate;x?b?w+=2:(v.push("translate("+(i.width+i.left).toString()+" "+(0-i.top).toString()+")"),v.push("scale(-1 1)"),i.top=i.left=0):b&&(v.push("translate("+(0-i.left).toString()+" "+(i.height+i.top).toString()+")"),v.push("scale(1 -1)"),i.top=i.left=0);let _;switch(w<0&&(w-=Math.floor(w/4)*4),w=w%4,w){case 1:_=i.height/2+i.top,v.unshift("rotate(90 "+_.toString()+" "+_.toString()+")");break;case 2:v.unshift("rotate(180 "+(i.width/2+i.left).toString()+" "+(i.height/2+i.top).toString()+")");break;case 3:_=i.width/2+i.left,v.unshift("rotate(-90 "+_.toString()+" "+_.toString()+")");break}w%2===1&&(i.left!==i.top&&(_=i.left,i.left=i.top,i.top=_),i.width!==i.height&&(_=i.width,i.width=i.height,i.height=_)),v.length&&(a=qF(a,'',""))});let s=n.width,l=n.height,u=i.width,h=i.height,f,d;s===null?(d=l===null?"1em":l==="auto"?h:l,f=IS(d,u/h)):(f=s==="auto"?u:s,d=l===null?IS(f,h/u):l==="auto"?h:l);let p={},m=o((y,v)=>{gxe(v)||(p[y]=v.toString())},"setAttr");m("width",f),m("height",d);let g=[i.left,i.top,u,h];return p.viewBox=g.join(" "),{attributes:p,viewBox:g,body:a}}var gxe,jF=M(()=>{"use strict";Ub();BF();YF();XF();gxe=o(t=>t==="unset"||t==="undefined"||t==="none","isUnsetKeyword");o(OS,"iconToSVG")});function PS(t,e=vxe){let r=[],n;for(;n=yxe.exec(t);)r.push(n[1]);if(!r.length)return t;let i="suffix"+(Math.random()*16777216|Date.now()).toString(16);return r.forEach(a=>{let s=typeof e=="function"?e(a):e+(xxe++).toString(),l=a.replace(/[.*+?^${}()|[\]\\]/g,"\\$&");t=t.replace(new RegExp('([#;"])('+l+')([")]|\\.[a-z])',"g"),"$1"+s+i+"$3")}),t=t.replace(new RegExp(i,"g"),""),t}var yxe,vxe,xxe,KF=M(()=>{"use strict";yxe=/\sid="(\S+)"/g,vxe="IconifyId"+Date.now().toString(16)+(Math.random()*16777216|0).toString(16),xxe=0;o(PS,"replaceIDs")});function BS(t,e){let r=t.indexOf("xlink:")===-1?"":' xmlns:xlink="http://www.w3.org/1999/xlink"';for(let n in e)r+=" "+n+'="'+e[n]+'"';return'"+t+""}var QF=M(()=>{"use strict";o(BS,"iconToHTML")});var JF=Ei((Pat,ZF)=>{"use strict";var hp=1e3,fp=hp*60,dp=fp*60,jf=dp*24,bxe=jf*7,wxe=jf*365.25;ZF.exports=function(t,e){e=e||{};var r=typeof t;if(r==="string"&&t.length>0)return Txe(t);if(r==="number"&&isFinite(t))return e.long?Exe(t):kxe(t);throw new Error("val is not a non-empty string or a valid number. val="+JSON.stringify(t))};function Txe(t){if(t=String(t),!(t.length>100)){var e=/^(-?(?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(t);if(e){var r=parseFloat(e[1]),n=(e[2]||"ms").toLowerCase();switch(n){case"years":case"year":case"yrs":case"yr":case"y":return r*wxe;case"weeks":case"week":case"w":return r*bxe;case"days":case"day":case"d":return r*jf;case"hours":case"hour":case"hrs":case"hr":case"h":return r*dp;case"minutes":case"minute":case"mins":case"min":case"m":return r*fp;case"seconds":case"second":case"secs":case"sec":case"s":return r*hp;case"milliseconds":case"millisecond":case"msecs":case"msec":case"ms":return r;default:return}}}}o(Txe,"parse");function kxe(t){var e=Math.abs(t);return e>=jf?Math.round(t/jf)+"d":e>=dp?Math.round(t/dp)+"h":e>=fp?Math.round(t/fp)+"m":e>=hp?Math.round(t/hp)+"s":t+"ms"}o(kxe,"fmtShort");function Exe(t){var e=Math.abs(t);return e>=jf?Yb(t,e,jf,"day"):e>=dp?Yb(t,e,dp,"hour"):e>=fp?Yb(t,e,fp,"minute"):e>=hp?Yb(t,e,hp,"second"):t+" ms"}o(Exe,"fmtLong");function Yb(t,e,r,n){var i=e>=r*1.5;return Math.round(t/r)+" "+n+(i?"s":"")}o(Yb,"plural")});var tz=Ei((Fat,ez)=>{"use strict";function Sxe(t){r.debug=r,r.default=r,r.coerce=u,r.disable=a,r.enable=i,r.enabled=s,r.humanize=JF(),r.destroy=h,Object.keys(t).forEach(f=>{r[f]=t[f]}),r.names=[],r.skips=[],r.formatters={};function e(f){let d=0;for(let p=0;p{if(E==="%%")return"%";_++;let S=r.formatters[L];if(typeof S=="function"){let A=v[_];E=S.call(x,A),v.splice(_,1),_--}return E}),r.formatArgs.call(x,v),(x.log||r.log).apply(x,v)}return o(y,"debug"),y.namespace=f,y.useColors=r.useColors(),y.color=r.selectColor(f),y.extend=n,y.destroy=r.destroy,Object.defineProperty(y,"enabled",{enumerable:!0,configurable:!1,get:o(()=>p!==null?p:(m!==r.namespaces&&(m=r.namespaces,g=r.enabled(f)),g),"get"),set:o(v=>{p=v},"set")}),typeof r.init=="function"&&r.init(y),y}o(r,"createDebug");function n(f,d){let p=r(this.namespace+(typeof d>"u"?":":d)+f);return p.log=this.log,p}o(n,"extend");function i(f){r.save(f),r.namespaces=f,r.names=[],r.skips=[];let d,p=(typeof f=="string"?f:"").split(/[\s,]+/),m=p.length;for(d=0;d"-"+d)].join(",");return r.enable(""),f}o(a,"disable");function s(f){if(f[f.length-1]==="*")return!0;let d,p;for(d=0,p=r.skips.length;d{"use strict";Qs.formatArgs=Axe;Qs.save=_xe;Qs.load=Lxe;Qs.useColors=Cxe;Qs.storage=Dxe();Qs.destroy=(()=>{let t=!1;return()=>{t||(t=!0,console.warn("Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`."))}})();Qs.colors=["#0000CC","#0000FF","#0033CC","#0033FF","#0066CC","#0066FF","#0099CC","#0099FF","#00CC00","#00CC33","#00CC66","#00CC99","#00CCCC","#00CCFF","#3300CC","#3300FF","#3333CC","#3333FF","#3366CC","#3366FF","#3399CC","#3399FF","#33CC00","#33CC33","#33CC66","#33CC99","#33CCCC","#33CCFF","#6600CC","#6600FF","#6633CC","#6633FF","#66CC00","#66CC33","#9900CC","#9900FF","#9933CC","#9933FF","#99CC00","#99CC33","#CC0000","#CC0033","#CC0066","#CC0099","#CC00CC","#CC00FF","#CC3300","#CC3333","#CC3366","#CC3399","#CC33CC","#CC33FF","#CC6600","#CC6633","#CC9900","#CC9933","#CCCC00","#CCCC33","#FF0000","#FF0033","#FF0066","#FF0099","#FF00CC","#FF00FF","#FF3300","#FF3333","#FF3366","#FF3399","#FF33CC","#FF33FF","#FF6600","#FF6633","#FF9900","#FF9933","#FFCC00","#FFCC33"];function Cxe(){if(typeof window<"u"&&window.process&&(window.process.type==="renderer"||window.process.__nwjs))return!0;if(typeof navigator<"u"&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/(edge|trident)\/(\d+)/))return!1;let t;return typeof document<"u"&&document.documentElement&&document.documentElement.style&&document.documentElement.style.WebkitAppearance||typeof window<"u"&&window.console&&(window.console.firebug||window.console.exception&&window.console.table)||typeof navigator<"u"&&navigator.userAgent&&(t=navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/))&&parseInt(t[1],10)>=31||typeof navigator<"u"&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/)}o(Cxe,"useColors");function Axe(t){if(t[0]=(this.useColors?"%c":"")+this.namespace+(this.useColors?" %c":" ")+t[0]+(this.useColors?"%c ":" ")+"+"+qb.exports.humanize(this.diff),!this.useColors)return;let e="color: "+this.color;t.splice(1,0,e,"color: inherit");let r=0,n=0;t[0].replace(/%[a-zA-Z%]/g,i=>{i!=="%%"&&(r++,i==="%c"&&(n=r))}),t.splice(n,0,e)}o(Axe,"formatArgs");Qs.log=console.debug||console.log||(()=>{});function _xe(t){try{t?Qs.storage.setItem("debug",t):Qs.storage.removeItem("debug")}catch{}}o(_xe,"save");function Lxe(){let t;try{t=Qs.storage.getItem("debug")}catch{}return!t&&typeof process<"u"&&"env"in process&&(t=process.env.DEBUG),t}o(Lxe,"load");function Dxe(){try{return localStorage}catch{}}o(Dxe,"localstorage");qb.exports=tz()(Qs);var{formatters:Nxe}=qb.exports;Nxe.j=function(t){try{return JSON.stringify(t)}catch(e){return"[UnexpectedJSONParseError]: "+e.message}}});var $at,nz=M(()=>{"use strict";FF();WF();jF();KF();QF();$at=Ji(rz(),1)});var zS,FS,iz,Xb,Rxe,_o,su=M(()=>{"use strict";ut();nz();zS={body:'?',height:80,width:80},FS=new Map,iz=new Map,Xb=o(t=>{for(let e of t){if(!e.name)throw new Error('Invalid icon loader. Must have a "name" property with non-empty string value.');if(Y.debug("Registering icon pack:",e.name),"loader"in e)iz.set(e.name,e.loader);else if("icons"in e)FS.set(e.name,e.icons);else throw Y.error("Invalid icon loader:",e),new Error('Invalid icon loader. Must have either "icons" or "loader" property.')}},"registerIconPacks"),Rxe=o(async(t,e)=>{let r=NS(t,!0,e!==void 0);if(!r)throw new Error(`Invalid icon name: ${t}`);let n=r.prefix||e;if(!n)throw new Error(`Icon name must contain a prefix: ${t}`);let i=FS.get(n);if(!i){let s=iz.get(n);if(!s)throw new Error(`Icon set not found: ${r.prefix}`);try{i={...await s(),prefix:n},FS.set(n,i)}catch(l){throw Y.error(l),new Error(`Failed to load icon set: ${r.prefix}`)}}let a=MS(i,r.name);if(!a)throw new Error(`Icon not found: ${t}`);return a},"getRegisteredIconData"),_o=o(async(t,e)=>{let r;try{r=await Rxe(t,e?.fallbackPrefix)}catch(a){Y.error(a),r=zS}let n=OS(r,e);return BS(PS(n.body),n.attributes)},"getIconSVG")});function jb(t){for(var e=[],r=1;r{"use strict";o(jb,"dedent")});var Kb,Kf,az,Qb=M(()=>{"use strict";Kb=/^-{3}\s*[\n\r](.*?)[\n\r]-{3}\s*[\n\r]+/s,Kf=/%{2}{\s*(?:(\w+)\s*:|(\w+))\s*(?:(\w+)|((?:(?!}%{2}).|\r?\n)*))?\s*(?:}%{2})?/gi,az=/\s*%%.*\n/gm});var pp,$S=M(()=>{"use strict";pp=class extends Error{static{o(this,"UnknownDiagramError")}constructor(e){super(e),this.name="UnknownDiagramError"}}});var Qf,mp,Zb,VS,sz,Zf=M(()=>{"use strict";ut();Qb();$S();Qf={},mp=o(function(t,e){t=t.replace(Kb,"").replace(Kf,"").replace(az,` +`);for(let[r,{detector:n}]of Object.entries(Qf))if(n(t,e))return r;throw new pp(`No diagram type detected matching given configuration for text: ${t}`)},"detectType"),Zb=o((...t)=>{for(let{id:e,detector:r,loader:n}of t)VS(e,r,n)},"registerLazyLoadedDiagrams"),VS=o((t,e,r)=>{Qf[t]&&Y.warn(`Detector with key ${t} already exists. Overwriting.`),Qf[t]={detector:e,loader:r},Y.debug(`Detector with key ${t} added${r?" with loader":""}`)},"addDetector"),sz=o(t=>Qf[t].loader,"getDiagramLoader")});var ey,oz,US=M(()=>{"use strict";ey=function(){var t=o(function($e,ye,X,fe){for(X=X||{},fe=$e.length;fe--;X[$e[fe]]=ye);return X},"o"),e=[1,24],r=[1,25],n=[1,26],i=[1,27],a=[1,28],s=[1,63],l=[1,64],u=[1,65],h=[1,66],f=[1,67],d=[1,68],p=[1,69],m=[1,29],g=[1,30],y=[1,31],v=[1,32],x=[1,33],b=[1,34],w=[1,35],_=[1,36],T=[1,37],E=[1,38],L=[1,39],S=[1,40],A=[1,41],I=[1,42],D=[1,43],k=[1,44],R=[1,45],C=[1,46],O=[1,47],N=[1,48],P=[1,50],F=[1,51],B=[1,52],G=[1,53],z=[1,54],W=[1,55],Z=[1,56],j=[1,57],oe=[1,58],K=[1,59],ee=[1,60],J=[14,42],H=[14,34,36,37,38,39,40,41,42,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74],q=[12,14,34,36,37,38,39,40,41,42,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74],Q=[1,82],ae=[1,83],ue=[1,84],ce=[1,85],te=[12,14,42],Ne=[12,14,33,42],se=[12,14,33,42,76,77,79,80],ke=[12,33],Re=[34,36,37,38,39,40,41,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74],Ce={trace:o(function(){},"trace"),yy:{},symbols_:{error:2,start:3,mermaidDoc:4,direction:5,direction_tb:6,direction_bt:7,direction_rl:8,direction_lr:9,graphConfig:10,C4_CONTEXT:11,NEWLINE:12,statements:13,EOF:14,C4_CONTAINER:15,C4_COMPONENT:16,C4_DYNAMIC:17,C4_DEPLOYMENT:18,otherStatements:19,diagramStatements:20,otherStatement:21,title:22,accDescription:23,acc_title:24,acc_title_value:25,acc_descr:26,acc_descr_value:27,acc_descr_multiline_value:28,boundaryStatement:29,boundaryStartStatement:30,boundaryStopStatement:31,boundaryStart:32,LBRACE:33,ENTERPRISE_BOUNDARY:34,attributes:35,SYSTEM_BOUNDARY:36,BOUNDARY:37,CONTAINER_BOUNDARY:38,NODE:39,NODE_L:40,NODE_R:41,RBRACE:42,diagramStatement:43,PERSON:44,PERSON_EXT:45,SYSTEM:46,SYSTEM_DB:47,SYSTEM_QUEUE:48,SYSTEM_EXT:49,SYSTEM_EXT_DB:50,SYSTEM_EXT_QUEUE:51,CONTAINER:52,CONTAINER_DB:53,CONTAINER_QUEUE:54,CONTAINER_EXT:55,CONTAINER_EXT_DB:56,CONTAINER_EXT_QUEUE:57,COMPONENT:58,COMPONENT_DB:59,COMPONENT_QUEUE:60,COMPONENT_EXT:61,COMPONENT_EXT_DB:62,COMPONENT_EXT_QUEUE:63,REL:64,BIREL:65,REL_U:66,REL_D:67,REL_L:68,REL_R:69,REL_B:70,REL_INDEX:71,UPDATE_EL_STYLE:72,UPDATE_REL_STYLE:73,UPDATE_LAYOUT_CONFIG:74,attribute:75,STR:76,STR_KEY:77,STR_VALUE:78,ATTRIBUTE:79,ATTRIBUTE_EMPTY:80,$accept:0,$end:1},terminals_:{2:"error",6:"direction_tb",7:"direction_bt",8:"direction_rl",9:"direction_lr",11:"C4_CONTEXT",12:"NEWLINE",14:"EOF",15:"C4_CONTAINER",16:"C4_COMPONENT",17:"C4_DYNAMIC",18:"C4_DEPLOYMENT",22:"title",23:"accDescription",24:"acc_title",25:"acc_title_value",26:"acc_descr",27:"acc_descr_value",28:"acc_descr_multiline_value",33:"LBRACE",34:"ENTERPRISE_BOUNDARY",36:"SYSTEM_BOUNDARY",37:"BOUNDARY",38:"CONTAINER_BOUNDARY",39:"NODE",40:"NODE_L",41:"NODE_R",42:"RBRACE",44:"PERSON",45:"PERSON_EXT",46:"SYSTEM",47:"SYSTEM_DB",48:"SYSTEM_QUEUE",49:"SYSTEM_EXT",50:"SYSTEM_EXT_DB",51:"SYSTEM_EXT_QUEUE",52:"CONTAINER",53:"CONTAINER_DB",54:"CONTAINER_QUEUE",55:"CONTAINER_EXT",56:"CONTAINER_EXT_DB",57:"CONTAINER_EXT_QUEUE",58:"COMPONENT",59:"COMPONENT_DB",60:"COMPONENT_QUEUE",61:"COMPONENT_EXT",62:"COMPONENT_EXT_DB",63:"COMPONENT_EXT_QUEUE",64:"REL",65:"BIREL",66:"REL_U",67:"REL_D",68:"REL_L",69:"REL_R",70:"REL_B",71:"REL_INDEX",72:"UPDATE_EL_STYLE",73:"UPDATE_REL_STYLE",74:"UPDATE_LAYOUT_CONFIG",76:"STR",77:"STR_KEY",78:"STR_VALUE",79:"ATTRIBUTE",80:"ATTRIBUTE_EMPTY"},productions_:[0,[3,1],[3,1],[5,1],[5,1],[5,1],[5,1],[4,1],[10,4],[10,4],[10,4],[10,4],[10,4],[13,1],[13,1],[13,2],[19,1],[19,2],[19,3],[21,1],[21,1],[21,2],[21,2],[21,1],[29,3],[30,3],[30,3],[30,4],[32,2],[32,2],[32,2],[32,2],[32,2],[32,2],[32,2],[31,1],[20,1],[20,2],[20,3],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,1],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[35,1],[35,2],[75,1],[75,2],[75,1],[75,1]],performAction:o(function(ye,X,fe,he,ge,ne,ve){var U=ne.length-1;switch(ge){case 3:he.setDirection("TB");break;case 4:he.setDirection("BT");break;case 5:he.setDirection("RL");break;case 6:he.setDirection("LR");break;case 8:case 9:case 10:case 11:case 12:he.setC4Type(ne[U-3]);break;case 19:he.setTitle(ne[U].substring(6)),this.$=ne[U].substring(6);break;case 20:he.setAccDescription(ne[U].substring(15)),this.$=ne[U].substring(15);break;case 21:this.$=ne[U].trim(),he.setTitle(this.$);break;case 22:case 23:this.$=ne[U].trim(),he.setAccDescription(this.$);break;case 28:ne[U].splice(2,0,"ENTERPRISE"),he.addPersonOrSystemBoundary(...ne[U]),this.$=ne[U];break;case 29:ne[U].splice(2,0,"SYSTEM"),he.addPersonOrSystemBoundary(...ne[U]),this.$=ne[U];break;case 30:he.addPersonOrSystemBoundary(...ne[U]),this.$=ne[U];break;case 31:ne[U].splice(2,0,"CONTAINER"),he.addContainerBoundary(...ne[U]),this.$=ne[U];break;case 32:he.addDeploymentNode("node",...ne[U]),this.$=ne[U];break;case 33:he.addDeploymentNode("nodeL",...ne[U]),this.$=ne[U];break;case 34:he.addDeploymentNode("nodeR",...ne[U]),this.$=ne[U];break;case 35:he.popBoundaryParseStack();break;case 39:he.addPersonOrSystem("person",...ne[U]),this.$=ne[U];break;case 40:he.addPersonOrSystem("external_person",...ne[U]),this.$=ne[U];break;case 41:he.addPersonOrSystem("system",...ne[U]),this.$=ne[U];break;case 42:he.addPersonOrSystem("system_db",...ne[U]),this.$=ne[U];break;case 43:he.addPersonOrSystem("system_queue",...ne[U]),this.$=ne[U];break;case 44:he.addPersonOrSystem("external_system",...ne[U]),this.$=ne[U];break;case 45:he.addPersonOrSystem("external_system_db",...ne[U]),this.$=ne[U];break;case 46:he.addPersonOrSystem("external_system_queue",...ne[U]),this.$=ne[U];break;case 47:he.addContainer("container",...ne[U]),this.$=ne[U];break;case 48:he.addContainer("container_db",...ne[U]),this.$=ne[U];break;case 49:he.addContainer("container_queue",...ne[U]),this.$=ne[U];break;case 50:he.addContainer("external_container",...ne[U]),this.$=ne[U];break;case 51:he.addContainer("external_container_db",...ne[U]),this.$=ne[U];break;case 52:he.addContainer("external_container_queue",...ne[U]),this.$=ne[U];break;case 53:he.addComponent("component",...ne[U]),this.$=ne[U];break;case 54:he.addComponent("component_db",...ne[U]),this.$=ne[U];break;case 55:he.addComponent("component_queue",...ne[U]),this.$=ne[U];break;case 56:he.addComponent("external_component",...ne[U]),this.$=ne[U];break;case 57:he.addComponent("external_component_db",...ne[U]),this.$=ne[U];break;case 58:he.addComponent("external_component_queue",...ne[U]),this.$=ne[U];break;case 60:he.addRel("rel",...ne[U]),this.$=ne[U];break;case 61:he.addRel("birel",...ne[U]),this.$=ne[U];break;case 62:he.addRel("rel_u",...ne[U]),this.$=ne[U];break;case 63:he.addRel("rel_d",...ne[U]),this.$=ne[U];break;case 64:he.addRel("rel_l",...ne[U]),this.$=ne[U];break;case 65:he.addRel("rel_r",...ne[U]),this.$=ne[U];break;case 66:he.addRel("rel_b",...ne[U]),this.$=ne[U];break;case 67:ne[U].splice(0,1),he.addRel("rel",...ne[U]),this.$=ne[U];break;case 68:he.updateElStyle("update_el_style",...ne[U]),this.$=ne[U];break;case 69:he.updateRelStyle("update_rel_style",...ne[U]),this.$=ne[U];break;case 70:he.updateLayoutConfig("update_layout_config",...ne[U]),this.$=ne[U];break;case 71:this.$=[ne[U]];break;case 72:ne[U].unshift(ne[U-1]),this.$=ne[U];break;case 73:case 75:this.$=ne[U].trim();break;case 74:let Te={};Te[ne[U-1].trim()]=ne[U].trim(),this.$=Te;break;case 76:this.$="";break}},"anonymous"),table:[{3:1,4:2,5:3,6:[1,5],7:[1,6],8:[1,7],9:[1,8],10:4,11:[1,9],15:[1,10],16:[1,11],17:[1,12],18:[1,13]},{1:[3]},{1:[2,1]},{1:[2,2]},{1:[2,7]},{1:[2,3]},{1:[2,4]},{1:[2,5]},{1:[2,6]},{12:[1,14]},{12:[1,15]},{12:[1,16]},{12:[1,17]},{12:[1,18]},{13:19,19:20,20:21,21:22,22:e,23:r,24:n,26:i,28:a,29:49,30:61,32:62,34:s,36:l,37:u,38:h,39:f,40:d,41:p,43:23,44:m,45:g,46:y,47:v,48:x,49:b,50:w,51:_,52:T,53:E,54:L,55:S,56:A,57:I,58:D,59:k,60:R,61:C,62:O,63:N,64:P,65:F,66:B,67:G,68:z,69:W,70:Z,71:j,72:oe,73:K,74:ee},{13:70,19:20,20:21,21:22,22:e,23:r,24:n,26:i,28:a,29:49,30:61,32:62,34:s,36:l,37:u,38:h,39:f,40:d,41:p,43:23,44:m,45:g,46:y,47:v,48:x,49:b,50:w,51:_,52:T,53:E,54:L,55:S,56:A,57:I,58:D,59:k,60:R,61:C,62:O,63:N,64:P,65:F,66:B,67:G,68:z,69:W,70:Z,71:j,72:oe,73:K,74:ee},{13:71,19:20,20:21,21:22,22:e,23:r,24:n,26:i,28:a,29:49,30:61,32:62,34:s,36:l,37:u,38:h,39:f,40:d,41:p,43:23,44:m,45:g,46:y,47:v,48:x,49:b,50:w,51:_,52:T,53:E,54:L,55:S,56:A,57:I,58:D,59:k,60:R,61:C,62:O,63:N,64:P,65:F,66:B,67:G,68:z,69:W,70:Z,71:j,72:oe,73:K,74:ee},{13:72,19:20,20:21,21:22,22:e,23:r,24:n,26:i,28:a,29:49,30:61,32:62,34:s,36:l,37:u,38:h,39:f,40:d,41:p,43:23,44:m,45:g,46:y,47:v,48:x,49:b,50:w,51:_,52:T,53:E,54:L,55:S,56:A,57:I,58:D,59:k,60:R,61:C,62:O,63:N,64:P,65:F,66:B,67:G,68:z,69:W,70:Z,71:j,72:oe,73:K,74:ee},{13:73,19:20,20:21,21:22,22:e,23:r,24:n,26:i,28:a,29:49,30:61,32:62,34:s,36:l,37:u,38:h,39:f,40:d,41:p,43:23,44:m,45:g,46:y,47:v,48:x,49:b,50:w,51:_,52:T,53:E,54:L,55:S,56:A,57:I,58:D,59:k,60:R,61:C,62:O,63:N,64:P,65:F,66:B,67:G,68:z,69:W,70:Z,71:j,72:oe,73:K,74:ee},{14:[1,74]},t(J,[2,13],{43:23,29:49,30:61,32:62,20:75,34:s,36:l,37:u,38:h,39:f,40:d,41:p,44:m,45:g,46:y,47:v,48:x,49:b,50:w,51:_,52:T,53:E,54:L,55:S,56:A,57:I,58:D,59:k,60:R,61:C,62:O,63:N,64:P,65:F,66:B,67:G,68:z,69:W,70:Z,71:j,72:oe,73:K,74:ee}),t(J,[2,14]),t(H,[2,16],{12:[1,76]}),t(J,[2,36],{12:[1,77]}),t(q,[2,19]),t(q,[2,20]),{25:[1,78]},{27:[1,79]},t(q,[2,23]),{35:80,75:81,76:Q,77:ae,79:ue,80:ce},{35:86,75:81,76:Q,77:ae,79:ue,80:ce},{35:87,75:81,76:Q,77:ae,79:ue,80:ce},{35:88,75:81,76:Q,77:ae,79:ue,80:ce},{35:89,75:81,76:Q,77:ae,79:ue,80:ce},{35:90,75:81,76:Q,77:ae,79:ue,80:ce},{35:91,75:81,76:Q,77:ae,79:ue,80:ce},{35:92,75:81,76:Q,77:ae,79:ue,80:ce},{35:93,75:81,76:Q,77:ae,79:ue,80:ce},{35:94,75:81,76:Q,77:ae,79:ue,80:ce},{35:95,75:81,76:Q,77:ae,79:ue,80:ce},{35:96,75:81,76:Q,77:ae,79:ue,80:ce},{35:97,75:81,76:Q,77:ae,79:ue,80:ce},{35:98,75:81,76:Q,77:ae,79:ue,80:ce},{35:99,75:81,76:Q,77:ae,79:ue,80:ce},{35:100,75:81,76:Q,77:ae,79:ue,80:ce},{35:101,75:81,76:Q,77:ae,79:ue,80:ce},{35:102,75:81,76:Q,77:ae,79:ue,80:ce},{35:103,75:81,76:Q,77:ae,79:ue,80:ce},{35:104,75:81,76:Q,77:ae,79:ue,80:ce},t(te,[2,59]),{35:105,75:81,76:Q,77:ae,79:ue,80:ce},{35:106,75:81,76:Q,77:ae,79:ue,80:ce},{35:107,75:81,76:Q,77:ae,79:ue,80:ce},{35:108,75:81,76:Q,77:ae,79:ue,80:ce},{35:109,75:81,76:Q,77:ae,79:ue,80:ce},{35:110,75:81,76:Q,77:ae,79:ue,80:ce},{35:111,75:81,76:Q,77:ae,79:ue,80:ce},{35:112,75:81,76:Q,77:ae,79:ue,80:ce},{35:113,75:81,76:Q,77:ae,79:ue,80:ce},{35:114,75:81,76:Q,77:ae,79:ue,80:ce},{35:115,75:81,76:Q,77:ae,79:ue,80:ce},{20:116,29:49,30:61,32:62,34:s,36:l,37:u,38:h,39:f,40:d,41:p,43:23,44:m,45:g,46:y,47:v,48:x,49:b,50:w,51:_,52:T,53:E,54:L,55:S,56:A,57:I,58:D,59:k,60:R,61:C,62:O,63:N,64:P,65:F,66:B,67:G,68:z,69:W,70:Z,71:j,72:oe,73:K,74:ee},{12:[1,118],33:[1,117]},{35:119,75:81,76:Q,77:ae,79:ue,80:ce},{35:120,75:81,76:Q,77:ae,79:ue,80:ce},{35:121,75:81,76:Q,77:ae,79:ue,80:ce},{35:122,75:81,76:Q,77:ae,79:ue,80:ce},{35:123,75:81,76:Q,77:ae,79:ue,80:ce},{35:124,75:81,76:Q,77:ae,79:ue,80:ce},{35:125,75:81,76:Q,77:ae,79:ue,80:ce},{14:[1,126]},{14:[1,127]},{14:[1,128]},{14:[1,129]},{1:[2,8]},t(J,[2,15]),t(H,[2,17],{21:22,19:130,22:e,23:r,24:n,26:i,28:a}),t(J,[2,37],{19:20,20:21,21:22,43:23,29:49,30:61,32:62,13:131,22:e,23:r,24:n,26:i,28:a,34:s,36:l,37:u,38:h,39:f,40:d,41:p,44:m,45:g,46:y,47:v,48:x,49:b,50:w,51:_,52:T,53:E,54:L,55:S,56:A,57:I,58:D,59:k,60:R,61:C,62:O,63:N,64:P,65:F,66:B,67:G,68:z,69:W,70:Z,71:j,72:oe,73:K,74:ee}),t(q,[2,21]),t(q,[2,22]),t(te,[2,39]),t(Ne,[2,71],{75:81,35:132,76:Q,77:ae,79:ue,80:ce}),t(se,[2,73]),{78:[1,133]},t(se,[2,75]),t(se,[2,76]),t(te,[2,40]),t(te,[2,41]),t(te,[2,42]),t(te,[2,43]),t(te,[2,44]),t(te,[2,45]),t(te,[2,46]),t(te,[2,47]),t(te,[2,48]),t(te,[2,49]),t(te,[2,50]),t(te,[2,51]),t(te,[2,52]),t(te,[2,53]),t(te,[2,54]),t(te,[2,55]),t(te,[2,56]),t(te,[2,57]),t(te,[2,58]),t(te,[2,60]),t(te,[2,61]),t(te,[2,62]),t(te,[2,63]),t(te,[2,64]),t(te,[2,65]),t(te,[2,66]),t(te,[2,67]),t(te,[2,68]),t(te,[2,69]),t(te,[2,70]),{31:134,42:[1,135]},{12:[1,136]},{33:[1,137]},t(ke,[2,28]),t(ke,[2,29]),t(ke,[2,30]),t(ke,[2,31]),t(ke,[2,32]),t(ke,[2,33]),t(ke,[2,34]),{1:[2,9]},{1:[2,10]},{1:[2,11]},{1:[2,12]},t(H,[2,18]),t(J,[2,38]),t(Ne,[2,72]),t(se,[2,74]),t(te,[2,24]),t(te,[2,35]),t(Re,[2,25]),t(Re,[2,26],{12:[1,138]}),t(Re,[2,27])],defaultActions:{2:[2,1],3:[2,2],4:[2,7],5:[2,3],6:[2,4],7:[2,5],8:[2,6],74:[2,8],126:[2,9],127:[2,10],128:[2,11],129:[2,12]},parseError:o(function(ye,X){if(X.recoverable)this.trace(ye);else{var fe=new Error(ye);throw fe.hash=X,fe}},"parseError"),parse:o(function(ye){var X=this,fe=[0],he=[],ge=[null],ne=[],ve=this.table,U="",Te=0,ie=0,Ee=0,Ae=2,Ge=1,Be=ne.slice.call(arguments,1),me=Object.create(this.lexer),He={yy:{}};for(var Oe in this.yy)Object.prototype.hasOwnProperty.call(this.yy,Oe)&&(He.yy[Oe]=this.yy[Oe]);me.setInput(ye,He.yy),He.yy.lexer=me,He.yy.parser=this,typeof me.yylloc>"u"&&(me.yylloc={});var et=me.yylloc;ne.push(et);var bt=me.options&&me.options.ranges;typeof He.yy.parseError=="function"?this.parseError=He.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function kt(Bt){fe.length=fe.length-2*Bt,ge.length=ge.length-Bt,ne.length=ne.length-Bt}o(kt,"popStack");function vt(){var Bt;return Bt=he.pop()||me.lex()||Ge,typeof Bt!="number"&&(Bt instanceof Array&&(he=Bt,Bt=he.pop()),Bt=X.symbols_[Bt]||Bt),Bt}o(vt,"lex");for(var rt,yt,Ue,tt,ht,Et,er={},dt,Je,ct,Ct;;){if(Ue=fe[fe.length-1],this.defaultActions[Ue]?tt=this.defaultActions[Ue]:((rt===null||typeof rt>"u")&&(rt=vt()),tt=ve[Ue]&&ve[Ue][rt]),typeof tt>"u"||!tt.length||!tt[0]){var pt="";Ct=[];for(dt in ve[Ue])this.terminals_[dt]&&dt>Ae&&Ct.push("'"+this.terminals_[dt]+"'");me.showPosition?pt="Parse error on line "+(Te+1)+`: +`+me.showPosition()+` +Expecting `+Ct.join(", ")+", got '"+(this.terminals_[rt]||rt)+"'":pt="Parse error on line "+(Te+1)+": Unexpected "+(rt==Ge?"end of input":"'"+(this.terminals_[rt]||rt)+"'"),this.parseError(pt,{text:me.match,token:this.terminals_[rt]||rt,line:me.yylineno,loc:et,expected:Ct})}if(tt[0]instanceof Array&&tt.length>1)throw new Error("Parse Error: multiple actions possible at state: "+Ue+", token: "+rt);switch(tt[0]){case 1:fe.push(rt),ge.push(me.yytext),ne.push(me.yylloc),fe.push(tt[1]),rt=null,yt?(rt=yt,yt=null):(ie=me.yyleng,U=me.yytext,Te=me.yylineno,et=me.yylloc,Ee>0&&Ee--);break;case 2:if(Je=this.productions_[tt[1]][1],er.$=ge[ge.length-Je],er._$={first_line:ne[ne.length-(Je||1)].first_line,last_line:ne[ne.length-1].last_line,first_column:ne[ne.length-(Je||1)].first_column,last_column:ne[ne.length-1].last_column},bt&&(er._$.range=[ne[ne.length-(Je||1)].range[0],ne[ne.length-1].range[1]]),Et=this.performAction.apply(er,[U,ie,Te,He.yy,tt[1],ge,ne].concat(Be)),typeof Et<"u")return Et;Je&&(fe=fe.slice(0,-1*Je*2),ge=ge.slice(0,-1*Je),ne=ne.slice(0,-1*Je)),fe.push(this.productions_[tt[1]][0]),ge.push(er.$),ne.push(er._$),ct=ve[fe[fe.length-2]][fe[fe.length-1]],fe.push(ct);break;case 3:return!0}}return!0},"parse")},Pe=function(){var $e={EOF:1,parseError:o(function(X,fe){if(this.yy.parser)this.yy.parser.parseError(X,fe);else throw new Error(X)},"parseError"),setInput:o(function(ye,X){return this.yy=X||this.yy||{},this._input=ye,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},"setInput"),input:o(function(){var ye=this._input[0];this.yytext+=ye,this.yyleng++,this.offset++,this.match+=ye,this.matched+=ye;var X=ye.match(/(?:\r\n?|\n).*/g);return X?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),ye},"input"),unput:o(function(ye){var X=ye.length,fe=ye.split(/(?:\r\n?|\n)/g);this._input=ye+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-X),this.offset-=X;var he=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),fe.length-1&&(this.yylineno-=fe.length-1);var ge=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:fe?(fe.length===he.length?this.yylloc.first_column:0)+he[he.length-fe.length].length-fe[0].length:this.yylloc.first_column-X},this.options.ranges&&(this.yylloc.range=[ge[0],ge[0]+this.yyleng-X]),this.yyleng=this.yytext.length,this},"unput"),more:o(function(){return this._more=!0,this},"more"),reject:o(function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true). +`+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},"reject"),less:o(function(ye){this.unput(this.match.slice(ye))},"less"),pastInput:o(function(){var ye=this.matched.substr(0,this.matched.length-this.match.length);return(ye.length>20?"...":"")+ye.substr(-20).replace(/\n/g,"")},"pastInput"),upcomingInput:o(function(){var ye=this.match;return ye.length<20&&(ye+=this._input.substr(0,20-ye.length)),(ye.substr(0,20)+(ye.length>20?"...":"")).replace(/\n/g,"")},"upcomingInput"),showPosition:o(function(){var ye=this.pastInput(),X=new Array(ye.length+1).join("-");return ye+this.upcomingInput()+` +`+X+"^"},"showPosition"),test_match:o(function(ye,X){var fe,he,ge;if(this.options.backtrack_lexer&&(ge={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(ge.yylloc.range=this.yylloc.range.slice(0))),he=ye[0].match(/(?:\r\n?|\n).*/g),he&&(this.yylineno+=he.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:he?he[he.length-1].length-he[he.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+ye[0].length},this.yytext+=ye[0],this.match+=ye[0],this.matches=ye,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(ye[0].length),this.matched+=ye[0],fe=this.performAction.call(this,this.yy,this,X,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),fe)return fe;if(this._backtrack){for(var ne in ge)this[ne]=ge[ne];return!1}return!1},"test_match"),next:o(function(){if(this.done)return this.EOF;this._input||(this.done=!0);var ye,X,fe,he;this._more||(this.yytext="",this.match="");for(var ge=this._currentRules(),ne=0;neX[0].length)){if(X=fe,he=ne,this.options.backtrack_lexer){if(ye=this.test_match(fe,ge[ne]),ye!==!1)return ye;if(this._backtrack){X=!1;continue}else return!1}else if(!this.options.flex)break}return X?(ye=this.test_match(X,ge[he]),ye!==!1?ye:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text. +`+this.showPosition(),{text:"",token:null,line:this.yylineno})},"next"),lex:o(function(){var X=this.next();return X||this.lex()},"lex"),begin:o(function(X){this.conditionStack.push(X)},"begin"),popState:o(function(){var X=this.conditionStack.length-1;return X>0?this.conditionStack.pop():this.conditionStack[0]},"popState"),_currentRules:o(function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},"_currentRules"),topState:o(function(X){return X=this.conditionStack.length-1-Math.abs(X||0),X>=0?this.conditionStack[X]:"INITIAL"},"topState"),pushState:o(function(X){this.begin(X)},"pushState"),stateStackSize:o(function(){return this.conditionStack.length},"stateStackSize"),options:{},performAction:o(function(X,fe,he,ge){var ne=ge;switch(he){case 0:return 6;case 1:return 7;case 2:return 8;case 3:return 9;case 4:return 22;case 5:return 23;case 6:return this.begin("acc_title"),24;break;case 7:return this.popState(),"acc_title_value";break;case 8:return this.begin("acc_descr"),26;break;case 9:return this.popState(),"acc_descr_value";break;case 10:this.begin("acc_descr_multiline");break;case 11:this.popState();break;case 12:return"acc_descr_multiline_value";case 13:break;case 14:c;break;case 15:return 12;case 16:break;case 17:return 11;case 18:return 15;case 19:return 16;case 20:return 17;case 21:return 18;case 22:return this.begin("person_ext"),45;break;case 23:return this.begin("person"),44;break;case 24:return this.begin("system_ext_queue"),51;break;case 25:return this.begin("system_ext_db"),50;break;case 26:return this.begin("system_ext"),49;break;case 27:return this.begin("system_queue"),48;break;case 28:return this.begin("system_db"),47;break;case 29:return this.begin("system"),46;break;case 30:return this.begin("boundary"),37;break;case 31:return this.begin("enterprise_boundary"),34;break;case 32:return this.begin("system_boundary"),36;break;case 33:return this.begin("container_ext_queue"),57;break;case 34:return this.begin("container_ext_db"),56;break;case 35:return this.begin("container_ext"),55;break;case 36:return this.begin("container_queue"),54;break;case 37:return this.begin("container_db"),53;break;case 38:return this.begin("container"),52;break;case 39:return this.begin("container_boundary"),38;break;case 40:return this.begin("component_ext_queue"),63;break;case 41:return this.begin("component_ext_db"),62;break;case 42:return this.begin("component_ext"),61;break;case 43:return this.begin("component_queue"),60;break;case 44:return this.begin("component_db"),59;break;case 45:return this.begin("component"),58;break;case 46:return this.begin("node"),39;break;case 47:return this.begin("node"),39;break;case 48:return this.begin("node_l"),40;break;case 49:return this.begin("node_r"),41;break;case 50:return this.begin("rel"),64;break;case 51:return this.begin("birel"),65;break;case 52:return this.begin("rel_u"),66;break;case 53:return this.begin("rel_u"),66;break;case 54:return this.begin("rel_d"),67;break;case 55:return this.begin("rel_d"),67;break;case 56:return this.begin("rel_l"),68;break;case 57:return this.begin("rel_l"),68;break;case 58:return this.begin("rel_r"),69;break;case 59:return this.begin("rel_r"),69;break;case 60:return this.begin("rel_b"),70;break;case 61:return this.begin("rel_index"),71;break;case 62:return this.begin("update_el_style"),72;break;case 63:return this.begin("update_rel_style"),73;break;case 64:return this.begin("update_layout_config"),74;break;case 65:return"EOF_IN_STRUCT";case 66:return this.begin("attribute"),"ATTRIBUTE_EMPTY";break;case 67:this.begin("attribute");break;case 68:this.popState(),this.popState();break;case 69:return 80;case 70:break;case 71:return 80;case 72:this.begin("string");break;case 73:this.popState();break;case 74:return"STR";case 75:this.begin("string_kv");break;case 76:return this.begin("string_kv_key"),"STR_KEY";break;case 77:this.popState(),this.begin("string_kv_value");break;case 78:return"STR_VALUE";case 79:this.popState(),this.popState();break;case 80:return"STR";case 81:return"LBRACE";case 82:return"RBRACE";case 83:return"SPACE";case 84:return"EOL";case 85:return 14}},"anonymous"),rules:[/^(?:.*direction\s+TB[^\n]*)/,/^(?:.*direction\s+BT[^\n]*)/,/^(?:.*direction\s+RL[^\n]*)/,/^(?:.*direction\s+LR[^\n]*)/,/^(?:title\s[^#\n;]+)/,/^(?:accDescription\s[^#\n;]+)/,/^(?:accTitle\s*:\s*)/,/^(?:(?!\n||)*[^\n]*)/,/^(?:accDescr\s*:\s*)/,/^(?:(?!\n||)*[^\n]*)/,/^(?:accDescr\s*\{\s*)/,/^(?:[\}])/,/^(?:[^\}]*)/,/^(?:%%(?!\{)*[^\n]*(\r?\n?)+)/,/^(?:%%[^\n]*(\r?\n)*)/,/^(?:\s*(\r?\n)+)/,/^(?:\s+)/,/^(?:C4Context\b)/,/^(?:C4Container\b)/,/^(?:C4Component\b)/,/^(?:C4Dynamic\b)/,/^(?:C4Deployment\b)/,/^(?:Person_Ext\b)/,/^(?:Person\b)/,/^(?:SystemQueue_Ext\b)/,/^(?:SystemDb_Ext\b)/,/^(?:System_Ext\b)/,/^(?:SystemQueue\b)/,/^(?:SystemDb\b)/,/^(?:System\b)/,/^(?:Boundary\b)/,/^(?:Enterprise_Boundary\b)/,/^(?:System_Boundary\b)/,/^(?:ContainerQueue_Ext\b)/,/^(?:ContainerDb_Ext\b)/,/^(?:Container_Ext\b)/,/^(?:ContainerQueue\b)/,/^(?:ContainerDb\b)/,/^(?:Container\b)/,/^(?:Container_Boundary\b)/,/^(?:ComponentQueue_Ext\b)/,/^(?:ComponentDb_Ext\b)/,/^(?:Component_Ext\b)/,/^(?:ComponentQueue\b)/,/^(?:ComponentDb\b)/,/^(?:Component\b)/,/^(?:Deployment_Node\b)/,/^(?:Node\b)/,/^(?:Node_L\b)/,/^(?:Node_R\b)/,/^(?:Rel\b)/,/^(?:BiRel\b)/,/^(?:Rel_Up\b)/,/^(?:Rel_U\b)/,/^(?:Rel_Down\b)/,/^(?:Rel_D\b)/,/^(?:Rel_Left\b)/,/^(?:Rel_L\b)/,/^(?:Rel_Right\b)/,/^(?:Rel_R\b)/,/^(?:Rel_Back\b)/,/^(?:RelIndex\b)/,/^(?:UpdateElementStyle\b)/,/^(?:UpdateRelStyle\b)/,/^(?:UpdateLayoutConfig\b)/,/^(?:$)/,/^(?:[(][ ]*[,])/,/^(?:[(])/,/^(?:[)])/,/^(?:,,)/,/^(?:,)/,/^(?:[ ]*["]["])/,/^(?:[ ]*["])/,/^(?:["])/,/^(?:[^"]*)/,/^(?:[ ]*[\$])/,/^(?:[^=]*)/,/^(?:[=][ ]*["])/,/^(?:[^"]+)/,/^(?:["])/,/^(?:[^,]+)/,/^(?:\{)/,/^(?:\})/,/^(?:[\s]+)/,/^(?:[\n\r]+)/,/^(?:$)/],conditions:{acc_descr_multiline:{rules:[11,12],inclusive:!1},acc_descr:{rules:[9],inclusive:!1},acc_title:{rules:[7],inclusive:!1},string_kv_value:{rules:[78,79],inclusive:!1},string_kv_key:{rules:[77],inclusive:!1},string_kv:{rules:[76],inclusive:!1},string:{rules:[73,74],inclusive:!1},attribute:{rules:[68,69,70,71,72,75,80],inclusive:!1},update_layout_config:{rules:[65,66,67,68],inclusive:!1},update_rel_style:{rules:[65,66,67,68],inclusive:!1},update_el_style:{rules:[65,66,67,68],inclusive:!1},rel_b:{rules:[65,66,67,68],inclusive:!1},rel_r:{rules:[65,66,67,68],inclusive:!1},rel_l:{rules:[65,66,67,68],inclusive:!1},rel_d:{rules:[65,66,67,68],inclusive:!1},rel_u:{rules:[65,66,67,68],inclusive:!1},rel_bi:{rules:[],inclusive:!1},rel:{rules:[65,66,67,68],inclusive:!1},node_r:{rules:[65,66,67,68],inclusive:!1},node_l:{rules:[65,66,67,68],inclusive:!1},node:{rules:[65,66,67,68],inclusive:!1},index:{rules:[],inclusive:!1},rel_index:{rules:[65,66,67,68],inclusive:!1},component_ext_queue:{rules:[],inclusive:!1},component_ext_db:{rules:[65,66,67,68],inclusive:!1},component_ext:{rules:[65,66,67,68],inclusive:!1},component_queue:{rules:[65,66,67,68],inclusive:!1},component_db:{rules:[65,66,67,68],inclusive:!1},component:{rules:[65,66,67,68],inclusive:!1},container_boundary:{rules:[65,66,67,68],inclusive:!1},container_ext_queue:{rules:[65,66,67,68],inclusive:!1},container_ext_db:{rules:[65,66,67,68],inclusive:!1},container_ext:{rules:[65,66,67,68],inclusive:!1},container_queue:{rules:[65,66,67,68],inclusive:!1},container_db:{rules:[65,66,67,68],inclusive:!1},container:{rules:[65,66,67,68],inclusive:!1},birel:{rules:[65,66,67,68],inclusive:!1},system_boundary:{rules:[65,66,67,68],inclusive:!1},enterprise_boundary:{rules:[65,66,67,68],inclusive:!1},boundary:{rules:[65,66,67,68],inclusive:!1},system_ext_queue:{rules:[65,66,67,68],inclusive:!1},system_ext_db:{rules:[65,66,67,68],inclusive:!1},system_ext:{rules:[65,66,67,68],inclusive:!1},system_queue:{rules:[65,66,67,68],inclusive:!1},system_db:{rules:[65,66,67,68],inclusive:!1},system:{rules:[65,66,67,68],inclusive:!1},person_ext:{rules:[65,66,67,68],inclusive:!1},person:{rules:[65,66,67,68],inclusive:!1},INITIAL:{rules:[0,1,2,3,4,5,6,8,10,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,81,82,83,84,85],inclusive:!0}}};return $e}();Ce.lexer=Pe;function Ie(){this.yy={}}return o(Ie,"Parser"),Ie.prototype=Ce,Ce.Parser=Ie,new Ie}();ey.parser=ey;oz=ey});var HS,Vn,gp=M(()=>{"use strict";HS=o((t,e,{depth:r=2,clobber:n=!1}={})=>{let i={depth:r,clobber:n};return Array.isArray(e)&&!Array.isArray(t)?(e.forEach(a=>HS(t,a,i)),t):Array.isArray(e)&&Array.isArray(t)?(e.forEach(a=>{t.includes(a)||t.push(a)}),t):t===void 0||r<=0?t!=null&&typeof t=="object"&&typeof e=="object"?Object.assign(t,e):e:(e!==void 0&&typeof t=="object"&&typeof e=="object"&&Object.keys(e).forEach(a=>{typeof e[a]=="object"&&(t[a]===void 0||typeof t[a]=="object")?(t[a]===void 0&&(t[a]=Array.isArray(e[a])?[]:{}),t[a]=HS(t[a],e[a],{depth:r-1,clobber:n})):(n||typeof t[a]!="object"&&typeof e[a]!="object")&&(t[a]=e[a])}),t)},"assignWithDepth"),Vn=HS});var Jb,lz,cz=M(()=>{"use strict";Jb={min:{r:0,g:0,b:0,s:0,l:0,a:0},max:{r:255,g:255,b:255,h:360,s:100,l:100,a:1},clamp:{r:o(t=>t>=255?255:t<0?0:t,"r"),g:o(t=>t>=255?255:t<0?0:t,"g"),b:o(t=>t>=255?255:t<0?0:t,"b"),h:o(t=>t%360,"h"),s:o(t=>t>=100?100:t<0?0:t,"s"),l:o(t=>t>=100?100:t<0?0:t,"l"),a:o(t=>t>=1?1:t<0?0:t,"a")},toLinear:o(t=>{let e=t/255;return t>.03928?Math.pow((e+.055)/1.055,2.4):e/12.92},"toLinear"),hue2rgb:o((t,e,r)=>(r<0&&(r+=1),r>1&&(r-=1),r<.16666666666666666?t+(e-t)*6*r:r<.5?e:r<.6666666666666666?t+(e-t)*(.6666666666666666-r)*6:t),"hue2rgb"),hsl2rgb:o(({h:t,s:e,l:r},n)=>{if(!e)return r*2.55;t/=360,e/=100,r/=100;let i=r<.5?r*(1+e):r+e-r*e,a=2*r-i;switch(n){case"r":return Jb.hue2rgb(a,i,t+.3333333333333333)*255;case"g":return Jb.hue2rgb(a,i,t)*255;case"b":return Jb.hue2rgb(a,i,t-.3333333333333333)*255}},"hsl2rgb"),rgb2hsl:o(({r:t,g:e,b:r},n)=>{t/=255,e/=255,r/=255;let i=Math.max(t,e,r),a=Math.min(t,e,r),s=(i+a)/2;if(n==="l")return s*100;if(i===a)return 0;let l=i-a,u=s>.5?l/(2-i-a):l/(i+a);if(n==="s")return u*100;switch(i){case t:return((e-r)/l+(e{"use strict";Mxe={clamp:o((t,e,r)=>e>r?Math.min(e,Math.max(r,t)):Math.min(r,Math.max(e,t)),"clamp"),round:o(t=>Math.round(t*1e10)/1e10,"round")},uz=Mxe});var Ixe,fz,dz=M(()=>{"use strict";Ixe={dec2hex:o(t=>{let e=Math.round(t).toString(16);return e.length>1?e:`0${e}`},"dec2hex")},fz=Ixe});var Oxe,Yt,ac=M(()=>{"use strict";cz();hz();dz();Oxe={channel:lz,lang:uz,unit:fz},Yt=Oxe});var ou,Pi,ty=M(()=>{"use strict";ac();ou={};for(let t=0;t<=255;t++)ou[t]=Yt.unit.dec2hex(t);Pi={ALL:0,RGB:1,HSL:2}});var WS,pz,mz=M(()=>{"use strict";ty();WS=class{static{o(this,"Type")}constructor(){this.type=Pi.ALL}get(){return this.type}set(e){if(this.type&&this.type!==e)throw new Error("Cannot change both RGB and HSL channels at the same time");this.type=e}reset(){this.type=Pi.ALL}is(e){return this.type===e}},pz=WS});var YS,gz,yz=M(()=>{"use strict";ac();mz();ty();YS=class{static{o(this,"Channels")}constructor(e,r){this.color=r,this.changed=!1,this.data=e,this.type=new pz}set(e,r){return this.color=r,this.changed=!1,this.data=e,this.type.type=Pi.ALL,this}_ensureHSL(){let e=this.data,{h:r,s:n,l:i}=e;r===void 0&&(e.h=Yt.channel.rgb2hsl(e,"h")),n===void 0&&(e.s=Yt.channel.rgb2hsl(e,"s")),i===void 0&&(e.l=Yt.channel.rgb2hsl(e,"l"))}_ensureRGB(){let e=this.data,{r,g:n,b:i}=e;r===void 0&&(e.r=Yt.channel.hsl2rgb(e,"r")),n===void 0&&(e.g=Yt.channel.hsl2rgb(e,"g")),i===void 0&&(e.b=Yt.channel.hsl2rgb(e,"b"))}get r(){let e=this.data,r=e.r;return!this.type.is(Pi.HSL)&&r!==void 0?r:(this._ensureHSL(),Yt.channel.hsl2rgb(e,"r"))}get g(){let e=this.data,r=e.g;return!this.type.is(Pi.HSL)&&r!==void 0?r:(this._ensureHSL(),Yt.channel.hsl2rgb(e,"g"))}get b(){let e=this.data,r=e.b;return!this.type.is(Pi.HSL)&&r!==void 0?r:(this._ensureHSL(),Yt.channel.hsl2rgb(e,"b"))}get h(){let e=this.data,r=e.h;return!this.type.is(Pi.RGB)&&r!==void 0?r:(this._ensureRGB(),Yt.channel.rgb2hsl(e,"h"))}get s(){let e=this.data,r=e.s;return!this.type.is(Pi.RGB)&&r!==void 0?r:(this._ensureRGB(),Yt.channel.rgb2hsl(e,"s"))}get l(){let e=this.data,r=e.l;return!this.type.is(Pi.RGB)&&r!==void 0?r:(this._ensureRGB(),Yt.channel.rgb2hsl(e,"l"))}get a(){return this.data.a}set r(e){this.type.set(Pi.RGB),this.changed=!0,this.data.r=e}set g(e){this.type.set(Pi.RGB),this.changed=!0,this.data.g=e}set b(e){this.type.set(Pi.RGB),this.changed=!0,this.data.b=e}set h(e){this.type.set(Pi.HSL),this.changed=!0,this.data.h=e}set s(e){this.type.set(Pi.HSL),this.changed=!0,this.data.s=e}set l(e){this.type.set(Pi.HSL),this.changed=!0,this.data.l=e}set a(e){this.changed=!0,this.data.a=e}},gz=YS});var Pxe,hh,ry=M(()=>{"use strict";yz();Pxe=new gz({r:0,g:0,b:0,a:0},"transparent"),hh=Pxe});var vz,Jf,qS=M(()=>{"use strict";ry();ty();vz={re:/^#((?:[a-f0-9]{2}){2,4}|[a-f0-9]{3})$/i,parse:o(t=>{if(t.charCodeAt(0)!==35)return;let e=t.match(vz.re);if(!e)return;let r=e[1],n=parseInt(r,16),i=r.length,a=i%4===0,s=i>4,l=s?1:17,u=s?8:4,h=a?0:-1,f=s?255:15;return hh.set({r:(n>>u*(h+3)&f)*l,g:(n>>u*(h+2)&f)*l,b:(n>>u*(h+1)&f)*l,a:a?(n&f)*l/255:1},t)},"parse"),stringify:o(t=>{let{r:e,g:r,b:n,a:i}=t;return i<1?`#${ou[Math.round(e)]}${ou[Math.round(r)]}${ou[Math.round(n)]}${ou[Math.round(i*255)]}`:`#${ou[Math.round(e)]}${ou[Math.round(r)]}${ou[Math.round(n)]}`},"stringify")},Jf=vz});var e4,ny,xz=M(()=>{"use strict";ac();ry();e4={re:/^hsla?\(\s*?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e-?\d+)?(?:deg|grad|rad|turn)?)\s*?(?:,|\s)\s*?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e-?\d+)?%)\s*?(?:,|\s)\s*?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e-?\d+)?%)(?:\s*?(?:,|\/)\s*?\+?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e-?\d+)?(%)?))?\s*?\)$/i,hueRe:/^(.+?)(deg|grad|rad|turn)$/i,_hue2deg:o(t=>{let e=t.match(e4.hueRe);if(e){let[,r,n]=e;switch(n){case"grad":return Yt.channel.clamp.h(parseFloat(r)*.9);case"rad":return Yt.channel.clamp.h(parseFloat(r)*180/Math.PI);case"turn":return Yt.channel.clamp.h(parseFloat(r)*360)}}return Yt.channel.clamp.h(parseFloat(t))},"_hue2deg"),parse:o(t=>{let e=t.charCodeAt(0);if(e!==104&&e!==72)return;let r=t.match(e4.re);if(!r)return;let[,n,i,a,s,l]=r;return hh.set({h:e4._hue2deg(n),s:Yt.channel.clamp.s(parseFloat(i)),l:Yt.channel.clamp.l(parseFloat(a)),a:s?Yt.channel.clamp.a(l?parseFloat(s)/100:parseFloat(s)):1},t)},"parse"),stringify:o(t=>{let{h:e,s:r,l:n,a:i}=t;return i<1?`hsla(${Yt.lang.round(e)}, ${Yt.lang.round(r)}%, ${Yt.lang.round(n)}%, ${i})`:`hsl(${Yt.lang.round(e)}, ${Yt.lang.round(r)}%, ${Yt.lang.round(n)}%)`},"stringify")},ny=e4});var t4,XS,bz=M(()=>{"use strict";qS();t4={colors:{aliceblue:"#f0f8ff",antiquewhite:"#faebd7",aqua:"#00ffff",aquamarine:"#7fffd4",azure:"#f0ffff",beige:"#f5f5dc",bisque:"#ffe4c4",black:"#000000",blanchedalmond:"#ffebcd",blue:"#0000ff",blueviolet:"#8a2be2",brown:"#a52a2a",burlywood:"#deb887",cadetblue:"#5f9ea0",chartreuse:"#7fff00",chocolate:"#d2691e",coral:"#ff7f50",cornflowerblue:"#6495ed",cornsilk:"#fff8dc",crimson:"#dc143c",cyanaqua:"#00ffff",darkblue:"#00008b",darkcyan:"#008b8b",darkgoldenrod:"#b8860b",darkgray:"#a9a9a9",darkgreen:"#006400",darkgrey:"#a9a9a9",darkkhaki:"#bdb76b",darkmagenta:"#8b008b",darkolivegreen:"#556b2f",darkorange:"#ff8c00",darkorchid:"#9932cc",darkred:"#8b0000",darksalmon:"#e9967a",darkseagreen:"#8fbc8f",darkslateblue:"#483d8b",darkslategray:"#2f4f4f",darkslategrey:"#2f4f4f",darkturquoise:"#00ced1",darkviolet:"#9400d3",deeppink:"#ff1493",deepskyblue:"#00bfff",dimgray:"#696969",dimgrey:"#696969",dodgerblue:"#1e90ff",firebrick:"#b22222",floralwhite:"#fffaf0",forestgreen:"#228b22",fuchsia:"#ff00ff",gainsboro:"#dcdcdc",ghostwhite:"#f8f8ff",gold:"#ffd700",goldenrod:"#daa520",gray:"#808080",green:"#008000",greenyellow:"#adff2f",grey:"#808080",honeydew:"#f0fff0",hotpink:"#ff69b4",indianred:"#cd5c5c",indigo:"#4b0082",ivory:"#fffff0",khaki:"#f0e68c",lavender:"#e6e6fa",lavenderblush:"#fff0f5",lawngreen:"#7cfc00",lemonchiffon:"#fffacd",lightblue:"#add8e6",lightcoral:"#f08080",lightcyan:"#e0ffff",lightgoldenrodyellow:"#fafad2",lightgray:"#d3d3d3",lightgreen:"#90ee90",lightgrey:"#d3d3d3",lightpink:"#ffb6c1",lightsalmon:"#ffa07a",lightseagreen:"#20b2aa",lightskyblue:"#87cefa",lightslategray:"#778899",lightslategrey:"#778899",lightsteelblue:"#b0c4de",lightyellow:"#ffffe0",lime:"#00ff00",limegreen:"#32cd32",linen:"#faf0e6",magenta:"#ff00ff",maroon:"#800000",mediumaquamarine:"#66cdaa",mediumblue:"#0000cd",mediumorchid:"#ba55d3",mediumpurple:"#9370db",mediumseagreen:"#3cb371",mediumslateblue:"#7b68ee",mediumspringgreen:"#00fa9a",mediumturquoise:"#48d1cc",mediumvioletred:"#c71585",midnightblue:"#191970",mintcream:"#f5fffa",mistyrose:"#ffe4e1",moccasin:"#ffe4b5",navajowhite:"#ffdead",navy:"#000080",oldlace:"#fdf5e6",olive:"#808000",olivedrab:"#6b8e23",orange:"#ffa500",orangered:"#ff4500",orchid:"#da70d6",palegoldenrod:"#eee8aa",palegreen:"#98fb98",paleturquoise:"#afeeee",palevioletred:"#db7093",papayawhip:"#ffefd5",peachpuff:"#ffdab9",peru:"#cd853f",pink:"#ffc0cb",plum:"#dda0dd",powderblue:"#b0e0e6",purple:"#800080",rebeccapurple:"#663399",red:"#ff0000",rosybrown:"#bc8f8f",royalblue:"#4169e1",saddlebrown:"#8b4513",salmon:"#fa8072",sandybrown:"#f4a460",seagreen:"#2e8b57",seashell:"#fff5ee",sienna:"#a0522d",silver:"#c0c0c0",skyblue:"#87ceeb",slateblue:"#6a5acd",slategray:"#708090",slategrey:"#708090",snow:"#fffafa",springgreen:"#00ff7f",tan:"#d2b48c",teal:"#008080",thistle:"#d8bfd8",transparent:"#00000000",turquoise:"#40e0d0",violet:"#ee82ee",wheat:"#f5deb3",white:"#ffffff",whitesmoke:"#f5f5f5",yellow:"#ffff00",yellowgreen:"#9acd32"},parse:o(t=>{t=t.toLowerCase();let e=t4.colors[t];if(e)return Jf.parse(e)},"parse"),stringify:o(t=>{let e=Jf.stringify(t);for(let r in t4.colors)if(t4.colors[r]===e)return r},"stringify")},XS=t4});var wz,iy,Tz=M(()=>{"use strict";ac();ry();wz={re:/^rgba?\(\s*?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e\d+)?(%?))\s*?(?:,|\s)\s*?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e\d+)?(%?))\s*?(?:,|\s)\s*?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e\d+)?(%?))(?:\s*?(?:,|\/)\s*?\+?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e\d+)?(%?)))?\s*?\)$/i,parse:o(t=>{let e=t.charCodeAt(0);if(e!==114&&e!==82)return;let r=t.match(wz.re);if(!r)return;let[,n,i,a,s,l,u,h,f]=r;return hh.set({r:Yt.channel.clamp.r(i?parseFloat(n)*2.55:parseFloat(n)),g:Yt.channel.clamp.g(s?parseFloat(a)*2.55:parseFloat(a)),b:Yt.channel.clamp.b(u?parseFloat(l)*2.55:parseFloat(l)),a:h?Yt.channel.clamp.a(f?parseFloat(h)/100:parseFloat(h)):1},t)},"parse"),stringify:o(t=>{let{r:e,g:r,b:n,a:i}=t;return i<1?`rgba(${Yt.lang.round(e)}, ${Yt.lang.round(r)}, ${Yt.lang.round(n)}, ${Yt.lang.round(i)})`:`rgb(${Yt.lang.round(e)}, ${Yt.lang.round(r)}, ${Yt.lang.round(n)})`},"stringify")},iy=wz});var Bxe,Bi,lu=M(()=>{"use strict";qS();xz();bz();Tz();ty();Bxe={format:{keyword:XS,hex:Jf,rgb:iy,rgba:iy,hsl:ny,hsla:ny},parse:o(t=>{if(typeof t!="string")return t;let e=Jf.parse(t)||iy.parse(t)||ny.parse(t)||XS.parse(t);if(e)return e;throw new Error(`Unsupported color format: "${t}"`)},"parse"),stringify:o(t=>!t.changed&&t.color?t.color:t.type.is(Pi.HSL)||t.data.r===void 0?ny.stringify(t):t.a<1||!Number.isInteger(t.r)||!Number.isInteger(t.g)||!Number.isInteger(t.b)?iy.stringify(t):Jf.stringify(t),"stringify")},Bi=Bxe});var Fxe,r4,jS=M(()=>{"use strict";ac();lu();Fxe=o((t,e)=>{let r=Bi.parse(t);for(let n in e)r[n]=Yt.channel.clamp[n](e[n]);return Bi.stringify(r)},"change"),r4=Fxe});var zxe,Zs,KS=M(()=>{"use strict";ac();ry();lu();jS();zxe=o((t,e,r=0,n=1)=>{if(typeof t!="number")return r4(t,{a:e});let i=hh.set({r:Yt.channel.clamp.r(t),g:Yt.channel.clamp.g(e),b:Yt.channel.clamp.b(r),a:Yt.channel.clamp.a(n)});return Bi.stringify(i)},"rgba"),Zs=zxe});var Gxe,ay,kz=M(()=>{"use strict";ac();lu();Gxe=o((t,e)=>Yt.lang.round(Bi.parse(t)[e]),"channel"),ay=Gxe});var $xe,Ez,Sz=M(()=>{"use strict";ac();lu();$xe=o(t=>{let{r:e,g:r,b:n}=Bi.parse(t),i=.2126*Yt.channel.toLinear(e)+.7152*Yt.channel.toLinear(r)+.0722*Yt.channel.toLinear(n);return Yt.lang.round(i)},"luminance"),Ez=$xe});var Vxe,Cz,Az=M(()=>{"use strict";Sz();Vxe=o(t=>Ez(t)>=.5,"isLight"),Cz=Vxe});var Uxe,fa,_z=M(()=>{"use strict";Az();Uxe=o(t=>!Cz(t),"isDark"),fa=Uxe});var Hxe,n4,QS=M(()=>{"use strict";ac();lu();Hxe=o((t,e,r)=>{let n=Bi.parse(t),i=n[e],a=Yt.channel.clamp[e](i+r);return i!==a&&(n[e]=a),Bi.stringify(n)},"adjustChannel"),n4=Hxe});var Wxe,_t,Lz=M(()=>{"use strict";QS();Wxe=o((t,e)=>n4(t,"l",e),"lighten"),_t=Wxe});var Yxe,It,Dz=M(()=>{"use strict";QS();Yxe=o((t,e)=>n4(t,"l",-e),"darken"),It=Yxe});var qxe,Me,Nz=M(()=>{"use strict";lu();jS();qxe=o((t,e)=>{let r=Bi.parse(t),n={};for(let i in e)e[i]&&(n[i]=r[i]+e[i]);return r4(t,n)},"adjust"),Me=qxe});var Xxe,Rz,Mz=M(()=>{"use strict";lu();KS();Xxe=o((t,e,r=50)=>{let{r:n,g:i,b:a,a:s}=Bi.parse(t),{r:l,g:u,b:h,a:f}=Bi.parse(e),d=r/100,p=d*2-1,m=s-f,y=((p*m===-1?p:(p+m)/(1+p*m))+1)/2,v=1-y,x=n*y+l*v,b=i*y+u*v,w=a*y+h*v,_=s*d+f*(1-d);return Zs(x,b,w,_)},"mix"),Rz=Xxe});var jxe,mt,Iz=M(()=>{"use strict";lu();Mz();jxe=o((t,e=100)=>{let r=Bi.parse(t);return r.r=255-r.r,r.g=255-r.g,r.b=255-r.b,Rz(r,t,e)},"invert"),mt=jxe});var Oz=M(()=>{"use strict";KS();kz();_z();Lz();Dz();Nz();Iz()});var Lo=M(()=>{"use strict";Oz()});var fh,dh,sy=M(()=>{"use strict";fh="#ffffff",dh="#f2f2f2"});var Si,yp=M(()=>{"use strict";Lo();Si=o((t,e)=>e?Me(t,{s:-40,l:10}):Me(t,{s:-40,l:-10}),"mkBorder")});var ZS,Bz,Fz=M(()=>{"use strict";Lo();sy();yp();ZS=class{static{o(this,"Theme")}constructor(){this.background="#f4f4f4",this.primaryColor="#fff4dd",this.noteBkgColor="#fff5ad",this.noteTextColor="#333",this.THEME_COLOR_LIMIT=12,this.fontFamily='"trebuchet ms", verdana, arial, sans-serif',this.fontSize="16px"}updateColors(){if(this.primaryTextColor=this.primaryTextColor||(this.darkMode?"#eee":"#333"),this.secondaryColor=this.secondaryColor||Me(this.primaryColor,{h:-120}),this.tertiaryColor=this.tertiaryColor||Me(this.primaryColor,{h:180,l:5}),this.primaryBorderColor=this.primaryBorderColor||Si(this.primaryColor,this.darkMode),this.secondaryBorderColor=this.secondaryBorderColor||Si(this.secondaryColor,this.darkMode),this.tertiaryBorderColor=this.tertiaryBorderColor||Si(this.tertiaryColor,this.darkMode),this.noteBorderColor=this.noteBorderColor||Si(this.noteBkgColor,this.darkMode),this.noteBkgColor=this.noteBkgColor||"#fff5ad",this.noteTextColor=this.noteTextColor||"#333",this.secondaryTextColor=this.secondaryTextColor||mt(this.secondaryColor),this.tertiaryTextColor=this.tertiaryTextColor||mt(this.tertiaryColor),this.lineColor=this.lineColor||mt(this.background),this.arrowheadColor=this.arrowheadColor||mt(this.background),this.textColor=this.textColor||this.primaryTextColor,this.border2=this.border2||this.tertiaryBorderColor,this.nodeBkg=this.nodeBkg||this.primaryColor,this.mainBkg=this.mainBkg||this.primaryColor,this.nodeBorder=this.nodeBorder||this.primaryBorderColor,this.clusterBkg=this.clusterBkg||this.tertiaryColor,this.clusterBorder=this.clusterBorder||this.tertiaryBorderColor,this.defaultLinkColor=this.defaultLinkColor||this.lineColor,this.titleColor=this.titleColor||this.tertiaryTextColor,this.edgeLabelBackground=this.edgeLabelBackground||(this.darkMode?It(this.secondaryColor,30):this.secondaryColor),this.nodeTextColor=this.nodeTextColor||this.primaryTextColor,this.actorBorder=this.actorBorder||this.primaryBorderColor,this.actorBkg=this.actorBkg||this.mainBkg,this.actorTextColor=this.actorTextColor||this.primaryTextColor,this.actorLineColor=this.actorLineColor||this.actorBorder,this.labelBoxBkgColor=this.labelBoxBkgColor||this.actorBkg,this.signalColor=this.signalColor||this.textColor,this.signalTextColor=this.signalTextColor||this.textColor,this.labelBoxBorderColor=this.labelBoxBorderColor||this.actorBorder,this.labelTextColor=this.labelTextColor||this.actorTextColor,this.loopTextColor=this.loopTextColor||this.actorTextColor,this.activationBorderColor=this.activationBorderColor||It(this.secondaryColor,10),this.activationBkgColor=this.activationBkgColor||this.secondaryColor,this.sequenceNumberColor=this.sequenceNumberColor||mt(this.lineColor),this.sectionBkgColor=this.sectionBkgColor||this.tertiaryColor,this.altSectionBkgColor=this.altSectionBkgColor||"white",this.sectionBkgColor=this.sectionBkgColor||this.secondaryColor,this.sectionBkgColor2=this.sectionBkgColor2||this.primaryColor,this.excludeBkgColor=this.excludeBkgColor||"#eeeeee",this.taskBorderColor=this.taskBorderColor||this.primaryBorderColor,this.taskBkgColor=this.taskBkgColor||this.primaryColor,this.activeTaskBorderColor=this.activeTaskBorderColor||this.primaryColor,this.activeTaskBkgColor=this.activeTaskBkgColor||_t(this.primaryColor,23),this.gridColor=this.gridColor||"lightgrey",this.doneTaskBkgColor=this.doneTaskBkgColor||"lightgrey",this.doneTaskBorderColor=this.doneTaskBorderColor||"grey",this.critBorderColor=this.critBorderColor||"#ff8888",this.critBkgColor=this.critBkgColor||"red",this.todayLineColor=this.todayLineColor||"red",this.taskTextColor=this.taskTextColor||this.textColor,this.taskTextOutsideColor=this.taskTextOutsideColor||this.textColor,this.taskTextLightColor=this.taskTextLightColor||this.textColor,this.taskTextColor=this.taskTextColor||this.primaryTextColor,this.taskTextDarkColor=this.taskTextDarkColor||this.textColor,this.taskTextClickableColor=this.taskTextClickableColor||"#003163",this.personBorder=this.personBorder||this.primaryBorderColor,this.personBkg=this.personBkg||this.mainBkg,this.transitionColor=this.transitionColor||this.lineColor,this.transitionLabelColor=this.transitionLabelColor||this.textColor,this.stateLabelColor=this.stateLabelColor||this.stateBkg||this.primaryTextColor,this.stateBkg=this.stateBkg||this.mainBkg,this.labelBackgroundColor=this.labelBackgroundColor||this.stateBkg,this.compositeBackground=this.compositeBackground||this.background||this.tertiaryColor,this.altBackground=this.altBackground||this.tertiaryColor,this.compositeTitleBackground=this.compositeTitleBackground||this.mainBkg,this.compositeBorder=this.compositeBorder||this.nodeBorder,this.innerEndBackground=this.nodeBorder,this.errorBkgColor=this.errorBkgColor||this.tertiaryColor,this.errorTextColor=this.errorTextColor||this.tertiaryTextColor,this.transitionColor=this.transitionColor||this.lineColor,this.specialStateColor=this.lineColor,this.cScale0=this.cScale0||this.primaryColor,this.cScale1=this.cScale1||this.secondaryColor,this.cScale2=this.cScale2||this.tertiaryColor,this.cScale3=this.cScale3||Me(this.primaryColor,{h:30}),this.cScale4=this.cScale4||Me(this.primaryColor,{h:60}),this.cScale5=this.cScale5||Me(this.primaryColor,{h:90}),this.cScale6=this.cScale6||Me(this.primaryColor,{h:120}),this.cScale7=this.cScale7||Me(this.primaryColor,{h:150}),this.cScale8=this.cScale8||Me(this.primaryColor,{h:210,l:150}),this.cScale9=this.cScale9||Me(this.primaryColor,{h:270}),this.cScale10=this.cScale10||Me(this.primaryColor,{h:300}),this.cScale11=this.cScale11||Me(this.primaryColor,{h:330}),this.darkMode)for(let r=0;r{this[n]=e[n]}),this.updateColors(),r.forEach(n=>{this[n]=e[n]})}},Bz=o(t=>{let e=new ZS;return e.calculate(t),e},"getThemeVariables")});var JS,zz,Gz=M(()=>{"use strict";Lo();yp();JS=class{static{o(this,"Theme")}constructor(){this.background="#333",this.primaryColor="#1f2020",this.secondaryColor=_t(this.primaryColor,16),this.tertiaryColor=Me(this.primaryColor,{h:-160}),this.primaryBorderColor=mt(this.background),this.secondaryBorderColor=Si(this.secondaryColor,this.darkMode),this.tertiaryBorderColor=Si(this.tertiaryColor,this.darkMode),this.primaryTextColor=mt(this.primaryColor),this.secondaryTextColor=mt(this.secondaryColor),this.tertiaryTextColor=mt(this.tertiaryColor),this.lineColor=mt(this.background),this.textColor=mt(this.background),this.mainBkg="#1f2020",this.secondBkg="calculated",this.mainContrastColor="lightgrey",this.darkTextColor=_t(mt("#323D47"),10),this.lineColor="calculated",this.border1="#ccc",this.border2=Zs(255,255,255,.25),this.arrowheadColor="calculated",this.fontFamily='"trebuchet ms", verdana, arial, sans-serif',this.fontSize="16px",this.labelBackground="#181818",this.textColor="#ccc",this.THEME_COLOR_LIMIT=12,this.nodeBkg="calculated",this.nodeBorder="calculated",this.clusterBkg="calculated",this.clusterBorder="calculated",this.defaultLinkColor="calculated",this.titleColor="#F9FFFE",this.edgeLabelBackground="calculated",this.actorBorder="calculated",this.actorBkg="calculated",this.actorTextColor="calculated",this.actorLineColor="calculated",this.signalColor="calculated",this.signalTextColor="calculated",this.labelBoxBkgColor="calculated",this.labelBoxBorderColor="calculated",this.labelTextColor="calculated",this.loopTextColor="calculated",this.noteBorderColor="calculated",this.noteBkgColor="#fff5ad",this.noteTextColor="calculated",this.activationBorderColor="calculated",this.activationBkgColor="calculated",this.sequenceNumberColor="black",this.sectionBkgColor=It("#EAE8D9",30),this.altSectionBkgColor="calculated",this.sectionBkgColor2="#EAE8D9",this.excludeBkgColor=It(this.sectionBkgColor,10),this.taskBorderColor=Zs(255,255,255,70),this.taskBkgColor="calculated",this.taskTextColor="calculated",this.taskTextLightColor="calculated",this.taskTextOutsideColor="calculated",this.taskTextClickableColor="#003163",this.activeTaskBorderColor=Zs(255,255,255,50),this.activeTaskBkgColor="#81B1DB",this.gridColor="calculated",this.doneTaskBkgColor="calculated",this.doneTaskBorderColor="grey",this.critBorderColor="#E83737",this.critBkgColor="#E83737",this.taskTextDarkColor="calculated",this.todayLineColor="#DB5757",this.personBorder=this.primaryBorderColor,this.personBkg=this.mainBkg,this.archEdgeColor="calculated",this.archEdgeArrowColor="calculated",this.archEdgeWidth="3",this.archGroupBorderColor=this.primaryBorderColor,this.archGroupBorderWidth="2px",this.labelColor="calculated",this.errorBkgColor="#a44141",this.errorTextColor="#ddd"}updateColors(){this.secondBkg=_t(this.mainBkg,16),this.lineColor=this.mainContrastColor,this.arrowheadColor=this.mainContrastColor,this.nodeBkg=this.mainBkg,this.nodeBorder=this.border1,this.clusterBkg=this.secondBkg,this.clusterBorder=this.border2,this.defaultLinkColor=this.lineColor,this.edgeLabelBackground=_t(this.labelBackground,25),this.actorBorder=this.border1,this.actorBkg=this.mainBkg,this.actorTextColor=this.mainContrastColor,this.actorLineColor=this.actorBorder,this.signalColor=this.mainContrastColor,this.signalTextColor=this.mainContrastColor,this.labelBoxBkgColor=this.actorBkg,this.labelBoxBorderColor=this.actorBorder,this.labelTextColor=this.mainContrastColor,this.loopTextColor=this.mainContrastColor,this.noteBorderColor=this.secondaryBorderColor,this.noteBkgColor=this.secondBkg,this.noteTextColor=this.secondaryTextColor,this.activationBorderColor=this.border1,this.activationBkgColor=this.secondBkg,this.altSectionBkgColor=this.background,this.taskBkgColor=_t(this.mainBkg,23),this.taskTextColor=this.darkTextColor,this.taskTextLightColor=this.mainContrastColor,this.taskTextOutsideColor=this.taskTextLightColor,this.gridColor=this.mainContrastColor,this.doneTaskBkgColor=this.mainContrastColor,this.taskTextDarkColor=this.darkTextColor,this.archEdgeColor=this.lineColor,this.archEdgeArrowColor=this.lineColor,this.transitionColor=this.transitionColor||this.lineColor,this.transitionLabelColor=this.transitionLabelColor||this.textColor,this.stateLabelColor=this.stateLabelColor||this.stateBkg||this.primaryTextColor,this.stateBkg=this.stateBkg||this.mainBkg,this.labelBackgroundColor=this.labelBackgroundColor||this.stateBkg,this.compositeBackground=this.compositeBackground||this.background||this.tertiaryColor,this.altBackground=this.altBackground||"#555",this.compositeTitleBackground=this.compositeTitleBackground||this.mainBkg,this.compositeBorder=this.compositeBorder||this.nodeBorder,this.innerEndBackground=this.primaryBorderColor,this.specialStateColor="#f4f4f4",this.errorBkgColor=this.errorBkgColor||this.tertiaryColor,this.errorTextColor=this.errorTextColor||this.tertiaryTextColor,this.fillType0=this.primaryColor,this.fillType1=this.secondaryColor,this.fillType2=Me(this.primaryColor,{h:64}),this.fillType3=Me(this.secondaryColor,{h:64}),this.fillType4=Me(this.primaryColor,{h:-64}),this.fillType5=Me(this.secondaryColor,{h:-64}),this.fillType6=Me(this.primaryColor,{h:128}),this.fillType7=Me(this.secondaryColor,{h:128}),this.cScale1=this.cScale1||"#0b0000",this.cScale2=this.cScale2||"#4d1037",this.cScale3=this.cScale3||"#3f5258",this.cScale4=this.cScale4||"#4f2f1b",this.cScale5=this.cScale5||"#6e0a0a",this.cScale6=this.cScale6||"#3b0048",this.cScale7=this.cScale7||"#995a01",this.cScale8=this.cScale8||"#154706",this.cScale9=this.cScale9||"#161722",this.cScale10=this.cScale10||"#00296f",this.cScale11=this.cScale11||"#01629c",this.cScale12=this.cScale12||"#010029",this.cScale0=this.cScale0||this.primaryColor,this.cScale1=this.cScale1||this.secondaryColor,this.cScale2=this.cScale2||this.tertiaryColor,this.cScale3=this.cScale3||Me(this.primaryColor,{h:30}),this.cScale4=this.cScale4||Me(this.primaryColor,{h:60}),this.cScale5=this.cScale5||Me(this.primaryColor,{h:90}),this.cScale6=this.cScale6||Me(this.primaryColor,{h:120}),this.cScale7=this.cScale7||Me(this.primaryColor,{h:150}),this.cScale8=this.cScale8||Me(this.primaryColor,{h:210}),this.cScale9=this.cScale9||Me(this.primaryColor,{h:270}),this.cScale10=this.cScale10||Me(this.primaryColor,{h:300}),this.cScale11=this.cScale11||Me(this.primaryColor,{h:330});for(let e=0;e{this[n]=e[n]}),this.updateColors(),r.forEach(n=>{this[n]=e[n]})}},zz=o(t=>{let e=new JS;return e.calculate(t),e},"getThemeVariables")});var eC,vp,i4=M(()=>{"use strict";Lo();yp();sy();eC=class{static{o(this,"Theme")}constructor(){this.background="#f4f4f4",this.primaryColor="#ECECFF",this.secondaryColor=Me(this.primaryColor,{h:120}),this.secondaryColor="#ffffde",this.tertiaryColor=Me(this.primaryColor,{h:-160}),this.primaryBorderColor=Si(this.primaryColor,this.darkMode),this.secondaryBorderColor=Si(this.secondaryColor,this.darkMode),this.tertiaryBorderColor=Si(this.tertiaryColor,this.darkMode),this.primaryTextColor=mt(this.primaryColor),this.secondaryTextColor=mt(this.secondaryColor),this.tertiaryTextColor=mt(this.tertiaryColor),this.lineColor=mt(this.background),this.textColor=mt(this.background),this.background="white",this.mainBkg="#ECECFF",this.secondBkg="#ffffde",this.lineColor="#333333",this.border1="#9370DB",this.border2="#aaaa33",this.arrowheadColor="#333333",this.fontFamily='"trebuchet ms", verdana, arial, sans-serif',this.fontSize="16px",this.labelBackground="rgba(232,232,232, 0.8)",this.textColor="#333",this.THEME_COLOR_LIMIT=12,this.nodeBkg="calculated",this.nodeBorder="calculated",this.clusterBkg="calculated",this.clusterBorder="calculated",this.defaultLinkColor="calculated",this.titleColor="calculated",this.edgeLabelBackground="calculated",this.actorBorder="calculated",this.actorBkg="calculated",this.actorTextColor="black",this.actorLineColor="calculated",this.signalColor="calculated",this.signalTextColor="calculated",this.labelBoxBkgColor="calculated",this.labelBoxBorderColor="calculated",this.labelTextColor="calculated",this.loopTextColor="calculated",this.noteBorderColor="calculated",this.noteBkgColor="#fff5ad",this.noteTextColor="calculated",this.activationBorderColor="#666",this.activationBkgColor="#f4f4f4",this.sequenceNumberColor="white",this.sectionBkgColor="calculated",this.altSectionBkgColor="calculated",this.sectionBkgColor2="calculated",this.excludeBkgColor="#eeeeee",this.taskBorderColor="calculated",this.taskBkgColor="calculated",this.taskTextLightColor="calculated",this.taskTextColor=this.taskTextLightColor,this.taskTextDarkColor="calculated",this.taskTextOutsideColor=this.taskTextDarkColor,this.taskTextClickableColor="calculated",this.activeTaskBorderColor="calculated",this.activeTaskBkgColor="calculated",this.gridColor="calculated",this.doneTaskBkgColor="calculated",this.doneTaskBorderColor="calculated",this.critBorderColor="calculated",this.critBkgColor="calculated",this.todayLineColor="calculated",this.sectionBkgColor=Zs(102,102,255,.49),this.altSectionBkgColor="white",this.sectionBkgColor2="#fff400",this.taskBorderColor="#534fbc",this.taskBkgColor="#8a90dd",this.taskTextLightColor="white",this.taskTextColor="calculated",this.taskTextDarkColor="black",this.taskTextOutsideColor="calculated",this.taskTextClickableColor="#003163",this.activeTaskBorderColor="#534fbc",this.activeTaskBkgColor="#bfc7ff",this.gridColor="lightgrey",this.doneTaskBkgColor="lightgrey",this.doneTaskBorderColor="grey",this.critBorderColor="#ff8888",this.critBkgColor="red",this.todayLineColor="red",this.personBorder=this.primaryBorderColor,this.personBkg=this.mainBkg,this.archEdgeColor="calculated",this.archEdgeArrowColor="calculated",this.archEdgeWidth="3",this.archGroupBorderColor=this.primaryBorderColor,this.archGroupBorderWidth="2px",this.labelColor="black",this.errorBkgColor="#552222",this.errorTextColor="#552222",this.updateColors()}updateColors(){this.cScale0=this.cScale0||this.primaryColor,this.cScale1=this.cScale1||this.secondaryColor,this.cScale2=this.cScale2||this.tertiaryColor,this.cScale3=this.cScale3||Me(this.primaryColor,{h:30}),this.cScale4=this.cScale4||Me(this.primaryColor,{h:60}),this.cScale5=this.cScale5||Me(this.primaryColor,{h:90}),this.cScale6=this.cScale6||Me(this.primaryColor,{h:120}),this.cScale7=this.cScale7||Me(this.primaryColor,{h:150}),this.cScale8=this.cScale8||Me(this.primaryColor,{h:210}),this.cScale9=this.cScale9||Me(this.primaryColor,{h:270}),this.cScale10=this.cScale10||Me(this.primaryColor,{h:300}),this.cScale11=this.cScale11||Me(this.primaryColor,{h:330}),this.cScalePeer1=this.cScalePeer1||It(this.secondaryColor,45),this.cScalePeer2=this.cScalePeer2||It(this.tertiaryColor,40);for(let e=0;e{this[n]=e[n]}),this.updateColors(),r.forEach(n=>{this[n]=e[n]})}},vp=o(t=>{let e=new eC;return e.calculate(t),e},"getThemeVariables")});var tC,$z,Vz=M(()=>{"use strict";Lo();sy();yp();tC=class{static{o(this,"Theme")}constructor(){this.background="#f4f4f4",this.primaryColor="#cde498",this.secondaryColor="#cdffb2",this.background="white",this.mainBkg="#cde498",this.secondBkg="#cdffb2",this.lineColor="green",this.border1="#13540c",this.border2="#6eaa49",this.arrowheadColor="green",this.fontFamily='"trebuchet ms", verdana, arial, sans-serif',this.fontSize="16px",this.tertiaryColor=_t("#cde498",10),this.primaryBorderColor=Si(this.primaryColor,this.darkMode),this.secondaryBorderColor=Si(this.secondaryColor,this.darkMode),this.tertiaryBorderColor=Si(this.tertiaryColor,this.darkMode),this.primaryTextColor=mt(this.primaryColor),this.secondaryTextColor=mt(this.secondaryColor),this.tertiaryTextColor=mt(this.primaryColor),this.lineColor=mt(this.background),this.textColor=mt(this.background),this.THEME_COLOR_LIMIT=12,this.nodeBkg="calculated",this.nodeBorder="calculated",this.clusterBkg="calculated",this.clusterBorder="calculated",this.defaultLinkColor="calculated",this.titleColor="#333",this.edgeLabelBackground="#e8e8e8",this.actorBorder="calculated",this.actorBkg="calculated",this.actorTextColor="black",this.actorLineColor="calculated",this.signalColor="#333",this.signalTextColor="#333",this.labelBoxBkgColor="calculated",this.labelBoxBorderColor="#326932",this.labelTextColor="calculated",this.loopTextColor="calculated",this.noteBorderColor="calculated",this.noteBkgColor="#fff5ad",this.noteTextColor="calculated",this.activationBorderColor="#666",this.activationBkgColor="#f4f4f4",this.sequenceNumberColor="white",this.sectionBkgColor="#6eaa49",this.altSectionBkgColor="white",this.sectionBkgColor2="#6eaa49",this.excludeBkgColor="#eeeeee",this.taskBorderColor="calculated",this.taskBkgColor="#487e3a",this.taskTextLightColor="white",this.taskTextColor="calculated",this.taskTextDarkColor="black",this.taskTextOutsideColor="calculated",this.taskTextClickableColor="#003163",this.activeTaskBorderColor="calculated",this.activeTaskBkgColor="calculated",this.gridColor="lightgrey",this.doneTaskBkgColor="lightgrey",this.doneTaskBorderColor="grey",this.critBorderColor="#ff8888",this.critBkgColor="red",this.todayLineColor="red",this.personBorder=this.primaryBorderColor,this.personBkg=this.mainBkg,this.archEdgeColor="calculated",this.archEdgeArrowColor="calculated",this.archEdgeWidth="3",this.archGroupBorderColor=this.primaryBorderColor,this.archGroupBorderWidth="2px",this.labelColor="black",this.errorBkgColor="#552222",this.errorTextColor="#552222"}updateColors(){this.actorBorder=It(this.mainBkg,20),this.actorBkg=this.mainBkg,this.labelBoxBkgColor=this.actorBkg,this.labelTextColor=this.actorTextColor,this.loopTextColor=this.actorTextColor,this.noteBorderColor=this.border2,this.noteTextColor=this.actorTextColor,this.actorLineColor=this.actorBorder,this.cScale0=this.cScale0||this.primaryColor,this.cScale1=this.cScale1||this.secondaryColor,this.cScale2=this.cScale2||this.tertiaryColor,this.cScale3=this.cScale3||Me(this.primaryColor,{h:30}),this.cScale4=this.cScale4||Me(this.primaryColor,{h:60}),this.cScale5=this.cScale5||Me(this.primaryColor,{h:90}),this.cScale6=this.cScale6||Me(this.primaryColor,{h:120}),this.cScale7=this.cScale7||Me(this.primaryColor,{h:150}),this.cScale8=this.cScale8||Me(this.primaryColor,{h:210}),this.cScale9=this.cScale9||Me(this.primaryColor,{h:270}),this.cScale10=this.cScale10||Me(this.primaryColor,{h:300}),this.cScale11=this.cScale11||Me(this.primaryColor,{h:330}),this.cScalePeer1=this.cScalePeer1||It(this.secondaryColor,45),this.cScalePeer2=this.cScalePeer2||It(this.tertiaryColor,40);for(let e=0;e{this[n]=e[n]}),this.updateColors(),r.forEach(n=>{this[n]=e[n]})}},$z=o(t=>{let e=new tC;return e.calculate(t),e},"getThemeVariables")});var rC,Uz,Hz=M(()=>{"use strict";Lo();yp();sy();rC=class{static{o(this,"Theme")}constructor(){this.primaryColor="#eee",this.contrast="#707070",this.secondaryColor=_t(this.contrast,55),this.background="#ffffff",this.tertiaryColor=Me(this.primaryColor,{h:-160}),this.primaryBorderColor=Si(this.primaryColor,this.darkMode),this.secondaryBorderColor=Si(this.secondaryColor,this.darkMode),this.tertiaryBorderColor=Si(this.tertiaryColor,this.darkMode),this.primaryTextColor=mt(this.primaryColor),this.secondaryTextColor=mt(this.secondaryColor),this.tertiaryTextColor=mt(this.tertiaryColor),this.lineColor=mt(this.background),this.textColor=mt(this.background),this.mainBkg="#eee",this.secondBkg="calculated",this.lineColor="#666",this.border1="#999",this.border2="calculated",this.note="#ffa",this.text="#333",this.critical="#d42",this.done="#bbb",this.arrowheadColor="#333333",this.fontFamily='"trebuchet ms", verdana, arial, sans-serif',this.fontSize="16px",this.THEME_COLOR_LIMIT=12,this.nodeBkg="calculated",this.nodeBorder="calculated",this.clusterBkg="calculated",this.clusterBorder="calculated",this.defaultLinkColor="calculated",this.titleColor="calculated",this.edgeLabelBackground="white",this.actorBorder="calculated",this.actorBkg="calculated",this.actorTextColor="calculated",this.actorLineColor=this.actorBorder,this.signalColor="calculated",this.signalTextColor="calculated",this.labelBoxBkgColor="calculated",this.labelBoxBorderColor="calculated",this.labelTextColor="calculated",this.loopTextColor="calculated",this.noteBorderColor="calculated",this.noteBkgColor="calculated",this.noteTextColor="calculated",this.activationBorderColor="#666",this.activationBkgColor="#f4f4f4",this.sequenceNumberColor="white",this.sectionBkgColor="calculated",this.altSectionBkgColor="white",this.sectionBkgColor2="calculated",this.excludeBkgColor="#eeeeee",this.taskBorderColor="calculated",this.taskBkgColor="calculated",this.taskTextLightColor="white",this.taskTextColor="calculated",this.taskTextDarkColor="calculated",this.taskTextOutsideColor="calculated",this.taskTextClickableColor="#003163",this.activeTaskBorderColor="calculated",this.activeTaskBkgColor="calculated",this.gridColor="calculated",this.doneTaskBkgColor="calculated",this.doneTaskBorderColor="calculated",this.critBkgColor="calculated",this.critBorderColor="calculated",this.todayLineColor="calculated",this.personBorder=this.primaryBorderColor,this.personBkg=this.mainBkg,this.archEdgeColor="calculated",this.archEdgeArrowColor="calculated",this.archEdgeWidth="3",this.archGroupBorderColor=this.primaryBorderColor,this.archGroupBorderWidth="2px",this.labelColor="black",this.errorBkgColor="#552222",this.errorTextColor="#552222"}updateColors(){this.secondBkg=_t(this.contrast,55),this.border2=this.contrast,this.actorBorder=_t(this.border1,23),this.actorBkg=this.mainBkg,this.actorTextColor=this.text,this.actorLineColor=this.actorBorder,this.signalColor=this.text,this.signalTextColor=this.text,this.labelBoxBkgColor=this.actorBkg,this.labelBoxBorderColor=this.actorBorder,this.labelTextColor=this.text,this.loopTextColor=this.text,this.noteBorderColor="#999",this.noteBkgColor="#666",this.noteTextColor="#fff",this.cScale0=this.cScale0||"#555",this.cScale1=this.cScale1||"#F4F4F4",this.cScale2=this.cScale2||"#555",this.cScale3=this.cScale3||"#BBB",this.cScale4=this.cScale4||"#777",this.cScale5=this.cScale5||"#999",this.cScale6=this.cScale6||"#DDD",this.cScale7=this.cScale7||"#FFF",this.cScale8=this.cScale8||"#DDD",this.cScale9=this.cScale9||"#BBB",this.cScale10=this.cScale10||"#999",this.cScale11=this.cScale11||"#777";for(let e=0;e{this[n]=e[n]}),this.updateColors(),r.forEach(n=>{this[n]=e[n]})}},Uz=o(t=>{let e=new rC;return e.calculate(t),e},"getThemeVariables")});var Do,a4=M(()=>{"use strict";Fz();Gz();i4();Vz();Hz();Do={base:{getThemeVariables:Bz},dark:{getThemeVariables:zz},default:{getThemeVariables:vp},forest:{getThemeVariables:$z},neutral:{getThemeVariables:Uz}}});var cu,Wz=M(()=>{"use strict";cu={flowchart:{useMaxWidth:!0,titleTopMargin:25,subGraphTitleMargin:{top:0,bottom:0},diagramPadding:8,htmlLabels:!0,nodeSpacing:50,rankSpacing:50,curve:"basis",padding:15,defaultRenderer:"dagre-wrapper",wrappingWidth:200},sequence:{useMaxWidth:!0,hideUnusedParticipants:!1,activationWidth:10,diagramMarginX:50,diagramMarginY:10,actorMargin:50,width:150,height:65,boxMargin:10,boxTextMargin:5,noteMargin:10,messageMargin:35,messageAlign:"center",mirrorActors:!0,forceMenus:!1,bottomMarginAdj:1,rightAngles:!1,showSequenceNumbers:!1,actorFontSize:14,actorFontFamily:'"Open Sans", sans-serif',actorFontWeight:400,noteFontSize:14,noteFontFamily:'"trebuchet ms", verdana, arial, sans-serif',noteFontWeight:400,noteAlign:"center",messageFontSize:16,messageFontFamily:'"trebuchet ms", verdana, arial, sans-serif',messageFontWeight:400,wrap:!1,wrapPadding:10,labelBoxWidth:50,labelBoxHeight:20},gantt:{useMaxWidth:!0,titleTopMargin:25,barHeight:20,barGap:4,topPadding:50,rightPadding:75,leftPadding:75,gridLineStartPadding:35,fontSize:11,sectionFontSize:11,numberSectionStyles:4,axisFormat:"%Y-%m-%d",topAxis:!1,displayMode:"",weekday:"sunday"},journey:{useMaxWidth:!0,diagramMarginX:50,diagramMarginY:10,leftMargin:150,width:150,height:50,boxMargin:10,boxTextMargin:5,noteMargin:10,messageMargin:35,messageAlign:"center",bottomMarginAdj:1,rightAngles:!1,taskFontSize:14,taskFontFamily:'"Open Sans", sans-serif',taskMargin:50,activationWidth:10,textPlacement:"fo",actorColours:["#8FBC8F","#7CFC00","#00FFFF","#20B2AA","#B0E0E6","#FFFFE0"],sectionFills:["#191970","#8B008B","#4B0082","#2F4F4F","#800000","#8B4513","#00008B"],sectionColours:["#fff"]},class:{useMaxWidth:!0,titleTopMargin:25,arrowMarkerAbsolute:!1,dividerMargin:10,padding:5,textHeight:10,defaultRenderer:"dagre-wrapper",htmlLabels:!1,hideEmptyMembersBox:!1},state:{useMaxWidth:!0,titleTopMargin:25,dividerMargin:10,sizeUnit:5,padding:8,textHeight:10,titleShift:-15,noteMargin:10,forkWidth:70,forkHeight:7,miniPadding:2,fontSizeFactor:5.02,fontSize:24,labelHeight:16,edgeLengthFactor:"20",compositTitleSize:35,radius:5,defaultRenderer:"dagre-wrapper"},er:{useMaxWidth:!0,titleTopMargin:25,diagramPadding:20,layoutDirection:"TB",minEntityWidth:100,minEntityHeight:75,entityPadding:15,stroke:"gray",fill:"honeydew",fontSize:12},pie:{useMaxWidth:!0,textPosition:.75},quadrantChart:{useMaxWidth:!0,chartWidth:500,chartHeight:500,titleFontSize:20,titlePadding:10,quadrantPadding:5,xAxisLabelPadding:5,yAxisLabelPadding:5,xAxisLabelFontSize:16,yAxisLabelFontSize:16,quadrantLabelFontSize:16,quadrantTextTopPadding:5,pointTextPadding:5,pointLabelFontSize:12,pointRadius:5,xAxisPosition:"top",yAxisPosition:"left",quadrantInternalBorderStrokeWidth:1,quadrantExternalBorderStrokeWidth:2},xyChart:{useMaxWidth:!0,width:700,height:500,titleFontSize:20,titlePadding:10,showTitle:!0,xAxis:{$ref:"#/$defs/XYChartAxisConfig",showLabel:!0,labelFontSize:14,labelPadding:5,showTitle:!0,titleFontSize:16,titlePadding:5,showTick:!0,tickLength:5,tickWidth:2,showAxisLine:!0,axisLineWidth:2},yAxis:{$ref:"#/$defs/XYChartAxisConfig",showLabel:!0,labelFontSize:14,labelPadding:5,showTitle:!0,titleFontSize:16,titlePadding:5,showTick:!0,tickLength:5,tickWidth:2,showAxisLine:!0,axisLineWidth:2},chartOrientation:"vertical",plotReservedSpacePercent:50},requirement:{useMaxWidth:!0,rect_fill:"#f9f9f9",text_color:"#333",rect_border_size:"0.5px",rect_border_color:"#bbb",rect_min_width:200,rect_min_height:200,fontSize:14,rect_padding:10,line_height:20},mindmap:{useMaxWidth:!0,padding:10,maxNodeWidth:200},kanban:{useMaxWidth:!0,padding:8,sectionWidth:200,ticketBaseUrl:""},timeline:{useMaxWidth:!0,diagramMarginX:50,diagramMarginY:10,leftMargin:150,width:150,height:50,boxMargin:10,boxTextMargin:5,noteMargin:10,messageMargin:35,messageAlign:"center",bottomMarginAdj:1,rightAngles:!1,taskFontSize:14,taskFontFamily:'"Open Sans", sans-serif',taskMargin:50,activationWidth:10,textPlacement:"fo",actorColours:["#8FBC8F","#7CFC00","#00FFFF","#20B2AA","#B0E0E6","#FFFFE0"],sectionFills:["#191970","#8B008B","#4B0082","#2F4F4F","#800000","#8B4513","#00008B"],sectionColours:["#fff"],disableMulticolor:!1},gitGraph:{useMaxWidth:!0,titleTopMargin:25,diagramPadding:8,nodeLabel:{width:75,height:100,x:-25,y:0},mainBranchName:"main",mainBranchOrder:0,showCommitLabel:!0,showBranches:!0,rotateCommitLabel:!0,parallelCommits:!1,arrowMarkerAbsolute:!1},c4:{useMaxWidth:!0,diagramMarginX:50,diagramMarginY:10,c4ShapeMargin:50,c4ShapePadding:20,width:216,height:60,boxMargin:10,c4ShapeInRow:4,nextLinePaddingX:0,c4BoundaryInRow:2,personFontSize:14,personFontFamily:'"Open Sans", sans-serif',personFontWeight:"normal",external_personFontSize:14,external_personFontFamily:'"Open Sans", sans-serif',external_personFontWeight:"normal",systemFontSize:14,systemFontFamily:'"Open Sans", sans-serif',systemFontWeight:"normal",external_systemFontSize:14,external_systemFontFamily:'"Open Sans", sans-serif',external_systemFontWeight:"normal",system_dbFontSize:14,system_dbFontFamily:'"Open Sans", sans-serif',system_dbFontWeight:"normal",external_system_dbFontSize:14,external_system_dbFontFamily:'"Open Sans", sans-serif',external_system_dbFontWeight:"normal",system_queueFontSize:14,system_queueFontFamily:'"Open Sans", sans-serif',system_queueFontWeight:"normal",external_system_queueFontSize:14,external_system_queueFontFamily:'"Open Sans", sans-serif',external_system_queueFontWeight:"normal",boundaryFontSize:14,boundaryFontFamily:'"Open Sans", sans-serif',boundaryFontWeight:"normal",messageFontSize:12,messageFontFamily:'"Open Sans", sans-serif',messageFontWeight:"normal",containerFontSize:14,containerFontFamily:'"Open Sans", sans-serif',containerFontWeight:"normal",external_containerFontSize:14,external_containerFontFamily:'"Open Sans", sans-serif',external_containerFontWeight:"normal",container_dbFontSize:14,container_dbFontFamily:'"Open Sans", sans-serif',container_dbFontWeight:"normal",external_container_dbFontSize:14,external_container_dbFontFamily:'"Open Sans", sans-serif',external_container_dbFontWeight:"normal",container_queueFontSize:14,container_queueFontFamily:'"Open Sans", sans-serif',container_queueFontWeight:"normal",external_container_queueFontSize:14,external_container_queueFontFamily:'"Open Sans", sans-serif',external_container_queueFontWeight:"normal",componentFontSize:14,componentFontFamily:'"Open Sans", sans-serif',componentFontWeight:"normal",external_componentFontSize:14,external_componentFontFamily:'"Open Sans", sans-serif',external_componentFontWeight:"normal",component_dbFontSize:14,component_dbFontFamily:'"Open Sans", sans-serif',component_dbFontWeight:"normal",external_component_dbFontSize:14,external_component_dbFontFamily:'"Open Sans", sans-serif',external_component_dbFontWeight:"normal",component_queueFontSize:14,component_queueFontFamily:'"Open Sans", sans-serif',component_queueFontWeight:"normal",external_component_queueFontSize:14,external_component_queueFontFamily:'"Open Sans", sans-serif',external_component_queueFontWeight:"normal",wrap:!0,wrapPadding:10,person_bg_color:"#08427B",person_border_color:"#073B6F",external_person_bg_color:"#686868",external_person_border_color:"#8A8A8A",system_bg_color:"#1168BD",system_border_color:"#3C7FC0",system_db_bg_color:"#1168BD",system_db_border_color:"#3C7FC0",system_queue_bg_color:"#1168BD",system_queue_border_color:"#3C7FC0",external_system_bg_color:"#999999",external_system_border_color:"#8A8A8A",external_system_db_bg_color:"#999999",external_system_db_border_color:"#8A8A8A",external_system_queue_bg_color:"#999999",external_system_queue_border_color:"#8A8A8A",container_bg_color:"#438DD5",container_border_color:"#3C7FC0",container_db_bg_color:"#438DD5",container_db_border_color:"#3C7FC0",container_queue_bg_color:"#438DD5",container_queue_border_color:"#3C7FC0",external_container_bg_color:"#B3B3B3",external_container_border_color:"#A6A6A6",external_container_db_bg_color:"#B3B3B3",external_container_db_border_color:"#A6A6A6",external_container_queue_bg_color:"#B3B3B3",external_container_queue_border_color:"#A6A6A6",component_bg_color:"#85BBF0",component_border_color:"#78A8D8",component_db_bg_color:"#85BBF0",component_db_border_color:"#78A8D8",component_queue_bg_color:"#85BBF0",component_queue_border_color:"#78A8D8",external_component_bg_color:"#CCCCCC",external_component_border_color:"#BFBFBF",external_component_db_bg_color:"#CCCCCC",external_component_db_border_color:"#BFBFBF",external_component_queue_bg_color:"#CCCCCC",external_component_queue_border_color:"#BFBFBF"},sankey:{useMaxWidth:!0,width:600,height:400,linkColor:"gradient",nodeAlignment:"justify",showValues:!0,prefix:"",suffix:""},block:{useMaxWidth:!0,padding:8},packet:{useMaxWidth:!0,rowHeight:32,bitWidth:32,bitsPerRow:32,showBits:!0,paddingX:5,paddingY:5},architecture:{useMaxWidth:!0,padding:40,iconSize:80,fontSize:16},theme:"default",look:"classic",handDrawnSeed:0,layout:"dagre",maxTextSize:5e4,maxEdges:500,darkMode:!1,fontFamily:'"trebuchet ms", verdana, arial, sans-serif;',logLevel:5,securityLevel:"strict",startOnLoad:!0,arrowMarkerAbsolute:!1,secure:["secure","securityLevel","startOnLoad","maxTextSize","suppressErrorRendering","maxEdges"],legacyMathML:!1,forceLegacyMathML:!1,deterministicIds:!1,fontSize:16,markdownAutoWrap:!0,suppressErrorRendering:!1}});var Yz,qz,Xz,ur,bs=M(()=>{"use strict";a4();Wz();Yz={...cu,deterministicIDSeed:void 0,elk:{mergeEdges:!1,nodePlacementStrategy:"BRANDES_KOEPF"},themeCSS:void 0,themeVariables:Do.default.getThemeVariables(),sequence:{...cu.sequence,messageFont:o(function(){return{fontFamily:this.messageFontFamily,fontSize:this.messageFontSize,fontWeight:this.messageFontWeight}},"messageFont"),noteFont:o(function(){return{fontFamily:this.noteFontFamily,fontSize:this.noteFontSize,fontWeight:this.noteFontWeight}},"noteFont"),actorFont:o(function(){return{fontFamily:this.actorFontFamily,fontSize:this.actorFontSize,fontWeight:this.actorFontWeight}},"actorFont")},class:{hideEmptyMembersBox:!1},gantt:{...cu.gantt,tickInterval:void 0,useWidth:void 0},c4:{...cu.c4,useWidth:void 0,personFont:o(function(){return{fontFamily:this.personFontFamily,fontSize:this.personFontSize,fontWeight:this.personFontWeight}},"personFont"),external_personFont:o(function(){return{fontFamily:this.external_personFontFamily,fontSize:this.external_personFontSize,fontWeight:this.external_personFontWeight}},"external_personFont"),systemFont:o(function(){return{fontFamily:this.systemFontFamily,fontSize:this.systemFontSize,fontWeight:this.systemFontWeight}},"systemFont"),external_systemFont:o(function(){return{fontFamily:this.external_systemFontFamily,fontSize:this.external_systemFontSize,fontWeight:this.external_systemFontWeight}},"external_systemFont"),system_dbFont:o(function(){return{fontFamily:this.system_dbFontFamily,fontSize:this.system_dbFontSize,fontWeight:this.system_dbFontWeight}},"system_dbFont"),external_system_dbFont:o(function(){return{fontFamily:this.external_system_dbFontFamily,fontSize:this.external_system_dbFontSize,fontWeight:this.external_system_dbFontWeight}},"external_system_dbFont"),system_queueFont:o(function(){return{fontFamily:this.system_queueFontFamily,fontSize:this.system_queueFontSize,fontWeight:this.system_queueFontWeight}},"system_queueFont"),external_system_queueFont:o(function(){return{fontFamily:this.external_system_queueFontFamily,fontSize:this.external_system_queueFontSize,fontWeight:this.external_system_queueFontWeight}},"external_system_queueFont"),containerFont:o(function(){return{fontFamily:this.containerFontFamily,fontSize:this.containerFontSize,fontWeight:this.containerFontWeight}},"containerFont"),external_containerFont:o(function(){return{fontFamily:this.external_containerFontFamily,fontSize:this.external_containerFontSize,fontWeight:this.external_containerFontWeight}},"external_containerFont"),container_dbFont:o(function(){return{fontFamily:this.container_dbFontFamily,fontSize:this.container_dbFontSize,fontWeight:this.container_dbFontWeight}},"container_dbFont"),external_container_dbFont:o(function(){return{fontFamily:this.external_container_dbFontFamily,fontSize:this.external_container_dbFontSize,fontWeight:this.external_container_dbFontWeight}},"external_container_dbFont"),container_queueFont:o(function(){return{fontFamily:this.container_queueFontFamily,fontSize:this.container_queueFontSize,fontWeight:this.container_queueFontWeight}},"container_queueFont"),external_container_queueFont:o(function(){return{fontFamily:this.external_container_queueFontFamily,fontSize:this.external_container_queueFontSize,fontWeight:this.external_container_queueFontWeight}},"external_container_queueFont"),componentFont:o(function(){return{fontFamily:this.componentFontFamily,fontSize:this.componentFontSize,fontWeight:this.componentFontWeight}},"componentFont"),external_componentFont:o(function(){return{fontFamily:this.external_componentFontFamily,fontSize:this.external_componentFontSize,fontWeight:this.external_componentFontWeight}},"external_componentFont"),component_dbFont:o(function(){return{fontFamily:this.component_dbFontFamily,fontSize:this.component_dbFontSize,fontWeight:this.component_dbFontWeight}},"component_dbFont"),external_component_dbFont:o(function(){return{fontFamily:this.external_component_dbFontFamily,fontSize:this.external_component_dbFontSize,fontWeight:this.external_component_dbFontWeight}},"external_component_dbFont"),component_queueFont:o(function(){return{fontFamily:this.component_queueFontFamily,fontSize:this.component_queueFontSize,fontWeight:this.component_queueFontWeight}},"component_queueFont"),external_component_queueFont:o(function(){return{fontFamily:this.external_component_queueFontFamily,fontSize:this.external_component_queueFontSize,fontWeight:this.external_component_queueFontWeight}},"external_component_queueFont"),boundaryFont:o(function(){return{fontFamily:this.boundaryFontFamily,fontSize:this.boundaryFontSize,fontWeight:this.boundaryFontWeight}},"boundaryFont"),messageFont:o(function(){return{fontFamily:this.messageFontFamily,fontSize:this.messageFontSize,fontWeight:this.messageFontWeight}},"messageFont")},pie:{...cu.pie,useWidth:984},xyChart:{...cu.xyChart,useWidth:void 0},requirement:{...cu.requirement,useWidth:void 0},packet:{...cu.packet}},qz=o((t,e="")=>Object.keys(t).reduce((r,n)=>Array.isArray(t[n])?r:typeof t[n]=="object"&&t[n]!==null?[...r,e+n,...qz(t[n],"")]:[...r,e+n],[]),"keyify"),Xz=new Set(qz(Yz,"")),ur=Yz});var xp,Kxe,nC=M(()=>{"use strict";bs();ut();xp=o(t=>{if(Y.debug("sanitizeDirective called with",t),!(typeof t!="object"||t==null)){if(Array.isArray(t)){t.forEach(e=>xp(e));return}for(let e of Object.keys(t)){if(Y.debug("Checking key",e),e.startsWith("__")||e.includes("proto")||e.includes("constr")||!Xz.has(e)||t[e]==null){Y.debug("sanitize deleting key: ",e),delete t[e];continue}if(typeof t[e]=="object"){Y.debug("sanitizing object",e),xp(t[e]);continue}let r=["themeCSS","fontFamily","altFontFamily"];for(let n of r)e.includes(n)&&(Y.debug("sanitizing css option",e),t[e]=Kxe(t[e]))}if(t.themeVariables)for(let e of Object.keys(t.themeVariables)){let r=t.themeVariables[e];r?.match&&!r.match(/^[\d "#%(),.;A-Za-z]+$/)&&(t.themeVariables[e]="")}Y.debug("After sanitization",t)}},"sanitizeDirective"),Kxe=o(t=>{let e=0,r=0;for(let n of t){if(e{"use strict";gp();ut();a4();bs();nC();ph=Object.freeze(ur),ws=Vn({},ph),bp=[],oy=Vn({},ph),s4=o((t,e)=>{let r=Vn({},t),n={};for(let i of e)Jz(i),n=Vn(n,i);if(r=Vn(r,n),n.theme&&n.theme in Do){let i=Vn({},Kz),a=Vn(i.themeVariables||{},n.themeVariables);r.theme&&r.theme in Do&&(r.themeVariables=Do[r.theme].getThemeVariables(a))}return oy=r,tG(oy),oy},"updateCurrentConfig"),iC=o(t=>(ws=Vn({},ph),ws=Vn(ws,t),t.theme&&Do[t.theme]&&(ws.themeVariables=Do[t.theme].getThemeVariables(t.themeVariables)),s4(ws,bp),ws),"setSiteConfig"),Qz=o(t=>{Kz=Vn({},t)},"saveConfigFromInitialize"),Zz=o(t=>(ws=Vn(ws,t),s4(ws,bp),ws),"updateSiteConfig"),aC=o(()=>Vn({},ws),"getSiteConfig"),o4=o(t=>(tG(t),Vn(oy,t),Cr()),"setConfig"),Cr=o(()=>Vn({},oy),"getConfig"),Jz=o(t=>{t&&(["secure",...ws.secure??[]].forEach(e=>{Object.hasOwn(t,e)&&(Y.debug(`Denied attempt to modify a secure key ${e}`,t[e]),delete t[e])}),Object.keys(t).forEach(e=>{e.startsWith("__")&&delete t[e]}),Object.keys(t).forEach(e=>{typeof t[e]=="string"&&(t[e].includes("<")||t[e].includes(">")||t[e].includes("url(data:"))&&delete t[e],typeof t[e]=="object"&&Jz(t[e])}))},"sanitize"),eG=o(t=>{xp(t),t.fontFamily&&!t.themeVariables?.fontFamily&&(t.themeVariables={...t.themeVariables,fontFamily:t.fontFamily}),bp.push(t),s4(ws,bp)},"addDirective"),ly=o((t=ws)=>{bp=[],s4(t,bp)},"reset"),Qxe={LAZY_LOAD_DEPRECATED:"The configuration options lazyLoadedDiagrams and loadExternalDiagramsAtStartup are deprecated. Please use registerExternalDiagrams instead."},jz={},Zxe=o(t=>{jz[t]||(Y.warn(Qxe[t]),jz[t]=!0)},"issueWarning"),tG=o(t=>{t&&(t.lazyLoadedDiagrams||t.loadExternalDiagramsAtStartup)&&Zxe("LAZY_LOAD_DEPRECATED")},"checkConfig")});var lC=Ei((sC,oC)=>{"use strict";(function(t,e){typeof sC=="object"&&typeof oC<"u"?oC.exports=e():typeof define=="function"&&define.amd?define(e):(t=typeof globalThis<"u"?globalThis:t||self,t.DOMPurify=e())})(sC,function(){"use strict";let{entries:t,setPrototypeOf:e,isFrozen:r,getPrototypeOf:n,getOwnPropertyDescriptor:i}=Object,{freeze:a,seal:s,create:l}=Object,{apply:u,construct:h}=typeof Reflect<"u"&&Reflect;a||(a=o(function(Ce){return Ce},"freeze")),s||(s=o(function(Ce){return Ce},"seal")),u||(u=o(function(Ce,Pe,Ie){return Ce.apply(Pe,Ie)},"apply")),h||(h=o(function(Ce,Pe){return new Ce(...Pe)},"construct"));let f=E(Array.prototype.forEach),d=E(Array.prototype.pop),p=E(Array.prototype.push),m=E(String.prototype.toLowerCase),g=E(String.prototype.toString),y=E(String.prototype.match),v=E(String.prototype.replace),x=E(String.prototype.indexOf),b=E(String.prototype.trim),w=E(Object.prototype.hasOwnProperty),_=E(RegExp.prototype.test),T=L(TypeError);function E(Re){return function(Ce){for(var Pe=arguments.length,Ie=new Array(Pe>1?Pe-1:0),$e=1;$e2&&arguments[2]!==void 0?arguments[2]:m;e&&e(Re,null);let Ie=Ce.length;for(;Ie--;){let $e=Ce[Ie];if(typeof $e=="string"){let ye=Pe($e);ye!==$e&&(r(Ce)||(Ce[Ie]=ye),$e=ye)}Re[$e]=!0}return Re}o(S,"addToSet");function A(Re){for(let Ce=0;Ce/gm),oe=s(/\${[\w\W]*}/gm),K=s(/^data-[\-\w.\u00B7-\uFFFF]/),ee=s(/^aria-[\-\w]+$/),J=s(/^(?:(?:(?:f|ht)tps?|mailto|tel|callto|sms|cid|xmpp):|[^a-z]|[a-z+.\-]+(?:[^a-z+.\-:]|$))/i),H=s(/^(?:\w+script|data):/i),q=s(/[\u0000-\u0020\u00A0\u1680\u180E\u2000-\u2029\u205F\u3000]/g),Q=s(/^html$/i),ae=s(/^[a-z][.\w]*(-[.\w]+)+$/i);var ue=Object.freeze({__proto__:null,MUSTACHE_EXPR:Z,ERB_EXPR:j,TMPLIT_EXPR:oe,DATA_ATTR:K,ARIA_ATTR:ee,IS_ALLOWED_URI:J,IS_SCRIPT_OR_DATA:H,ATTR_WHITESPACE:q,DOCTYPE_NAME:Q,CUSTOM_ELEMENT:ae});let ce={element:1,attribute:2,text:3,cdataSection:4,entityReference:5,entityNode:6,progressingInstruction:7,comment:8,document:9,documentType:10,documentFragment:11,notation:12},te=o(function(){return typeof window>"u"?null:window},"getGlobal"),Ne=o(function(Ce,Pe){if(typeof Ce!="object"||typeof Ce.createPolicy!="function")return null;let Ie=null,$e="data-tt-policy-suffix";Pe&&Pe.hasAttribute($e)&&(Ie=Pe.getAttribute($e));let ye="dompurify"+(Ie?"#"+Ie:"");try{return Ce.createPolicy(ye,{createHTML(X){return X},createScriptURL(X){return X}})}catch{return console.warn("TrustedTypes policy "+ye+" could not be created."),null}},"_createTrustedTypesPolicy");function se(){let Re=arguments.length>0&&arguments[0]!==void 0?arguments[0]:te(),Ce=o(Kt=>se(Kt),"DOMPurify");if(Ce.version="3.1.6",Ce.removed=[],!Re||!Re.document||Re.document.nodeType!==ce.document)return Ce.isSupported=!1,Ce;let{document:Pe}=Re,Ie=Pe,$e=Ie.currentScript,{DocumentFragment:ye,HTMLTemplateElement:X,Node:fe,Element:he,NodeFilter:ge,NamedNodeMap:ne=Re.NamedNodeMap||Re.MozNamedAttrMap,HTMLFormElement:ve,DOMParser:U,trustedTypes:Te}=Re,ie=he.prototype,Ee=D(ie,"cloneNode"),Ae=D(ie,"remove"),Ge=D(ie,"nextSibling"),Be=D(ie,"childNodes"),me=D(ie,"parentNode");if(typeof X=="function"){let Kt=Pe.createElement("template");Kt.content&&Kt.content.ownerDocument&&(Pe=Kt.content.ownerDocument)}let He,Oe="",{implementation:et,createNodeIterator:bt,createDocumentFragment:kt,getElementsByTagName:vt}=Pe,{importNode:rt}=Ie,yt={};Ce.isSupported=typeof t=="function"&&typeof me=="function"&&et&&et.createHTMLDocument!==void 0;let{MUSTACHE_EXPR:Ue,ERB_EXPR:tt,TMPLIT_EXPR:ht,DATA_ATTR:Et,ARIA_ATTR:er,IS_SCRIPT_OR_DATA:dt,ATTR_WHITESPACE:Je,CUSTOM_ELEMENT:ct}=ue,{IS_ALLOWED_URI:Ct}=ue,pt=null,Bt=S({},[...k,...R,...C,...N,...F]),Tr=null,yr=S({},[...B,...G,...z,...W]),or=Object.seal(l(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}})),ln=null,Or=null,ii=!0,mn=!0,On=!1,_r=!0,mi=!1,vs=!0,Pn=!1,So=!1,gl=!1,Bn=!1,ki=!1,At=!1,Pt=!0,wt=!1,We="user-content-",Ft=!0,de=!1,gn={},xe=null,ja=S({},["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"]),W1=null,Y1=S({},["audio","video","img","source","image","track"]),q1=null,X1=S({},["alt","class","for","id","label","name","pattern","placeholder","role","summary","title","value","style","xmlns"]),op="http://www.w3.org/1998/Math/MathML",Kn="http://www.w3.org/2000/svg",ca="http://www.w3.org/1999/xhtml",tc=ca,Wf=!1,j1=null,TF=S({},[op,Kn,ca],g),Yf=null,ua=["application/xhtml+xml","text/html"],K1="text/html",En=null,Oi=null,kF=Pe.createElement("form"),lp=o(function(Le){return Le instanceof RegExp||Le instanceof Function},"isRegexOrFunction"),rc=o(function(){let Le=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};if(!(Oi&&Oi===Le)){if((!Le||typeof Le!="object")&&(Le={}),Le=I(Le),Yf=ua.indexOf(Le.PARSER_MEDIA_TYPE)===-1?K1:Le.PARSER_MEDIA_TYPE,En=Yf==="application/xhtml+xml"?g:m,pt=w(Le,"ALLOWED_TAGS")?S({},Le.ALLOWED_TAGS,En):Bt,Tr=w(Le,"ALLOWED_ATTR")?S({},Le.ALLOWED_ATTR,En):yr,j1=w(Le,"ALLOWED_NAMESPACES")?S({},Le.ALLOWED_NAMESPACES,g):TF,q1=w(Le,"ADD_URI_SAFE_ATTR")?S(I(X1),Le.ADD_URI_SAFE_ATTR,En):X1,W1=w(Le,"ADD_DATA_URI_TAGS")?S(I(Y1),Le.ADD_DATA_URI_TAGS,En):Y1,xe=w(Le,"FORBID_CONTENTS")?S({},Le.FORBID_CONTENTS,En):ja,ln=w(Le,"FORBID_TAGS")?S({},Le.FORBID_TAGS,En):{},Or=w(Le,"FORBID_ATTR")?S({},Le.FORBID_ATTR,En):{},gn=w(Le,"USE_PROFILES")?Le.USE_PROFILES:!1,ii=Le.ALLOW_ARIA_ATTR!==!1,mn=Le.ALLOW_DATA_ATTR!==!1,On=Le.ALLOW_UNKNOWN_PROTOCOLS||!1,_r=Le.ALLOW_SELF_CLOSE_IN_ATTR!==!1,mi=Le.SAFE_FOR_TEMPLATES||!1,vs=Le.SAFE_FOR_XML!==!1,Pn=Le.WHOLE_DOCUMENT||!1,Bn=Le.RETURN_DOM||!1,ki=Le.RETURN_DOM_FRAGMENT||!1,At=Le.RETURN_TRUSTED_TYPE||!1,gl=Le.FORCE_BODY||!1,Pt=Le.SANITIZE_DOM!==!1,wt=Le.SANITIZE_NAMED_PROPS||!1,Ft=Le.KEEP_CONTENT!==!1,de=Le.IN_PLACE||!1,Ct=Le.ALLOWED_URI_REGEXP||J,tc=Le.NAMESPACE||ca,or=Le.CUSTOM_ELEMENT_HANDLING||{},Le.CUSTOM_ELEMENT_HANDLING&&lp(Le.CUSTOM_ELEMENT_HANDLING.tagNameCheck)&&(or.tagNameCheck=Le.CUSTOM_ELEMENT_HANDLING.tagNameCheck),Le.CUSTOM_ELEMENT_HANDLING&&lp(Le.CUSTOM_ELEMENT_HANDLING.attributeNameCheck)&&(or.attributeNameCheck=Le.CUSTOM_ELEMENT_HANDLING.attributeNameCheck),Le.CUSTOM_ELEMENT_HANDLING&&typeof Le.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements=="boolean"&&(or.allowCustomizedBuiltInElements=Le.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements),mi&&(mn=!1),ki&&(Bn=!0),gn&&(pt=S({},F),Tr=[],gn.html===!0&&(S(pt,k),S(Tr,B)),gn.svg===!0&&(S(pt,R),S(Tr,G),S(Tr,W)),gn.svgFilters===!0&&(S(pt,C),S(Tr,G),S(Tr,W)),gn.mathMl===!0&&(S(pt,N),S(Tr,z),S(Tr,W))),Le.ADD_TAGS&&(pt===Bt&&(pt=I(pt)),S(pt,Le.ADD_TAGS,En)),Le.ADD_ATTR&&(Tr===yr&&(Tr=I(Tr)),S(Tr,Le.ADD_ATTR,En)),Le.ADD_URI_SAFE_ATTR&&S(q1,Le.ADD_URI_SAFE_ATTR,En),Le.FORBID_CONTENTS&&(xe===ja&&(xe=I(xe)),S(xe,Le.FORBID_CONTENTS,En)),Ft&&(pt["#text"]=!0),Pn&&S(pt,["html","head","body"]),pt.table&&(S(pt,["tbody"]),delete ln.tbody),Le.TRUSTED_TYPES_POLICY){if(typeof Le.TRUSTED_TYPES_POLICY.createHTML!="function")throw T('TRUSTED_TYPES_POLICY configuration option must provide a "createHTML" hook.');if(typeof Le.TRUSTED_TYPES_POLICY.createScriptURL!="function")throw T('TRUSTED_TYPES_POLICY configuration option must provide a "createScriptURL" hook.');He=Le.TRUSTED_TYPES_POLICY,Oe=He.createHTML("")}else He===void 0&&(He=Ne(Te,$e)),He!==null&&typeof Oe=="string"&&(Oe=He.createHTML(""));a&&a(Le),Oi=Le}},"_parseConfig"),qf=S({},["mi","mo","mn","ms","mtext"]),Co=S({},["foreignobject","annotation-xml"]),zb=S({},["title","style","font","a","script"]),Xf=S({},[...R,...C,...O]),cp=S({},[...N,...P]),Ka=o(function(Le){let ft=me(Le);(!ft||!ft.tagName)&&(ft={namespaceURI:tc,tagName:"template"});let zt=m(Le.tagName),Sn=m(ft.tagName);return j1[Le.namespaceURI]?Le.namespaceURI===Kn?ft.namespaceURI===ca?zt==="svg":ft.namespaceURI===op?zt==="svg"&&(Sn==="annotation-xml"||qf[Sn]):!!Xf[zt]:Le.namespaceURI===op?ft.namespaceURI===ca?zt==="math":ft.namespaceURI===Kn?zt==="math"&&Co[Sn]:!!cp[zt]:Le.namespaceURI===ca?ft.namespaceURI===Kn&&!Co[Sn]||ft.namespaceURI===op&&!qf[Sn]?!1:!cp[zt]&&(zb[zt]||!Xf[zt]):!!(Yf==="application/xhtml+xml"&&j1[Le.namespaceURI]):!1},"_checkValidNamespace"),nc=o(function(Le){p(Ce.removed,{element:Le});try{me(Le).removeChild(Le)}catch{Ae(Le)}},"_forceRemove"),Gb=o(function(Le,ft){try{p(Ce.removed,{attribute:ft.getAttributeNode(Le),from:ft})}catch{p(Ce.removed,{attribute:null,from:ft})}if(ft.removeAttribute(Le),Le==="is"&&!Tr[Le])if(Bn||ki)try{nc(ft)}catch{}else try{ft.setAttribute(Le,"")}catch{}},"_removeAttribute"),EF=o(function(Le){let ft=null,zt=null;if(gl)Le=""+Le;else{let ha=y(Le,/^[\r\n\t ]+/);zt=ha&&ha[0]}Yf==="application/xhtml+xml"&&tc===ca&&(Le=''+Le+"");let Sn=He?He.createHTML(Le):Le;if(tc===ca)try{ft=new U().parseFromString(Sn,Yf)}catch{}if(!ft||!ft.documentElement){ft=et.createDocument(tc,"template",null);try{ft.documentElement.innerHTML=Wf?Oe:Sn}catch{}}let Da=ft.body||ft.documentElement;return Le&&zt&&Da.insertBefore(Pe.createTextNode(zt),Da.childNodes[0]||null),tc===ca?vt.call(ft,Pn?"html":"body")[0]:Pn?ft.documentElement:Da},"_initDocument"),SF=o(function(Le){return bt.call(Le.ownerDocument||Le,Le,ge.SHOW_ELEMENT|ge.SHOW_COMMENT|ge.SHOW_TEXT|ge.SHOW_PROCESSING_INSTRUCTION|ge.SHOW_CDATA_SECTION,null)},"_createNodeIterator"),CF=o(function(Le){return Le instanceof ve&&(typeof Le.nodeName!="string"||typeof Le.textContent!="string"||typeof Le.removeChild!="function"||!(Le.attributes instanceof ne)||typeof Le.removeAttribute!="function"||typeof Le.setAttribute!="function"||typeof Le.namespaceURI!="string"||typeof Le.insertBefore!="function"||typeof Le.hasChildNodes!="function")},"_isClobbered"),AF=o(function(Le){return typeof fe=="function"&&Le instanceof fe},"_isNode"),iu=o(function(Le,ft,zt){yt[Le]&&f(yt[Le],Sn=>{Sn.call(Ce,ft,zt,Oi)})},"_executeHook"),_F=o(function(Le){let ft=null;if(iu("beforeSanitizeElements",Le,null),CF(Le))return nc(Le),!0;let zt=En(Le.nodeName);if(iu("uponSanitizeElement",Le,{tagName:zt,allowedTags:pt}),Le.hasChildNodes()&&!AF(Le.firstElementChild)&&_(/<[/\w]/g,Le.innerHTML)&&_(/<[/\w]/g,Le.textContent)||Le.nodeType===ce.progressingInstruction||vs&&Le.nodeType===ce.comment&&_(/<[/\w]/g,Le.data))return nc(Le),!0;if(!pt[zt]||ln[zt]){if(!ln[zt]&&DF(zt)&&(or.tagNameCheck instanceof RegExp&&_(or.tagNameCheck,zt)||or.tagNameCheck instanceof Function&&or.tagNameCheck(zt)))return!1;if(Ft&&!xe[zt]){let Sn=me(Le)||Le.parentNode,Da=Be(Le)||Le.childNodes;if(Da&&Sn){let ha=Da.length;for(let xs=ha-1;xs>=0;--xs){let ic=Ee(Da[xs],!0);ic.__removalCount=(Le.__removalCount||0)+1,Sn.insertBefore(ic,Ge(Le))}}}return nc(Le),!0}return Le instanceof he&&!Ka(Le)||(zt==="noscript"||zt==="noembed"||zt==="noframes")&&_(/<\/no(script|embed|frames)/i,Le.innerHTML)?(nc(Le),!0):(mi&&Le.nodeType===ce.text&&(ft=Le.textContent,f([Ue,tt,ht],Sn=>{ft=v(ft,Sn," ")}),Le.textContent!==ft&&(p(Ce.removed,{element:Le.cloneNode()}),Le.textContent=ft)),iu("afterSanitizeElements",Le,null),!1)},"_sanitizeElements"),LF=o(function(Le,ft,zt){if(Pt&&(ft==="id"||ft==="name")&&(zt in Pe||zt in kF))return!1;if(!(mn&&!Or[ft]&&_(Et,ft))){if(!(ii&&_(er,ft))){if(!Tr[ft]||Or[ft]){if(!(DF(Le)&&(or.tagNameCheck instanceof RegExp&&_(or.tagNameCheck,Le)||or.tagNameCheck instanceof Function&&or.tagNameCheck(Le))&&(or.attributeNameCheck instanceof RegExp&&_(or.attributeNameCheck,ft)||or.attributeNameCheck instanceof Function&&or.attributeNameCheck(ft))||ft==="is"&&or.allowCustomizedBuiltInElements&&(or.tagNameCheck instanceof RegExp&&_(or.tagNameCheck,zt)||or.tagNameCheck instanceof Function&&or.tagNameCheck(zt))))return!1}else if(!q1[ft]){if(!_(Ct,v(zt,Je,""))){if(!((ft==="src"||ft==="xlink:href"||ft==="href")&&Le!=="script"&&x(zt,"data:")===0&&W1[Le])){if(!(On&&!_(dt,v(zt,Je,"")))){if(zt)return!1}}}}}}return!0},"_isValidAttribute"),DF=o(function(Le){return Le!=="annotation-xml"&&y(Le,ct)},"_isBasicCustomElement"),NF=o(function(Le){iu("beforeSanitizeAttributes",Le,null);let{attributes:ft}=Le;if(!ft)return;let zt={attrName:"",attrValue:"",keepAttr:!0,allowedAttributes:Tr},Sn=ft.length;for(;Sn--;){let Da=ft[Sn],{name:ha,namespaceURI:xs,value:ic}=Da,Q1=En(ha),Qa=ha==="value"?ic:b(ic);if(zt.attrName=Q1,zt.attrValue=Qa,zt.keepAttr=!0,zt.forceKeepAttr=void 0,iu("uponSanitizeAttribute",Le,zt),Qa=zt.attrValue,vs&&_(/((--!?|])>)|<\/(style|title)/i,Qa)){Gb(ha,Le);continue}if(zt.forceKeepAttr||(Gb(ha,Le),!zt.keepAttr))continue;if(!_r&&_(/\/>/i,Qa)){Gb(ha,Le);continue}mi&&f([Ue,tt,ht],MF=>{Qa=v(Qa,MF," ")});let RF=En(Le.nodeName);if(LF(RF,Q1,Qa)){if(wt&&(Q1==="id"||Q1==="name")&&(Gb(ha,Le),Qa=We+Qa),He&&typeof Te=="object"&&typeof Te.getAttributeType=="function"&&!xs)switch(Te.getAttributeType(RF,Q1)){case"TrustedHTML":{Qa=He.createHTML(Qa);break}case"TrustedScriptURL":{Qa=He.createScriptURL(Qa);break}}try{xs?Le.setAttributeNS(xs,ha,Qa):Le.setAttribute(ha,Qa),CF(Le)?nc(Le):d(Ce.removed)}catch{}}}iu("afterSanitizeAttributes",Le,null)},"_sanitizeAttributes"),nxe=o(function Kt(Le){let ft=null,zt=SF(Le);for(iu("beforeSanitizeShadowDOM",Le,null);ft=zt.nextNode();)iu("uponSanitizeShadowNode",ft,null),!_F(ft)&&(ft.content instanceof ye&&Kt(ft.content),NF(ft));iu("afterSanitizeShadowDOM",Le,null)},"_sanitizeShadowDOM");return Ce.sanitize=function(Kt){let Le=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},ft=null,zt=null,Sn=null,Da=null;if(Wf=!Kt,Wf&&(Kt=""),typeof Kt!="string"&&!AF(Kt))if(typeof Kt.toString=="function"){if(Kt=Kt.toString(),typeof Kt!="string")throw T("dirty is not a string, aborting")}else throw T("toString is not a function");if(!Ce.isSupported)return Kt;if(So||rc(Le),Ce.removed=[],typeof Kt=="string"&&(de=!1),de){if(Kt.nodeName){let ic=En(Kt.nodeName);if(!pt[ic]||ln[ic])throw T("root node is forbidden and cannot be sanitized in-place")}}else if(Kt instanceof fe)ft=EF(""),zt=ft.ownerDocument.importNode(Kt,!0),zt.nodeType===ce.element&&zt.nodeName==="BODY"||zt.nodeName==="HTML"?ft=zt:ft.appendChild(zt);else{if(!Bn&&!mi&&!Pn&&Kt.indexOf("<")===-1)return He&&At?He.createHTML(Kt):Kt;if(ft=EF(Kt),!ft)return Bn?null:At?Oe:""}ft&&gl&&nc(ft.firstChild);let ha=SF(de?Kt:ft);for(;Sn=ha.nextNode();)_F(Sn)||(Sn.content instanceof ye&&nxe(Sn.content),NF(Sn));if(de)return Kt;if(Bn){if(ki)for(Da=kt.call(ft.ownerDocument);ft.firstChild;)Da.appendChild(ft.firstChild);else Da=ft;return(Tr.shadowroot||Tr.shadowrootmode)&&(Da=rt.call(Ie,Da,!0)),Da}let xs=Pn?ft.outerHTML:ft.innerHTML;return Pn&&pt["!doctype"]&&ft.ownerDocument&&ft.ownerDocument.doctype&&ft.ownerDocument.doctype.name&&_(Q,ft.ownerDocument.doctype.name)&&(xs=" +`+xs),mi&&f([Ue,tt,ht],ic=>{xs=v(xs,ic," ")}),He&&At?He.createHTML(xs):xs},Ce.setConfig=function(){let Kt=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};rc(Kt),So=!0},Ce.clearConfig=function(){Oi=null,So=!1},Ce.isValidAttribute=function(Kt,Le,ft){Oi||rc({});let zt=En(Kt),Sn=En(Le);return LF(zt,Sn,ft)},Ce.addHook=function(Kt,Le){typeof Le=="function"&&(yt[Kt]=yt[Kt]||[],p(yt[Kt],Le))},Ce.removeHook=function(Kt){if(yt[Kt])return d(yt[Kt])},Ce.removeHooks=function(Kt){yt[Kt]&&(yt[Kt]=[])},Ce.removeAllHooks=function(){yt={}},Ce}o(se,"createDOMPurify");var ke=se();return ke})});var _$={};vr(_$,{default:()=>Y4e});function abe(t){return String(t).replace(ibe,e=>nbe[e])}function cbe(t){if(t.default)return t.default;var e=t.type,r=Array.isArray(e)?e[0]:e;if(typeof r!="string")return r.enum[0];switch(r){case"boolean":return!1;case"string":return"";case"number":return 0;case"object":return{}}}function gbe(t){for(var e=0;e=i[0]&&t<=i[1])return r.name}return null}function IG(t){for(var e=0;e=b4[e]&&t<=b4[e+1])return!0;return!1}function Abe(t,e){lc[t]=e}function IC(t,e,r){if(!lc[e])throw new Error("Font metrics not found for font: "+e+".");var n=t.charCodeAt(0),i=lc[e][n];if(!i&&t[0]in nG&&(n=nG[t[0]].charCodeAt(0),i=lc[e][n]),!i&&r==="text"&&IG(n)&&(i=lc[e][77]),i)return{depth:i[0],height:i[1],italic:i[2],skew:i[3],width:i[4]}}function _be(t){var e;if(t>=5?e=0:t>=3?e=1:e=2,!cC[e]){var r=cC[e]={cssEmPerMu:l4.quad[e]/18};for(var n in l4)l4.hasOwnProperty(n)&&(r[n]=l4[n][e])}return cC[e]}function sG(t){if(t instanceof Es)return t;throw new Error("Expected symbolNode but got "+String(t)+".")}function Rbe(t){if(t instanceof nd)return t;throw new Error("Expected span but got "+String(t)+".")}function $(t,e,r,n,i,a){Cn[t][i]={font:e,group:r,replace:n},a&&n&&(Cn[t][n]=Cn[t][i])}function St(t){for(var{type:e,names:r,props:n,handler:i,htmlBuilder:a,mathmlBuilder:s}=t,l={type:e,numArgs:n.numArgs,argTypes:n.argTypes,allowedInArgument:!!n.allowedInArgument,allowedInText:!!n.allowedInText,allowedInMath:n.allowedInMath===void 0?!0:n.allowedInMath,numOptionalArgs:n.numOptionalArgs||0,infix:!!n.infix,primitive:!!n.primitive,handler:i},u=0;u0&&(a.push(m4(s,e)),s=[]),a.push(n[l]));s.length>0&&a.push(m4(s,e));var h;r?(h=m4(Fi(r,e,!0)),h.classes=["tag"],a.push(h)):i&&a.push(i);var f=pu(["katex-html"],a);if(f.setAttribute("aria-hidden","true"),h){var d=h.children[0];d.style.height=gt(f.height+f.depth),f.depth&&(d.style.verticalAlign=gt(-f.depth))}return f}function YG(t){return new rd(t)}function hG(t,e,r,n,i){var a=Ss(t,r),s;a.length===1&&a[0]instanceof ks&&Jt.contains(["mrow","mtable"],a[0].type)?s=a[0]:s=new at.MathNode("mrow",a);var l=new at.MathNode("annotation",[new at.TextNode(e)]);l.setAttribute("encoding","application/x-tex");var u=new at.MathNode("semantics",[s,l]),h=new at.MathNode("math",[u]);h.setAttribute("xmlns","http://www.w3.org/1998/Math/MathML"),n&&h.setAttribute("display","block");var f=i?"katex":"katex-mathml";return Fe.makeSpan([f],[h])}function gr(t,e){if(!t||t.type!==e)throw new Error("Expected node of type "+e+", but got "+(t?"node of type "+t.type:String(t)));return t}function FC(t){var e=N4(t);if(!e)throw new Error("Expected node of symbol group type, but got "+(t?"node of type "+t.type:String(t)));return e}function N4(t){return t&&(t.type==="atom"||Ibe.hasOwnProperty(t.type))?t:null}function KG(t,e){var r=Fi(t.body,e,!0);return u4e([t.mclass],r,e)}function QG(t,e){var r,n=Ss(t.body,e);return t.mclass==="minner"?r=new at.MathNode("mpadded",n):t.mclass==="mord"?t.isCharacterBox?(r=n[0],r.type="mi"):r=new at.MathNode("mi",n):(t.isCharacterBox?(r=n[0],r.type="mo"):r=new at.MathNode("mo",n),t.mclass==="mbin"?(r.attributes.lspace="0.22em",r.attributes.rspace="0.22em"):t.mclass==="mpunct"?(r.attributes.lspace="0em",r.attributes.rspace="0.17em"):t.mclass==="mopen"||t.mclass==="mclose"?(r.attributes.lspace="0em",r.attributes.rspace="0em"):t.mclass==="minner"&&(r.attributes.lspace="0.0556em",r.attributes.width="+0.1111em")),r}function d4e(t,e,r){var n=h4e[t];switch(n){case"\\\\cdrightarrow":case"\\\\cdleftarrow":return r.callFunction(n,[e[0]],[e[1]]);case"\\uparrow":case"\\downarrow":{var i=r.callFunction("\\\\cdleft",[e[0]],[]),a={type:"atom",text:n,mode:"math",family:"rel"},s=r.callFunction("\\Big",[a],[]),l=r.callFunction("\\\\cdright",[e[1]],[]),u={type:"ordgroup",mode:"math",body:[i,s,l]};return r.callFunction("\\\\cdparent",[u],[])}case"\\\\cdlongequal":return r.callFunction("\\\\cdlongequal",[],[]);case"\\Vert":{var h={type:"textord",text:"\\Vert",mode:"math"};return r.callFunction("\\Big",[h],[])}default:return{type:"textord",text:" ",mode:"math"}}}function p4e(t){var e=[];for(t.gullet.beginGroup(),t.gullet.macros.set("\\cr","\\\\\\relax"),t.gullet.beginGroup();;){e.push(t.parseExpression(!1,"\\\\")),t.gullet.endGroup(),t.gullet.beginGroup();var r=t.fetch().text;if(r==="&"||r==="\\\\")t.consume();else if(r==="\\end"){e[e.length-1].length===0&&e.pop();break}else throw new lt("Expected \\\\ or \\cr or \\end",t.nextToken)}for(var n=[],i=[n],a=0;a-1))if("<>AV".indexOf(h)>-1)for(var d=0;d<2;d++){for(var p=!0,m=u+1;mAV=|." after @',s[u]);var g=d4e(h,f,t),y={type:"styling",body:[g],mode:"math",style:"display"};n.push(y),l=fG()}a%2===0?n.push(l):n.shift(),n=[],i.push(n)}t.gullet.endGroup(),t.gullet.endGroup();var v=new Array(i[0].length).fill({type:"align",align:"c",pregap:.25,postgap:.25});return{type:"array",mode:"math",body:i,arraystretch:1,addJot:!0,rowGaps:[null],cols:v,colSeparationType:"CD",hLinesBeforeRow:new Array(i.length+1).fill([])}}function M4(t,e){var r=N4(t);if(r&&Jt.contains(A4e,r.text))return r;throw r?new lt("Invalid delimiter '"+r.text+"' after '"+e.funcName+"'",t):new lt("Invalid delimiter type '"+t.type+"'",t)}function mG(t){if(!t.body)throw new Error("Bug: The leftright ParseNode wasn't fully parsed.")}function uc(t){for(var{type:e,names:r,props:n,handler:i,htmlBuilder:a,mathmlBuilder:s}=t,l={type:e,numArgs:n.numArgs||0,allowedInText:!1,numOptionalArgs:0,handler:i},u=0;u1||!f)&&y.pop(),x.length{"use strict";Js=class t{static{o(this,"SourceLocation")}constructor(e,r,n){this.lexer=void 0,this.start=void 0,this.end=void 0,this.lexer=e,this.start=r,this.end=n}static range(e,r){return r?!e||!e.loc||!r.loc||e.loc.lexer!==r.loc.lexer?null:new t(e.loc.lexer,e.loc.start,r.loc.end):e&&e.loc}},Ro=class t{static{o(this,"Token")}constructor(e,r){this.text=void 0,this.loc=void 0,this.noexpand=void 0,this.treatAsRelax=void 0,this.text=e,this.loc=r}range(e,r){return new t(r,Js.range(this,e))}},lt=class t{static{o(this,"ParseError")}constructor(e,r){this.name=void 0,this.position=void 0,this.length=void 0,this.rawMessage=void 0;var n="KaTeX parse error: "+e,i,a,s=r&&r.loc;if(s&&s.start<=s.end){var l=s.lexer.input;i=s.start,a=s.end,i===l.length?n+=" at end of input: ":n+=" at position "+(i+1)+": ";var u=l.slice(i,a).replace(/[^]/g,"$&\u0332"),h;i>15?h="\u2026"+l.slice(i-15,i):h=l.slice(0,i);var f;a+15":">","<":"<",'"':""","'":"'"},ibe=/[&><"']/g;o(abe,"escape");MG=o(function t(e){return e.type==="ordgroup"||e.type==="color"?e.body.length===1?t(e.body[0]):e:e.type==="font"?t(e.body):e},"getBaseElem"),sbe=o(function(e){var r=MG(e);return r.type==="mathord"||r.type==="textord"||r.type==="atom"},"isCharacterBox"),obe=o(function(e){if(!e)throw new Error("Expected non-null, but got "+String(e));return e},"assert"),lbe=o(function(e){var r=/^[\x00-\x20]*([^\\/#?]*?)(:|�*58|�*3a|&colon)/i.exec(e);return r?r[2]!==":"||!/^[a-zA-Z][a-zA-Z0-9+\-.]*$/.test(r[1])?null:r[1].toLowerCase():"_relative"},"protocolFromUrl"),Jt={contains:Jxe,deflt:ebe,escape:abe,hyphenate:rbe,getBaseElem:MG,isCharacterBox:sbe,protocolFromUrl:lbe},x4={displayMode:{type:"boolean",description:"Render math in display mode, which puts the math in display style (so \\int and \\sum are large, for example), and centers the math on the page on its own line.",cli:"-d, --display-mode"},output:{type:{enum:["htmlAndMathml","html","mathml"]},description:"Determines the markup language of the output.",cli:"-F, --format "},leqno:{type:"boolean",description:"Render display math in leqno style (left-justified tags)."},fleqn:{type:"boolean",description:"Render display math flush left."},throwOnError:{type:"boolean",default:!0,cli:"-t, --no-throw-on-error",cliDescription:"Render errors (in the color given by --error-color) instead of throwing a ParseError exception when encountering an error."},errorColor:{type:"string",default:"#cc0000",cli:"-c, --error-color ",cliDescription:"A color string given in the format 'rgb' or 'rrggbb' (no #). This option determines the color of errors rendered by the -t option.",cliProcessor:o(t=>"#"+t,"cliProcessor")},macros:{type:"object",cli:"-m, --macro ",cliDescription:"Define custom macro of the form '\\foo:expansion' (use multiple -m arguments for multiple macros).",cliDefault:[],cliProcessor:o((t,e)=>(e.push(t),e),"cliProcessor")},minRuleThickness:{type:"number",description:"Specifies a minimum thickness, in ems, for fraction lines, `\\sqrt` top lines, `{array}` vertical lines, `\\hline`, `\\hdashline`, `\\underline`, `\\overline`, and the borders of `\\fbox`, `\\boxed`, and `\\fcolorbox`.",processor:o(t=>Math.max(0,t),"processor"),cli:"--min-rule-thickness ",cliProcessor:parseFloat},colorIsTextColor:{type:"boolean",description:"Makes \\color behave like LaTeX's 2-argument \\textcolor, instead of LaTeX's one-argument \\color mode change.",cli:"-b, --color-is-text-color"},strict:{type:[{enum:["warn","ignore","error"]},"boolean","function"],description:"Turn on strict / LaTeX faithfulness mode, which throws an error if the input uses features that are not supported by LaTeX.",cli:"-S, --strict",cliDefault:!1},trust:{type:["boolean","function"],description:"Trust the input, enabling all HTML features such as \\url.",cli:"-T, --trust"},maxSize:{type:"number",default:1/0,description:"If non-zero, all user-specified sizes, e.g. in \\rule{500em}{500em}, will be capped to maxSize ems. Otherwise, elements and spaces can be arbitrarily large",processor:o(t=>Math.max(0,t),"processor"),cli:"-s, --max-size ",cliProcessor:parseInt},maxExpand:{type:"number",default:1e3,description:"Limit the number of macro expansions to the specified number, to prevent e.g. infinite macro loops. If set to Infinity, the macro expander will try to fully expand as in LaTeX.",processor:o(t=>Math.max(0,t),"processor"),cli:"-e, --max-expand ",cliProcessor:o(t=>t==="Infinity"?1/0:parseInt(t),"cliProcessor")},globalGroup:{type:"boolean",cli:!1}};o(cbe,"getDefaultValue");dy=class{static{o(this,"Settings")}constructor(e){this.displayMode=void 0,this.output=void 0,this.leqno=void 0,this.fleqn=void 0,this.throwOnError=void 0,this.errorColor=void 0,this.macros=void 0,this.minRuleThickness=void 0,this.colorIsTextColor=void 0,this.strict=void 0,this.trust=void 0,this.maxSize=void 0,this.maxExpand=void 0,this.globalGroup=void 0,e=e||{};for(var r in x4)if(x4.hasOwnProperty(r)){var n=x4[r];this[r]=e[r]!==void 0?n.processor?n.processor(e[r]):e[r]:cbe(n)}}reportNonstrict(e,r,n){var i=this.strict;if(typeof i=="function"&&(i=i(e,r,n)),!(!i||i==="ignore")){if(i===!0||i==="error")throw new lt("LaTeX-incompatible input and strict mode is set to 'error': "+(r+" ["+e+"]"),n);i==="warn"?typeof console<"u"&&console.warn("LaTeX-incompatible input and strict mode is set to 'warn': "+(r+" ["+e+"]")):typeof console<"u"&&console.warn("LaTeX-incompatible input and strict mode is set to "+("unrecognized '"+i+"': "+r+" ["+e+"]"))}}useStrictBehavior(e,r,n){var i=this.strict;if(typeof i=="function")try{i=i(e,r,n)}catch{i="error"}return!i||i==="ignore"?!1:i===!0||i==="error"?!0:i==="warn"?(typeof console<"u"&&console.warn("LaTeX-incompatible input and strict mode is set to 'warn': "+(r+" ["+e+"]")),!1):(typeof console<"u"&&console.warn("LaTeX-incompatible input and strict mode is set to "+("unrecognized '"+i+"': "+r+" ["+e+"]")),!1)}isTrusted(e){if(e.url&&!e.protocol){var r=Jt.protocolFromUrl(e.url);if(r==null)return!1;e.protocol=r}var n=typeof this.trust=="function"?this.trust(e):this.trust;return!!n}},sc=class{static{o(this,"Style")}constructor(e,r,n){this.id=void 0,this.size=void 0,this.cramped=void 0,this.id=e,this.size=r,this.cramped=n}sup(){return oc[ube[this.id]]}sub(){return oc[hbe[this.id]]}fracNum(){return oc[fbe[this.id]]}fracDen(){return oc[dbe[this.id]]}cramp(){return oc[pbe[this.id]]}text(){return oc[mbe[this.id]]}isTight(){return this.size>=2}},MC=0,w4=1,kp=2,fu=3,py=4,No=5,Ep=6,Ja=7,oc=[new sc(MC,0,!1),new sc(w4,0,!0),new sc(kp,1,!1),new sc(fu,1,!0),new sc(py,2,!1),new sc(No,2,!0),new sc(Ep,3,!1),new sc(Ja,3,!0)],ube=[py,No,py,No,Ep,Ja,Ep,Ja],hbe=[No,No,No,No,Ja,Ja,Ja,Ja],fbe=[kp,fu,py,No,Ep,Ja,Ep,Ja],dbe=[fu,fu,No,No,Ja,Ja,Ja,Ja],pbe=[w4,w4,fu,fu,No,No,Ja,Ja],mbe=[MC,w4,kp,fu,kp,fu,kp,fu],rr={DISPLAY:oc[MC],TEXT:oc[kp],SCRIPT:oc[py],SCRIPTSCRIPT:oc[Ep]},wC=[{name:"latin",blocks:[[256,591],[768,879]]},{name:"cyrillic",blocks:[[1024,1279]]},{name:"armenian",blocks:[[1328,1423]]},{name:"brahmic",blocks:[[2304,4255]]},{name:"georgian",blocks:[[4256,4351]]},{name:"cjk",blocks:[[12288,12543],[19968,40879],[65280,65376]]},{name:"hangul",blocks:[[44032,55215]]}];o(gbe,"scriptFromCodepoint");b4=[];wC.forEach(t=>t.blocks.forEach(e=>b4.push(...e)));o(IG,"supportedCodepoint");Tp=80,ybe=o(function(e,r){return"M95,"+(622+e+r)+` +c-2.7,0,-7.17,-2.7,-13.5,-8c-5.8,-5.3,-9.5,-10,-9.5,-14 +c0,-2,0.3,-3.3,1,-4c1.3,-2.7,23.83,-20.7,67.5,-54 +c44.2,-33.3,65.8,-50.3,66.5,-51c1.3,-1.3,3,-2,5,-2c4.7,0,8.7,3.3,12,10 +s173,378,173,378c0.7,0,35.3,-71,104,-213c68.7,-142,137.5,-285,206.5,-429 +c69,-144,104.5,-217.7,106.5,-221 +l`+e/2.075+" -"+e+` +c5.3,-9.3,12,-14,20,-14 +H400000v`+(40+e)+`H845.2724 +s-225.272,467,-225.272,467s-235,486,-235,486c-2.7,4.7,-9,7,-19,7 +c-6,0,-10,-1,-12,-3s-194,-422,-194,-422s-65,47,-65,47z +M`+(834+e)+" "+r+"h400000v"+(40+e)+"h-400000z"},"sqrtMain"),vbe=o(function(e,r){return"M263,"+(601+e+r)+`c0.7,0,18,39.7,52,119 +c34,79.3,68.167,158.7,102.5,238c34.3,79.3,51.8,119.3,52.5,120 +c340,-704.7,510.7,-1060.3,512,-1067 +l`+e/2.084+" -"+e+` +c4.7,-7.3,11,-11,19,-11 +H40000v`+(40+e)+`H1012.3 +s-271.3,567,-271.3,567c-38.7,80.7,-84,175,-136,283c-52,108,-89.167,185.3,-111.5,232 +c-22.3,46.7,-33.8,70.3,-34.5,71c-4.7,4.7,-12.3,7,-23,7s-12,-1,-12,-1 +s-109,-253,-109,-253c-72.7,-168,-109.3,-252,-110,-252c-10.7,8,-22,16.7,-34,26 +c-22,17.3,-33.3,26,-34,26s-26,-26,-26,-26s76,-59,76,-59s76,-60,76,-60z +M`+(1001+e)+" "+r+"h400000v"+(40+e)+"h-400000z"},"sqrtSize1"),xbe=o(function(e,r){return"M983 "+(10+e+r)+` +l`+e/3.13+" -"+e+` +c4,-6.7,10,-10,18,-10 H400000v`+(40+e)+` +H1013.1s-83.4,268,-264.1,840c-180.7,572,-277,876.3,-289,913c-4.7,4.7,-12.7,7,-24,7 +s-12,0,-12,0c-1.3,-3.3,-3.7,-11.7,-7,-25c-35.3,-125.3,-106.7,-373.3,-214,-744 +c-10,12,-21,25,-33,39s-32,39,-32,39c-6,-5.3,-15,-14,-27,-26s25,-30,25,-30 +c26.7,-32.7,52,-63,76,-91s52,-60,52,-60s208,722,208,722 +c56,-175.3,126.3,-397.3,211,-666c84.7,-268.7,153.8,-488.2,207.5,-658.5 +c53.7,-170.3,84.5,-266.8,92.5,-289.5z +M`+(1001+e)+" "+r+"h400000v"+(40+e)+"h-400000z"},"sqrtSize2"),bbe=o(function(e,r){return"M424,"+(2398+e+r)+` +c-1.3,-0.7,-38.5,-172,-111.5,-514c-73,-342,-109.8,-513.3,-110.5,-514 +c0,-2,-10.7,14.3,-32,49c-4.7,7.3,-9.8,15.7,-15.5,25c-5.7,9.3,-9.8,16,-12.5,20 +s-5,7,-5,7c-4,-3.3,-8.3,-7.7,-13,-13s-13,-13,-13,-13s76,-122,76,-122s77,-121,77,-121 +s209,968,209,968c0,-2,84.7,-361.7,254,-1079c169.3,-717.3,254.7,-1077.7,256,-1081 +l`+e/4.223+" -"+e+`c4,-6.7,10,-10,18,-10 H400000 +v`+(40+e)+`H1014.6 +s-87.3,378.7,-272.6,1166c-185.3,787.3,-279.3,1182.3,-282,1185 +c-2,6,-10,9,-24,9 +c-8,0,-12,-0.7,-12,-2z M`+(1001+e)+" "+r+` +h400000v`+(40+e)+"h-400000z"},"sqrtSize3"),wbe=o(function(e,r){return"M473,"+(2713+e+r)+` +c339.3,-1799.3,509.3,-2700,510,-2702 l`+e/5.298+" -"+e+` +c3.3,-7.3,9.3,-11,18,-11 H400000v`+(40+e)+`H1017.7 +s-90.5,478,-276.2,1466c-185.7,988,-279.5,1483,-281.5,1485c-2,6,-10,9,-24,9 +c-8,0,-12,-0.7,-12,-2c0,-1.3,-5.3,-32,-16,-92c-50.7,-293.3,-119.7,-693.3,-207,-1200 +c0,-1.3,-5.3,8.7,-16,30c-10.7,21.3,-21.3,42.7,-32,64s-16,33,-16,33s-26,-26,-26,-26 +s76,-153,76,-153s77,-151,77,-151c0.7,0.7,35.7,202,105,604c67.3,400.7,102,602.7,104, +606zM`+(1001+e)+" "+r+"h400000v"+(40+e)+"H1017.7z"},"sqrtSize4"),Tbe=o(function(e){var r=e/2;return"M400000 "+e+" H0 L"+r+" 0 l65 45 L145 "+(e-80)+" H400000z"},"phasePath"),kbe=o(function(e,r,n){var i=n-54-r-e;return"M702 "+(e+r)+"H400000"+(40+e)+` +H742v`+i+`l-4 4-4 4c-.667.7 -2 1.5-4 2.5s-4.167 1.833-6.5 2.5-5.5 1-9.5 1 +h-12l-28-84c-16.667-52-96.667 -294.333-240-727l-212 -643 -85 170 +c-4-3.333-8.333-7.667-13 -13l-13-13l77-155 77-156c66 199.333 139 419.667 +219 661 l218 661zM702 `+r+"H400000v"+(40+e)+"H742z"},"sqrtTall"),Ebe=o(function(e,r,n){r=1e3*r;var i="";switch(e){case"sqrtMain":i=ybe(r,Tp);break;case"sqrtSize1":i=vbe(r,Tp);break;case"sqrtSize2":i=xbe(r,Tp);break;case"sqrtSize3":i=bbe(r,Tp);break;case"sqrtSize4":i=wbe(r,Tp);break;case"sqrtTall":i=kbe(r,Tp,n)}return i},"sqrtPath"),Sbe=o(function(e,r){switch(e){case"\u239C":return"M291 0 H417 V"+r+" H291z M291 0 H417 V"+r+" H291z";case"\u2223":return"M145 0 H188 V"+r+" H145z M145 0 H188 V"+r+" H145z";case"\u2225":return"M145 0 H188 V"+r+" H145z M145 0 H188 V"+r+" H145z"+("M367 0 H410 V"+r+" H367z M367 0 H410 V"+r+" H367z");case"\u239F":return"M457 0 H583 V"+r+" H457z M457 0 H583 V"+r+" H457z";case"\u23A2":return"M319 0 H403 V"+r+" H319z M319 0 H403 V"+r+" H319z";case"\u23A5":return"M263 0 H347 V"+r+" H263z M263 0 H347 V"+r+" H263z";case"\u23AA":return"M384 0 H504 V"+r+" H384z M384 0 H504 V"+r+" H384z";case"\u23D0":return"M312 0 H355 V"+r+" H312z M312 0 H355 V"+r+" H312z";case"\u2016":return"M257 0 H300 V"+r+" H257z M257 0 H300 V"+r+" H257z"+("M478 0 H521 V"+r+" H478z M478 0 H521 V"+r+" H478z");default:return""}},"innerPath"),rG={doubleleftarrow:`M262 157 +l10-10c34-36 62.7-77 86-123 3.3-8 5-13.3 5-16 0-5.3-6.7-8-20-8-7.3 + 0-12.2.5-14.5 1.5-2.3 1-4.8 4.5-7.5 10.5-49.3 97.3-121.7 169.3-217 216-28 + 14-57.3 25-88 33-6.7 2-11 3.8-13 5.5-2 1.7-3 4.2-3 7.5s1 5.8 3 7.5 +c2 1.7 6.3 3.5 13 5.5 68 17.3 128.2 47.8 180.5 91.5 52.3 43.7 93.8 96.2 124.5 + 157.5 9.3 8 15.3 12.3 18 13h6c12-.7 18-4 18-10 0-2-1.7-7-5-15-23.3-46-52-87 +-86-123l-10-10h399738v-40H218c328 0 0 0 0 0l-10-8c-26.7-20-65.7-43-117-69 2.7 +-2 6-3.7 10-5 36.7-16 72.3-37.3 107-64l10-8h399782v-40z +m8 0v40h399730v-40zm0 194v40h399730v-40z`,doublerightarrow:`M399738 392l +-10 10c-34 36-62.7 77-86 123-3.3 8-5 13.3-5 16 0 5.3 6.7 8 20 8 7.3 0 12.2-.5 + 14.5-1.5 2.3-1 4.8-4.5 7.5-10.5 49.3-97.3 121.7-169.3 217-216 28-14 57.3-25 88 +-33 6.7-2 11-3.8 13-5.5 2-1.7 3-4.2 3-7.5s-1-5.8-3-7.5c-2-1.7-6.3-3.5-13-5.5-68 +-17.3-128.2-47.8-180.5-91.5-52.3-43.7-93.8-96.2-124.5-157.5-9.3-8-15.3-12.3-18 +-13h-6c-12 .7-18 4-18 10 0 2 1.7 7 5 15 23.3 46 52 87 86 123l10 10H0v40h399782 +c-328 0 0 0 0 0l10 8c26.7 20 65.7 43 117 69-2.7 2-6 3.7-10 5-36.7 16-72.3 37.3 +-107 64l-10 8H0v40zM0 157v40h399730v-40zm0 194v40h399730v-40z`,leftarrow:`M400000 241H110l3-3c68.7-52.7 113.7-120 + 135-202 4-14.7 6-23 6-25 0-7.3-7-11-21-11-8 0-13.2.8-15.5 2.5-2.3 1.7-4.2 5.8 +-5.5 12.5-1.3 4.7-2.7 10.3-4 17-12 48.7-34.8 92-68.5 130S65.3 228.3 18 247 +c-10 4-16 7.7-18 11 0 8.7 6 14.3 18 17 47.3 18.7 87.8 47 121.5 85S196 441.3 208 + 490c.7 2 1.3 5 2 9s1.2 6.7 1.5 8c.3 1.3 1 3.3 2 6s2.2 4.5 3.5 5.5c1.3 1 3.3 + 1.8 6 2.5s6 1 10 1c14 0 21-3.7 21-11 0-2-2-10.3-6-25-20-79.3-65-146.7-135-202 + l-3-3h399890zM100 241v40h399900v-40z`,leftbrace:`M6 548l-6-6v-35l6-11c56-104 135.3-181.3 238-232 57.3-28.7 117 +-45 179-50h399577v120H403c-43.3 7-81 15-113 26-100.7 33-179.7 91-237 174-2.7 + 5-6 9-10 13-.7 1-7.3 1-20 1H6z`,leftbraceunder:`M0 6l6-6h17c12.688 0 19.313.3 20 1 4 4 7.313 8.3 10 13 + 35.313 51.3 80.813 93.8 136.5 127.5 55.688 33.7 117.188 55.8 184.5 66.5.688 + 0 2 .3 4 1 18.688 2.7 76 4.3 172 5h399450v120H429l-6-1c-124.688-8-235-61.7 +-331-161C60.687 138.7 32.312 99.3 7 54L0 41V6z`,leftgroup:`M400000 80 +H435C64 80 168.3 229.4 21 260c-5.9 1.2-18 0-18 0-2 0-3-1-3-3v-38C76 61 257 0 + 435 0h399565z`,leftgroupunder:`M400000 262 +H435C64 262 168.3 112.6 21 82c-5.9-1.2-18 0-18 0-2 0-3 1-3 3v38c76 158 257 219 + 435 219h399565z`,leftharpoon:`M0 267c.7 5.3 3 10 7 14h399993v-40H93c3.3 +-3.3 10.2-9.5 20.5-18.5s17.8-15.8 22.5-20.5c50.7-52 88-110.3 112-175 4-11.3 5 +-18.3 3-21-1.3-4-7.3-6-18-6-8 0-13 .7-15 2s-4.7 6.7-8 16c-42 98.7-107.3 174.7 +-196 228-6.7 4.7-10.7 8-12 10-1.3 2-2 5.7-2 11zm100-26v40h399900v-40z`,leftharpoonplus:`M0 267c.7 5.3 3 10 7 14h399993v-40H93c3.3-3.3 10.2-9.5 + 20.5-18.5s17.8-15.8 22.5-20.5c50.7-52 88-110.3 112-175 4-11.3 5-18.3 3-21-1.3 +-4-7.3-6-18-6-8 0-13 .7-15 2s-4.7 6.7-8 16c-42 98.7-107.3 174.7-196 228-6.7 4.7 +-10.7 8-12 10-1.3 2-2 5.7-2 11zm100-26v40h399900v-40zM0 435v40h400000v-40z +m0 0v40h400000v-40z`,leftharpoondown:`M7 241c-4 4-6.333 8.667-7 14 0 5.333.667 9 2 11s5.333 + 5.333 12 10c90.667 54 156 130 196 228 3.333 10.667 6.333 16.333 9 17 2 .667 5 + 1 9 1h5c10.667 0 16.667-2 18-6 2-2.667 1-9.667-3-21-32-87.333-82.667-157.667 +-152-211l-3-3h399907v-40zM93 281 H400000 v-40L7 241z`,leftharpoondownplus:`M7 435c-4 4-6.3 8.7-7 14 0 5.3.7 9 2 11s5.3 5.3 12 + 10c90.7 54 156 130 196 228 3.3 10.7 6.3 16.3 9 17 2 .7 5 1 9 1h5c10.7 0 16.7 +-2 18-6 2-2.7 1-9.7-3-21-32-87.3-82.7-157.7-152-211l-3-3h399907v-40H7zm93 0 +v40h399900v-40zM0 241v40h399900v-40zm0 0v40h399900v-40z`,lefthook:`M400000 281 H103s-33-11.2-61-33.5S0 197.3 0 164s14.2-61.2 42.5 +-83.5C70.8 58.2 104 47 142 47 c16.7 0 25 6.7 25 20 0 12-8.7 18.7-26 20-40 3.3 +-68.7 15.7-86 37-10 12-15 25.3-15 40 0 22.7 9.8 40.7 29.5 54 19.7 13.3 43.5 21 + 71.5 23h399859zM103 281v-40h399897v40z`,leftlinesegment:`M40 281 V428 H0 V94 H40 V241 H400000 v40z +M40 281 V428 H0 V94 H40 V241 H400000 v40z`,leftmapsto:`M40 281 V448H0V74H40V241H400000v40z +M40 281 V448H0V74H40V241H400000v40z`,leftToFrom:`M0 147h400000v40H0zm0 214c68 40 115.7 95.7 143 167h22c15.3 0 23 +-.3 23-1 0-1.3-5.3-13.7-16-37-18-35.3-41.3-69-70-101l-7-8h399905v-40H95l7-8 +c28.7-32 52-65.7 70-101 10.7-23.3 16-35.7 16-37 0-.7-7.7-1-23-1h-22C115.7 265.3 + 68 321 0 361zm0-174v-40h399900v40zm100 154v40h399900v-40z`,longequal:`M0 50 h400000 v40H0z m0 194h40000v40H0z +M0 50 h400000 v40H0z m0 194h40000v40H0z`,midbrace:`M200428 334 +c-100.7-8.3-195.3-44-280-108-55.3-42-101.7-93-139-153l-9-14c-2.7 4-5.7 8.7-9 14 +-53.3 86.7-123.7 153-211 199-66.7 36-137.3 56.3-212 62H0V214h199568c178.3-11.7 + 311.7-78.3 403-201 6-8 9.7-12 11-12 .7-.7 6.7-1 18-1s17.3.3 18 1c1.3 0 5 4 11 + 12 44.7 59.3 101.3 106.3 170 141s145.3 54.3 229 60h199572v120z`,midbraceunder:`M199572 214 +c100.7 8.3 195.3 44 280 108 55.3 42 101.7 93 139 153l9 14c2.7-4 5.7-8.7 9-14 + 53.3-86.7 123.7-153 211-199 66.7-36 137.3-56.3 212-62h199568v120H200432c-178.3 + 11.7-311.7 78.3-403 201-6 8-9.7 12-11 12-.7.7-6.7 1-18 1s-17.3-.3-18-1c-1.3 0 +-5-4-11-12-44.7-59.3-101.3-106.3-170-141s-145.3-54.3-229-60H0V214z`,oiintSize1:`M512.6 71.6c272.6 0 320.3 106.8 320.3 178.2 0 70.8-47.7 177.6 +-320.3 177.6S193.1 320.6 193.1 249.8c0-71.4 46.9-178.2 319.5-178.2z +m368.1 178.2c0-86.4-60.9-215.4-368.1-215.4-306.4 0-367.3 129-367.3 215.4 0 85.8 +60.9 214.8 367.3 214.8 307.2 0 368.1-129 368.1-214.8z`,oiintSize2:`M757.8 100.1c384.7 0 451.1 137.6 451.1 230 0 91.3-66.4 228.8 +-451.1 228.8-386.3 0-452.7-137.5-452.7-228.8 0-92.4 66.4-230 452.7-230z +m502.4 230c0-111.2-82.4-277.2-502.4-277.2s-504 166-504 277.2 +c0 110 84 276 504 276s502.4-166 502.4-276z`,oiiintSize1:`M681.4 71.6c408.9 0 480.5 106.8 480.5 178.2 0 70.8-71.6 177.6 +-480.5 177.6S202.1 320.6 202.1 249.8c0-71.4 70.5-178.2 479.3-178.2z +m525.8 178.2c0-86.4-86.8-215.4-525.7-215.4-437.9 0-524.7 129-524.7 215.4 0 +85.8 86.8 214.8 524.7 214.8 438.9 0 525.7-129 525.7-214.8z`,oiiintSize2:`M1021.2 53c603.6 0 707.8 165.8 707.8 277.2 0 110-104.2 275.8 +-707.8 275.8-606 0-710.2-165.8-710.2-275.8C311 218.8 415.2 53 1021.2 53z +m770.4 277.1c0-131.2-126.4-327.6-770.5-327.6S248.4 198.9 248.4 330.1 +c0 130 128.8 326.4 772.7 326.4s770.5-196.4 770.5-326.4z`,rightarrow:`M0 241v40h399891c-47.3 35.3-84 78-110 128 +-16.7 32-27.7 63.7-33 95 0 1.3-.2 2.7-.5 4-.3 1.3-.5 2.3-.5 3 0 7.3 6.7 11 20 + 11 8 0 13.2-.8 15.5-2.5 2.3-1.7 4.2-5.5 5.5-11.5 2-13.3 5.7-27 11-41 14.7-44.7 + 39-84.5 73-119.5s73.7-60.2 119-75.5c6-2 9-5.7 9-11s-3-9-9-11c-45.3-15.3-85 +-40.5-119-75.5s-58.3-74.8-73-119.5c-4.7-14-8.3-27.3-11-40-1.3-6.7-3.2-10.8-5.5 +-12.5-2.3-1.7-7.5-2.5-15.5-2.5-14 0-21 3.7-21 11 0 2 2 10.3 6 25 20.7 83.3 67 + 151.7 139 205zm0 0v40h399900v-40z`,rightbrace:`M400000 542l +-6 6h-17c-12.7 0-19.3-.3-20-1-4-4-7.3-8.3-10-13-35.3-51.3-80.8-93.8-136.5-127.5 +s-117.2-55.8-184.5-66.5c-.7 0-2-.3-4-1-18.7-2.7-76-4.3-172-5H0V214h399571l6 1 +c124.7 8 235 61.7 331 161 31.3 33.3 59.7 72.7 85 118l7 13v35z`,rightbraceunder:`M399994 0l6 6v35l-6 11c-56 104-135.3 181.3-238 232-57.3 + 28.7-117 45-179 50H-300V214h399897c43.3-7 81-15 113-26 100.7-33 179.7-91 237 +-174 2.7-5 6-9 10-13 .7-1 7.3-1 20-1h17z`,rightgroup:`M0 80h399565c371 0 266.7 149.4 414 180 5.9 1.2 18 0 18 0 2 0 + 3-1 3-3v-38c-76-158-257-219-435-219H0z`,rightgroupunder:`M0 262h399565c371 0 266.7-149.4 414-180 5.9-1.2 18 0 18 + 0 2 0 3 1 3 3v38c-76 158-257 219-435 219H0z`,rightharpoon:`M0 241v40h399993c4.7-4.7 7-9.3 7-14 0-9.3 +-3.7-15.3-11-18-92.7-56.7-159-133.7-199-231-3.3-9.3-6-14.7-8-16-2-1.3-7-2-15-2 +-10.7 0-16.7 2-18 6-2 2.7-1 9.7 3 21 15.3 42 36.7 81.8 64 119.5 27.3 37.7 58 + 69.2 92 94.5zm0 0v40h399900v-40z`,rightharpoonplus:`M0 241v40h399993c4.7-4.7 7-9.3 7-14 0-9.3-3.7-15.3-11 +-18-92.7-56.7-159-133.7-199-231-3.3-9.3-6-14.7-8-16-2-1.3-7-2-15-2-10.7 0-16.7 + 2-18 6-2 2.7-1 9.7 3 21 15.3 42 36.7 81.8 64 119.5 27.3 37.7 58 69.2 92 94.5z +m0 0v40h399900v-40z m100 194v40h399900v-40zm0 0v40h399900v-40z`,rightharpoondown:`M399747 511c0 7.3 6.7 11 20 11 8 0 13-.8 15-2.5s4.7-6.8 + 8-15.5c40-94 99.3-166.3 178-217 13.3-8 20.3-12.3 21-13 5.3-3.3 8.5-5.8 9.5 +-7.5 1-1.7 1.5-5.2 1.5-10.5s-2.3-10.3-7-15H0v40h399908c-34 25.3-64.7 57-92 95 +-27.3 38-48.7 77.7-64 119-3.3 8.7-5 14-5 16zM0 241v40h399900v-40z`,rightharpoondownplus:`M399747 705c0 7.3 6.7 11 20 11 8 0 13-.8 + 15-2.5s4.7-6.8 8-15.5c40-94 99.3-166.3 178-217 13.3-8 20.3-12.3 21-13 5.3-3.3 + 8.5-5.8 9.5-7.5 1-1.7 1.5-5.2 1.5-10.5s-2.3-10.3-7-15H0v40h399908c-34 25.3 +-64.7 57-92 95-27.3 38-48.7 77.7-64 119-3.3 8.7-5 14-5 16zM0 435v40h399900v-40z +m0-194v40h400000v-40zm0 0v40h400000v-40z`,righthook:`M399859 241c-764 0 0 0 0 0 40-3.3 68.7-15.7 86-37 10-12 15-25.3 + 15-40 0-22.7-9.8-40.7-29.5-54-19.7-13.3-43.5-21-71.5-23-17.3-1.3-26-8-26-20 0 +-13.3 8.7-20 26-20 38 0 71 11.2 99 33.5 0 0 7 5.6 21 16.7 14 11.2 21 33.5 21 + 66.8s-14 61.2-42 83.5c-28 22.3-61 33.5-99 33.5L0 241z M0 281v-40h399859v40z`,rightlinesegment:`M399960 241 V94 h40 V428 h-40 V281 H0 v-40z +M399960 241 V94 h40 V428 h-40 V281 H0 v-40z`,rightToFrom:`M400000 167c-70.7-42-118-97.7-142-167h-23c-15.3 0-23 .3-23 + 1 0 1.3 5.3 13.7 16 37 18 35.3 41.3 69 70 101l7 8H0v40h399905l-7 8c-28.7 32 +-52 65.7-70 101-10.7 23.3-16 35.7-16 37 0 .7 7.7 1 23 1h23c24-69.3 71.3-125 142 +-167z M100 147v40h399900v-40zM0 341v40h399900v-40z`,twoheadleftarrow:`M0 167c68 40 + 115.7 95.7 143 167h22c15.3 0 23-.3 23-1 0-1.3-5.3-13.7-16-37-18-35.3-41.3-69 +-70-101l-7-8h125l9 7c50.7 39.3 85 86 103 140h46c0-4.7-6.3-18.7-19-42-18-35.3 +-40-67.3-66-96l-9-9h399716v-40H284l9-9c26-28.7 48-60.7 66-96 12.7-23.333 19 +-37.333 19-42h-46c-18 54-52.3 100.7-103 140l-9 7H95l7-8c28.7-32 52-65.7 70-101 + 10.7-23.333 16-35.7 16-37 0-.7-7.7-1-23-1h-22C115.7 71.3 68 127 0 167z`,twoheadrightarrow:`M400000 167 +c-68-40-115.7-95.7-143-167h-22c-15.3 0-23 .3-23 1 0 1.3 5.3 13.7 16 37 18 35.3 + 41.3 69 70 101l7 8h-125l-9-7c-50.7-39.3-85-86-103-140h-46c0 4.7 6.3 18.7 19 42 + 18 35.3 40 67.3 66 96l9 9H0v40h399716l-9 9c-26 28.7-48 60.7-66 96-12.7 23.333 +-19 37.333-19 42h46c18-54 52.3-100.7 103-140l9-7h125l-7 8c-28.7 32-52 65.7-70 + 101-10.7 23.333-16 35.7-16 37 0 .7 7.7 1 23 1h22c27.3-71.3 75-127 143-167z`,tilde1:`M200 55.538c-77 0-168 73.953-177 73.953-3 0-7 +-2.175-9-5.437L2 97c-1-2-2-4-2-6 0-4 2-7 5-9l20-12C116 12 171 0 207 0c86 0 + 114 68 191 68 78 0 168-68 177-68 4 0 7 2 9 5l12 19c1 2.175 2 4.35 2 6.525 0 + 4.35-2 7.613-5 9.788l-19 13.05c-92 63.077-116.937 75.308-183 76.128 +-68.267.847-113-73.952-191-73.952z`,tilde2:`M344 55.266c-142 0-300.638 81.316-311.5 86.418 +-8.01 3.762-22.5 10.91-23.5 5.562L1 120c-1-2-1-3-1-4 0-5 3-9 8-10l18.4-9C160.9 + 31.9 283 0 358 0c148 0 188 122 331 122s314-97 326-97c4 0 8 2 10 7l7 21.114 +c1 2.14 1 3.21 1 4.28 0 5.347-3 9.626-7 10.696l-22.3 12.622C852.6 158.372 751 + 181.476 676 181.476c-149 0-189-126.21-332-126.21z`,tilde3:`M786 59C457 59 32 175.242 13 175.242c-6 0-10-3.457 +-11-10.37L.15 138c-1-7 3-12 10-13l19.2-6.4C378.4 40.7 634.3 0 804.3 0c337 0 + 411.8 157 746.8 157 328 0 754-112 773-112 5 0 10 3 11 9l1 14.075c1 8.066-.697 + 16.595-6.697 17.492l-21.052 7.31c-367.9 98.146-609.15 122.696-778.15 122.696 + -338 0-409-156.573-744-156.573z`,tilde4:`M786 58C457 58 32 177.487 13 177.487c-6 0-10-3.345 +-11-10.035L.15 143c-1-7 3-12 10-13l22-6.7C381.2 35 637.15 0 807.15 0c337 0 409 + 177 744 177 328 0 754-127 773-127 5 0 10 3 11 9l1 14.794c1 7.805-3 13.38-9 + 14.495l-20.7 5.574c-366.85 99.79-607.3 139.372-776.3 139.372-338 0-409 + -175.236-744-175.236z`,vec:`M377 20c0-5.333 1.833-10 5.5-14S391 0 397 0c4.667 0 8.667 1.667 12 5 +3.333 2.667 6.667 9 10 19 6.667 24.667 20.333 43.667 41 57 7.333 4.667 11 +10.667 11 18 0 6-1 10-3 12s-6.667 5-14 9c-28.667 14.667-53.667 35.667-75 63 +-1.333 1.333-3.167 3.5-5.5 6.5s-4 4.833-5 5.5c-1 .667-2.5 1.333-4.5 2s-4.333 1 +-7 1c-4.667 0-9.167-1.833-13.5-5.5S337 184 337 178c0-12.667 15.667-32.333 47-59 +H213l-171-1c-8.667-6-13-12.333-13-19 0-4.667 4.333-11.333 13-20h359 +c-16-25.333-24-45-24-59z`,widehat1:`M529 0h5l519 115c5 1 9 5 9 10 0 1-1 2-1 3l-4 22 +c-1 5-5 9-11 9h-2L532 67 19 159h-2c-5 0-9-4-11-9l-5-22c-1-6 2-12 8-13z`,widehat2:`M1181 0h2l1171 176c6 0 10 5 10 11l-2 23c-1 6-5 10 +-11 10h-1L1182 67 15 220h-1c-6 0-10-4-11-10l-2-23c-1-6 4-11 10-11z`,widehat3:`M1181 0h2l1171 236c6 0 10 5 10 11l-2 23c-1 6-5 10 +-11 10h-1L1182 67 15 280h-1c-6 0-10-4-11-10l-2-23c-1-6 4-11 10-11z`,widehat4:`M1181 0h2l1171 296c6 0 10 5 10 11l-2 23c-1 6-5 10 +-11 10h-1L1182 67 15 340h-1c-6 0-10-4-11-10l-2-23c-1-6 4-11 10-11z`,widecheck1:`M529,159h5l519,-115c5,-1,9,-5,9,-10c0,-1,-1,-2,-1,-3l-4,-22c-1, +-5,-5,-9,-11,-9h-2l-512,92l-513,-92h-2c-5,0,-9,4,-11,9l-5,22c-1,6,2,12,8,13z`,widecheck2:`M1181,220h2l1171,-176c6,0,10,-5,10,-11l-2,-23c-1,-6,-5,-10, +-11,-10h-1l-1168,153l-1167,-153h-1c-6,0,-10,4,-11,10l-2,23c-1,6,4,11,10,11z`,widecheck3:`M1181,280h2l1171,-236c6,0,10,-5,10,-11l-2,-23c-1,-6,-5,-10, +-11,-10h-1l-1168,213l-1167,-213h-1c-6,0,-10,4,-11,10l-2,23c-1,6,4,11,10,11z`,widecheck4:`M1181,340h2l1171,-296c6,0,10,-5,10,-11l-2,-23c-1,-6,-5,-10, +-11,-10h-1l-1168,273l-1167,-273h-1c-6,0,-10,4,-11,10l-2,23c-1,6,4,11,10,11z`,baraboveleftarrow:`M400000 620h-399890l3 -3c68.7 -52.7 113.7 -120 135 -202 +c4 -14.7 6 -23 6 -25c0 -7.3 -7 -11 -21 -11c-8 0 -13.2 0.8 -15.5 2.5 +c-2.3 1.7 -4.2 5.8 -5.5 12.5c-1.3 4.7 -2.7 10.3 -4 17c-12 48.7 -34.8 92 -68.5 130 +s-74.2 66.3 -121.5 85c-10 4 -16 7.7 -18 11c0 8.7 6 14.3 18 17c47.3 18.7 87.8 47 +121.5 85s56.5 81.3 68.5 130c0.7 2 1.3 5 2 9s1.2 6.7 1.5 8c0.3 1.3 1 3.3 2 6 +s2.2 4.5 3.5 5.5c1.3 1 3.3 1.8 6 2.5s6 1 10 1c14 0 21 -3.7 21 -11 +c0 -2 -2 -10.3 -6 -25c-20 -79.3 -65 -146.7 -135 -202l-3 -3h399890z +M100 620v40h399900v-40z M0 241v40h399900v-40zM0 241v40h399900v-40z`,rightarrowabovebar:`M0 241v40h399891c-47.3 35.3-84 78-110 128-16.7 32 +-27.7 63.7-33 95 0 1.3-.2 2.7-.5 4-.3 1.3-.5 2.3-.5 3 0 7.3 6.7 11 20 11 8 0 +13.2-.8 15.5-2.5 2.3-1.7 4.2-5.5 5.5-11.5 2-13.3 5.7-27 11-41 14.7-44.7 39 +-84.5 73-119.5s73.7-60.2 119-75.5c6-2 9-5.7 9-11s-3-9-9-11c-45.3-15.3-85-40.5 +-119-75.5s-58.3-74.8-73-119.5c-4.7-14-8.3-27.3-11-40-1.3-6.7-3.2-10.8-5.5 +-12.5-2.3-1.7-7.5-2.5-15.5-2.5-14 0-21 3.7-21 11 0 2 2 10.3 6 25 20.7 83.3 67 +151.7 139 205zm96 379h399894v40H0zm0 0h399904v40H0z`,baraboveshortleftharpoon:`M507,435c-4,4,-6.3,8.7,-7,14c0,5.3,0.7,9,2,11 +c1.3,2,5.3,5.3,12,10c90.7,54,156,130,196,228c3.3,10.7,6.3,16.3,9,17 +c2,0.7,5,1,9,1c0,0,5,0,5,0c10.7,0,16.7,-2,18,-6c2,-2.7,1,-9.7,-3,-21 +c-32,-87.3,-82.7,-157.7,-152,-211c0,0,-3,-3,-3,-3l399351,0l0,-40 +c-398570,0,-399437,0,-399437,0z M593 435 v40 H399500 v-40z +M0 281 v-40 H399908 v40z M0 281 v-40 H399908 v40z`,rightharpoonaboveshortbar:`M0,241 l0,40c399126,0,399993,0,399993,0 +c4.7,-4.7,7,-9.3,7,-14c0,-9.3,-3.7,-15.3,-11,-18c-92.7,-56.7,-159,-133.7,-199, +-231c-3.3,-9.3,-6,-14.7,-8,-16c-2,-1.3,-7,-2,-15,-2c-10.7,0,-16.7,2,-18,6 +c-2,2.7,-1,9.7,3,21c15.3,42,36.7,81.8,64,119.5c27.3,37.7,58,69.2,92,94.5z +M0 241 v40 H399908 v-40z M0 475 v-40 H399500 v40z M0 475 v-40 H399500 v40z`,shortbaraboveleftharpoon:`M7,435c-4,4,-6.3,8.7,-7,14c0,5.3,0.7,9,2,11 +c1.3,2,5.3,5.3,12,10c90.7,54,156,130,196,228c3.3,10.7,6.3,16.3,9,17c2,0.7,5,1,9, +1c0,0,5,0,5,0c10.7,0,16.7,-2,18,-6c2,-2.7,1,-9.7,-3,-21c-32,-87.3,-82.7,-157.7, +-152,-211c0,0,-3,-3,-3,-3l399907,0l0,-40c-399126,0,-399993,0,-399993,0z +M93 435 v40 H400000 v-40z M500 241 v40 H400000 v-40z M500 241 v40 H400000 v-40z`,shortrightharpoonabovebar:`M53,241l0,40c398570,0,399437,0,399437,0 +c4.7,-4.7,7,-9.3,7,-14c0,-9.3,-3.7,-15.3,-11,-18c-92.7,-56.7,-159,-133.7,-199, +-231c-3.3,-9.3,-6,-14.7,-8,-16c-2,-1.3,-7,-2,-15,-2c-10.7,0,-16.7,2,-18,6 +c-2,2.7,-1,9.7,3,21c15.3,42,36.7,81.8,64,119.5c27.3,37.7,58,69.2,92,94.5z +M500 241 v40 H399408 v-40z M500 435 v40 H400000 v-40z`},Cbe=o(function(e,r){switch(e){case"lbrack":return"M403 1759 V84 H666 V0 H319 V1759 v"+r+` v1759 h347 v-84 +H403z M403 1759 V0 H319 V1759 v`+r+" v1759 h84z";case"rbrack":return"M347 1759 V0 H0 V84 H263 V1759 v"+r+` v1759 H0 v84 H347z +M347 1759 V0 H263 V1759 v`+r+" v1759 h84z";case"vert":return"M145 15 v585 v"+r+` v585 c2.667,10,9.667,15,21,15 +c10,0,16.667,-5,20,-15 v-585 v`+-r+` v-585 c-2.667,-10,-9.667,-15,-21,-15 +c-10,0,-16.667,5,-20,15z M188 15 H145 v585 v`+r+" v585 h43z";case"doublevert":return"M145 15 v585 v"+r+` v585 c2.667,10,9.667,15,21,15 +c10,0,16.667,-5,20,-15 v-585 v`+-r+` v-585 c-2.667,-10,-9.667,-15,-21,-15 +c-10,0,-16.667,5,-20,15z M188 15 H145 v585 v`+r+` v585 h43z +M367 15 v585 v`+r+` v585 c2.667,10,9.667,15,21,15 +c10,0,16.667,-5,20,-15 v-585 v`+-r+` v-585 c-2.667,-10,-9.667,-15,-21,-15 +c-10,0,-16.667,5,-20,15z M410 15 H367 v585 v`+r+" v585 h43z";case"lfloor":return"M319 602 V0 H403 V602 v"+r+` v1715 h263 v84 H319z +MM319 602 V0 H403 V602 v`+r+" v1715 H319z";case"rfloor":return"M319 602 V0 H403 V602 v"+r+` v1799 H0 v-84 H319z +MM319 602 V0 H403 V602 v`+r+" v1715 H319z";case"lceil":return"M403 1759 V84 H666 V0 H319 V1759 v"+r+` v602 h84z +M403 1759 V0 H319 V1759 v`+r+" v602 h84z";case"rceil":return"M347 1759 V0 H0 V84 H263 V1759 v"+r+` v602 h84z +M347 1759 V0 h-84 V1759 v`+r+" v602 h84z";case"lparen":return`M863,9c0,-2,-2,-5,-6,-9c0,0,-17,0,-17,0c-12.7,0,-19.3,0.3,-20,1 +c-5.3,5.3,-10.3,11,-15,17c-242.7,294.7,-395.3,682,-458,1162c-21.3,163.3,-33.3,349, +-36,557 l0,`+(r+84)+`c0.2,6,0,26,0,60c2,159.3,10,310.7,24,454c53.3,528,210, +949.7,470,1265c4.7,6,9.7,11.7,15,17c0.7,0.7,7,1,19,1c0,0,18,0,18,0c4,-4,6,-7,6,-9 +c0,-2.7,-3.3,-8.7,-10,-18c-135.3,-192.7,-235.5,-414.3,-300.5,-665c-65,-250.7,-102.5, +-544.7,-112.5,-882c-2,-104,-3,-167,-3,-189 +l0,-`+(r+92)+`c0,-162.7,5.7,-314,17,-454c20.7,-272,63.7,-513,129,-723c65.3, +-210,155.3,-396.3,270,-559c6.7,-9.3,10,-15.3,10,-18z`;case"rparen":return`M76,0c-16.7,0,-25,3,-25,9c0,2,2,6.3,6,13c21.3,28.7,42.3,60.3, +63,95c96.7,156.7,172.8,332.5,228.5,527.5c55.7,195,92.8,416.5,111.5,664.5 +c11.3,139.3,17,290.7,17,454c0,28,1.7,43,3.3,45l0,`+(r+9)+` +c-3,4,-3.3,16.7,-3.3,38c0,162,-5.7,313.7,-17,455c-18.7,248,-55.8,469.3,-111.5,664 +c-55.7,194.7,-131.8,370.3,-228.5,527c-20.7,34.7,-41.7,66.3,-63,95c-2,3.3,-4,7,-6,11 +c0,7.3,5.7,11,17,11c0,0,11,0,11,0c9.3,0,14.3,-0.3,15,-1c5.3,-5.3,10.3,-11,15,-17 +c242.7,-294.7,395.3,-681.7,458,-1161c21.3,-164.7,33.3,-350.7,36,-558 +l0,-`+(r+144)+`c-2,-159.3,-10,-310.7,-24,-454c-53.3,-528,-210,-949.7, +-470,-1265c-4.7,-6,-9.7,-11.7,-15,-17c-0.7,-0.7,-6.7,-1,-18,-1z`;default:throw new Error("Unknown stretchy delimiter.")}},"tallDelim"),rd=class{static{o(this,"DocumentFragment")}constructor(e){this.children=void 0,this.classes=void 0,this.height=void 0,this.depth=void 0,this.maxFontSize=void 0,this.style=void 0,this.children=e,this.classes=[],this.height=0,this.depth=0,this.maxFontSize=0,this.style={}}hasClass(e){return Jt.contains(this.classes,e)}toNode(){for(var e=document.createDocumentFragment(),r=0;rr.toText(),"toText");return this.children.map(e).join("")}},lc={"AMS-Regular":{32:[0,0,0,0,.25],65:[0,.68889,0,0,.72222],66:[0,.68889,0,0,.66667],67:[0,.68889,0,0,.72222],68:[0,.68889,0,0,.72222],69:[0,.68889,0,0,.66667],70:[0,.68889,0,0,.61111],71:[0,.68889,0,0,.77778],72:[0,.68889,0,0,.77778],73:[0,.68889,0,0,.38889],74:[.16667,.68889,0,0,.5],75:[0,.68889,0,0,.77778],76:[0,.68889,0,0,.66667],77:[0,.68889,0,0,.94445],78:[0,.68889,0,0,.72222],79:[.16667,.68889,0,0,.77778],80:[0,.68889,0,0,.61111],81:[.16667,.68889,0,0,.77778],82:[0,.68889,0,0,.72222],83:[0,.68889,0,0,.55556],84:[0,.68889,0,0,.66667],85:[0,.68889,0,0,.72222],86:[0,.68889,0,0,.72222],87:[0,.68889,0,0,1],88:[0,.68889,0,0,.72222],89:[0,.68889,0,0,.72222],90:[0,.68889,0,0,.66667],107:[0,.68889,0,0,.55556],160:[0,0,0,0,.25],165:[0,.675,.025,0,.75],174:[.15559,.69224,0,0,.94666],240:[0,.68889,0,0,.55556],295:[0,.68889,0,0,.54028],710:[0,.825,0,0,2.33334],732:[0,.9,0,0,2.33334],770:[0,.825,0,0,2.33334],771:[0,.9,0,0,2.33334],989:[.08167,.58167,0,0,.77778],1008:[0,.43056,.04028,0,.66667],8245:[0,.54986,0,0,.275],8463:[0,.68889,0,0,.54028],8487:[0,.68889,0,0,.72222],8498:[0,.68889,0,0,.55556],8502:[0,.68889,0,0,.66667],8503:[0,.68889,0,0,.44445],8504:[0,.68889,0,0,.66667],8513:[0,.68889,0,0,.63889],8592:[-.03598,.46402,0,0,.5],8594:[-.03598,.46402,0,0,.5],8602:[-.13313,.36687,0,0,1],8603:[-.13313,.36687,0,0,1],8606:[.01354,.52239,0,0,1],8608:[.01354,.52239,0,0,1],8610:[.01354,.52239,0,0,1.11111],8611:[.01354,.52239,0,0,1.11111],8619:[0,.54986,0,0,1],8620:[0,.54986,0,0,1],8621:[-.13313,.37788,0,0,1.38889],8622:[-.13313,.36687,0,0,1],8624:[0,.69224,0,0,.5],8625:[0,.69224,0,0,.5],8630:[0,.43056,0,0,1],8631:[0,.43056,0,0,1],8634:[.08198,.58198,0,0,.77778],8635:[.08198,.58198,0,0,.77778],8638:[.19444,.69224,0,0,.41667],8639:[.19444,.69224,0,0,.41667],8642:[.19444,.69224,0,0,.41667],8643:[.19444,.69224,0,0,.41667],8644:[.1808,.675,0,0,1],8646:[.1808,.675,0,0,1],8647:[.1808,.675,0,0,1],8648:[.19444,.69224,0,0,.83334],8649:[.1808,.675,0,0,1],8650:[.19444,.69224,0,0,.83334],8651:[.01354,.52239,0,0,1],8652:[.01354,.52239,0,0,1],8653:[-.13313,.36687,0,0,1],8654:[-.13313,.36687,0,0,1],8655:[-.13313,.36687,0,0,1],8666:[.13667,.63667,0,0,1],8667:[.13667,.63667,0,0,1],8669:[-.13313,.37788,0,0,1],8672:[-.064,.437,0,0,1.334],8674:[-.064,.437,0,0,1.334],8705:[0,.825,0,0,.5],8708:[0,.68889,0,0,.55556],8709:[.08167,.58167,0,0,.77778],8717:[0,.43056,0,0,.42917],8722:[-.03598,.46402,0,0,.5],8724:[.08198,.69224,0,0,.77778],8726:[.08167,.58167,0,0,.77778],8733:[0,.69224,0,0,.77778],8736:[0,.69224,0,0,.72222],8737:[0,.69224,0,0,.72222],8738:[.03517,.52239,0,0,.72222],8739:[.08167,.58167,0,0,.22222],8740:[.25142,.74111,0,0,.27778],8741:[.08167,.58167,0,0,.38889],8742:[.25142,.74111,0,0,.5],8756:[0,.69224,0,0,.66667],8757:[0,.69224,0,0,.66667],8764:[-.13313,.36687,0,0,.77778],8765:[-.13313,.37788,0,0,.77778],8769:[-.13313,.36687,0,0,.77778],8770:[-.03625,.46375,0,0,.77778],8774:[.30274,.79383,0,0,.77778],8776:[-.01688,.48312,0,0,.77778],8778:[.08167,.58167,0,0,.77778],8782:[.06062,.54986,0,0,.77778],8783:[.06062,.54986,0,0,.77778],8785:[.08198,.58198,0,0,.77778],8786:[.08198,.58198,0,0,.77778],8787:[.08198,.58198,0,0,.77778],8790:[0,.69224,0,0,.77778],8791:[.22958,.72958,0,0,.77778],8796:[.08198,.91667,0,0,.77778],8806:[.25583,.75583,0,0,.77778],8807:[.25583,.75583,0,0,.77778],8808:[.25142,.75726,0,0,.77778],8809:[.25142,.75726,0,0,.77778],8812:[.25583,.75583,0,0,.5],8814:[.20576,.70576,0,0,.77778],8815:[.20576,.70576,0,0,.77778],8816:[.30274,.79383,0,0,.77778],8817:[.30274,.79383,0,0,.77778],8818:[.22958,.72958,0,0,.77778],8819:[.22958,.72958,0,0,.77778],8822:[.1808,.675,0,0,.77778],8823:[.1808,.675,0,0,.77778],8828:[.13667,.63667,0,0,.77778],8829:[.13667,.63667,0,0,.77778],8830:[.22958,.72958,0,0,.77778],8831:[.22958,.72958,0,0,.77778],8832:[.20576,.70576,0,0,.77778],8833:[.20576,.70576,0,0,.77778],8840:[.30274,.79383,0,0,.77778],8841:[.30274,.79383,0,0,.77778],8842:[.13597,.63597,0,0,.77778],8843:[.13597,.63597,0,0,.77778],8847:[.03517,.54986,0,0,.77778],8848:[.03517,.54986,0,0,.77778],8858:[.08198,.58198,0,0,.77778],8859:[.08198,.58198,0,0,.77778],8861:[.08198,.58198,0,0,.77778],8862:[0,.675,0,0,.77778],8863:[0,.675,0,0,.77778],8864:[0,.675,0,0,.77778],8865:[0,.675,0,0,.77778],8872:[0,.69224,0,0,.61111],8873:[0,.69224,0,0,.72222],8874:[0,.69224,0,0,.88889],8876:[0,.68889,0,0,.61111],8877:[0,.68889,0,0,.61111],8878:[0,.68889,0,0,.72222],8879:[0,.68889,0,0,.72222],8882:[.03517,.54986,0,0,.77778],8883:[.03517,.54986,0,0,.77778],8884:[.13667,.63667,0,0,.77778],8885:[.13667,.63667,0,0,.77778],8888:[0,.54986,0,0,1.11111],8890:[.19444,.43056,0,0,.55556],8891:[.19444,.69224,0,0,.61111],8892:[.19444,.69224,0,0,.61111],8901:[0,.54986,0,0,.27778],8903:[.08167,.58167,0,0,.77778],8905:[.08167,.58167,0,0,.77778],8906:[.08167,.58167,0,0,.77778],8907:[0,.69224,0,0,.77778],8908:[0,.69224,0,0,.77778],8909:[-.03598,.46402,0,0,.77778],8910:[0,.54986,0,0,.76042],8911:[0,.54986,0,0,.76042],8912:[.03517,.54986,0,0,.77778],8913:[.03517,.54986,0,0,.77778],8914:[0,.54986,0,0,.66667],8915:[0,.54986,0,0,.66667],8916:[0,.69224,0,0,.66667],8918:[.0391,.5391,0,0,.77778],8919:[.0391,.5391,0,0,.77778],8920:[.03517,.54986,0,0,1.33334],8921:[.03517,.54986,0,0,1.33334],8922:[.38569,.88569,0,0,.77778],8923:[.38569,.88569,0,0,.77778],8926:[.13667,.63667,0,0,.77778],8927:[.13667,.63667,0,0,.77778],8928:[.30274,.79383,0,0,.77778],8929:[.30274,.79383,0,0,.77778],8934:[.23222,.74111,0,0,.77778],8935:[.23222,.74111,0,0,.77778],8936:[.23222,.74111,0,0,.77778],8937:[.23222,.74111,0,0,.77778],8938:[.20576,.70576,0,0,.77778],8939:[.20576,.70576,0,0,.77778],8940:[.30274,.79383,0,0,.77778],8941:[.30274,.79383,0,0,.77778],8994:[.19444,.69224,0,0,.77778],8995:[.19444,.69224,0,0,.77778],9416:[.15559,.69224,0,0,.90222],9484:[0,.69224,0,0,.5],9488:[0,.69224,0,0,.5],9492:[0,.37788,0,0,.5],9496:[0,.37788,0,0,.5],9585:[.19444,.68889,0,0,.88889],9586:[.19444,.74111,0,0,.88889],9632:[0,.675,0,0,.77778],9633:[0,.675,0,0,.77778],9650:[0,.54986,0,0,.72222],9651:[0,.54986,0,0,.72222],9654:[.03517,.54986,0,0,.77778],9660:[0,.54986,0,0,.72222],9661:[0,.54986,0,0,.72222],9664:[.03517,.54986,0,0,.77778],9674:[.11111,.69224,0,0,.66667],9733:[.19444,.69224,0,0,.94445],10003:[0,.69224,0,0,.83334],10016:[0,.69224,0,0,.83334],10731:[.11111,.69224,0,0,.66667],10846:[.19444,.75583,0,0,.61111],10877:[.13667,.63667,0,0,.77778],10878:[.13667,.63667,0,0,.77778],10885:[.25583,.75583,0,0,.77778],10886:[.25583,.75583,0,0,.77778],10887:[.13597,.63597,0,0,.77778],10888:[.13597,.63597,0,0,.77778],10889:[.26167,.75726,0,0,.77778],10890:[.26167,.75726,0,0,.77778],10891:[.48256,.98256,0,0,.77778],10892:[.48256,.98256,0,0,.77778],10901:[.13667,.63667,0,0,.77778],10902:[.13667,.63667,0,0,.77778],10933:[.25142,.75726,0,0,.77778],10934:[.25142,.75726,0,0,.77778],10935:[.26167,.75726,0,0,.77778],10936:[.26167,.75726,0,0,.77778],10937:[.26167,.75726,0,0,.77778],10938:[.26167,.75726,0,0,.77778],10949:[.25583,.75583,0,0,.77778],10950:[.25583,.75583,0,0,.77778],10955:[.28481,.79383,0,0,.77778],10956:[.28481,.79383,0,0,.77778],57350:[.08167,.58167,0,0,.22222],57351:[.08167,.58167,0,0,.38889],57352:[.08167,.58167,0,0,.77778],57353:[0,.43056,.04028,0,.66667],57356:[.25142,.75726,0,0,.77778],57357:[.25142,.75726,0,0,.77778],57358:[.41951,.91951,0,0,.77778],57359:[.30274,.79383,0,0,.77778],57360:[.30274,.79383,0,0,.77778],57361:[.41951,.91951,0,0,.77778],57366:[.25142,.75726,0,0,.77778],57367:[.25142,.75726,0,0,.77778],57368:[.25142,.75726,0,0,.77778],57369:[.25142,.75726,0,0,.77778],57370:[.13597,.63597,0,0,.77778],57371:[.13597,.63597,0,0,.77778]},"Caligraphic-Regular":{32:[0,0,0,0,.25],65:[0,.68333,0,.19445,.79847],66:[0,.68333,.03041,.13889,.65681],67:[0,.68333,.05834,.13889,.52653],68:[0,.68333,.02778,.08334,.77139],69:[0,.68333,.08944,.11111,.52778],70:[0,.68333,.09931,.11111,.71875],71:[.09722,.68333,.0593,.11111,.59487],72:[0,.68333,.00965,.11111,.84452],73:[0,.68333,.07382,0,.54452],74:[.09722,.68333,.18472,.16667,.67778],75:[0,.68333,.01445,.05556,.76195],76:[0,.68333,0,.13889,.68972],77:[0,.68333,0,.13889,1.2009],78:[0,.68333,.14736,.08334,.82049],79:[0,.68333,.02778,.11111,.79611],80:[0,.68333,.08222,.08334,.69556],81:[.09722,.68333,0,.11111,.81667],82:[0,.68333,0,.08334,.8475],83:[0,.68333,.075,.13889,.60556],84:[0,.68333,.25417,0,.54464],85:[0,.68333,.09931,.08334,.62583],86:[0,.68333,.08222,0,.61278],87:[0,.68333,.08222,.08334,.98778],88:[0,.68333,.14643,.13889,.7133],89:[.09722,.68333,.08222,.08334,.66834],90:[0,.68333,.07944,.13889,.72473],160:[0,0,0,0,.25]},"Fraktur-Regular":{32:[0,0,0,0,.25],33:[0,.69141,0,0,.29574],34:[0,.69141,0,0,.21471],38:[0,.69141,0,0,.73786],39:[0,.69141,0,0,.21201],40:[.24982,.74947,0,0,.38865],41:[.24982,.74947,0,0,.38865],42:[0,.62119,0,0,.27764],43:[.08319,.58283,0,0,.75623],44:[0,.10803,0,0,.27764],45:[.08319,.58283,0,0,.75623],46:[0,.10803,0,0,.27764],47:[.24982,.74947,0,0,.50181],48:[0,.47534,0,0,.50181],49:[0,.47534,0,0,.50181],50:[0,.47534,0,0,.50181],51:[.18906,.47534,0,0,.50181],52:[.18906,.47534,0,0,.50181],53:[.18906,.47534,0,0,.50181],54:[0,.69141,0,0,.50181],55:[.18906,.47534,0,0,.50181],56:[0,.69141,0,0,.50181],57:[.18906,.47534,0,0,.50181],58:[0,.47534,0,0,.21606],59:[.12604,.47534,0,0,.21606],61:[-.13099,.36866,0,0,.75623],63:[0,.69141,0,0,.36245],65:[0,.69141,0,0,.7176],66:[0,.69141,0,0,.88397],67:[0,.69141,0,0,.61254],68:[0,.69141,0,0,.83158],69:[0,.69141,0,0,.66278],70:[.12604,.69141,0,0,.61119],71:[0,.69141,0,0,.78539],72:[.06302,.69141,0,0,.7203],73:[0,.69141,0,0,.55448],74:[.12604,.69141,0,0,.55231],75:[0,.69141,0,0,.66845],76:[0,.69141,0,0,.66602],77:[0,.69141,0,0,1.04953],78:[0,.69141,0,0,.83212],79:[0,.69141,0,0,.82699],80:[.18906,.69141,0,0,.82753],81:[.03781,.69141,0,0,.82699],82:[0,.69141,0,0,.82807],83:[0,.69141,0,0,.82861],84:[0,.69141,0,0,.66899],85:[0,.69141,0,0,.64576],86:[0,.69141,0,0,.83131],87:[0,.69141,0,0,1.04602],88:[0,.69141,0,0,.71922],89:[.18906,.69141,0,0,.83293],90:[.12604,.69141,0,0,.60201],91:[.24982,.74947,0,0,.27764],93:[.24982,.74947,0,0,.27764],94:[0,.69141,0,0,.49965],97:[0,.47534,0,0,.50046],98:[0,.69141,0,0,.51315],99:[0,.47534,0,0,.38946],100:[0,.62119,0,0,.49857],101:[0,.47534,0,0,.40053],102:[.18906,.69141,0,0,.32626],103:[.18906,.47534,0,0,.5037],104:[.18906,.69141,0,0,.52126],105:[0,.69141,0,0,.27899],106:[0,.69141,0,0,.28088],107:[0,.69141,0,0,.38946],108:[0,.69141,0,0,.27953],109:[0,.47534,0,0,.76676],110:[0,.47534,0,0,.52666],111:[0,.47534,0,0,.48885],112:[.18906,.52396,0,0,.50046],113:[.18906,.47534,0,0,.48912],114:[0,.47534,0,0,.38919],115:[0,.47534,0,0,.44266],116:[0,.62119,0,0,.33301],117:[0,.47534,0,0,.5172],118:[0,.52396,0,0,.5118],119:[0,.52396,0,0,.77351],120:[.18906,.47534,0,0,.38865],121:[.18906,.47534,0,0,.49884],122:[.18906,.47534,0,0,.39054],160:[0,0,0,0,.25],8216:[0,.69141,0,0,.21471],8217:[0,.69141,0,0,.21471],58112:[0,.62119,0,0,.49749],58113:[0,.62119,0,0,.4983],58114:[.18906,.69141,0,0,.33328],58115:[.18906,.69141,0,0,.32923],58116:[.18906,.47534,0,0,.50343],58117:[0,.69141,0,0,.33301],58118:[0,.62119,0,0,.33409],58119:[0,.47534,0,0,.50073]},"Main-Bold":{32:[0,0,0,0,.25],33:[0,.69444,0,0,.35],34:[0,.69444,0,0,.60278],35:[.19444,.69444,0,0,.95833],36:[.05556,.75,0,0,.575],37:[.05556,.75,0,0,.95833],38:[0,.69444,0,0,.89444],39:[0,.69444,0,0,.31944],40:[.25,.75,0,0,.44722],41:[.25,.75,0,0,.44722],42:[0,.75,0,0,.575],43:[.13333,.63333,0,0,.89444],44:[.19444,.15556,0,0,.31944],45:[0,.44444,0,0,.38333],46:[0,.15556,0,0,.31944],47:[.25,.75,0,0,.575],48:[0,.64444,0,0,.575],49:[0,.64444,0,0,.575],50:[0,.64444,0,0,.575],51:[0,.64444,0,0,.575],52:[0,.64444,0,0,.575],53:[0,.64444,0,0,.575],54:[0,.64444,0,0,.575],55:[0,.64444,0,0,.575],56:[0,.64444,0,0,.575],57:[0,.64444,0,0,.575],58:[0,.44444,0,0,.31944],59:[.19444,.44444,0,0,.31944],60:[.08556,.58556,0,0,.89444],61:[-.10889,.39111,0,0,.89444],62:[.08556,.58556,0,0,.89444],63:[0,.69444,0,0,.54305],64:[0,.69444,0,0,.89444],65:[0,.68611,0,0,.86944],66:[0,.68611,0,0,.81805],67:[0,.68611,0,0,.83055],68:[0,.68611,0,0,.88194],69:[0,.68611,0,0,.75555],70:[0,.68611,0,0,.72361],71:[0,.68611,0,0,.90416],72:[0,.68611,0,0,.9],73:[0,.68611,0,0,.43611],74:[0,.68611,0,0,.59444],75:[0,.68611,0,0,.90138],76:[0,.68611,0,0,.69166],77:[0,.68611,0,0,1.09166],78:[0,.68611,0,0,.9],79:[0,.68611,0,0,.86388],80:[0,.68611,0,0,.78611],81:[.19444,.68611,0,0,.86388],82:[0,.68611,0,0,.8625],83:[0,.68611,0,0,.63889],84:[0,.68611,0,0,.8],85:[0,.68611,0,0,.88472],86:[0,.68611,.01597,0,.86944],87:[0,.68611,.01597,0,1.18888],88:[0,.68611,0,0,.86944],89:[0,.68611,.02875,0,.86944],90:[0,.68611,0,0,.70277],91:[.25,.75,0,0,.31944],92:[.25,.75,0,0,.575],93:[.25,.75,0,0,.31944],94:[0,.69444,0,0,.575],95:[.31,.13444,.03194,0,.575],97:[0,.44444,0,0,.55902],98:[0,.69444,0,0,.63889],99:[0,.44444,0,0,.51111],100:[0,.69444,0,0,.63889],101:[0,.44444,0,0,.52708],102:[0,.69444,.10903,0,.35139],103:[.19444,.44444,.01597,0,.575],104:[0,.69444,0,0,.63889],105:[0,.69444,0,0,.31944],106:[.19444,.69444,0,0,.35139],107:[0,.69444,0,0,.60694],108:[0,.69444,0,0,.31944],109:[0,.44444,0,0,.95833],110:[0,.44444,0,0,.63889],111:[0,.44444,0,0,.575],112:[.19444,.44444,0,0,.63889],113:[.19444,.44444,0,0,.60694],114:[0,.44444,0,0,.47361],115:[0,.44444,0,0,.45361],116:[0,.63492,0,0,.44722],117:[0,.44444,0,0,.63889],118:[0,.44444,.01597,0,.60694],119:[0,.44444,.01597,0,.83055],120:[0,.44444,0,0,.60694],121:[.19444,.44444,.01597,0,.60694],122:[0,.44444,0,0,.51111],123:[.25,.75,0,0,.575],124:[.25,.75,0,0,.31944],125:[.25,.75,0,0,.575],126:[.35,.34444,0,0,.575],160:[0,0,0,0,.25],163:[0,.69444,0,0,.86853],168:[0,.69444,0,0,.575],172:[0,.44444,0,0,.76666],176:[0,.69444,0,0,.86944],177:[.13333,.63333,0,0,.89444],184:[.17014,0,0,0,.51111],198:[0,.68611,0,0,1.04166],215:[.13333,.63333,0,0,.89444],216:[.04861,.73472,0,0,.89444],223:[0,.69444,0,0,.59722],230:[0,.44444,0,0,.83055],247:[.13333,.63333,0,0,.89444],248:[.09722,.54167,0,0,.575],305:[0,.44444,0,0,.31944],338:[0,.68611,0,0,1.16944],339:[0,.44444,0,0,.89444],567:[.19444,.44444,0,0,.35139],710:[0,.69444,0,0,.575],711:[0,.63194,0,0,.575],713:[0,.59611,0,0,.575],714:[0,.69444,0,0,.575],715:[0,.69444,0,0,.575],728:[0,.69444,0,0,.575],729:[0,.69444,0,0,.31944],730:[0,.69444,0,0,.86944],732:[0,.69444,0,0,.575],733:[0,.69444,0,0,.575],915:[0,.68611,0,0,.69166],916:[0,.68611,0,0,.95833],920:[0,.68611,0,0,.89444],923:[0,.68611,0,0,.80555],926:[0,.68611,0,0,.76666],928:[0,.68611,0,0,.9],931:[0,.68611,0,0,.83055],933:[0,.68611,0,0,.89444],934:[0,.68611,0,0,.83055],936:[0,.68611,0,0,.89444],937:[0,.68611,0,0,.83055],8211:[0,.44444,.03194,0,.575],8212:[0,.44444,.03194,0,1.14999],8216:[0,.69444,0,0,.31944],8217:[0,.69444,0,0,.31944],8220:[0,.69444,0,0,.60278],8221:[0,.69444,0,0,.60278],8224:[.19444,.69444,0,0,.51111],8225:[.19444,.69444,0,0,.51111],8242:[0,.55556,0,0,.34444],8407:[0,.72444,.15486,0,.575],8463:[0,.69444,0,0,.66759],8465:[0,.69444,0,0,.83055],8467:[0,.69444,0,0,.47361],8472:[.19444,.44444,0,0,.74027],8476:[0,.69444,0,0,.83055],8501:[0,.69444,0,0,.70277],8592:[-.10889,.39111,0,0,1.14999],8593:[.19444,.69444,0,0,.575],8594:[-.10889,.39111,0,0,1.14999],8595:[.19444,.69444,0,0,.575],8596:[-.10889,.39111,0,0,1.14999],8597:[.25,.75,0,0,.575],8598:[.19444,.69444,0,0,1.14999],8599:[.19444,.69444,0,0,1.14999],8600:[.19444,.69444,0,0,1.14999],8601:[.19444,.69444,0,0,1.14999],8636:[-.10889,.39111,0,0,1.14999],8637:[-.10889,.39111,0,0,1.14999],8640:[-.10889,.39111,0,0,1.14999],8641:[-.10889,.39111,0,0,1.14999],8656:[-.10889,.39111,0,0,1.14999],8657:[.19444,.69444,0,0,.70277],8658:[-.10889,.39111,0,0,1.14999],8659:[.19444,.69444,0,0,.70277],8660:[-.10889,.39111,0,0,1.14999],8661:[.25,.75,0,0,.70277],8704:[0,.69444,0,0,.63889],8706:[0,.69444,.06389,0,.62847],8707:[0,.69444,0,0,.63889],8709:[.05556,.75,0,0,.575],8711:[0,.68611,0,0,.95833],8712:[.08556,.58556,0,0,.76666],8715:[.08556,.58556,0,0,.76666],8722:[.13333,.63333,0,0,.89444],8723:[.13333,.63333,0,0,.89444],8725:[.25,.75,0,0,.575],8726:[.25,.75,0,0,.575],8727:[-.02778,.47222,0,0,.575],8728:[-.02639,.47361,0,0,.575],8729:[-.02639,.47361,0,0,.575],8730:[.18,.82,0,0,.95833],8733:[0,.44444,0,0,.89444],8734:[0,.44444,0,0,1.14999],8736:[0,.69224,0,0,.72222],8739:[.25,.75,0,0,.31944],8741:[.25,.75,0,0,.575],8743:[0,.55556,0,0,.76666],8744:[0,.55556,0,0,.76666],8745:[0,.55556,0,0,.76666],8746:[0,.55556,0,0,.76666],8747:[.19444,.69444,.12778,0,.56875],8764:[-.10889,.39111,0,0,.89444],8768:[.19444,.69444,0,0,.31944],8771:[.00222,.50222,0,0,.89444],8773:[.027,.638,0,0,.894],8776:[.02444,.52444,0,0,.89444],8781:[.00222,.50222,0,0,.89444],8801:[.00222,.50222,0,0,.89444],8804:[.19667,.69667,0,0,.89444],8805:[.19667,.69667,0,0,.89444],8810:[.08556,.58556,0,0,1.14999],8811:[.08556,.58556,0,0,1.14999],8826:[.08556,.58556,0,0,.89444],8827:[.08556,.58556,0,0,.89444],8834:[.08556,.58556,0,0,.89444],8835:[.08556,.58556,0,0,.89444],8838:[.19667,.69667,0,0,.89444],8839:[.19667,.69667,0,0,.89444],8846:[0,.55556,0,0,.76666],8849:[.19667,.69667,0,0,.89444],8850:[.19667,.69667,0,0,.89444],8851:[0,.55556,0,0,.76666],8852:[0,.55556,0,0,.76666],8853:[.13333,.63333,0,0,.89444],8854:[.13333,.63333,0,0,.89444],8855:[.13333,.63333,0,0,.89444],8856:[.13333,.63333,0,0,.89444],8857:[.13333,.63333,0,0,.89444],8866:[0,.69444,0,0,.70277],8867:[0,.69444,0,0,.70277],8868:[0,.69444,0,0,.89444],8869:[0,.69444,0,0,.89444],8900:[-.02639,.47361,0,0,.575],8901:[-.02639,.47361,0,0,.31944],8902:[-.02778,.47222,0,0,.575],8968:[.25,.75,0,0,.51111],8969:[.25,.75,0,0,.51111],8970:[.25,.75,0,0,.51111],8971:[.25,.75,0,0,.51111],8994:[-.13889,.36111,0,0,1.14999],8995:[-.13889,.36111,0,0,1.14999],9651:[.19444,.69444,0,0,1.02222],9657:[-.02778,.47222,0,0,.575],9661:[.19444,.69444,0,0,1.02222],9667:[-.02778,.47222,0,0,.575],9711:[.19444,.69444,0,0,1.14999],9824:[.12963,.69444,0,0,.89444],9825:[.12963,.69444,0,0,.89444],9826:[.12963,.69444,0,0,.89444],9827:[.12963,.69444,0,0,.89444],9837:[0,.75,0,0,.44722],9838:[.19444,.69444,0,0,.44722],9839:[.19444,.69444,0,0,.44722],10216:[.25,.75,0,0,.44722],10217:[.25,.75,0,0,.44722],10815:[0,.68611,0,0,.9],10927:[.19667,.69667,0,0,.89444],10928:[.19667,.69667,0,0,.89444],57376:[.19444,.69444,0,0,0]},"Main-BoldItalic":{32:[0,0,0,0,.25],33:[0,.69444,.11417,0,.38611],34:[0,.69444,.07939,0,.62055],35:[.19444,.69444,.06833,0,.94444],37:[.05556,.75,.12861,0,.94444],38:[0,.69444,.08528,0,.88555],39:[0,.69444,.12945,0,.35555],40:[.25,.75,.15806,0,.47333],41:[.25,.75,.03306,0,.47333],42:[0,.75,.14333,0,.59111],43:[.10333,.60333,.03306,0,.88555],44:[.19444,.14722,0,0,.35555],45:[0,.44444,.02611,0,.41444],46:[0,.14722,0,0,.35555],47:[.25,.75,.15806,0,.59111],48:[0,.64444,.13167,0,.59111],49:[0,.64444,.13167,0,.59111],50:[0,.64444,.13167,0,.59111],51:[0,.64444,.13167,0,.59111],52:[.19444,.64444,.13167,0,.59111],53:[0,.64444,.13167,0,.59111],54:[0,.64444,.13167,0,.59111],55:[.19444,.64444,.13167,0,.59111],56:[0,.64444,.13167,0,.59111],57:[0,.64444,.13167,0,.59111],58:[0,.44444,.06695,0,.35555],59:[.19444,.44444,.06695,0,.35555],61:[-.10889,.39111,.06833,0,.88555],63:[0,.69444,.11472,0,.59111],64:[0,.69444,.09208,0,.88555],65:[0,.68611,0,0,.86555],66:[0,.68611,.0992,0,.81666],67:[0,.68611,.14208,0,.82666],68:[0,.68611,.09062,0,.87555],69:[0,.68611,.11431,0,.75666],70:[0,.68611,.12903,0,.72722],71:[0,.68611,.07347,0,.89527],72:[0,.68611,.17208,0,.8961],73:[0,.68611,.15681,0,.47166],74:[0,.68611,.145,0,.61055],75:[0,.68611,.14208,0,.89499],76:[0,.68611,0,0,.69777],77:[0,.68611,.17208,0,1.07277],78:[0,.68611,.17208,0,.8961],79:[0,.68611,.09062,0,.85499],80:[0,.68611,.0992,0,.78721],81:[.19444,.68611,.09062,0,.85499],82:[0,.68611,.02559,0,.85944],83:[0,.68611,.11264,0,.64999],84:[0,.68611,.12903,0,.7961],85:[0,.68611,.17208,0,.88083],86:[0,.68611,.18625,0,.86555],87:[0,.68611,.18625,0,1.15999],88:[0,.68611,.15681,0,.86555],89:[0,.68611,.19803,0,.86555],90:[0,.68611,.14208,0,.70888],91:[.25,.75,.1875,0,.35611],93:[.25,.75,.09972,0,.35611],94:[0,.69444,.06709,0,.59111],95:[.31,.13444,.09811,0,.59111],97:[0,.44444,.09426,0,.59111],98:[0,.69444,.07861,0,.53222],99:[0,.44444,.05222,0,.53222],100:[0,.69444,.10861,0,.59111],101:[0,.44444,.085,0,.53222],102:[.19444,.69444,.21778,0,.4],103:[.19444,.44444,.105,0,.53222],104:[0,.69444,.09426,0,.59111],105:[0,.69326,.11387,0,.35555],106:[.19444,.69326,.1672,0,.35555],107:[0,.69444,.11111,0,.53222],108:[0,.69444,.10861,0,.29666],109:[0,.44444,.09426,0,.94444],110:[0,.44444,.09426,0,.64999],111:[0,.44444,.07861,0,.59111],112:[.19444,.44444,.07861,0,.59111],113:[.19444,.44444,.105,0,.53222],114:[0,.44444,.11111,0,.50167],115:[0,.44444,.08167,0,.48694],116:[0,.63492,.09639,0,.385],117:[0,.44444,.09426,0,.62055],118:[0,.44444,.11111,0,.53222],119:[0,.44444,.11111,0,.76777],120:[0,.44444,.12583,0,.56055],121:[.19444,.44444,.105,0,.56166],122:[0,.44444,.13889,0,.49055],126:[.35,.34444,.11472,0,.59111],160:[0,0,0,0,.25],168:[0,.69444,.11473,0,.59111],176:[0,.69444,0,0,.94888],184:[.17014,0,0,0,.53222],198:[0,.68611,.11431,0,1.02277],216:[.04861,.73472,.09062,0,.88555],223:[.19444,.69444,.09736,0,.665],230:[0,.44444,.085,0,.82666],248:[.09722,.54167,.09458,0,.59111],305:[0,.44444,.09426,0,.35555],338:[0,.68611,.11431,0,1.14054],339:[0,.44444,.085,0,.82666],567:[.19444,.44444,.04611,0,.385],710:[0,.69444,.06709,0,.59111],711:[0,.63194,.08271,0,.59111],713:[0,.59444,.10444,0,.59111],714:[0,.69444,.08528,0,.59111],715:[0,.69444,0,0,.59111],728:[0,.69444,.10333,0,.59111],729:[0,.69444,.12945,0,.35555],730:[0,.69444,0,0,.94888],732:[0,.69444,.11472,0,.59111],733:[0,.69444,.11472,0,.59111],915:[0,.68611,.12903,0,.69777],916:[0,.68611,0,0,.94444],920:[0,.68611,.09062,0,.88555],923:[0,.68611,0,0,.80666],926:[0,.68611,.15092,0,.76777],928:[0,.68611,.17208,0,.8961],931:[0,.68611,.11431,0,.82666],933:[0,.68611,.10778,0,.88555],934:[0,.68611,.05632,0,.82666],936:[0,.68611,.10778,0,.88555],937:[0,.68611,.0992,0,.82666],8211:[0,.44444,.09811,0,.59111],8212:[0,.44444,.09811,0,1.18221],8216:[0,.69444,.12945,0,.35555],8217:[0,.69444,.12945,0,.35555],8220:[0,.69444,.16772,0,.62055],8221:[0,.69444,.07939,0,.62055]},"Main-Italic":{32:[0,0,0,0,.25],33:[0,.69444,.12417,0,.30667],34:[0,.69444,.06961,0,.51444],35:[.19444,.69444,.06616,0,.81777],37:[.05556,.75,.13639,0,.81777],38:[0,.69444,.09694,0,.76666],39:[0,.69444,.12417,0,.30667],40:[.25,.75,.16194,0,.40889],41:[.25,.75,.03694,0,.40889],42:[0,.75,.14917,0,.51111],43:[.05667,.56167,.03694,0,.76666],44:[.19444,.10556,0,0,.30667],45:[0,.43056,.02826,0,.35778],46:[0,.10556,0,0,.30667],47:[.25,.75,.16194,0,.51111],48:[0,.64444,.13556,0,.51111],49:[0,.64444,.13556,0,.51111],50:[0,.64444,.13556,0,.51111],51:[0,.64444,.13556,0,.51111],52:[.19444,.64444,.13556,0,.51111],53:[0,.64444,.13556,0,.51111],54:[0,.64444,.13556,0,.51111],55:[.19444,.64444,.13556,0,.51111],56:[0,.64444,.13556,0,.51111],57:[0,.64444,.13556,0,.51111],58:[0,.43056,.0582,0,.30667],59:[.19444,.43056,.0582,0,.30667],61:[-.13313,.36687,.06616,0,.76666],63:[0,.69444,.1225,0,.51111],64:[0,.69444,.09597,0,.76666],65:[0,.68333,0,0,.74333],66:[0,.68333,.10257,0,.70389],67:[0,.68333,.14528,0,.71555],68:[0,.68333,.09403,0,.755],69:[0,.68333,.12028,0,.67833],70:[0,.68333,.13305,0,.65277],71:[0,.68333,.08722,0,.77361],72:[0,.68333,.16389,0,.74333],73:[0,.68333,.15806,0,.38555],74:[0,.68333,.14028,0,.525],75:[0,.68333,.14528,0,.76888],76:[0,.68333,0,0,.62722],77:[0,.68333,.16389,0,.89666],78:[0,.68333,.16389,0,.74333],79:[0,.68333,.09403,0,.76666],80:[0,.68333,.10257,0,.67833],81:[.19444,.68333,.09403,0,.76666],82:[0,.68333,.03868,0,.72944],83:[0,.68333,.11972,0,.56222],84:[0,.68333,.13305,0,.71555],85:[0,.68333,.16389,0,.74333],86:[0,.68333,.18361,0,.74333],87:[0,.68333,.18361,0,.99888],88:[0,.68333,.15806,0,.74333],89:[0,.68333,.19383,0,.74333],90:[0,.68333,.14528,0,.61333],91:[.25,.75,.1875,0,.30667],93:[.25,.75,.10528,0,.30667],94:[0,.69444,.06646,0,.51111],95:[.31,.12056,.09208,0,.51111],97:[0,.43056,.07671,0,.51111],98:[0,.69444,.06312,0,.46],99:[0,.43056,.05653,0,.46],100:[0,.69444,.10333,0,.51111],101:[0,.43056,.07514,0,.46],102:[.19444,.69444,.21194,0,.30667],103:[.19444,.43056,.08847,0,.46],104:[0,.69444,.07671,0,.51111],105:[0,.65536,.1019,0,.30667],106:[.19444,.65536,.14467,0,.30667],107:[0,.69444,.10764,0,.46],108:[0,.69444,.10333,0,.25555],109:[0,.43056,.07671,0,.81777],110:[0,.43056,.07671,0,.56222],111:[0,.43056,.06312,0,.51111],112:[.19444,.43056,.06312,0,.51111],113:[.19444,.43056,.08847,0,.46],114:[0,.43056,.10764,0,.42166],115:[0,.43056,.08208,0,.40889],116:[0,.61508,.09486,0,.33222],117:[0,.43056,.07671,0,.53666],118:[0,.43056,.10764,0,.46],119:[0,.43056,.10764,0,.66444],120:[0,.43056,.12042,0,.46389],121:[.19444,.43056,.08847,0,.48555],122:[0,.43056,.12292,0,.40889],126:[.35,.31786,.11585,0,.51111],160:[0,0,0,0,.25],168:[0,.66786,.10474,0,.51111],176:[0,.69444,0,0,.83129],184:[.17014,0,0,0,.46],198:[0,.68333,.12028,0,.88277],216:[.04861,.73194,.09403,0,.76666],223:[.19444,.69444,.10514,0,.53666],230:[0,.43056,.07514,0,.71555],248:[.09722,.52778,.09194,0,.51111],338:[0,.68333,.12028,0,.98499],339:[0,.43056,.07514,0,.71555],710:[0,.69444,.06646,0,.51111],711:[0,.62847,.08295,0,.51111],713:[0,.56167,.10333,0,.51111],714:[0,.69444,.09694,0,.51111],715:[0,.69444,0,0,.51111],728:[0,.69444,.10806,0,.51111],729:[0,.66786,.11752,0,.30667],730:[0,.69444,0,0,.83129],732:[0,.66786,.11585,0,.51111],733:[0,.69444,.1225,0,.51111],915:[0,.68333,.13305,0,.62722],916:[0,.68333,0,0,.81777],920:[0,.68333,.09403,0,.76666],923:[0,.68333,0,0,.69222],926:[0,.68333,.15294,0,.66444],928:[0,.68333,.16389,0,.74333],931:[0,.68333,.12028,0,.71555],933:[0,.68333,.11111,0,.76666],934:[0,.68333,.05986,0,.71555],936:[0,.68333,.11111,0,.76666],937:[0,.68333,.10257,0,.71555],8211:[0,.43056,.09208,0,.51111],8212:[0,.43056,.09208,0,1.02222],8216:[0,.69444,.12417,0,.30667],8217:[0,.69444,.12417,0,.30667],8220:[0,.69444,.1685,0,.51444],8221:[0,.69444,.06961,0,.51444],8463:[0,.68889,0,0,.54028]},"Main-Regular":{32:[0,0,0,0,.25],33:[0,.69444,0,0,.27778],34:[0,.69444,0,0,.5],35:[.19444,.69444,0,0,.83334],36:[.05556,.75,0,0,.5],37:[.05556,.75,0,0,.83334],38:[0,.69444,0,0,.77778],39:[0,.69444,0,0,.27778],40:[.25,.75,0,0,.38889],41:[.25,.75,0,0,.38889],42:[0,.75,0,0,.5],43:[.08333,.58333,0,0,.77778],44:[.19444,.10556,0,0,.27778],45:[0,.43056,0,0,.33333],46:[0,.10556,0,0,.27778],47:[.25,.75,0,0,.5],48:[0,.64444,0,0,.5],49:[0,.64444,0,0,.5],50:[0,.64444,0,0,.5],51:[0,.64444,0,0,.5],52:[0,.64444,0,0,.5],53:[0,.64444,0,0,.5],54:[0,.64444,0,0,.5],55:[0,.64444,0,0,.5],56:[0,.64444,0,0,.5],57:[0,.64444,0,0,.5],58:[0,.43056,0,0,.27778],59:[.19444,.43056,0,0,.27778],60:[.0391,.5391,0,0,.77778],61:[-.13313,.36687,0,0,.77778],62:[.0391,.5391,0,0,.77778],63:[0,.69444,0,0,.47222],64:[0,.69444,0,0,.77778],65:[0,.68333,0,0,.75],66:[0,.68333,0,0,.70834],67:[0,.68333,0,0,.72222],68:[0,.68333,0,0,.76389],69:[0,.68333,0,0,.68056],70:[0,.68333,0,0,.65278],71:[0,.68333,0,0,.78472],72:[0,.68333,0,0,.75],73:[0,.68333,0,0,.36111],74:[0,.68333,0,0,.51389],75:[0,.68333,0,0,.77778],76:[0,.68333,0,0,.625],77:[0,.68333,0,0,.91667],78:[0,.68333,0,0,.75],79:[0,.68333,0,0,.77778],80:[0,.68333,0,0,.68056],81:[.19444,.68333,0,0,.77778],82:[0,.68333,0,0,.73611],83:[0,.68333,0,0,.55556],84:[0,.68333,0,0,.72222],85:[0,.68333,0,0,.75],86:[0,.68333,.01389,0,.75],87:[0,.68333,.01389,0,1.02778],88:[0,.68333,0,0,.75],89:[0,.68333,.025,0,.75],90:[0,.68333,0,0,.61111],91:[.25,.75,0,0,.27778],92:[.25,.75,0,0,.5],93:[.25,.75,0,0,.27778],94:[0,.69444,0,0,.5],95:[.31,.12056,.02778,0,.5],97:[0,.43056,0,0,.5],98:[0,.69444,0,0,.55556],99:[0,.43056,0,0,.44445],100:[0,.69444,0,0,.55556],101:[0,.43056,0,0,.44445],102:[0,.69444,.07778,0,.30556],103:[.19444,.43056,.01389,0,.5],104:[0,.69444,0,0,.55556],105:[0,.66786,0,0,.27778],106:[.19444,.66786,0,0,.30556],107:[0,.69444,0,0,.52778],108:[0,.69444,0,0,.27778],109:[0,.43056,0,0,.83334],110:[0,.43056,0,0,.55556],111:[0,.43056,0,0,.5],112:[.19444,.43056,0,0,.55556],113:[.19444,.43056,0,0,.52778],114:[0,.43056,0,0,.39167],115:[0,.43056,0,0,.39445],116:[0,.61508,0,0,.38889],117:[0,.43056,0,0,.55556],118:[0,.43056,.01389,0,.52778],119:[0,.43056,.01389,0,.72222],120:[0,.43056,0,0,.52778],121:[.19444,.43056,.01389,0,.52778],122:[0,.43056,0,0,.44445],123:[.25,.75,0,0,.5],124:[.25,.75,0,0,.27778],125:[.25,.75,0,0,.5],126:[.35,.31786,0,0,.5],160:[0,0,0,0,.25],163:[0,.69444,0,0,.76909],167:[.19444,.69444,0,0,.44445],168:[0,.66786,0,0,.5],172:[0,.43056,0,0,.66667],176:[0,.69444,0,0,.75],177:[.08333,.58333,0,0,.77778],182:[.19444,.69444,0,0,.61111],184:[.17014,0,0,0,.44445],198:[0,.68333,0,0,.90278],215:[.08333,.58333,0,0,.77778],216:[.04861,.73194,0,0,.77778],223:[0,.69444,0,0,.5],230:[0,.43056,0,0,.72222],247:[.08333,.58333,0,0,.77778],248:[.09722,.52778,0,0,.5],305:[0,.43056,0,0,.27778],338:[0,.68333,0,0,1.01389],339:[0,.43056,0,0,.77778],567:[.19444,.43056,0,0,.30556],710:[0,.69444,0,0,.5],711:[0,.62847,0,0,.5],713:[0,.56778,0,0,.5],714:[0,.69444,0,0,.5],715:[0,.69444,0,0,.5],728:[0,.69444,0,0,.5],729:[0,.66786,0,0,.27778],730:[0,.69444,0,0,.75],732:[0,.66786,0,0,.5],733:[0,.69444,0,0,.5],915:[0,.68333,0,0,.625],916:[0,.68333,0,0,.83334],920:[0,.68333,0,0,.77778],923:[0,.68333,0,0,.69445],926:[0,.68333,0,0,.66667],928:[0,.68333,0,0,.75],931:[0,.68333,0,0,.72222],933:[0,.68333,0,0,.77778],934:[0,.68333,0,0,.72222],936:[0,.68333,0,0,.77778],937:[0,.68333,0,0,.72222],8211:[0,.43056,.02778,0,.5],8212:[0,.43056,.02778,0,1],8216:[0,.69444,0,0,.27778],8217:[0,.69444,0,0,.27778],8220:[0,.69444,0,0,.5],8221:[0,.69444,0,0,.5],8224:[.19444,.69444,0,0,.44445],8225:[.19444,.69444,0,0,.44445],8230:[0,.123,0,0,1.172],8242:[0,.55556,0,0,.275],8407:[0,.71444,.15382,0,.5],8463:[0,.68889,0,0,.54028],8465:[0,.69444,0,0,.72222],8467:[0,.69444,0,.11111,.41667],8472:[.19444,.43056,0,.11111,.63646],8476:[0,.69444,0,0,.72222],8501:[0,.69444,0,0,.61111],8592:[-.13313,.36687,0,0,1],8593:[.19444,.69444,0,0,.5],8594:[-.13313,.36687,0,0,1],8595:[.19444,.69444,0,0,.5],8596:[-.13313,.36687,0,0,1],8597:[.25,.75,0,0,.5],8598:[.19444,.69444,0,0,1],8599:[.19444,.69444,0,0,1],8600:[.19444,.69444,0,0,1],8601:[.19444,.69444,0,0,1],8614:[.011,.511,0,0,1],8617:[.011,.511,0,0,1.126],8618:[.011,.511,0,0,1.126],8636:[-.13313,.36687,0,0,1],8637:[-.13313,.36687,0,0,1],8640:[-.13313,.36687,0,0,1],8641:[-.13313,.36687,0,0,1],8652:[.011,.671,0,0,1],8656:[-.13313,.36687,0,0,1],8657:[.19444,.69444,0,0,.61111],8658:[-.13313,.36687,0,0,1],8659:[.19444,.69444,0,0,.61111],8660:[-.13313,.36687,0,0,1],8661:[.25,.75,0,0,.61111],8704:[0,.69444,0,0,.55556],8706:[0,.69444,.05556,.08334,.5309],8707:[0,.69444,0,0,.55556],8709:[.05556,.75,0,0,.5],8711:[0,.68333,0,0,.83334],8712:[.0391,.5391,0,0,.66667],8715:[.0391,.5391,0,0,.66667],8722:[.08333,.58333,0,0,.77778],8723:[.08333,.58333,0,0,.77778],8725:[.25,.75,0,0,.5],8726:[.25,.75,0,0,.5],8727:[-.03472,.46528,0,0,.5],8728:[-.05555,.44445,0,0,.5],8729:[-.05555,.44445,0,0,.5],8730:[.2,.8,0,0,.83334],8733:[0,.43056,0,0,.77778],8734:[0,.43056,0,0,1],8736:[0,.69224,0,0,.72222],8739:[.25,.75,0,0,.27778],8741:[.25,.75,0,0,.5],8743:[0,.55556,0,0,.66667],8744:[0,.55556,0,0,.66667],8745:[0,.55556,0,0,.66667],8746:[0,.55556,0,0,.66667],8747:[.19444,.69444,.11111,0,.41667],8764:[-.13313,.36687,0,0,.77778],8768:[.19444,.69444,0,0,.27778],8771:[-.03625,.46375,0,0,.77778],8773:[-.022,.589,0,0,.778],8776:[-.01688,.48312,0,0,.77778],8781:[-.03625,.46375,0,0,.77778],8784:[-.133,.673,0,0,.778],8801:[-.03625,.46375,0,0,.77778],8804:[.13597,.63597,0,0,.77778],8805:[.13597,.63597,0,0,.77778],8810:[.0391,.5391,0,0,1],8811:[.0391,.5391,0,0,1],8826:[.0391,.5391,0,0,.77778],8827:[.0391,.5391,0,0,.77778],8834:[.0391,.5391,0,0,.77778],8835:[.0391,.5391,0,0,.77778],8838:[.13597,.63597,0,0,.77778],8839:[.13597,.63597,0,0,.77778],8846:[0,.55556,0,0,.66667],8849:[.13597,.63597,0,0,.77778],8850:[.13597,.63597,0,0,.77778],8851:[0,.55556,0,0,.66667],8852:[0,.55556,0,0,.66667],8853:[.08333,.58333,0,0,.77778],8854:[.08333,.58333,0,0,.77778],8855:[.08333,.58333,0,0,.77778],8856:[.08333,.58333,0,0,.77778],8857:[.08333,.58333,0,0,.77778],8866:[0,.69444,0,0,.61111],8867:[0,.69444,0,0,.61111],8868:[0,.69444,0,0,.77778],8869:[0,.69444,0,0,.77778],8872:[.249,.75,0,0,.867],8900:[-.05555,.44445,0,0,.5],8901:[-.05555,.44445,0,0,.27778],8902:[-.03472,.46528,0,0,.5],8904:[.005,.505,0,0,.9],8942:[.03,.903,0,0,.278],8943:[-.19,.313,0,0,1.172],8945:[-.1,.823,0,0,1.282],8968:[.25,.75,0,0,.44445],8969:[.25,.75,0,0,.44445],8970:[.25,.75,0,0,.44445],8971:[.25,.75,0,0,.44445],8994:[-.14236,.35764,0,0,1],8995:[-.14236,.35764,0,0,1],9136:[.244,.744,0,0,.412],9137:[.244,.745,0,0,.412],9651:[.19444,.69444,0,0,.88889],9657:[-.03472,.46528,0,0,.5],9661:[.19444,.69444,0,0,.88889],9667:[-.03472,.46528,0,0,.5],9711:[.19444,.69444,0,0,1],9824:[.12963,.69444,0,0,.77778],9825:[.12963,.69444,0,0,.77778],9826:[.12963,.69444,0,0,.77778],9827:[.12963,.69444,0,0,.77778],9837:[0,.75,0,0,.38889],9838:[.19444,.69444,0,0,.38889],9839:[.19444,.69444,0,0,.38889],10216:[.25,.75,0,0,.38889],10217:[.25,.75,0,0,.38889],10222:[.244,.744,0,0,.412],10223:[.244,.745,0,0,.412],10229:[.011,.511,0,0,1.609],10230:[.011,.511,0,0,1.638],10231:[.011,.511,0,0,1.859],10232:[.024,.525,0,0,1.609],10233:[.024,.525,0,0,1.638],10234:[.024,.525,0,0,1.858],10236:[.011,.511,0,0,1.638],10815:[0,.68333,0,0,.75],10927:[.13597,.63597,0,0,.77778],10928:[.13597,.63597,0,0,.77778],57376:[.19444,.69444,0,0,0]},"Math-BoldItalic":{32:[0,0,0,0,.25],48:[0,.44444,0,0,.575],49:[0,.44444,0,0,.575],50:[0,.44444,0,0,.575],51:[.19444,.44444,0,0,.575],52:[.19444,.44444,0,0,.575],53:[.19444,.44444,0,0,.575],54:[0,.64444,0,0,.575],55:[.19444,.44444,0,0,.575],56:[0,.64444,0,0,.575],57:[.19444,.44444,0,0,.575],65:[0,.68611,0,0,.86944],66:[0,.68611,.04835,0,.8664],67:[0,.68611,.06979,0,.81694],68:[0,.68611,.03194,0,.93812],69:[0,.68611,.05451,0,.81007],70:[0,.68611,.15972,0,.68889],71:[0,.68611,0,0,.88673],72:[0,.68611,.08229,0,.98229],73:[0,.68611,.07778,0,.51111],74:[0,.68611,.10069,0,.63125],75:[0,.68611,.06979,0,.97118],76:[0,.68611,0,0,.75555],77:[0,.68611,.11424,0,1.14201],78:[0,.68611,.11424,0,.95034],79:[0,.68611,.03194,0,.83666],80:[0,.68611,.15972,0,.72309],81:[.19444,.68611,0,0,.86861],82:[0,.68611,.00421,0,.87235],83:[0,.68611,.05382,0,.69271],84:[0,.68611,.15972,0,.63663],85:[0,.68611,.11424,0,.80027],86:[0,.68611,.25555,0,.67778],87:[0,.68611,.15972,0,1.09305],88:[0,.68611,.07778,0,.94722],89:[0,.68611,.25555,0,.67458],90:[0,.68611,.06979,0,.77257],97:[0,.44444,0,0,.63287],98:[0,.69444,0,0,.52083],99:[0,.44444,0,0,.51342],100:[0,.69444,0,0,.60972],101:[0,.44444,0,0,.55361],102:[.19444,.69444,.11042,0,.56806],103:[.19444,.44444,.03704,0,.5449],104:[0,.69444,0,0,.66759],105:[0,.69326,0,0,.4048],106:[.19444,.69326,.0622,0,.47083],107:[0,.69444,.01852,0,.6037],108:[0,.69444,.0088,0,.34815],109:[0,.44444,0,0,1.0324],110:[0,.44444,0,0,.71296],111:[0,.44444,0,0,.58472],112:[.19444,.44444,0,0,.60092],113:[.19444,.44444,.03704,0,.54213],114:[0,.44444,.03194,0,.5287],115:[0,.44444,0,0,.53125],116:[0,.63492,0,0,.41528],117:[0,.44444,0,0,.68102],118:[0,.44444,.03704,0,.56666],119:[0,.44444,.02778,0,.83148],120:[0,.44444,0,0,.65903],121:[.19444,.44444,.03704,0,.59028],122:[0,.44444,.04213,0,.55509],160:[0,0,0,0,.25],915:[0,.68611,.15972,0,.65694],916:[0,.68611,0,0,.95833],920:[0,.68611,.03194,0,.86722],923:[0,.68611,0,0,.80555],926:[0,.68611,.07458,0,.84125],928:[0,.68611,.08229,0,.98229],931:[0,.68611,.05451,0,.88507],933:[0,.68611,.15972,0,.67083],934:[0,.68611,0,0,.76666],936:[0,.68611,.11653,0,.71402],937:[0,.68611,.04835,0,.8789],945:[0,.44444,0,0,.76064],946:[.19444,.69444,.03403,0,.65972],947:[.19444,.44444,.06389,0,.59003],948:[0,.69444,.03819,0,.52222],949:[0,.44444,0,0,.52882],950:[.19444,.69444,.06215,0,.50833],951:[.19444,.44444,.03704,0,.6],952:[0,.69444,.03194,0,.5618],953:[0,.44444,0,0,.41204],954:[0,.44444,0,0,.66759],955:[0,.69444,0,0,.67083],956:[.19444,.44444,0,0,.70787],957:[0,.44444,.06898,0,.57685],958:[.19444,.69444,.03021,0,.50833],959:[0,.44444,0,0,.58472],960:[0,.44444,.03704,0,.68241],961:[.19444,.44444,0,0,.6118],962:[.09722,.44444,.07917,0,.42361],963:[0,.44444,.03704,0,.68588],964:[0,.44444,.13472,0,.52083],965:[0,.44444,.03704,0,.63055],966:[.19444,.44444,0,0,.74722],967:[.19444,.44444,0,0,.71805],968:[.19444,.69444,.03704,0,.75833],969:[0,.44444,.03704,0,.71782],977:[0,.69444,0,0,.69155],981:[.19444,.69444,0,0,.7125],982:[0,.44444,.03194,0,.975],1009:[.19444,.44444,0,0,.6118],1013:[0,.44444,0,0,.48333],57649:[0,.44444,0,0,.39352],57911:[.19444,.44444,0,0,.43889]},"Math-Italic":{32:[0,0,0,0,.25],48:[0,.43056,0,0,.5],49:[0,.43056,0,0,.5],50:[0,.43056,0,0,.5],51:[.19444,.43056,0,0,.5],52:[.19444,.43056,0,0,.5],53:[.19444,.43056,0,0,.5],54:[0,.64444,0,0,.5],55:[.19444,.43056,0,0,.5],56:[0,.64444,0,0,.5],57:[.19444,.43056,0,0,.5],65:[0,.68333,0,.13889,.75],66:[0,.68333,.05017,.08334,.75851],67:[0,.68333,.07153,.08334,.71472],68:[0,.68333,.02778,.05556,.82792],69:[0,.68333,.05764,.08334,.7382],70:[0,.68333,.13889,.08334,.64306],71:[0,.68333,0,.08334,.78625],72:[0,.68333,.08125,.05556,.83125],73:[0,.68333,.07847,.11111,.43958],74:[0,.68333,.09618,.16667,.55451],75:[0,.68333,.07153,.05556,.84931],76:[0,.68333,0,.02778,.68056],77:[0,.68333,.10903,.08334,.97014],78:[0,.68333,.10903,.08334,.80347],79:[0,.68333,.02778,.08334,.76278],80:[0,.68333,.13889,.08334,.64201],81:[.19444,.68333,0,.08334,.79056],82:[0,.68333,.00773,.08334,.75929],83:[0,.68333,.05764,.08334,.6132],84:[0,.68333,.13889,.08334,.58438],85:[0,.68333,.10903,.02778,.68278],86:[0,.68333,.22222,0,.58333],87:[0,.68333,.13889,0,.94445],88:[0,.68333,.07847,.08334,.82847],89:[0,.68333,.22222,0,.58056],90:[0,.68333,.07153,.08334,.68264],97:[0,.43056,0,0,.52859],98:[0,.69444,0,0,.42917],99:[0,.43056,0,.05556,.43276],100:[0,.69444,0,.16667,.52049],101:[0,.43056,0,.05556,.46563],102:[.19444,.69444,.10764,.16667,.48959],103:[.19444,.43056,.03588,.02778,.47697],104:[0,.69444,0,0,.57616],105:[0,.65952,0,0,.34451],106:[.19444,.65952,.05724,0,.41181],107:[0,.69444,.03148,0,.5206],108:[0,.69444,.01968,.08334,.29838],109:[0,.43056,0,0,.87801],110:[0,.43056,0,0,.60023],111:[0,.43056,0,.05556,.48472],112:[.19444,.43056,0,.08334,.50313],113:[.19444,.43056,.03588,.08334,.44641],114:[0,.43056,.02778,.05556,.45116],115:[0,.43056,0,.05556,.46875],116:[0,.61508,0,.08334,.36111],117:[0,.43056,0,.02778,.57246],118:[0,.43056,.03588,.02778,.48472],119:[0,.43056,.02691,.08334,.71592],120:[0,.43056,0,.02778,.57153],121:[.19444,.43056,.03588,.05556,.49028],122:[0,.43056,.04398,.05556,.46505],160:[0,0,0,0,.25],915:[0,.68333,.13889,.08334,.61528],916:[0,.68333,0,.16667,.83334],920:[0,.68333,.02778,.08334,.76278],923:[0,.68333,0,.16667,.69445],926:[0,.68333,.07569,.08334,.74236],928:[0,.68333,.08125,.05556,.83125],931:[0,.68333,.05764,.08334,.77986],933:[0,.68333,.13889,.05556,.58333],934:[0,.68333,0,.08334,.66667],936:[0,.68333,.11,.05556,.61222],937:[0,.68333,.05017,.08334,.7724],945:[0,.43056,.0037,.02778,.6397],946:[.19444,.69444,.05278,.08334,.56563],947:[.19444,.43056,.05556,0,.51773],948:[0,.69444,.03785,.05556,.44444],949:[0,.43056,0,.08334,.46632],950:[.19444,.69444,.07378,.08334,.4375],951:[.19444,.43056,.03588,.05556,.49653],952:[0,.69444,.02778,.08334,.46944],953:[0,.43056,0,.05556,.35394],954:[0,.43056,0,0,.57616],955:[0,.69444,0,0,.58334],956:[.19444,.43056,0,.02778,.60255],957:[0,.43056,.06366,.02778,.49398],958:[.19444,.69444,.04601,.11111,.4375],959:[0,.43056,0,.05556,.48472],960:[0,.43056,.03588,0,.57003],961:[.19444,.43056,0,.08334,.51702],962:[.09722,.43056,.07986,.08334,.36285],963:[0,.43056,.03588,0,.57141],964:[0,.43056,.1132,.02778,.43715],965:[0,.43056,.03588,.02778,.54028],966:[.19444,.43056,0,.08334,.65417],967:[.19444,.43056,0,.05556,.62569],968:[.19444,.69444,.03588,.11111,.65139],969:[0,.43056,.03588,0,.62245],977:[0,.69444,0,.08334,.59144],981:[.19444,.69444,0,.08334,.59583],982:[0,.43056,.02778,0,.82813],1009:[.19444,.43056,0,.08334,.51702],1013:[0,.43056,0,.05556,.4059],57649:[0,.43056,0,.02778,.32246],57911:[.19444,.43056,0,.08334,.38403]},"SansSerif-Bold":{32:[0,0,0,0,.25],33:[0,.69444,0,0,.36667],34:[0,.69444,0,0,.55834],35:[.19444,.69444,0,0,.91667],36:[.05556,.75,0,0,.55],37:[.05556,.75,0,0,1.02912],38:[0,.69444,0,0,.83056],39:[0,.69444,0,0,.30556],40:[.25,.75,0,0,.42778],41:[.25,.75,0,0,.42778],42:[0,.75,0,0,.55],43:[.11667,.61667,0,0,.85556],44:[.10556,.13056,0,0,.30556],45:[0,.45833,0,0,.36667],46:[0,.13056,0,0,.30556],47:[.25,.75,0,0,.55],48:[0,.69444,0,0,.55],49:[0,.69444,0,0,.55],50:[0,.69444,0,0,.55],51:[0,.69444,0,0,.55],52:[0,.69444,0,0,.55],53:[0,.69444,0,0,.55],54:[0,.69444,0,0,.55],55:[0,.69444,0,0,.55],56:[0,.69444,0,0,.55],57:[0,.69444,0,0,.55],58:[0,.45833,0,0,.30556],59:[.10556,.45833,0,0,.30556],61:[-.09375,.40625,0,0,.85556],63:[0,.69444,0,0,.51945],64:[0,.69444,0,0,.73334],65:[0,.69444,0,0,.73334],66:[0,.69444,0,0,.73334],67:[0,.69444,0,0,.70278],68:[0,.69444,0,0,.79445],69:[0,.69444,0,0,.64167],70:[0,.69444,0,0,.61111],71:[0,.69444,0,0,.73334],72:[0,.69444,0,0,.79445],73:[0,.69444,0,0,.33056],74:[0,.69444,0,0,.51945],75:[0,.69444,0,0,.76389],76:[0,.69444,0,0,.58056],77:[0,.69444,0,0,.97778],78:[0,.69444,0,0,.79445],79:[0,.69444,0,0,.79445],80:[0,.69444,0,0,.70278],81:[.10556,.69444,0,0,.79445],82:[0,.69444,0,0,.70278],83:[0,.69444,0,0,.61111],84:[0,.69444,0,0,.73334],85:[0,.69444,0,0,.76389],86:[0,.69444,.01528,0,.73334],87:[0,.69444,.01528,0,1.03889],88:[0,.69444,0,0,.73334],89:[0,.69444,.0275,0,.73334],90:[0,.69444,0,0,.67223],91:[.25,.75,0,0,.34306],93:[.25,.75,0,0,.34306],94:[0,.69444,0,0,.55],95:[.35,.10833,.03056,0,.55],97:[0,.45833,0,0,.525],98:[0,.69444,0,0,.56111],99:[0,.45833,0,0,.48889],100:[0,.69444,0,0,.56111],101:[0,.45833,0,0,.51111],102:[0,.69444,.07639,0,.33611],103:[.19444,.45833,.01528,0,.55],104:[0,.69444,0,0,.56111],105:[0,.69444,0,0,.25556],106:[.19444,.69444,0,0,.28611],107:[0,.69444,0,0,.53056],108:[0,.69444,0,0,.25556],109:[0,.45833,0,0,.86667],110:[0,.45833,0,0,.56111],111:[0,.45833,0,0,.55],112:[.19444,.45833,0,0,.56111],113:[.19444,.45833,0,0,.56111],114:[0,.45833,.01528,0,.37222],115:[0,.45833,0,0,.42167],116:[0,.58929,0,0,.40417],117:[0,.45833,0,0,.56111],118:[0,.45833,.01528,0,.5],119:[0,.45833,.01528,0,.74445],120:[0,.45833,0,0,.5],121:[.19444,.45833,.01528,0,.5],122:[0,.45833,0,0,.47639],126:[.35,.34444,0,0,.55],160:[0,0,0,0,.25],168:[0,.69444,0,0,.55],176:[0,.69444,0,0,.73334],180:[0,.69444,0,0,.55],184:[.17014,0,0,0,.48889],305:[0,.45833,0,0,.25556],567:[.19444,.45833,0,0,.28611],710:[0,.69444,0,0,.55],711:[0,.63542,0,0,.55],713:[0,.63778,0,0,.55],728:[0,.69444,0,0,.55],729:[0,.69444,0,0,.30556],730:[0,.69444,0,0,.73334],732:[0,.69444,0,0,.55],733:[0,.69444,0,0,.55],915:[0,.69444,0,0,.58056],916:[0,.69444,0,0,.91667],920:[0,.69444,0,0,.85556],923:[0,.69444,0,0,.67223],926:[0,.69444,0,0,.73334],928:[0,.69444,0,0,.79445],931:[0,.69444,0,0,.79445],933:[0,.69444,0,0,.85556],934:[0,.69444,0,0,.79445],936:[0,.69444,0,0,.85556],937:[0,.69444,0,0,.79445],8211:[0,.45833,.03056,0,.55],8212:[0,.45833,.03056,0,1.10001],8216:[0,.69444,0,0,.30556],8217:[0,.69444,0,0,.30556],8220:[0,.69444,0,0,.55834],8221:[0,.69444,0,0,.55834]},"SansSerif-Italic":{32:[0,0,0,0,.25],33:[0,.69444,.05733,0,.31945],34:[0,.69444,.00316,0,.5],35:[.19444,.69444,.05087,0,.83334],36:[.05556,.75,.11156,0,.5],37:[.05556,.75,.03126,0,.83334],38:[0,.69444,.03058,0,.75834],39:[0,.69444,.07816,0,.27778],40:[.25,.75,.13164,0,.38889],41:[.25,.75,.02536,0,.38889],42:[0,.75,.11775,0,.5],43:[.08333,.58333,.02536,0,.77778],44:[.125,.08333,0,0,.27778],45:[0,.44444,.01946,0,.33333],46:[0,.08333,0,0,.27778],47:[.25,.75,.13164,0,.5],48:[0,.65556,.11156,0,.5],49:[0,.65556,.11156,0,.5],50:[0,.65556,.11156,0,.5],51:[0,.65556,.11156,0,.5],52:[0,.65556,.11156,0,.5],53:[0,.65556,.11156,0,.5],54:[0,.65556,.11156,0,.5],55:[0,.65556,.11156,0,.5],56:[0,.65556,.11156,0,.5],57:[0,.65556,.11156,0,.5],58:[0,.44444,.02502,0,.27778],59:[.125,.44444,.02502,0,.27778],61:[-.13,.37,.05087,0,.77778],63:[0,.69444,.11809,0,.47222],64:[0,.69444,.07555,0,.66667],65:[0,.69444,0,0,.66667],66:[0,.69444,.08293,0,.66667],67:[0,.69444,.11983,0,.63889],68:[0,.69444,.07555,0,.72223],69:[0,.69444,.11983,0,.59722],70:[0,.69444,.13372,0,.56945],71:[0,.69444,.11983,0,.66667],72:[0,.69444,.08094,0,.70834],73:[0,.69444,.13372,0,.27778],74:[0,.69444,.08094,0,.47222],75:[0,.69444,.11983,0,.69445],76:[0,.69444,0,0,.54167],77:[0,.69444,.08094,0,.875],78:[0,.69444,.08094,0,.70834],79:[0,.69444,.07555,0,.73611],80:[0,.69444,.08293,0,.63889],81:[.125,.69444,.07555,0,.73611],82:[0,.69444,.08293,0,.64584],83:[0,.69444,.09205,0,.55556],84:[0,.69444,.13372,0,.68056],85:[0,.69444,.08094,0,.6875],86:[0,.69444,.1615,0,.66667],87:[0,.69444,.1615,0,.94445],88:[0,.69444,.13372,0,.66667],89:[0,.69444,.17261,0,.66667],90:[0,.69444,.11983,0,.61111],91:[.25,.75,.15942,0,.28889],93:[.25,.75,.08719,0,.28889],94:[0,.69444,.0799,0,.5],95:[.35,.09444,.08616,0,.5],97:[0,.44444,.00981,0,.48056],98:[0,.69444,.03057,0,.51667],99:[0,.44444,.08336,0,.44445],100:[0,.69444,.09483,0,.51667],101:[0,.44444,.06778,0,.44445],102:[0,.69444,.21705,0,.30556],103:[.19444,.44444,.10836,0,.5],104:[0,.69444,.01778,0,.51667],105:[0,.67937,.09718,0,.23889],106:[.19444,.67937,.09162,0,.26667],107:[0,.69444,.08336,0,.48889],108:[0,.69444,.09483,0,.23889],109:[0,.44444,.01778,0,.79445],110:[0,.44444,.01778,0,.51667],111:[0,.44444,.06613,0,.5],112:[.19444,.44444,.0389,0,.51667],113:[.19444,.44444,.04169,0,.51667],114:[0,.44444,.10836,0,.34167],115:[0,.44444,.0778,0,.38333],116:[0,.57143,.07225,0,.36111],117:[0,.44444,.04169,0,.51667],118:[0,.44444,.10836,0,.46111],119:[0,.44444,.10836,0,.68334],120:[0,.44444,.09169,0,.46111],121:[.19444,.44444,.10836,0,.46111],122:[0,.44444,.08752,0,.43472],126:[.35,.32659,.08826,0,.5],160:[0,0,0,0,.25],168:[0,.67937,.06385,0,.5],176:[0,.69444,0,0,.73752],184:[.17014,0,0,0,.44445],305:[0,.44444,.04169,0,.23889],567:[.19444,.44444,.04169,0,.26667],710:[0,.69444,.0799,0,.5],711:[0,.63194,.08432,0,.5],713:[0,.60889,.08776,0,.5],714:[0,.69444,.09205,0,.5],715:[0,.69444,0,0,.5],728:[0,.69444,.09483,0,.5],729:[0,.67937,.07774,0,.27778],730:[0,.69444,0,0,.73752],732:[0,.67659,.08826,0,.5],733:[0,.69444,.09205,0,.5],915:[0,.69444,.13372,0,.54167],916:[0,.69444,0,0,.83334],920:[0,.69444,.07555,0,.77778],923:[0,.69444,0,0,.61111],926:[0,.69444,.12816,0,.66667],928:[0,.69444,.08094,0,.70834],931:[0,.69444,.11983,0,.72222],933:[0,.69444,.09031,0,.77778],934:[0,.69444,.04603,0,.72222],936:[0,.69444,.09031,0,.77778],937:[0,.69444,.08293,0,.72222],8211:[0,.44444,.08616,0,.5],8212:[0,.44444,.08616,0,1],8216:[0,.69444,.07816,0,.27778],8217:[0,.69444,.07816,0,.27778],8220:[0,.69444,.14205,0,.5],8221:[0,.69444,.00316,0,.5]},"SansSerif-Regular":{32:[0,0,0,0,.25],33:[0,.69444,0,0,.31945],34:[0,.69444,0,0,.5],35:[.19444,.69444,0,0,.83334],36:[.05556,.75,0,0,.5],37:[.05556,.75,0,0,.83334],38:[0,.69444,0,0,.75834],39:[0,.69444,0,0,.27778],40:[.25,.75,0,0,.38889],41:[.25,.75,0,0,.38889],42:[0,.75,0,0,.5],43:[.08333,.58333,0,0,.77778],44:[.125,.08333,0,0,.27778],45:[0,.44444,0,0,.33333],46:[0,.08333,0,0,.27778],47:[.25,.75,0,0,.5],48:[0,.65556,0,0,.5],49:[0,.65556,0,0,.5],50:[0,.65556,0,0,.5],51:[0,.65556,0,0,.5],52:[0,.65556,0,0,.5],53:[0,.65556,0,0,.5],54:[0,.65556,0,0,.5],55:[0,.65556,0,0,.5],56:[0,.65556,0,0,.5],57:[0,.65556,0,0,.5],58:[0,.44444,0,0,.27778],59:[.125,.44444,0,0,.27778],61:[-.13,.37,0,0,.77778],63:[0,.69444,0,0,.47222],64:[0,.69444,0,0,.66667],65:[0,.69444,0,0,.66667],66:[0,.69444,0,0,.66667],67:[0,.69444,0,0,.63889],68:[0,.69444,0,0,.72223],69:[0,.69444,0,0,.59722],70:[0,.69444,0,0,.56945],71:[0,.69444,0,0,.66667],72:[0,.69444,0,0,.70834],73:[0,.69444,0,0,.27778],74:[0,.69444,0,0,.47222],75:[0,.69444,0,0,.69445],76:[0,.69444,0,0,.54167],77:[0,.69444,0,0,.875],78:[0,.69444,0,0,.70834],79:[0,.69444,0,0,.73611],80:[0,.69444,0,0,.63889],81:[.125,.69444,0,0,.73611],82:[0,.69444,0,0,.64584],83:[0,.69444,0,0,.55556],84:[0,.69444,0,0,.68056],85:[0,.69444,0,0,.6875],86:[0,.69444,.01389,0,.66667],87:[0,.69444,.01389,0,.94445],88:[0,.69444,0,0,.66667],89:[0,.69444,.025,0,.66667],90:[0,.69444,0,0,.61111],91:[.25,.75,0,0,.28889],93:[.25,.75,0,0,.28889],94:[0,.69444,0,0,.5],95:[.35,.09444,.02778,0,.5],97:[0,.44444,0,0,.48056],98:[0,.69444,0,0,.51667],99:[0,.44444,0,0,.44445],100:[0,.69444,0,0,.51667],101:[0,.44444,0,0,.44445],102:[0,.69444,.06944,0,.30556],103:[.19444,.44444,.01389,0,.5],104:[0,.69444,0,0,.51667],105:[0,.67937,0,0,.23889],106:[.19444,.67937,0,0,.26667],107:[0,.69444,0,0,.48889],108:[0,.69444,0,0,.23889],109:[0,.44444,0,0,.79445],110:[0,.44444,0,0,.51667],111:[0,.44444,0,0,.5],112:[.19444,.44444,0,0,.51667],113:[.19444,.44444,0,0,.51667],114:[0,.44444,.01389,0,.34167],115:[0,.44444,0,0,.38333],116:[0,.57143,0,0,.36111],117:[0,.44444,0,0,.51667],118:[0,.44444,.01389,0,.46111],119:[0,.44444,.01389,0,.68334],120:[0,.44444,0,0,.46111],121:[.19444,.44444,.01389,0,.46111],122:[0,.44444,0,0,.43472],126:[.35,.32659,0,0,.5],160:[0,0,0,0,.25],168:[0,.67937,0,0,.5],176:[0,.69444,0,0,.66667],184:[.17014,0,0,0,.44445],305:[0,.44444,0,0,.23889],567:[.19444,.44444,0,0,.26667],710:[0,.69444,0,0,.5],711:[0,.63194,0,0,.5],713:[0,.60889,0,0,.5],714:[0,.69444,0,0,.5],715:[0,.69444,0,0,.5],728:[0,.69444,0,0,.5],729:[0,.67937,0,0,.27778],730:[0,.69444,0,0,.66667],732:[0,.67659,0,0,.5],733:[0,.69444,0,0,.5],915:[0,.69444,0,0,.54167],916:[0,.69444,0,0,.83334],920:[0,.69444,0,0,.77778],923:[0,.69444,0,0,.61111],926:[0,.69444,0,0,.66667],928:[0,.69444,0,0,.70834],931:[0,.69444,0,0,.72222],933:[0,.69444,0,0,.77778],934:[0,.69444,0,0,.72222],936:[0,.69444,0,0,.77778],937:[0,.69444,0,0,.72222],8211:[0,.44444,.02778,0,.5],8212:[0,.44444,.02778,0,1],8216:[0,.69444,0,0,.27778],8217:[0,.69444,0,0,.27778],8220:[0,.69444,0,0,.5],8221:[0,.69444,0,0,.5]},"Script-Regular":{32:[0,0,0,0,.25],65:[0,.7,.22925,0,.80253],66:[0,.7,.04087,0,.90757],67:[0,.7,.1689,0,.66619],68:[0,.7,.09371,0,.77443],69:[0,.7,.18583,0,.56162],70:[0,.7,.13634,0,.89544],71:[0,.7,.17322,0,.60961],72:[0,.7,.29694,0,.96919],73:[0,.7,.19189,0,.80907],74:[.27778,.7,.19189,0,1.05159],75:[0,.7,.31259,0,.91364],76:[0,.7,.19189,0,.87373],77:[0,.7,.15981,0,1.08031],78:[0,.7,.3525,0,.9015],79:[0,.7,.08078,0,.73787],80:[0,.7,.08078,0,1.01262],81:[0,.7,.03305,0,.88282],82:[0,.7,.06259,0,.85],83:[0,.7,.19189,0,.86767],84:[0,.7,.29087,0,.74697],85:[0,.7,.25815,0,.79996],86:[0,.7,.27523,0,.62204],87:[0,.7,.27523,0,.80532],88:[0,.7,.26006,0,.94445],89:[0,.7,.2939,0,.70961],90:[0,.7,.24037,0,.8212],160:[0,0,0,0,.25]},"Size1-Regular":{32:[0,0,0,0,.25],40:[.35001,.85,0,0,.45834],41:[.35001,.85,0,0,.45834],47:[.35001,.85,0,0,.57778],91:[.35001,.85,0,0,.41667],92:[.35001,.85,0,0,.57778],93:[.35001,.85,0,0,.41667],123:[.35001,.85,0,0,.58334],125:[.35001,.85,0,0,.58334],160:[0,0,0,0,.25],710:[0,.72222,0,0,.55556],732:[0,.72222,0,0,.55556],770:[0,.72222,0,0,.55556],771:[0,.72222,0,0,.55556],8214:[-99e-5,.601,0,0,.77778],8593:[1e-5,.6,0,0,.66667],8595:[1e-5,.6,0,0,.66667],8657:[1e-5,.6,0,0,.77778],8659:[1e-5,.6,0,0,.77778],8719:[.25001,.75,0,0,.94445],8720:[.25001,.75,0,0,.94445],8721:[.25001,.75,0,0,1.05556],8730:[.35001,.85,0,0,1],8739:[-.00599,.606,0,0,.33333],8741:[-.00599,.606,0,0,.55556],8747:[.30612,.805,.19445,0,.47222],8748:[.306,.805,.19445,0,.47222],8749:[.306,.805,.19445,0,.47222],8750:[.30612,.805,.19445,0,.47222],8896:[.25001,.75,0,0,.83334],8897:[.25001,.75,0,0,.83334],8898:[.25001,.75,0,0,.83334],8899:[.25001,.75,0,0,.83334],8968:[.35001,.85,0,0,.47222],8969:[.35001,.85,0,0,.47222],8970:[.35001,.85,0,0,.47222],8971:[.35001,.85,0,0,.47222],9168:[-99e-5,.601,0,0,.66667],10216:[.35001,.85,0,0,.47222],10217:[.35001,.85,0,0,.47222],10752:[.25001,.75,0,0,1.11111],10753:[.25001,.75,0,0,1.11111],10754:[.25001,.75,0,0,1.11111],10756:[.25001,.75,0,0,.83334],10758:[.25001,.75,0,0,.83334]},"Size2-Regular":{32:[0,0,0,0,.25],40:[.65002,1.15,0,0,.59722],41:[.65002,1.15,0,0,.59722],47:[.65002,1.15,0,0,.81111],91:[.65002,1.15,0,0,.47222],92:[.65002,1.15,0,0,.81111],93:[.65002,1.15,0,0,.47222],123:[.65002,1.15,0,0,.66667],125:[.65002,1.15,0,0,.66667],160:[0,0,0,0,.25],710:[0,.75,0,0,1],732:[0,.75,0,0,1],770:[0,.75,0,0,1],771:[0,.75,0,0,1],8719:[.55001,1.05,0,0,1.27778],8720:[.55001,1.05,0,0,1.27778],8721:[.55001,1.05,0,0,1.44445],8730:[.65002,1.15,0,0,1],8747:[.86225,1.36,.44445,0,.55556],8748:[.862,1.36,.44445,0,.55556],8749:[.862,1.36,.44445,0,.55556],8750:[.86225,1.36,.44445,0,.55556],8896:[.55001,1.05,0,0,1.11111],8897:[.55001,1.05,0,0,1.11111],8898:[.55001,1.05,0,0,1.11111],8899:[.55001,1.05,0,0,1.11111],8968:[.65002,1.15,0,0,.52778],8969:[.65002,1.15,0,0,.52778],8970:[.65002,1.15,0,0,.52778],8971:[.65002,1.15,0,0,.52778],10216:[.65002,1.15,0,0,.61111],10217:[.65002,1.15,0,0,.61111],10752:[.55001,1.05,0,0,1.51112],10753:[.55001,1.05,0,0,1.51112],10754:[.55001,1.05,0,0,1.51112],10756:[.55001,1.05,0,0,1.11111],10758:[.55001,1.05,0,0,1.11111]},"Size3-Regular":{32:[0,0,0,0,.25],40:[.95003,1.45,0,0,.73611],41:[.95003,1.45,0,0,.73611],47:[.95003,1.45,0,0,1.04445],91:[.95003,1.45,0,0,.52778],92:[.95003,1.45,0,0,1.04445],93:[.95003,1.45,0,0,.52778],123:[.95003,1.45,0,0,.75],125:[.95003,1.45,0,0,.75],160:[0,0,0,0,.25],710:[0,.75,0,0,1.44445],732:[0,.75,0,0,1.44445],770:[0,.75,0,0,1.44445],771:[0,.75,0,0,1.44445],8730:[.95003,1.45,0,0,1],8968:[.95003,1.45,0,0,.58334],8969:[.95003,1.45,0,0,.58334],8970:[.95003,1.45,0,0,.58334],8971:[.95003,1.45,0,0,.58334],10216:[.95003,1.45,0,0,.75],10217:[.95003,1.45,0,0,.75]},"Size4-Regular":{32:[0,0,0,0,.25],40:[1.25003,1.75,0,0,.79167],41:[1.25003,1.75,0,0,.79167],47:[1.25003,1.75,0,0,1.27778],91:[1.25003,1.75,0,0,.58334],92:[1.25003,1.75,0,0,1.27778],93:[1.25003,1.75,0,0,.58334],123:[1.25003,1.75,0,0,.80556],125:[1.25003,1.75,0,0,.80556],160:[0,0,0,0,.25],710:[0,.825,0,0,1.8889],732:[0,.825,0,0,1.8889],770:[0,.825,0,0,1.8889],771:[0,.825,0,0,1.8889],8730:[1.25003,1.75,0,0,1],8968:[1.25003,1.75,0,0,.63889],8969:[1.25003,1.75,0,0,.63889],8970:[1.25003,1.75,0,0,.63889],8971:[1.25003,1.75,0,0,.63889],9115:[.64502,1.155,0,0,.875],9116:[1e-5,.6,0,0,.875],9117:[.64502,1.155,0,0,.875],9118:[.64502,1.155,0,0,.875],9119:[1e-5,.6,0,0,.875],9120:[.64502,1.155,0,0,.875],9121:[.64502,1.155,0,0,.66667],9122:[-99e-5,.601,0,0,.66667],9123:[.64502,1.155,0,0,.66667],9124:[.64502,1.155,0,0,.66667],9125:[-99e-5,.601,0,0,.66667],9126:[.64502,1.155,0,0,.66667],9127:[1e-5,.9,0,0,.88889],9128:[.65002,1.15,0,0,.88889],9129:[.90001,0,0,0,.88889],9130:[0,.3,0,0,.88889],9131:[1e-5,.9,0,0,.88889],9132:[.65002,1.15,0,0,.88889],9133:[.90001,0,0,0,.88889],9143:[.88502,.915,0,0,1.05556],10216:[1.25003,1.75,0,0,.80556],10217:[1.25003,1.75,0,0,.80556],57344:[-.00499,.605,0,0,1.05556],57345:[-.00499,.605,0,0,1.05556],57680:[0,.12,0,0,.45],57681:[0,.12,0,0,.45],57682:[0,.12,0,0,.45],57683:[0,.12,0,0,.45]},"Typewriter-Regular":{32:[0,0,0,0,.525],33:[0,.61111,0,0,.525],34:[0,.61111,0,0,.525],35:[0,.61111,0,0,.525],36:[.08333,.69444,0,0,.525],37:[.08333,.69444,0,0,.525],38:[0,.61111,0,0,.525],39:[0,.61111,0,0,.525],40:[.08333,.69444,0,0,.525],41:[.08333,.69444,0,0,.525],42:[0,.52083,0,0,.525],43:[-.08056,.53055,0,0,.525],44:[.13889,.125,0,0,.525],45:[-.08056,.53055,0,0,.525],46:[0,.125,0,0,.525],47:[.08333,.69444,0,0,.525],48:[0,.61111,0,0,.525],49:[0,.61111,0,0,.525],50:[0,.61111,0,0,.525],51:[0,.61111,0,0,.525],52:[0,.61111,0,0,.525],53:[0,.61111,0,0,.525],54:[0,.61111,0,0,.525],55:[0,.61111,0,0,.525],56:[0,.61111,0,0,.525],57:[0,.61111,0,0,.525],58:[0,.43056,0,0,.525],59:[.13889,.43056,0,0,.525],60:[-.05556,.55556,0,0,.525],61:[-.19549,.41562,0,0,.525],62:[-.05556,.55556,0,0,.525],63:[0,.61111,0,0,.525],64:[0,.61111,0,0,.525],65:[0,.61111,0,0,.525],66:[0,.61111,0,0,.525],67:[0,.61111,0,0,.525],68:[0,.61111,0,0,.525],69:[0,.61111,0,0,.525],70:[0,.61111,0,0,.525],71:[0,.61111,0,0,.525],72:[0,.61111,0,0,.525],73:[0,.61111,0,0,.525],74:[0,.61111,0,0,.525],75:[0,.61111,0,0,.525],76:[0,.61111,0,0,.525],77:[0,.61111,0,0,.525],78:[0,.61111,0,0,.525],79:[0,.61111,0,0,.525],80:[0,.61111,0,0,.525],81:[.13889,.61111,0,0,.525],82:[0,.61111,0,0,.525],83:[0,.61111,0,0,.525],84:[0,.61111,0,0,.525],85:[0,.61111,0,0,.525],86:[0,.61111,0,0,.525],87:[0,.61111,0,0,.525],88:[0,.61111,0,0,.525],89:[0,.61111,0,0,.525],90:[0,.61111,0,0,.525],91:[.08333,.69444,0,0,.525],92:[.08333,.69444,0,0,.525],93:[.08333,.69444,0,0,.525],94:[0,.61111,0,0,.525],95:[.09514,0,0,0,.525],96:[0,.61111,0,0,.525],97:[0,.43056,0,0,.525],98:[0,.61111,0,0,.525],99:[0,.43056,0,0,.525],100:[0,.61111,0,0,.525],101:[0,.43056,0,0,.525],102:[0,.61111,0,0,.525],103:[.22222,.43056,0,0,.525],104:[0,.61111,0,0,.525],105:[0,.61111,0,0,.525],106:[.22222,.61111,0,0,.525],107:[0,.61111,0,0,.525],108:[0,.61111,0,0,.525],109:[0,.43056,0,0,.525],110:[0,.43056,0,0,.525],111:[0,.43056,0,0,.525],112:[.22222,.43056,0,0,.525],113:[.22222,.43056,0,0,.525],114:[0,.43056,0,0,.525],115:[0,.43056,0,0,.525],116:[0,.55358,0,0,.525],117:[0,.43056,0,0,.525],118:[0,.43056,0,0,.525],119:[0,.43056,0,0,.525],120:[0,.43056,0,0,.525],121:[.22222,.43056,0,0,.525],122:[0,.43056,0,0,.525],123:[.08333,.69444,0,0,.525],124:[.08333,.69444,0,0,.525],125:[.08333,.69444,0,0,.525],126:[0,.61111,0,0,.525],127:[0,.61111,0,0,.525],160:[0,0,0,0,.525],176:[0,.61111,0,0,.525],184:[.19445,0,0,0,.525],305:[0,.43056,0,0,.525],567:[.22222,.43056,0,0,.525],711:[0,.56597,0,0,.525],713:[0,.56555,0,0,.525],714:[0,.61111,0,0,.525],715:[0,.61111,0,0,.525],728:[0,.61111,0,0,.525],730:[0,.61111,0,0,.525],770:[0,.61111,0,0,.525],771:[0,.61111,0,0,.525],776:[0,.61111,0,0,.525],915:[0,.61111,0,0,.525],916:[0,.61111,0,0,.525],920:[0,.61111,0,0,.525],923:[0,.61111,0,0,.525],926:[0,.61111,0,0,.525],928:[0,.61111,0,0,.525],931:[0,.61111,0,0,.525],933:[0,.61111,0,0,.525],934:[0,.61111,0,0,.525],936:[0,.61111,0,0,.525],937:[0,.61111,0,0,.525],8216:[0,.61111,0,0,.525],8217:[0,.61111,0,0,.525],8242:[0,.61111,0,0,.525],9251:[.11111,.21944,0,0,.525]}},l4={slant:[.25,.25,.25],space:[0,0,0],stretch:[0,0,0],shrink:[0,0,0],xHeight:[.431,.431,.431],quad:[1,1.171,1.472],extraSpace:[0,0,0],num1:[.677,.732,.925],num2:[.394,.384,.387],num3:[.444,.471,.504],denom1:[.686,.752,1.025],denom2:[.345,.344,.532],sup1:[.413,.503,.504],sup2:[.363,.431,.404],sup3:[.289,.286,.294],sub1:[.15,.143,.2],sub2:[.247,.286,.4],supDrop:[.386,.353,.494],subDrop:[.05,.071,.1],delim1:[2.39,1.7,1.98],delim2:[1.01,1.157,1.42],axisHeight:[.25,.25,.25],defaultRuleThickness:[.04,.049,.049],bigOpSpacing1:[.111,.111,.111],bigOpSpacing2:[.166,.166,.166],bigOpSpacing3:[.2,.2,.2],bigOpSpacing4:[.6,.611,.611],bigOpSpacing5:[.1,.143,.143],sqrtRuleThickness:[.04,.04,.04],ptPerEm:[10,10,10],doubleRuleSep:[.2,.2,.2],arrayRuleWidth:[.04,.04,.04],fboxsep:[.3,.3,.3],fboxrule:[.04,.04,.04]},nG={\u00C5:"A",\u00D0:"D",\u00DE:"o",\u00E5:"a",\u00F0:"d",\u00FE:"o",\u0410:"A",\u0411:"B",\u0412:"B",\u0413:"F",\u0414:"A",\u0415:"E",\u0416:"K",\u0417:"3",\u0418:"N",\u0419:"N",\u041A:"K",\u041B:"N",\u041C:"M",\u041D:"H",\u041E:"O",\u041F:"N",\u0420:"P",\u0421:"C",\u0422:"T",\u0423:"y",\u0424:"O",\u0425:"X",\u0426:"U",\u0427:"h",\u0428:"W",\u0429:"W",\u042A:"B",\u042B:"X",\u042C:"B",\u042D:"3",\u042E:"X",\u042F:"R",\u0430:"a",\u0431:"b",\u0432:"a",\u0433:"r",\u0434:"y",\u0435:"e",\u0436:"m",\u0437:"e",\u0438:"n",\u0439:"n",\u043A:"n",\u043B:"n",\u043C:"m",\u043D:"n",\u043E:"o",\u043F:"n",\u0440:"p",\u0441:"c",\u0442:"o",\u0443:"y",\u0444:"b",\u0445:"x",\u0446:"n",\u0447:"n",\u0448:"w",\u0449:"w",\u044A:"a",\u044B:"m",\u044C:"a",\u044D:"e",\u044E:"m",\u044F:"r"};o(Abe,"setFontMetrics");o(IC,"getCharacterMetrics");cC={};o(_be,"getGlobalMetrics");Lbe=[[1,1,1],[2,1,1],[3,1,1],[4,2,1],[5,2,1],[6,3,1],[7,4,2],[8,6,3],[9,7,6],[10,8,7],[11,10,9]],iG=[.5,.6,.7,.8,.9,1,1.2,1.44,1.728,2.074,2.488],aG=o(function(e,r){return r.size<2?e:Lbe[e-1][r.size-1]},"sizeAtStyle"),T4=class t{static{o(this,"Options")}constructor(e){this.style=void 0,this.color=void 0,this.size=void 0,this.textSize=void 0,this.phantom=void 0,this.font=void 0,this.fontFamily=void 0,this.fontWeight=void 0,this.fontShape=void 0,this.sizeMultiplier=void 0,this.maxSize=void 0,this.minRuleThickness=void 0,this._fontMetrics=void 0,this.style=e.style,this.color=e.color,this.size=e.size||t.BASESIZE,this.textSize=e.textSize||this.size,this.phantom=!!e.phantom,this.font=e.font||"",this.fontFamily=e.fontFamily||"",this.fontWeight=e.fontWeight||"",this.fontShape=e.fontShape||"",this.sizeMultiplier=iG[this.size-1],this.maxSize=e.maxSize,this.minRuleThickness=e.minRuleThickness,this._fontMetrics=void 0}extend(e){var r={style:this.style,size:this.size,textSize:this.textSize,color:this.color,phantom:this.phantom,font:this.font,fontFamily:this.fontFamily,fontWeight:this.fontWeight,fontShape:this.fontShape,maxSize:this.maxSize,minRuleThickness:this.minRuleThickness};for(var n in e)e.hasOwnProperty(n)&&(r[n]=e[n]);return new t(r)}havingStyle(e){return this.style===e?this:this.extend({style:e,size:aG(this.textSize,e)})}havingCrampedStyle(){return this.havingStyle(this.style.cramp())}havingSize(e){return this.size===e&&this.textSize===e?this:this.extend({style:this.style.text(),size:e,textSize:e,sizeMultiplier:iG[e-1]})}havingBaseStyle(e){e=e||this.style.text();var r=aG(t.BASESIZE,e);return this.size===r&&this.textSize===t.BASESIZE&&this.style===e?this:this.extend({style:e,size:r})}havingBaseSizing(){var e;switch(this.style.id){case 4:case 5:e=3;break;case 6:case 7:e=1;break;default:e=6}return this.extend({style:this.style.text(),size:e})}withColor(e){return this.extend({color:e})}withPhantom(){return this.extend({phantom:!0})}withFont(e){return this.extend({font:e})}withTextFontFamily(e){return this.extend({fontFamily:e,font:""})}withTextFontWeight(e){return this.extend({fontWeight:e,font:""})}withTextFontShape(e){return this.extend({fontShape:e,font:""})}sizingClasses(e){return e.size!==this.size?["sizing","reset-size"+e.size,"size"+this.size]:[]}baseSizingClasses(){return this.size!==t.BASESIZE?["sizing","reset-size"+this.size,"size"+t.BASESIZE]:[]}fontMetrics(){return this._fontMetrics||(this._fontMetrics=_be(this.size)),this._fontMetrics}getColor(){return this.phantom?"transparent":this.color}};T4.BASESIZE=6;TC={pt:1,mm:7227/2540,cm:7227/254,in:72.27,bp:803/800,pc:12,dd:1238/1157,cc:14856/1157,nd:685/642,nc:1370/107,sp:1/65536,px:803/800},Dbe={ex:!0,em:!0,mu:!0},OG=o(function(e){return typeof e!="string"&&(e=e.unit),e in TC||e in Dbe||e==="ex"},"validUnit"),Jn=o(function(e,r){var n;if(e.unit in TC)n=TC[e.unit]/r.fontMetrics().ptPerEm/r.sizeMultiplier;else if(e.unit==="mu")n=r.fontMetrics().cssEmPerMu;else{var i;if(r.style.isTight()?i=r.havingStyle(r.style.text()):i=r,e.unit==="ex")n=i.fontMetrics().xHeight;else if(e.unit==="em")n=i.fontMetrics().quad;else throw new lt("Invalid unit: '"+e.unit+"'");i!==r&&(n*=i.sizeMultiplier/r.sizeMultiplier)}return Math.min(e.number*n,r.maxSize)},"calculateSize"),gt=o(function(e){return+e.toFixed(4)+"em"},"makeEm"),yh=o(function(e){return e.filter(r=>r).join(" ")},"createClass"),PG=o(function(e,r,n){if(this.classes=e||[],this.attributes={},this.height=0,this.depth=0,this.maxFontSize=0,this.style=n||{},r){r.style.isTight()&&this.classes.push("mtight");var i=r.getColor();i&&(this.style.color=i)}},"initNode"),BG=o(function(e){var r=document.createElement(e);r.className=yh(this.classes);for(var n in this.style)this.style.hasOwnProperty(n)&&(r.style[n]=this.style[n]);for(var i in this.attributes)this.attributes.hasOwnProperty(i)&&r.setAttribute(i,this.attributes[i]);for(var a=0;a",r},"toMarkup"),nd=class{static{o(this,"Span")}constructor(e,r,n,i){this.children=void 0,this.attributes=void 0,this.classes=void 0,this.height=void 0,this.depth=void 0,this.width=void 0,this.maxFontSize=void 0,this.style=void 0,PG.call(this,e,n,i),this.children=r||[]}setAttribute(e,r){this.attributes[e]=r}hasClass(e){return Jt.contains(this.classes,e)}toNode(){return BG.call(this,"span")}toMarkup(){return FG.call(this,"span")}},my=class{static{o(this,"Anchor")}constructor(e,r,n,i){this.children=void 0,this.attributes=void 0,this.classes=void 0,this.height=void 0,this.depth=void 0,this.maxFontSize=void 0,this.style=void 0,PG.call(this,r,i),this.children=n||[],this.setAttribute("href",e)}setAttribute(e,r){this.attributes[e]=r}hasClass(e){return Jt.contains(this.classes,e)}toNode(){return BG.call(this,"a")}toMarkup(){return FG.call(this,"a")}},kC=class{static{o(this,"Img")}constructor(e,r,n){this.src=void 0,this.alt=void 0,this.classes=void 0,this.height=void 0,this.depth=void 0,this.maxFontSize=void 0,this.style=void 0,this.alt=r,this.src=e,this.classes=["mord"],this.style=n}hasClass(e){return Jt.contains(this.classes,e)}toNode(){var e=document.createElement("img");e.src=this.src,e.alt=this.alt,e.className="mord";for(var r in this.style)this.style.hasOwnProperty(r)&&(e.style[r]=this.style[r]);return e}toMarkup(){var e=''+Jt.escape(this.alt)+'0&&(r=document.createElement("span"),r.style.marginRight=gt(this.italic)),this.classes.length>0&&(r=r||document.createElement("span"),r.className=yh(this.classes));for(var n in this.style)this.style.hasOwnProperty(n)&&(r=r||document.createElement("span"),r.style[n]=this.style[n]);return r?(r.appendChild(e),r):e}toMarkup(){var e=!1,r="0&&(n+="margin-right:"+this.italic+"em;");for(var i in this.style)this.style.hasOwnProperty(i)&&(n+=Jt.hyphenate(i)+":"+this.style[i]+";");n&&(e=!0,r+=' style="'+Jt.escape(n)+'"');var a=Jt.escape(this.text);return e?(r+=">",r+=a,r+="",r):a}},vl=class{static{o(this,"SvgNode")}constructor(e,r){this.children=void 0,this.attributes=void 0,this.children=e||[],this.attributes=r||{}}toNode(){var e="http://www.w3.org/2000/svg",r=document.createElementNS(e,"svg");for(var n in this.attributes)Object.prototype.hasOwnProperty.call(this.attributes,n)&&r.setAttribute(n,this.attributes[n]);for(var i=0;i':''}},gy=class{static{o(this,"LineNode")}constructor(e){this.attributes=void 0,this.attributes=e||{}}toNode(){var e="http://www.w3.org/2000/svg",r=document.createElementNS(e,"line");for(var n in this.attributes)Object.prototype.hasOwnProperty.call(this.attributes,n)&&r.setAttribute(n,this.attributes[n]);return r}toMarkup(){var e="","\\gt",!0);$(V,re,we,"\u2208","\\in",!0);$(V,re,we,"\uE020","\\@not");$(V,re,we,"\u2282","\\subset",!0);$(V,re,we,"\u2283","\\supset",!0);$(V,re,we,"\u2286","\\subseteq",!0);$(V,re,we,"\u2287","\\supseteq",!0);$(V,be,we,"\u2288","\\nsubseteq",!0);$(V,be,we,"\u2289","\\nsupseteq",!0);$(V,re,we,"\u22A8","\\models");$(V,re,we,"\u2190","\\leftarrow",!0);$(V,re,we,"\u2264","\\le");$(V,re,we,"\u2264","\\leq",!0);$(V,re,we,"<","\\lt",!0);$(V,re,we,"\u2192","\\rightarrow",!0);$(V,re,we,"\u2192","\\to");$(V,be,we,"\u2271","\\ngeq",!0);$(V,be,we,"\u2270","\\nleq",!0);$(V,re,gu,"\xA0","\\ ");$(V,re,gu,"\xA0","\\space");$(V,re,gu,"\xA0","\\nobreakspace");$(it,re,gu,"\xA0","\\ ");$(it,re,gu,"\xA0"," ");$(it,re,gu,"\xA0","\\space");$(it,re,gu,"\xA0","\\nobreakspace");$(V,re,gu,null,"\\nobreak");$(V,re,gu,null,"\\allowbreak");$(V,re,L4,",",",");$(V,re,L4,";",";");$(V,be,Lt,"\u22BC","\\barwedge",!0);$(V,be,Lt,"\u22BB","\\veebar",!0);$(V,re,Lt,"\u2299","\\odot",!0);$(V,re,Lt,"\u2295","\\oplus",!0);$(V,re,Lt,"\u2297","\\otimes",!0);$(V,re,_e,"\u2202","\\partial",!0);$(V,re,Lt,"\u2298","\\oslash",!0);$(V,be,Lt,"\u229A","\\circledcirc",!0);$(V,be,Lt,"\u22A1","\\boxdot",!0);$(V,re,Lt,"\u25B3","\\bigtriangleup");$(V,re,Lt,"\u25BD","\\bigtriangledown");$(V,re,Lt,"\u2020","\\dagger");$(V,re,Lt,"\u22C4","\\diamond");$(V,re,Lt,"\u22C6","\\star");$(V,re,Lt,"\u25C3","\\triangleleft");$(V,re,Lt,"\u25B9","\\triangleright");$(V,re,eo,"{","\\{");$(it,re,_e,"{","\\{");$(it,re,_e,"{","\\textbraceleft");$(V,re,es,"}","\\}");$(it,re,_e,"}","\\}");$(it,re,_e,"}","\\textbraceright");$(V,re,eo,"{","\\lbrace");$(V,re,es,"}","\\rbrace");$(V,re,eo,"[","\\lbrack",!0);$(it,re,_e,"[","\\lbrack",!0);$(V,re,es,"]","\\rbrack",!0);$(it,re,_e,"]","\\rbrack",!0);$(V,re,eo,"(","\\lparen",!0);$(V,re,es,")","\\rparen",!0);$(it,re,_e,"<","\\textless",!0);$(it,re,_e,">","\\textgreater",!0);$(V,re,eo,"\u230A","\\lfloor",!0);$(V,re,es,"\u230B","\\rfloor",!0);$(V,re,eo,"\u2308","\\lceil",!0);$(V,re,es,"\u2309","\\rceil",!0);$(V,re,_e,"\\","\\backslash");$(V,re,_e,"\u2223","|");$(V,re,_e,"\u2223","\\vert");$(it,re,_e,"|","\\textbar",!0);$(V,re,_e,"\u2225","\\|");$(V,re,_e,"\u2225","\\Vert");$(it,re,_e,"\u2225","\\textbardbl");$(it,re,_e,"~","\\textasciitilde");$(it,re,_e,"\\","\\textbackslash");$(it,re,_e,"^","\\textasciicircum");$(V,re,we,"\u2191","\\uparrow",!0);$(V,re,we,"\u21D1","\\Uparrow",!0);$(V,re,we,"\u2193","\\downarrow",!0);$(V,re,we,"\u21D3","\\Downarrow",!0);$(V,re,we,"\u2195","\\updownarrow",!0);$(V,re,we,"\u21D5","\\Updownarrow",!0);$(V,re,Ci,"\u2210","\\coprod");$(V,re,Ci,"\u22C1","\\bigvee");$(V,re,Ci,"\u22C0","\\bigwedge");$(V,re,Ci,"\u2A04","\\biguplus");$(V,re,Ci,"\u22C2","\\bigcap");$(V,re,Ci,"\u22C3","\\bigcup");$(V,re,Ci,"\u222B","\\int");$(V,re,Ci,"\u222B","\\intop");$(V,re,Ci,"\u222C","\\iint");$(V,re,Ci,"\u222D","\\iiint");$(V,re,Ci,"\u220F","\\prod");$(V,re,Ci,"\u2211","\\sum");$(V,re,Ci,"\u2A02","\\bigotimes");$(V,re,Ci,"\u2A01","\\bigoplus");$(V,re,Ci,"\u2A00","\\bigodot");$(V,re,Ci,"\u222E","\\oint");$(V,re,Ci,"\u222F","\\oiint");$(V,re,Ci,"\u2230","\\oiiint");$(V,re,Ci,"\u2A06","\\bigsqcup");$(V,re,Ci,"\u222B","\\smallint");$(it,re,Sp,"\u2026","\\textellipsis");$(V,re,Sp,"\u2026","\\mathellipsis");$(it,re,Sp,"\u2026","\\ldots",!0);$(V,re,Sp,"\u2026","\\ldots",!0);$(V,re,Sp,"\u22EF","\\@cdots",!0);$(V,re,Sp,"\u22F1","\\ddots",!0);$(V,re,_e,"\u22EE","\\varvdots");$(V,re,Un,"\u02CA","\\acute");$(V,re,Un,"\u02CB","\\grave");$(V,re,Un,"\xA8","\\ddot");$(V,re,Un,"~","\\tilde");$(V,re,Un,"\u02C9","\\bar");$(V,re,Un,"\u02D8","\\breve");$(V,re,Un,"\u02C7","\\check");$(V,re,Un,"^","\\hat");$(V,re,Un,"\u20D7","\\vec");$(V,re,Un,"\u02D9","\\dot");$(V,re,Un,"\u02DA","\\mathring");$(V,re,tr,"\uE131","\\@imath");$(V,re,tr,"\uE237","\\@jmath");$(V,re,_e,"\u0131","\u0131");$(V,re,_e,"\u0237","\u0237");$(it,re,_e,"\u0131","\\i",!0);$(it,re,_e,"\u0237","\\j",!0);$(it,re,_e,"\xDF","\\ss",!0);$(it,re,_e,"\xE6","\\ae",!0);$(it,re,_e,"\u0153","\\oe",!0);$(it,re,_e,"\xF8","\\o",!0);$(it,re,_e,"\xC6","\\AE",!0);$(it,re,_e,"\u0152","\\OE",!0);$(it,re,_e,"\xD8","\\O",!0);$(it,re,Un,"\u02CA","\\'");$(it,re,Un,"\u02CB","\\`");$(it,re,Un,"\u02C6","\\^");$(it,re,Un,"\u02DC","\\~");$(it,re,Un,"\u02C9","\\=");$(it,re,Un,"\u02D8","\\u");$(it,re,Un,"\u02D9","\\.");$(it,re,Un,"\xB8","\\c");$(it,re,Un,"\u02DA","\\r");$(it,re,Un,"\u02C7","\\v");$(it,re,Un,"\xA8",'\\"');$(it,re,Un,"\u02DD","\\H");$(it,re,Un,"\u25EF","\\textcircled");zG={"--":!0,"---":!0,"``":!0,"''":!0};$(it,re,_e,"\u2013","--",!0);$(it,re,_e,"\u2013","\\textendash");$(it,re,_e,"\u2014","---",!0);$(it,re,_e,"\u2014","\\textemdash");$(it,re,_e,"\u2018","`",!0);$(it,re,_e,"\u2018","\\textquoteleft");$(it,re,_e,"\u2019","'",!0);$(it,re,_e,"\u2019","\\textquoteright");$(it,re,_e,"\u201C","``",!0);$(it,re,_e,"\u201C","\\textquotedblleft");$(it,re,_e,"\u201D","''",!0);$(it,re,_e,"\u201D","\\textquotedblright");$(V,re,_e,"\xB0","\\degree",!0);$(it,re,_e,"\xB0","\\degree");$(it,re,_e,"\xB0","\\textdegree",!0);$(V,re,_e,"\xA3","\\pounds");$(V,re,_e,"\xA3","\\mathsterling",!0);$(it,re,_e,"\xA3","\\pounds");$(it,re,_e,"\xA3","\\textsterling",!0);$(V,be,_e,"\u2720","\\maltese");$(it,be,_e,"\u2720","\\maltese");oG='0123456789/@."';for(c4=0;c40)return yl(a,h,i,r,s.concat(f));if(u){var d,p;if(u==="boldsymbol"){var m=Bbe(a,i,r,s,n);d=m.fontName,p=[m.fontClass]}else l?(d=VG[u].fontName,p=[u]):(d=p4(u,r.fontWeight,r.fontShape),p=[u,r.fontWeight,r.fontShape]);if(D4(a,d,i).metrics)return yl(a,d,i,r,s.concat(p));if(zG.hasOwnProperty(a)&&d.slice(0,10)==="Typewriter"){for(var g=[],y=0;y{if(yh(t.classes)!==yh(e.classes)||t.skew!==e.skew||t.maxFontSize!==e.maxFontSize)return!1;if(t.classes.length===1){var r=t.classes[0];if(r==="mbin"||r==="mord")return!1}for(var n in t.style)if(t.style.hasOwnProperty(n)&&t.style[n]!==e.style[n])return!1;for(var i in e.style)if(e.style.hasOwnProperty(i)&&t.style[i]!==e.style[i])return!1;return!0},"canCombine"),Gbe=o(t=>{for(var e=0;er&&(r=s.height),s.depth>n&&(n=s.depth),s.maxFontSize>i&&(i=s.maxFontSize)}e.height=r,e.depth=n,e.maxFontSize=i},"sizeElementFromChildren"),Ts=o(function(e,r,n,i){var a=new nd(e,r,n,i);return OC(a),a},"makeSpan"),GG=o((t,e,r,n)=>new nd(t,e,r,n),"makeSvgSpan"),$be=o(function(e,r,n){var i=Ts([e],[],r);return i.height=Math.max(n||r.fontMetrics().defaultRuleThickness,r.minRuleThickness),i.style.borderBottomWidth=gt(i.height),i.maxFontSize=1,i},"makeLineSpan"),Vbe=o(function(e,r,n,i){var a=new my(e,r,n,i);return OC(a),a},"makeAnchor"),$G=o(function(e){var r=new rd(e);return OC(r),r},"makeFragment"),Ube=o(function(e,r){return e instanceof rd?Ts([],[e],r):e},"wrapFragment"),Hbe=o(function(e){if(e.positionType==="individualShift"){for(var r=e.children,n=[r[0]],i=-r[0].shift-r[0].elem.depth,a=i,s=1;s{var r=Ts(["mspace"],[],e),n=Jn(t,e);return r.style.marginRight=gt(n),r},"makeGlue"),p4=o(function(e,r,n){var i="";switch(e){case"amsrm":i="AMS";break;case"textrm":i="Main";break;case"textsf":i="SansSerif";break;case"texttt":i="Typewriter";break;default:i=e}var a;return r==="textbf"&&n==="textit"?a="BoldItalic":r==="textbf"?a="Bold":r==="textit"?a="Italic":a="Regular",i+"-"+a},"retrieveTextFontName"),VG={mathbf:{variant:"bold",fontName:"Main-Bold"},mathrm:{variant:"normal",fontName:"Main-Regular"},textit:{variant:"italic",fontName:"Main-Italic"},mathit:{variant:"italic",fontName:"Main-Italic"},mathnormal:{variant:"italic",fontName:"Math-Italic"},mathbb:{variant:"double-struck",fontName:"AMS-Regular"},mathcal:{variant:"script",fontName:"Caligraphic-Regular"},mathfrak:{variant:"fraktur",fontName:"Fraktur-Regular"},mathscr:{variant:"script",fontName:"Script-Regular"},mathsf:{variant:"sans-serif",fontName:"SansSerif-Regular"},mathtt:{variant:"monospace",fontName:"Typewriter-Regular"}},UG={vec:["vec",.471,.714],oiintSize1:["oiintSize1",.957,.499],oiintSize2:["oiintSize2",1.472,.659],oiiintSize1:["oiiintSize1",1.304,.499],oiiintSize2:["oiiintSize2",1.98,.659]},qbe=o(function(e,r){var[n,i,a]=UG[e],s=new cc(n),l=new vl([s],{width:gt(i),height:gt(a),style:"width:"+gt(i),viewBox:"0 0 "+1e3*i+" "+1e3*a,preserveAspectRatio:"xMinYMin"}),u=GG(["overlay"],[l],r);return u.height=a,u.style.height=gt(a),u.style.width=gt(i),u},"staticSvg"),Fe={fontMap:VG,makeSymbol:yl,mathsym:Pbe,makeSpan:Ts,makeSvgSpan:GG,makeLineSpan:$be,makeAnchor:Vbe,makeFragment:$G,wrapFragment:Ube,makeVList:Wbe,makeOrd:Fbe,makeGlue:Ybe,staticSvg:qbe,svgData:UG,tryCombineChars:Gbe},Zn={number:3,unit:"mu"},ed={number:4,unit:"mu"},hu={number:5,unit:"mu"},Xbe={mord:{mop:Zn,mbin:ed,mrel:hu,minner:Zn},mop:{mord:Zn,mop:Zn,mrel:hu,minner:Zn},mbin:{mord:ed,mop:ed,mopen:ed,minner:ed},mrel:{mord:hu,mop:hu,mopen:hu,minner:hu},mopen:{},mclose:{mop:Zn,mbin:ed,mrel:hu,minner:Zn},mpunct:{mord:Zn,mop:Zn,mrel:hu,mopen:Zn,mclose:Zn,mpunct:Zn,minner:Zn},minner:{mord:Zn,mop:Zn,mbin:ed,mrel:hu,mopen:Zn,mpunct:Zn,minner:Zn}},jbe={mord:{mop:Zn},mop:{mord:Zn,mop:Zn},mbin:{},mrel:{},mopen:{},mclose:{mop:Zn},mpunct:{},minner:{mop:Zn}},HG={},E4={},S4={};o(St,"defineFunction");o(id,"defineFunctionBuilders");C4=o(function(e){return e.type==="ordgroup"&&e.body.length===1?e.body[0]:e},"normalizeArgument"),gi=o(function(e){return e.type==="ordgroup"?e.body:[e]},"ordargument"),pu=Fe.makeSpan,Kbe=["leftmost","mbin","mopen","mrel","mop","mpunct"],Qbe=["rightmost","mrel","mclose","mpunct"],Zbe={display:rr.DISPLAY,text:rr.TEXT,script:rr.SCRIPT,scriptscript:rr.SCRIPTSCRIPT},Jbe={mord:"mord",mop:"mop",mbin:"mbin",mrel:"mrel",mopen:"mopen",mclose:"mclose",mpunct:"mpunct",minner:"minner"},Fi=o(function(e,r,n,i){i===void 0&&(i=[null,null]);for(var a=[],s=0;s{var v=y.classes[0],x=g.classes[0];v==="mbin"&&Jt.contains(Qbe,x)?y.classes[0]="mord":x==="mbin"&&Jt.contains(Kbe,v)&&(g.classes[0]="mord")},{node:d},p,m),uG(a,(g,y)=>{var v=SC(y),x=SC(g),b=v&&x?g.hasClass("mtight")?jbe[v][x]:Xbe[v][x]:null;if(b)return Fe.makeGlue(b,h)},{node:d},p,m),a},"buildExpression"),uG=o(function t(e,r,n,i,a){i&&e.push(i);for(var s=0;sp=>{e.splice(d+1,0,p),s++})(s)}i&&e.pop()},"traverseNonSpaceNodes"),WG=o(function(e){return e instanceof rd||e instanceof my||e instanceof nd&&e.hasClass("enclosing")?e:null},"checkPartialGroup"),e4e=o(function t(e,r){var n=WG(e);if(n){var i=n.children;if(i.length){if(r==="right")return t(i[i.length-1],"right");if(r==="left")return t(i[0],"left")}}return e},"getOutermostNode"),SC=o(function(e,r){return e?(r&&(e=e4e(e,r)),Jbe[e.classes[0]]||null):null},"getTypeOfDomTree"),yy=o(function(e,r){var n=["nulldelimiter"].concat(e.baseSizingClasses());return pu(r.concat(n))},"makeNullDelimiter"),Pr=o(function(e,r,n){if(!e)return pu();if(E4[e.type]){var i=E4[e.type](e,r);if(n&&r.size!==n.size){i=pu(r.sizingClasses(n),[i],r);var a=r.sizeMultiplier/n.sizeMultiplier;i.height*=a,i.depth*=a}return i}else throw new lt("Got group of unknown type: '"+e.type+"'")},"buildGroup");o(m4,"buildHTMLUnbreakable");o(CC,"buildHTML");o(YG,"newDocumentFragment");ks=class{static{o(this,"MathNode")}constructor(e,r,n){this.type=void 0,this.attributes=void 0,this.children=void 0,this.classes=void 0,this.type=e,this.attributes={},this.children=r||[],this.classes=n||[]}setAttribute(e,r){this.attributes[e]=r}getAttribute(e){return this.attributes[e]}toNode(){var e=document.createElementNS("http://www.w3.org/1998/Math/MathML",this.type);for(var r in this.attributes)Object.prototype.hasOwnProperty.call(this.attributes,r)&&e.setAttribute(r,this.attributes[r]);this.classes.length>0&&(e.className=yh(this.classes));for(var n=0;n0&&(e+=' class ="'+Jt.escape(yh(this.classes))+'"'),e+=">";for(var n=0;n",e}toText(){return this.children.map(e=>e.toText()).join("")}},td=class{static{o(this,"TextNode")}constructor(e){this.text=void 0,this.text=e}toNode(){return document.createTextNode(this.text)}toMarkup(){return Jt.escape(this.toText())}toText(){return this.text}},AC=class{static{o(this,"SpaceNode")}constructor(e){this.width=void 0,this.character=void 0,this.width=e,e>=.05555&&e<=.05556?this.character="\u200A":e>=.1666&&e<=.1667?this.character="\u2009":e>=.2222&&e<=.2223?this.character="\u2005":e>=.2777&&e<=.2778?this.character="\u2005\u200A":e>=-.05556&&e<=-.05555?this.character="\u200A\u2063":e>=-.1667&&e<=-.1666?this.character="\u2009\u2063":e>=-.2223&&e<=-.2222?this.character="\u205F\u2063":e>=-.2778&&e<=-.2777?this.character="\u2005\u2063":this.character=null}toNode(){if(this.character)return document.createTextNode(this.character);var e=document.createElementNS("http://www.w3.org/1998/Math/MathML","mspace");return e.setAttribute("width",gt(this.width)),e}toMarkup(){return this.character?""+this.character+"":''}toText(){return this.character?this.character:" "}},at={MathNode:ks,TextNode:td,SpaceNode:AC,newDocumentFragment:YG},Mo=o(function(e,r,n){return Cn[r][e]&&Cn[r][e].replace&&e.charCodeAt(0)!==55349&&!(zG.hasOwnProperty(e)&&n&&(n.fontFamily&&n.fontFamily.slice(4,6)==="tt"||n.font&&n.font.slice(4,6)==="tt"))&&(e=Cn[r][e].replace),new at.TextNode(e)},"makeText"),PC=o(function(e){return e.length===1?e[0]:new at.MathNode("mrow",e)},"makeRow"),BC=o(function(e,r){if(r.fontFamily==="texttt")return"monospace";if(r.fontFamily==="textsf")return r.fontShape==="textit"&&r.fontWeight==="textbf"?"sans-serif-bold-italic":r.fontShape==="textit"?"sans-serif-italic":r.fontWeight==="textbf"?"bold-sans-serif":"sans-serif";if(r.fontShape==="textit"&&r.fontWeight==="textbf")return"bold-italic";if(r.fontShape==="textit")return"italic";if(r.fontWeight==="textbf")return"bold";var n=r.font;if(!n||n==="mathnormal")return null;var i=e.mode;if(n==="mathit")return"italic";if(n==="boldsymbol")return e.type==="textord"?"bold":"bold-italic";if(n==="mathbf")return"bold";if(n==="mathbb")return"double-struck";if(n==="mathfrak")return"fraktur";if(n==="mathscr"||n==="mathcal")return"script";if(n==="mathsf")return"sans-serif";if(n==="mathtt")return"monospace";var a=e.text;if(Jt.contains(["\\imath","\\jmath"],a))return null;Cn[i][a]&&Cn[i][a].replace&&(a=Cn[i][a].replace);var s=Fe.fontMap[n].fontName;return IC(a,s,i)?Fe.fontMap[n].variant:null},"getVariant"),Ss=o(function(e,r,n){if(e.length===1){var i=yn(e[0],r);return n&&i instanceof ks&&i.type==="mo"&&(i.setAttribute("lspace","0em"),i.setAttribute("rspace","0em")),[i]}for(var a=[],s,l=0;l0&&(d.text=d.text.slice(0,1)+"\u0338"+d.text.slice(1),a.pop())}}}a.push(u),s=u}return a},"buildExpression"),vh=o(function(e,r,n){return PC(Ss(e,r,n))},"buildExpressionRow"),yn=o(function(e,r){if(!e)return new at.MathNode("mrow");if(S4[e.type]){var n=S4[e.type](e,r);return n}else throw new lt("Got group of unknown type: '"+e.type+"'")},"buildGroup");o(hG,"buildMathML");qG=o(function(e){return new T4({style:e.displayMode?rr.DISPLAY:rr.TEXT,maxSize:e.maxSize,minRuleThickness:e.minRuleThickness})},"optionsFromSettings"),XG=o(function(e,r){if(r.displayMode){var n=["katex-display"];r.leqno&&n.push("leqno"),r.fleqn&&n.push("fleqn"),e=Fe.makeSpan(n,[e])}return e},"displayWrap"),t4e=o(function(e,r,n){var i=qG(n),a;if(n.output==="mathml")return hG(e,r,i,n.displayMode,!0);if(n.output==="html"){var s=CC(e,i);a=Fe.makeSpan(["katex"],[s])}else{var l=hG(e,r,i,n.displayMode,!1),u=CC(e,i);a=Fe.makeSpan(["katex"],[l,u])}return XG(a,n)},"buildTree"),r4e=o(function(e,r,n){var i=qG(n),a=CC(e,i),s=Fe.makeSpan(["katex"],[a]);return XG(s,n)},"buildHTMLTree"),n4e={widehat:"^",widecheck:"\u02C7",widetilde:"~",utilde:"~",overleftarrow:"\u2190",underleftarrow:"\u2190",xleftarrow:"\u2190",overrightarrow:"\u2192",underrightarrow:"\u2192",xrightarrow:"\u2192",underbrace:"\u23DF",overbrace:"\u23DE",overgroup:"\u23E0",undergroup:"\u23E1",overleftrightarrow:"\u2194",underleftrightarrow:"\u2194",xleftrightarrow:"\u2194",Overrightarrow:"\u21D2",xRightarrow:"\u21D2",overleftharpoon:"\u21BC",xleftharpoonup:"\u21BC",overrightharpoon:"\u21C0",xrightharpoonup:"\u21C0",xLeftarrow:"\u21D0",xLeftrightarrow:"\u21D4",xhookleftarrow:"\u21A9",xhookrightarrow:"\u21AA",xmapsto:"\u21A6",xrightharpoondown:"\u21C1",xleftharpoondown:"\u21BD",xrightleftharpoons:"\u21CC",xleftrightharpoons:"\u21CB",xtwoheadleftarrow:"\u219E",xtwoheadrightarrow:"\u21A0",xlongequal:"=",xtofrom:"\u21C4",xrightleftarrows:"\u21C4",xrightequilibrium:"\u21CC",xleftequilibrium:"\u21CB","\\cdrightarrow":"\u2192","\\cdleftarrow":"\u2190","\\cdlongequal":"="},i4e=o(function(e){var r=new at.MathNode("mo",[new at.TextNode(n4e[e.replace(/^\\/,"")])]);return r.setAttribute("stretchy","true"),r},"mathMLnode"),a4e={overrightarrow:[["rightarrow"],.888,522,"xMaxYMin"],overleftarrow:[["leftarrow"],.888,522,"xMinYMin"],underrightarrow:[["rightarrow"],.888,522,"xMaxYMin"],underleftarrow:[["leftarrow"],.888,522,"xMinYMin"],xrightarrow:[["rightarrow"],1.469,522,"xMaxYMin"],"\\cdrightarrow":[["rightarrow"],3,522,"xMaxYMin"],xleftarrow:[["leftarrow"],1.469,522,"xMinYMin"],"\\cdleftarrow":[["leftarrow"],3,522,"xMinYMin"],Overrightarrow:[["doublerightarrow"],.888,560,"xMaxYMin"],xRightarrow:[["doublerightarrow"],1.526,560,"xMaxYMin"],xLeftarrow:[["doubleleftarrow"],1.526,560,"xMinYMin"],overleftharpoon:[["leftharpoon"],.888,522,"xMinYMin"],xleftharpoonup:[["leftharpoon"],.888,522,"xMinYMin"],xleftharpoondown:[["leftharpoondown"],.888,522,"xMinYMin"],overrightharpoon:[["rightharpoon"],.888,522,"xMaxYMin"],xrightharpoonup:[["rightharpoon"],.888,522,"xMaxYMin"],xrightharpoondown:[["rightharpoondown"],.888,522,"xMaxYMin"],xlongequal:[["longequal"],.888,334,"xMinYMin"],"\\cdlongequal":[["longequal"],3,334,"xMinYMin"],xtwoheadleftarrow:[["twoheadleftarrow"],.888,334,"xMinYMin"],xtwoheadrightarrow:[["twoheadrightarrow"],.888,334,"xMaxYMin"],overleftrightarrow:[["leftarrow","rightarrow"],.888,522],overbrace:[["leftbrace","midbrace","rightbrace"],1.6,548],underbrace:[["leftbraceunder","midbraceunder","rightbraceunder"],1.6,548],underleftrightarrow:[["leftarrow","rightarrow"],.888,522],xleftrightarrow:[["leftarrow","rightarrow"],1.75,522],xLeftrightarrow:[["doubleleftarrow","doublerightarrow"],1.75,560],xrightleftharpoons:[["leftharpoondownplus","rightharpoonplus"],1.75,716],xleftrightharpoons:[["leftharpoonplus","rightharpoondownplus"],1.75,716],xhookleftarrow:[["leftarrow","righthook"],1.08,522],xhookrightarrow:[["lefthook","rightarrow"],1.08,522],overlinesegment:[["leftlinesegment","rightlinesegment"],.888,522],underlinesegment:[["leftlinesegment","rightlinesegment"],.888,522],overgroup:[["leftgroup","rightgroup"],.888,342],undergroup:[["leftgroupunder","rightgroupunder"],.888,342],xmapsto:[["leftmapsto","rightarrow"],1.5,522],xtofrom:[["leftToFrom","rightToFrom"],1.75,528],xrightleftarrows:[["baraboveleftarrow","rightarrowabovebar"],1.75,901],xrightequilibrium:[["baraboveshortleftharpoon","rightharpoonaboveshortbar"],1.75,716],xleftequilibrium:[["shortbaraboveleftharpoon","shortrightharpoonabovebar"],1.75,716]},s4e=o(function(e){return e.type==="ordgroup"?e.body.length:1},"groupLength"),o4e=o(function(e,r){function n(){var l=4e5,u=e.label.slice(1);if(Jt.contains(["widehat","widecheck","widetilde","utilde"],u)){var h=e,f=s4e(h.base),d,p,m;if(f>5)u==="widehat"||u==="widecheck"?(d=420,l=2364,m=.42,p=u+"4"):(d=312,l=2340,m=.34,p="tilde4");else{var g=[1,1,2,2,3,3][f];u==="widehat"||u==="widecheck"?(l=[0,1062,2364,2364,2364][g],d=[0,239,300,360,420][g],m=[0,.24,.3,.3,.36,.42][g],p=u+g):(l=[0,600,1033,2339,2340][g],d=[0,260,286,306,312][g],m=[0,.26,.286,.3,.306,.34][g],p="tilde"+g)}var y=new cc(p),v=new vl([y],{width:"100%",height:gt(m),viewBox:"0 0 "+l+" "+d,preserveAspectRatio:"none"});return{span:Fe.makeSvgSpan([],[v],r),minWidth:0,height:m}}else{var x=[],b=a4e[u],[w,_,T]=b,E=T/1e3,L=w.length,S,A;if(L===1){var I=b[3];S=["hide-tail"],A=[I]}else if(L===2)S=["halfarrow-left","halfarrow-right"],A=["xMinYMin","xMaxYMin"];else if(L===3)S=["brace-left","brace-center","brace-right"],A=["xMinYMin","xMidYMin","xMaxYMin"];else throw new Error(`Correct katexImagesData or update code here to support + `+L+" children.");for(var D=0;D0&&(i.style.minWidth=gt(a)),i},"svgSpan"),l4e=o(function(e,r,n,i,a){var s,l=e.height+e.depth+n+i;if(/fbox|color|angl/.test(r)){if(s=Fe.makeSpan(["stretchy",r],[],a),r==="fbox"){var u=a.color&&a.getColor();u&&(s.style.borderColor=u)}}else{var h=[];/^[bx]cancel$/.test(r)&&h.push(new gy({x1:"0",y1:"0",x2:"100%",y2:"100%","stroke-width":"0.046em"})),/^x?cancel$/.test(r)&&h.push(new gy({x1:"0",y1:"100%",x2:"100%",y2:"0","stroke-width":"0.046em"}));var f=new vl(h,{width:"100%",height:gt(l)});s=Fe.makeSvgSpan([],[f],a)}return s.height=l,s.style.height=gt(l),s},"encloseSpan"),mu={encloseSpan:l4e,mathMLnode:i4e,svgSpan:o4e};o(gr,"assertNodeType");o(FC,"assertSymbolNodeType");o(N4,"checkSymbolNodeType");zC=o((t,e)=>{var r,n,i;t&&t.type==="supsub"?(n=gr(t.base,"accent"),r=n.base,t.base=r,i=Rbe(Pr(t,e)),t.base=n):(n=gr(t,"accent"),r=n.base);var a=Pr(r,e.havingCrampedStyle()),s=n.isShifty&&Jt.isCharacterBox(r),l=0;if(s){var u=Jt.getBaseElem(r),h=Pr(u,e.havingCrampedStyle());l=sG(h).skew}var f=n.label==="\\c",d=f?a.height+a.depth:Math.min(a.height,e.fontMetrics().xHeight),p;if(n.isStretchy)p=mu.svgSpan(n,e),p=Fe.makeVList({positionType:"firstBaseline",children:[{type:"elem",elem:a},{type:"elem",elem:p,wrapperClasses:["svg-align"],wrapperStyle:l>0?{width:"calc(100% - "+gt(2*l)+")",marginLeft:gt(2*l)}:void 0}]},e);else{var m,g;n.label==="\\vec"?(m=Fe.staticSvg("vec",e),g=Fe.svgData.vec[1]):(m=Fe.makeOrd({mode:n.mode,text:n.label},e,"textord"),m=sG(m),m.italic=0,g=m.width,f&&(d+=m.depth)),p=Fe.makeSpan(["accent-body"],[m]);var y=n.label==="\\textcircled";y&&(p.classes.push("accent-full"),d=a.height);var v=l;y||(v-=g/2),p.style.left=gt(v),n.label==="\\textcircled"&&(p.style.top=".2em"),p=Fe.makeVList({positionType:"firstBaseline",children:[{type:"elem",elem:a},{type:"kern",size:-d},{type:"elem",elem:p}]},e)}var x=Fe.makeSpan(["mord","accent"],[p],e);return i?(i.children[0]=x,i.height=Math.max(x.height,i.height),i.classes[0]="mord",i):x},"htmlBuilder$a"),jG=o((t,e)=>{var r=t.isStretchy?mu.mathMLnode(t.label):new at.MathNode("mo",[Mo(t.label,t.mode)]),n=new at.MathNode("mover",[yn(t.base,e),r]);return n.setAttribute("accent","true"),n},"mathmlBuilder$9"),c4e=new RegExp(["\\acute","\\grave","\\ddot","\\tilde","\\bar","\\breve","\\check","\\hat","\\vec","\\dot","\\mathring"].map(t=>"\\"+t).join("|"));St({type:"accent",names:["\\acute","\\grave","\\ddot","\\tilde","\\bar","\\breve","\\check","\\hat","\\vec","\\dot","\\mathring","\\widecheck","\\widehat","\\widetilde","\\overrightarrow","\\overleftarrow","\\Overrightarrow","\\overleftrightarrow","\\overgroup","\\overlinesegment","\\overleftharpoon","\\overrightharpoon"],props:{numArgs:1},handler:o((t,e)=>{var r=C4(e[0]),n=!c4e.test(t.funcName),i=!n||t.funcName==="\\widehat"||t.funcName==="\\widetilde"||t.funcName==="\\widecheck";return{type:"accent",mode:t.parser.mode,label:t.funcName,isStretchy:n,isShifty:i,base:r}},"handler"),htmlBuilder:zC,mathmlBuilder:jG});St({type:"accent",names:["\\'","\\`","\\^","\\~","\\=","\\u","\\.",'\\"',"\\c","\\r","\\H","\\v","\\textcircled"],props:{numArgs:1,allowedInText:!0,allowedInMath:!0,argTypes:["primitive"]},handler:o((t,e)=>{var r=e[0],n=t.parser.mode;return n==="math"&&(t.parser.settings.reportNonstrict("mathVsTextAccents","LaTeX's accent "+t.funcName+" works only in text mode"),n="text"),{type:"accent",mode:n,label:t.funcName,isStretchy:!1,isShifty:!0,base:r}},"handler"),htmlBuilder:zC,mathmlBuilder:jG});St({type:"accentUnder",names:["\\underleftarrow","\\underrightarrow","\\underleftrightarrow","\\undergroup","\\underlinesegment","\\utilde"],props:{numArgs:1},handler:o((t,e)=>{var{parser:r,funcName:n}=t,i=e[0];return{type:"accentUnder",mode:r.mode,label:n,base:i}},"handler"),htmlBuilder:o((t,e)=>{var r=Pr(t.base,e),n=mu.svgSpan(t,e),i=t.label==="\\utilde"?.12:0,a=Fe.makeVList({positionType:"top",positionData:r.height,children:[{type:"elem",elem:n,wrapperClasses:["svg-align"]},{type:"kern",size:i},{type:"elem",elem:r}]},e);return Fe.makeSpan(["mord","accentunder"],[a],e)},"htmlBuilder"),mathmlBuilder:o((t,e)=>{var r=mu.mathMLnode(t.label),n=new at.MathNode("munder",[yn(t.base,e),r]);return n.setAttribute("accentunder","true"),n},"mathmlBuilder")});g4=o(t=>{var e=new at.MathNode("mpadded",t?[t]:[]);return e.setAttribute("width","+0.6em"),e.setAttribute("lspace","0.3em"),e},"paddedNode");St({type:"xArrow",names:["\\xleftarrow","\\xrightarrow","\\xLeftarrow","\\xRightarrow","\\xleftrightarrow","\\xLeftrightarrow","\\xhookleftarrow","\\xhookrightarrow","\\xmapsto","\\xrightharpoondown","\\xrightharpoonup","\\xleftharpoondown","\\xleftharpoonup","\\xrightleftharpoons","\\xleftrightharpoons","\\xlongequal","\\xtwoheadrightarrow","\\xtwoheadleftarrow","\\xtofrom","\\xrightleftarrows","\\xrightequilibrium","\\xleftequilibrium","\\\\cdrightarrow","\\\\cdleftarrow","\\\\cdlongequal"],props:{numArgs:1,numOptionalArgs:1},handler(t,e,r){var{parser:n,funcName:i}=t;return{type:"xArrow",mode:n.mode,label:i,body:e[0],below:r[0]}},htmlBuilder(t,e){var r=e.style,n=e.havingStyle(r.sup()),i=Fe.wrapFragment(Pr(t.body,n,e),e),a=t.label.slice(0,2)==="\\x"?"x":"cd";i.classes.push(a+"-arrow-pad");var s;t.below&&(n=e.havingStyle(r.sub()),s=Fe.wrapFragment(Pr(t.below,n,e),e),s.classes.push(a+"-arrow-pad"));var l=mu.svgSpan(t,e),u=-e.fontMetrics().axisHeight+.5*l.height,h=-e.fontMetrics().axisHeight-.5*l.height-.111;(i.depth>.25||t.label==="\\xleftequilibrium")&&(h-=i.depth);var f;if(s){var d=-e.fontMetrics().axisHeight+s.height+.5*l.height+.111;f=Fe.makeVList({positionType:"individualShift",children:[{type:"elem",elem:i,shift:h},{type:"elem",elem:l,shift:u},{type:"elem",elem:s,shift:d}]},e)}else f=Fe.makeVList({positionType:"individualShift",children:[{type:"elem",elem:i,shift:h},{type:"elem",elem:l,shift:u}]},e);return f.children[0].children[0].children[1].classes.push("svg-align"),Fe.makeSpan(["mrel","x-arrow"],[f],e)},mathmlBuilder(t,e){var r=mu.mathMLnode(t.label);r.setAttribute("minsize",t.label.charAt(0)==="x"?"1.75em":"3.0em");var n;if(t.body){var i=g4(yn(t.body,e));if(t.below){var a=g4(yn(t.below,e));n=new at.MathNode("munderover",[r,a,i])}else n=new at.MathNode("mover",[r,i])}else if(t.below){var s=g4(yn(t.below,e));n=new at.MathNode("munder",[r,s])}else n=g4(),n=new at.MathNode("mover",[r,n]);return n}});u4e=Fe.makeSpan;o(KG,"htmlBuilder$9");o(QG,"mathmlBuilder$8");St({type:"mclass",names:["\\mathord","\\mathbin","\\mathrel","\\mathopen","\\mathclose","\\mathpunct","\\mathinner"],props:{numArgs:1,primitive:!0},handler(t,e){var{parser:r,funcName:n}=t,i=e[0];return{type:"mclass",mode:r.mode,mclass:"m"+n.slice(5),body:gi(i),isCharacterBox:Jt.isCharacterBox(i)}},htmlBuilder:KG,mathmlBuilder:QG});R4=o(t=>{var e=t.type==="ordgroup"&&t.body.length?t.body[0]:t;return e.type==="atom"&&(e.family==="bin"||e.family==="rel")?"m"+e.family:"mord"},"binrelClass");St({type:"mclass",names:["\\@binrel"],props:{numArgs:2},handler(t,e){var{parser:r}=t;return{type:"mclass",mode:r.mode,mclass:R4(e[0]),body:gi(e[1]),isCharacterBox:Jt.isCharacterBox(e[1])}}});St({type:"mclass",names:["\\stackrel","\\overset","\\underset"],props:{numArgs:2},handler(t,e){var{parser:r,funcName:n}=t,i=e[1],a=e[0],s;n!=="\\stackrel"?s=R4(i):s="mrel";var l={type:"op",mode:i.mode,limits:!0,alwaysHandleSupSub:!0,parentIsSupSub:!1,symbol:!1,suppressBaseShift:n!=="\\stackrel",body:gi(i)},u={type:"supsub",mode:a.mode,base:l,sup:n==="\\underset"?null:a,sub:n==="\\underset"?a:null};return{type:"mclass",mode:r.mode,mclass:s,body:[u],isCharacterBox:Jt.isCharacterBox(u)}},htmlBuilder:KG,mathmlBuilder:QG});St({type:"pmb",names:["\\pmb"],props:{numArgs:1,allowedInText:!0},handler(t,e){var{parser:r}=t;return{type:"pmb",mode:r.mode,mclass:R4(e[0]),body:gi(e[0])}},htmlBuilder(t,e){var r=Fi(t.body,e,!0),n=Fe.makeSpan([t.mclass],r,e);return n.style.textShadow="0.02em 0.01em 0.04px",n},mathmlBuilder(t,e){var r=Ss(t.body,e),n=new at.MathNode("mstyle",r);return n.setAttribute("style","text-shadow: 0.02em 0.01em 0.04px"),n}});h4e={">":"\\\\cdrightarrow","<":"\\\\cdleftarrow","=":"\\\\cdlongequal",A:"\\uparrow",V:"\\downarrow","|":"\\Vert",".":"no arrow"},fG=o(()=>({type:"styling",body:[],mode:"math",style:"display"}),"newCell"),dG=o(t=>t.type==="textord"&&t.text==="@","isStartOfArrow"),f4e=o((t,e)=>(t.type==="mathord"||t.type==="atom")&&t.text===e,"isLabelEnd");o(d4e,"cdArrow");o(p4e,"parseCD");St({type:"cdlabel",names:["\\\\cdleft","\\\\cdright"],props:{numArgs:1},handler(t,e){var{parser:r,funcName:n}=t;return{type:"cdlabel",mode:r.mode,side:n.slice(4),label:e[0]}},htmlBuilder(t,e){var r=e.havingStyle(e.style.sup()),n=Fe.wrapFragment(Pr(t.label,r,e),e);return n.classes.push("cd-label-"+t.side),n.style.bottom=gt(.8-n.depth),n.height=0,n.depth=0,n},mathmlBuilder(t,e){var r=new at.MathNode("mrow",[yn(t.label,e)]);return r=new at.MathNode("mpadded",[r]),r.setAttribute("width","0"),t.side==="left"&&r.setAttribute("lspace","-1width"),r.setAttribute("voffset","0.7em"),r=new at.MathNode("mstyle",[r]),r.setAttribute("displaystyle","false"),r.setAttribute("scriptlevel","1"),r}});St({type:"cdlabelparent",names:["\\\\cdparent"],props:{numArgs:1},handler(t,e){var{parser:r}=t;return{type:"cdlabelparent",mode:r.mode,fragment:e[0]}},htmlBuilder(t,e){var r=Fe.wrapFragment(Pr(t.fragment,e),e);return r.classes.push("cd-vert-arrow"),r},mathmlBuilder(t,e){return new at.MathNode("mrow",[yn(t.fragment,e)])}});St({type:"textord",names:["\\@char"],props:{numArgs:1,allowedInText:!0},handler(t,e){for(var{parser:r}=t,n=gr(e[0],"ordgroup"),i=n.body,a="",s=0;s=1114111)throw new lt("\\@char with invalid code point "+a);return u<=65535?h=String.fromCharCode(u):(u-=65536,h=String.fromCharCode((u>>10)+55296,(u&1023)+56320)),{type:"textord",mode:r.mode,text:h}}});ZG=o((t,e)=>{var r=Fi(t.body,e.withColor(t.color),!1);return Fe.makeFragment(r)},"htmlBuilder$8"),JG=o((t,e)=>{var r=Ss(t.body,e.withColor(t.color)),n=new at.MathNode("mstyle",r);return n.setAttribute("mathcolor",t.color),n},"mathmlBuilder$7");St({type:"color",names:["\\textcolor"],props:{numArgs:2,allowedInText:!0,argTypes:["color","original"]},handler(t,e){var{parser:r}=t,n=gr(e[0],"color-token").color,i=e[1];return{type:"color",mode:r.mode,color:n,body:gi(i)}},htmlBuilder:ZG,mathmlBuilder:JG});St({type:"color",names:["\\color"],props:{numArgs:1,allowedInText:!0,argTypes:["color"]},handler(t,e){var{parser:r,breakOnTokenText:n}=t,i=gr(e[0],"color-token").color;r.gullet.macros.set("\\current@color",i);var a=r.parseExpression(!0,n);return{type:"color",mode:r.mode,color:i,body:a}},htmlBuilder:ZG,mathmlBuilder:JG});St({type:"cr",names:["\\\\"],props:{numArgs:0,numOptionalArgs:0,allowedInText:!0},handler(t,e,r){var{parser:n}=t,i=n.gullet.future().text==="["?n.parseSizeGroup(!0):null,a=!n.settings.displayMode||!n.settings.useStrictBehavior("newLineInDisplayMode","In LaTeX, \\\\ or \\newline does nothing in display mode");return{type:"cr",mode:n.mode,newLine:a,size:i&&gr(i,"size").value}},htmlBuilder(t,e){var r=Fe.makeSpan(["mspace"],[],e);return t.newLine&&(r.classes.push("newline"),t.size&&(r.style.marginTop=gt(Jn(t.size,e)))),r},mathmlBuilder(t,e){var r=new at.MathNode("mspace");return t.newLine&&(r.setAttribute("linebreak","newline"),t.size&&r.setAttribute("height",gt(Jn(t.size,e)))),r}});_C={"\\global":"\\global","\\long":"\\\\globallong","\\\\globallong":"\\\\globallong","\\def":"\\gdef","\\gdef":"\\gdef","\\edef":"\\xdef","\\xdef":"\\xdef","\\let":"\\\\globallet","\\futurelet":"\\\\globalfuture"},e$=o(t=>{var e=t.text;if(/^(?:[\\{}$&#^_]|EOF)$/.test(e))throw new lt("Expected a control sequence",t);return e},"checkControlSequence"),m4e=o(t=>{var e=t.gullet.popToken();return e.text==="="&&(e=t.gullet.popToken(),e.text===" "&&(e=t.gullet.popToken())),e},"getRHS"),t$=o((t,e,r,n)=>{var i=t.gullet.macros.get(r.text);i==null&&(r.noexpand=!0,i={tokens:[r],numArgs:0,unexpandable:!t.gullet.isExpandable(r.text)}),t.gullet.macros.set(e,i,n)},"letCommand");St({type:"internal",names:["\\global","\\long","\\\\globallong"],props:{numArgs:0,allowedInText:!0},handler(t){var{parser:e,funcName:r}=t;e.consumeSpaces();var n=e.fetch();if(_C[n.text])return(r==="\\global"||r==="\\\\globallong")&&(n.text=_C[n.text]),gr(e.parseFunction(),"internal");throw new lt("Invalid token after macro prefix",n)}});St({type:"internal",names:["\\def","\\gdef","\\edef","\\xdef"],props:{numArgs:0,allowedInText:!0,primitive:!0},handler(t){var{parser:e,funcName:r}=t,n=e.gullet.popToken(),i=n.text;if(/^(?:[\\{}$&#^_]|EOF)$/.test(i))throw new lt("Expected a control sequence",n);for(var a=0,s,l=[[]];e.gullet.future().text!=="{";)if(n=e.gullet.popToken(),n.text==="#"){if(e.gullet.future().text==="{"){s=e.gullet.future(),l[a].push("{");break}if(n=e.gullet.popToken(),!/^[1-9]$/.test(n.text))throw new lt('Invalid argument number "'+n.text+'"');if(parseInt(n.text)!==a+1)throw new lt('Argument number "'+n.text+'" out of order');a++,l.push([])}else{if(n.text==="EOF")throw new lt("Expected a macro definition");l[a].push(n.text)}var{tokens:u}=e.gullet.consumeArg();return s&&u.unshift(s),(r==="\\edef"||r==="\\xdef")&&(u=e.gullet.expandTokens(u),u.reverse()),e.gullet.macros.set(i,{tokens:u,numArgs:a,delimiters:l},r===_C[r]),{type:"internal",mode:e.mode}}});St({type:"internal",names:["\\let","\\\\globallet"],props:{numArgs:0,allowedInText:!0,primitive:!0},handler(t){var{parser:e,funcName:r}=t,n=e$(e.gullet.popToken());e.gullet.consumeSpaces();var i=m4e(e);return t$(e,n,i,r==="\\\\globallet"),{type:"internal",mode:e.mode}}});St({type:"internal",names:["\\futurelet","\\\\globalfuture"],props:{numArgs:0,allowedInText:!0,primitive:!0},handler(t){var{parser:e,funcName:r}=t,n=e$(e.gullet.popToken()),i=e.gullet.popToken(),a=e.gullet.popToken();return t$(e,n,a,r==="\\\\globalfuture"),e.gullet.pushToken(a),e.gullet.pushToken(i),{type:"internal",mode:e.mode}}});hy=o(function(e,r,n){var i=Cn.math[e]&&Cn.math[e].replace,a=IC(i||e,r,n);if(!a)throw new Error("Unsupported symbol "+e+" and font size "+r+".");return a},"getMetrics"),GC=o(function(e,r,n,i){var a=n.havingBaseStyle(r),s=Fe.makeSpan(i.concat(a.sizingClasses(n)),[e],n),l=a.sizeMultiplier/n.sizeMultiplier;return s.height*=l,s.depth*=l,s.maxFontSize=a.sizeMultiplier,s},"styleWrap"),r$=o(function(e,r,n){var i=r.havingBaseStyle(n),a=(1-r.sizeMultiplier/i.sizeMultiplier)*r.fontMetrics().axisHeight;e.classes.push("delimcenter"),e.style.top=gt(a),e.height-=a,e.depth+=a},"centerSpan"),g4e=o(function(e,r,n,i,a,s){var l=Fe.makeSymbol(e,"Main-Regular",a,i),u=GC(l,r,i,s);return n&&r$(u,i,r),u},"makeSmallDelim"),y4e=o(function(e,r,n,i){return Fe.makeSymbol(e,"Size"+r+"-Regular",n,i)},"mathrmSize"),n$=o(function(e,r,n,i,a,s){var l=y4e(e,r,a,i),u=GC(Fe.makeSpan(["delimsizing","size"+r],[l],i),rr.TEXT,i,s);return n&&r$(u,i,rr.TEXT),u},"makeLargeDelim"),fC=o(function(e,r,n){var i;r==="Size1-Regular"?i="delim-size1":i="delim-size4";var a=Fe.makeSpan(["delimsizinginner",i],[Fe.makeSpan([],[Fe.makeSymbol(e,r,n)])]);return{type:"elem",elem:a}},"makeGlyphSpan"),dC=o(function(e,r,n){var i=lc["Size4-Regular"][e.charCodeAt(0)]?lc["Size4-Regular"][e.charCodeAt(0)][4]:lc["Size1-Regular"][e.charCodeAt(0)][4],a=new cc("inner",Sbe(e,Math.round(1e3*r))),s=new vl([a],{width:gt(i),height:gt(r),style:"width:"+gt(i),viewBox:"0 0 "+1e3*i+" "+Math.round(1e3*r),preserveAspectRatio:"xMinYMin"}),l=Fe.makeSvgSpan([],[s],n);return l.height=r,l.style.height=gt(r),l.style.width=gt(i),{type:"elem",elem:l}},"makeInner"),LC=.008,y4={type:"kern",size:-1*LC},v4e=["|","\\lvert","\\rvert","\\vert"],x4e=["\\|","\\lVert","\\rVert","\\Vert"],i$=o(function(e,r,n,i,a,s){var l,u,h,f,d="",p=0;l=h=f=e,u=null;var m="Size1-Regular";e==="\\uparrow"?h=f="\u23D0":e==="\\Uparrow"?h=f="\u2016":e==="\\downarrow"?l=h="\u23D0":e==="\\Downarrow"?l=h="\u2016":e==="\\updownarrow"?(l="\\uparrow",h="\u23D0",f="\\downarrow"):e==="\\Updownarrow"?(l="\\Uparrow",h="\u2016",f="\\Downarrow"):Jt.contains(v4e,e)?(h="\u2223",d="vert",p=333):Jt.contains(x4e,e)?(h="\u2225",d="doublevert",p=556):e==="["||e==="\\lbrack"?(l="\u23A1",h="\u23A2",f="\u23A3",m="Size4-Regular",d="lbrack",p=667):e==="]"||e==="\\rbrack"?(l="\u23A4",h="\u23A5",f="\u23A6",m="Size4-Regular",d="rbrack",p=667):e==="\\lfloor"||e==="\u230A"?(h=l="\u23A2",f="\u23A3",m="Size4-Regular",d="lfloor",p=667):e==="\\lceil"||e==="\u2308"?(l="\u23A1",h=f="\u23A2",m="Size4-Regular",d="lceil",p=667):e==="\\rfloor"||e==="\u230B"?(h=l="\u23A5",f="\u23A6",m="Size4-Regular",d="rfloor",p=667):e==="\\rceil"||e==="\u2309"?(l="\u23A4",h=f="\u23A5",m="Size4-Regular",d="rceil",p=667):e==="("||e==="\\lparen"?(l="\u239B",h="\u239C",f="\u239D",m="Size4-Regular",d="lparen",p=875):e===")"||e==="\\rparen"?(l="\u239E",h="\u239F",f="\u23A0",m="Size4-Regular",d="rparen",p=875):e==="\\{"||e==="\\lbrace"?(l="\u23A7",u="\u23A8",f="\u23A9",h="\u23AA",m="Size4-Regular"):e==="\\}"||e==="\\rbrace"?(l="\u23AB",u="\u23AC",f="\u23AD",h="\u23AA",m="Size4-Regular"):e==="\\lgroup"||e==="\u27EE"?(l="\u23A7",f="\u23A9",h="\u23AA",m="Size4-Regular"):e==="\\rgroup"||e==="\u27EF"?(l="\u23AB",f="\u23AD",h="\u23AA",m="Size4-Regular"):e==="\\lmoustache"||e==="\u23B0"?(l="\u23A7",f="\u23AD",h="\u23AA",m="Size4-Regular"):(e==="\\rmoustache"||e==="\u23B1")&&(l="\u23AB",f="\u23A9",h="\u23AA",m="Size4-Regular");var g=hy(l,m,a),y=g.height+g.depth,v=hy(h,m,a),x=v.height+v.depth,b=hy(f,m,a),w=b.height+b.depth,_=0,T=1;if(u!==null){var E=hy(u,m,a);_=E.height+E.depth,T=2}var L=y+w+_,S=Math.max(0,Math.ceil((r-L)/(T*x))),A=L+S*T*x,I=i.fontMetrics().axisHeight;n&&(I*=i.sizeMultiplier);var D=A/2-I,k=[];if(d.length>0){var R=A-y-w,C=Math.round(A*1e3),O=Cbe(d,Math.round(R*1e3)),N=new cc(d,O),P=(p/1e3).toFixed(3)+"em",F=(C/1e3).toFixed(3)+"em",B=new vl([N],{width:P,height:F,viewBox:"0 0 "+p+" "+C}),G=Fe.makeSvgSpan([],[B],i);G.height=C/1e3,G.style.width=P,G.style.height=F,k.push({type:"elem",elem:G})}else{if(k.push(fC(f,m,a)),k.push(y4),u===null){var z=A-y-w+2*LC;k.push(dC(h,z,i))}else{var W=(A-y-w-_)/2+2*LC;k.push(dC(h,W,i)),k.push(y4),k.push(fC(u,m,a)),k.push(y4),k.push(dC(h,W,i))}k.push(y4),k.push(fC(l,m,a))}var Z=i.havingBaseStyle(rr.TEXT),j=Fe.makeVList({positionType:"bottom",positionData:D,children:k},Z);return GC(Fe.makeSpan(["delimsizing","mult"],[j],Z),rr.TEXT,i,s)},"makeStackedDelim"),pC=80,mC=.08,gC=o(function(e,r,n,i,a){var s=Ebe(e,i,n),l=new cc(e,s),u=new vl([l],{width:"400em",height:gt(r),viewBox:"0 0 400000 "+n,preserveAspectRatio:"xMinYMin slice"});return Fe.makeSvgSpan(["hide-tail"],[u],a)},"sqrtSvg"),b4e=o(function(e,r){var n=r.havingBaseSizing(),i=l$("\\surd",e*n.sizeMultiplier,o$,n),a=n.sizeMultiplier,s=Math.max(0,r.minRuleThickness-r.fontMetrics().sqrtRuleThickness),l,u=0,h=0,f=0,d;return i.type==="small"?(f=1e3+1e3*s+pC,e<1?a=1:e<1.4&&(a=.7),u=(1+s+mC)/a,h=(1+s)/a,l=gC("sqrtMain",u,f,s,r),l.style.minWidth="0.853em",d=.833/a):i.type==="large"?(f=(1e3+pC)*fy[i.size],h=(fy[i.size]+s)/a,u=(fy[i.size]+s+mC)/a,l=gC("sqrtSize"+i.size,u,f,s,r),l.style.minWidth="1.02em",d=1/a):(u=e+s+mC,h=e+s,f=Math.floor(1e3*e+s)+pC,l=gC("sqrtTall",u,f,s,r),l.style.minWidth="0.742em",d=1.056),l.height=h,l.style.height=gt(u),{span:l,advanceWidth:d,ruleWidth:(r.fontMetrics().sqrtRuleThickness+s)*a}},"makeSqrtImage"),a$=["(","\\lparen",")","\\rparen","[","\\lbrack","]","\\rbrack","\\{","\\lbrace","\\}","\\rbrace","\\lfloor","\\rfloor","\u230A","\u230B","\\lceil","\\rceil","\u2308","\u2309","\\surd"],w4e=["\\uparrow","\\downarrow","\\updownarrow","\\Uparrow","\\Downarrow","\\Updownarrow","|","\\|","\\vert","\\Vert","\\lvert","\\rvert","\\lVert","\\rVert","\\lgroup","\\rgroup","\u27EE","\u27EF","\\lmoustache","\\rmoustache","\u23B0","\u23B1"],s$=["<",">","\\langle","\\rangle","/","\\backslash","\\lt","\\gt"],fy=[0,1.2,1.8,2.4,3],T4e=o(function(e,r,n,i,a){if(e==="<"||e==="\\lt"||e==="\u27E8"?e="\\langle":(e===">"||e==="\\gt"||e==="\u27E9")&&(e="\\rangle"),Jt.contains(a$,e)||Jt.contains(s$,e))return n$(e,r,!1,n,i,a);if(Jt.contains(w4e,e))return i$(e,fy[r],!1,n,i,a);throw new lt("Illegal delimiter: '"+e+"'")},"makeSizedDelim"),k4e=[{type:"small",style:rr.SCRIPTSCRIPT},{type:"small",style:rr.SCRIPT},{type:"small",style:rr.TEXT},{type:"large",size:1},{type:"large",size:2},{type:"large",size:3},{type:"large",size:4}],E4e=[{type:"small",style:rr.SCRIPTSCRIPT},{type:"small",style:rr.SCRIPT},{type:"small",style:rr.TEXT},{type:"stack"}],o$=[{type:"small",style:rr.SCRIPTSCRIPT},{type:"small",style:rr.SCRIPT},{type:"small",style:rr.TEXT},{type:"large",size:1},{type:"large",size:2},{type:"large",size:3},{type:"large",size:4},{type:"stack"}],S4e=o(function(e){if(e.type==="small")return"Main-Regular";if(e.type==="large")return"Size"+e.size+"-Regular";if(e.type==="stack")return"Size4-Regular";throw new Error("Add support for delim type '"+e.type+"' here.")},"delimTypeToFont"),l$=o(function(e,r,n,i){for(var a=Math.min(2,3-i.style.size),s=a;sr)return n[s]}return n[n.length-1]},"traverseSequence"),c$=o(function(e,r,n,i,a,s){e==="<"||e==="\\lt"||e==="\u27E8"?e="\\langle":(e===">"||e==="\\gt"||e==="\u27E9")&&(e="\\rangle");var l;Jt.contains(s$,e)?l=k4e:Jt.contains(a$,e)?l=o$:l=E4e;var u=l$(e,r,l,i);return u.type==="small"?g4e(e,u.style,n,i,a,s):u.type==="large"?n$(e,u.size,n,i,a,s):i$(e,r,n,i,a,s)},"makeCustomSizedDelim"),C4e=o(function(e,r,n,i,a,s){var l=i.fontMetrics().axisHeight*i.sizeMultiplier,u=901,h=5/i.fontMetrics().ptPerEm,f=Math.max(r-l,n+l),d=Math.max(f/500*u,2*f-h);return c$(e,d,!0,i,a,s)},"makeLeftRightDelim"),du={sqrtImage:b4e,sizedDelim:T4e,sizeToMaxHeight:fy,customSizedDelim:c$,leftRightDelim:C4e},pG={"\\bigl":{mclass:"mopen",size:1},"\\Bigl":{mclass:"mopen",size:2},"\\biggl":{mclass:"mopen",size:3},"\\Biggl":{mclass:"mopen",size:4},"\\bigr":{mclass:"mclose",size:1},"\\Bigr":{mclass:"mclose",size:2},"\\biggr":{mclass:"mclose",size:3},"\\Biggr":{mclass:"mclose",size:4},"\\bigm":{mclass:"mrel",size:1},"\\Bigm":{mclass:"mrel",size:2},"\\biggm":{mclass:"mrel",size:3},"\\Biggm":{mclass:"mrel",size:4},"\\big":{mclass:"mord",size:1},"\\Big":{mclass:"mord",size:2},"\\bigg":{mclass:"mord",size:3},"\\Bigg":{mclass:"mord",size:4}},A4e=["(","\\lparen",")","\\rparen","[","\\lbrack","]","\\rbrack","\\{","\\lbrace","\\}","\\rbrace","\\lfloor","\\rfloor","\u230A","\u230B","\\lceil","\\rceil","\u2308","\u2309","<",">","\\langle","\u27E8","\\rangle","\u27E9","\\lt","\\gt","\\lvert","\\rvert","\\lVert","\\rVert","\\lgroup","\\rgroup","\u27EE","\u27EF","\\lmoustache","\\rmoustache","\u23B0","\u23B1","/","\\backslash","|","\\vert","\\|","\\Vert","\\uparrow","\\Uparrow","\\downarrow","\\Downarrow","\\updownarrow","\\Updownarrow","."];o(M4,"checkDelimiter");St({type:"delimsizing",names:["\\bigl","\\Bigl","\\biggl","\\Biggl","\\bigr","\\Bigr","\\biggr","\\Biggr","\\bigm","\\Bigm","\\biggm","\\Biggm","\\big","\\Big","\\bigg","\\Bigg"],props:{numArgs:1,argTypes:["primitive"]},handler:o((t,e)=>{var r=M4(e[0],t);return{type:"delimsizing",mode:t.parser.mode,size:pG[t.funcName].size,mclass:pG[t.funcName].mclass,delim:r.text}},"handler"),htmlBuilder:o((t,e)=>t.delim==="."?Fe.makeSpan([t.mclass]):du.sizedDelim(t.delim,t.size,e,t.mode,[t.mclass]),"htmlBuilder"),mathmlBuilder:o(t=>{var e=[];t.delim!=="."&&e.push(Mo(t.delim,t.mode));var r=new at.MathNode("mo",e);t.mclass==="mopen"||t.mclass==="mclose"?r.setAttribute("fence","true"):r.setAttribute("fence","false"),r.setAttribute("stretchy","true");var n=gt(du.sizeToMaxHeight[t.size]);return r.setAttribute("minsize",n),r.setAttribute("maxsize",n),r},"mathmlBuilder")});o(mG,"assertParsed");St({type:"leftright-right",names:["\\right"],props:{numArgs:1,primitive:!0},handler:o((t,e)=>{var r=t.parser.gullet.macros.get("\\current@color");if(r&&typeof r!="string")throw new lt("\\current@color set to non-string in \\right");return{type:"leftright-right",mode:t.parser.mode,delim:M4(e[0],t).text,color:r}},"handler")});St({type:"leftright",names:["\\left"],props:{numArgs:1,primitive:!0},handler:o((t,e)=>{var r=M4(e[0],t),n=t.parser;++n.leftrightDepth;var i=n.parseExpression(!1);--n.leftrightDepth,n.expect("\\right",!1);var a=gr(n.parseFunction(),"leftright-right");return{type:"leftright",mode:n.mode,body:i,left:r.text,right:a.delim,rightColor:a.color}},"handler"),htmlBuilder:o((t,e)=>{mG(t);for(var r=Fi(t.body,e,!0,["mopen","mclose"]),n=0,i=0,a=!1,s=0;s{mG(t);var r=Ss(t.body,e);if(t.left!=="."){var n=new at.MathNode("mo",[Mo(t.left,t.mode)]);n.setAttribute("fence","true"),r.unshift(n)}if(t.right!=="."){var i=new at.MathNode("mo",[Mo(t.right,t.mode)]);i.setAttribute("fence","true"),t.rightColor&&i.setAttribute("mathcolor",t.rightColor),r.push(i)}return PC(r)},"mathmlBuilder")});St({type:"middle",names:["\\middle"],props:{numArgs:1,primitive:!0},handler:o((t,e)=>{var r=M4(e[0],t);if(!t.parser.leftrightDepth)throw new lt("\\middle without preceding \\left",r);return{type:"middle",mode:t.parser.mode,delim:r.text}},"handler"),htmlBuilder:o((t,e)=>{var r;if(t.delim===".")r=yy(e,[]);else{r=du.sizedDelim(t.delim,1,e,t.mode,[]);var n={delim:t.delim,options:e};r.isMiddle=n}return r},"htmlBuilder"),mathmlBuilder:o((t,e)=>{var r=t.delim==="\\vert"||t.delim==="|"?Mo("|","text"):Mo(t.delim,t.mode),n=new at.MathNode("mo",[r]);return n.setAttribute("fence","true"),n.setAttribute("lspace","0.05em"),n.setAttribute("rspace","0.05em"),n},"mathmlBuilder")});$C=o((t,e)=>{var r=Fe.wrapFragment(Pr(t.body,e),e),n=t.label.slice(1),i=e.sizeMultiplier,a,s=0,l=Jt.isCharacterBox(t.body);if(n==="sout")a=Fe.makeSpan(["stretchy","sout"]),a.height=e.fontMetrics().defaultRuleThickness/i,s=-.5*e.fontMetrics().xHeight;else if(n==="phase"){var u=Jn({number:.6,unit:"pt"},e),h=Jn({number:.35,unit:"ex"},e),f=e.havingBaseSizing();i=i/f.sizeMultiplier;var d=r.height+r.depth+u+h;r.style.paddingLeft=gt(d/2+u);var p=Math.floor(1e3*d*i),m=Tbe(p),g=new vl([new cc("phase",m)],{width:"400em",height:gt(p/1e3),viewBox:"0 0 400000 "+p,preserveAspectRatio:"xMinYMin slice"});a=Fe.makeSvgSpan(["hide-tail"],[g],e),a.style.height=gt(d),s=r.depth+u+h}else{/cancel/.test(n)?l||r.classes.push("cancel-pad"):n==="angl"?r.classes.push("anglpad"):r.classes.push("boxpad");var y=0,v=0,x=0;/box/.test(n)?(x=Math.max(e.fontMetrics().fboxrule,e.minRuleThickness),y=e.fontMetrics().fboxsep+(n==="colorbox"?0:x),v=y):n==="angl"?(x=Math.max(e.fontMetrics().defaultRuleThickness,e.minRuleThickness),y=4*x,v=Math.max(0,.25-r.depth)):(y=l?.2:0,v=y),a=mu.encloseSpan(r,n,y,v,e),/fbox|boxed|fcolorbox/.test(n)?(a.style.borderStyle="solid",a.style.borderWidth=gt(x)):n==="angl"&&x!==.049&&(a.style.borderTopWidth=gt(x),a.style.borderRightWidth=gt(x)),s=r.depth+v,t.backgroundColor&&(a.style.backgroundColor=t.backgroundColor,t.borderColor&&(a.style.borderColor=t.borderColor))}var b;if(t.backgroundColor)b=Fe.makeVList({positionType:"individualShift",children:[{type:"elem",elem:a,shift:s},{type:"elem",elem:r,shift:0}]},e);else{var w=/cancel|phase/.test(n)?["svg-align"]:[];b=Fe.makeVList({positionType:"individualShift",children:[{type:"elem",elem:r,shift:0},{type:"elem",elem:a,shift:s,wrapperClasses:w}]},e)}return/cancel/.test(n)&&(b.height=r.height,b.depth=r.depth),/cancel/.test(n)&&!l?Fe.makeSpan(["mord","cancel-lap"],[b],e):Fe.makeSpan(["mord"],[b],e)},"htmlBuilder$7"),VC=o((t,e)=>{var r=0,n=new at.MathNode(t.label.indexOf("colorbox")>-1?"mpadded":"menclose",[yn(t.body,e)]);switch(t.label){case"\\cancel":n.setAttribute("notation","updiagonalstrike");break;case"\\bcancel":n.setAttribute("notation","downdiagonalstrike");break;case"\\phase":n.setAttribute("notation","phasorangle");break;case"\\sout":n.setAttribute("notation","horizontalstrike");break;case"\\fbox":n.setAttribute("notation","box");break;case"\\angl":n.setAttribute("notation","actuarial");break;case"\\fcolorbox":case"\\colorbox":if(r=e.fontMetrics().fboxsep*e.fontMetrics().ptPerEm,n.setAttribute("width","+"+2*r+"pt"),n.setAttribute("height","+"+2*r+"pt"),n.setAttribute("lspace",r+"pt"),n.setAttribute("voffset",r+"pt"),t.label==="\\fcolorbox"){var i=Math.max(e.fontMetrics().fboxrule,e.minRuleThickness);n.setAttribute("style","border: "+i+"em solid "+String(t.borderColor))}break;case"\\xcancel":n.setAttribute("notation","updiagonalstrike downdiagonalstrike");break}return t.backgroundColor&&n.setAttribute("mathbackground",t.backgroundColor),n},"mathmlBuilder$6");St({type:"enclose",names:["\\colorbox"],props:{numArgs:2,allowedInText:!0,argTypes:["color","text"]},handler(t,e,r){var{parser:n,funcName:i}=t,a=gr(e[0],"color-token").color,s=e[1];return{type:"enclose",mode:n.mode,label:i,backgroundColor:a,body:s}},htmlBuilder:$C,mathmlBuilder:VC});St({type:"enclose",names:["\\fcolorbox"],props:{numArgs:3,allowedInText:!0,argTypes:["color","color","text"]},handler(t,e,r){var{parser:n,funcName:i}=t,a=gr(e[0],"color-token").color,s=gr(e[1],"color-token").color,l=e[2];return{type:"enclose",mode:n.mode,label:i,backgroundColor:s,borderColor:a,body:l}},htmlBuilder:$C,mathmlBuilder:VC});St({type:"enclose",names:["\\fbox"],props:{numArgs:1,argTypes:["hbox"],allowedInText:!0},handler(t,e){var{parser:r}=t;return{type:"enclose",mode:r.mode,label:"\\fbox",body:e[0]}}});St({type:"enclose",names:["\\cancel","\\bcancel","\\xcancel","\\sout","\\phase"],props:{numArgs:1},handler(t,e){var{parser:r,funcName:n}=t,i=e[0];return{type:"enclose",mode:r.mode,label:n,body:i}},htmlBuilder:$C,mathmlBuilder:VC});St({type:"enclose",names:["\\angl"],props:{numArgs:1,argTypes:["hbox"],allowedInText:!1},handler(t,e){var{parser:r}=t;return{type:"enclose",mode:r.mode,label:"\\angl",body:e[0]}}});u$={};o(uc,"defineEnvironment");h$={};o(le,"defineMacro");o(gG,"getHLines");I4=o(t=>{var e=t.parser.settings;if(!e.displayMode)throw new lt("{"+t.envName+"} can be used only in display mode.")},"validateAmsEnvironmentContext");o(UC,"getAutoTag");o(xh,"parseArray");o(HC,"dCellStyle");hc=o(function(e,r){var n,i,a=e.body.length,s=e.hLinesBeforeRow,l=0,u=new Array(a),h=[],f=Math.max(r.fontMetrics().arrayRuleWidth,r.minRuleThickness),d=1/r.fontMetrics().ptPerEm,p=5*d;if(e.colSeparationType&&e.colSeparationType==="small"){var m=r.havingStyle(rr.SCRIPT).sizeMultiplier;p=.2778*(m/r.sizeMultiplier)}var g=e.colSeparationType==="CD"?Jn({number:3,unit:"ex"},r):12*d,y=3*d,v=e.arraystretch*g,x=.7*v,b=.3*v,w=0;function _(ke){for(var Re=0;Re0&&(w+=.25),h.push({pos:w,isDashed:ke[Re]})}for(o(_,"setHLinePos"),_(s[0]),n=0;n0&&(D+=b,Lke))for(n=0;n=l)){var ee=void 0;(i>0||e.hskipBeforeAndAfter)&&(ee=Jt.deflt(W.pregap,p),ee!==0&&(O=Fe.makeSpan(["arraycolsep"],[]),O.style.width=gt(ee),C.push(O)));var J=[];for(n=0;n0){for(var ae=Fe.makeLineSpan("hline",r,f),ue=Fe.makeLineSpan("hdashline",r,f),ce=[{type:"elem",elem:u,shift:0}];h.length>0;){var te=h.pop(),Ne=te.pos-k;te.isDashed?ce.push({type:"elem",elem:ue,shift:Ne}):ce.push({type:"elem",elem:ae,shift:Ne})}u=Fe.makeVList({positionType:"individualShift",children:ce},r)}if(P.length===0)return Fe.makeSpan(["mord"],[u],r);var se=Fe.makeVList({positionType:"individualShift",children:P},r);return se=Fe.makeSpan(["tag"],[se],r),Fe.makeFragment([u,se])},"htmlBuilder"),_4e={c:"center ",l:"left ",r:"right "},fc=o(function(e,r){for(var n=[],i=new at.MathNode("mtd",[],["mtr-glue"]),a=new at.MathNode("mtd",[],["mml-eqn-num"]),s=0;s0){var g=e.cols,y="",v=!1,x=0,b=g.length;g[0].type==="separator"&&(p+="top ",x=1),g[g.length-1].type==="separator"&&(p+="bottom ",b-=1);for(var w=x;w0?"left ":"",p+=S[S.length-1].length>0?"right ":"";for(var A=1;A-1?"alignat":"align",a=e.envName==="split",s=xh(e.parser,{cols:n,addJot:!0,autoTag:a?void 0:UC(e.envName),emptySingleRow:!0,colSeparationType:i,maxNumCols:a?2:void 0,leqno:e.parser.settings.leqno},"display"),l,u=0,h={type:"ordgroup",mode:e.mode,body:[]};if(r[0]&&r[0].type==="ordgroup"){for(var f="",d=0;d0&&m&&(v=1),n[g]={type:"align",align:y,pregap:v,postgap:0}}return s.colSeparationType=m?"align":"alignat",s},"alignedHandler");uc({type:"array",names:["array","darray"],props:{numArgs:1},handler(t,e){var r=N4(e[0]),n=r?[e[0]]:gr(e[0],"ordgroup").body,i=n.map(function(s){var l=FC(s),u=l.text;if("lcr".indexOf(u)!==-1)return{type:"align",align:u};if(u==="|")return{type:"separator",separator:"|"};if(u===":")return{type:"separator",separator:":"};throw new lt("Unknown column alignment: "+u,s)}),a={cols:i,hskipBeforeAndAfter:!0,maxNumCols:i.length};return xh(t.parser,a,HC(t.envName))},htmlBuilder:hc,mathmlBuilder:fc});uc({type:"array",names:["matrix","pmatrix","bmatrix","Bmatrix","vmatrix","Vmatrix","matrix*","pmatrix*","bmatrix*","Bmatrix*","vmatrix*","Vmatrix*"],props:{numArgs:0},handler(t){var e={matrix:null,pmatrix:["(",")"],bmatrix:["[","]"],Bmatrix:["\\{","\\}"],vmatrix:["|","|"],Vmatrix:["\\Vert","\\Vert"]}[t.envName.replace("*","")],r="c",n={hskipBeforeAndAfter:!1,cols:[{type:"align",align:r}]};if(t.envName.charAt(t.envName.length-1)==="*"){var i=t.parser;if(i.consumeSpaces(),i.fetch().text==="["){if(i.consume(),i.consumeSpaces(),r=i.fetch().text,"lcr".indexOf(r)===-1)throw new lt("Expected l or c or r",i.nextToken);i.consume(),i.consumeSpaces(),i.expect("]"),i.consume(),n.cols=[{type:"align",align:r}]}}var a=xh(t.parser,n,HC(t.envName)),s=Math.max(0,...a.body.map(l=>l.length));return a.cols=new Array(s).fill({type:"align",align:r}),e?{type:"leftright",mode:t.mode,body:[a],left:e[0],right:e[1],rightColor:void 0}:a},htmlBuilder:hc,mathmlBuilder:fc});uc({type:"array",names:["smallmatrix"],props:{numArgs:0},handler(t){var e={arraystretch:.5},r=xh(t.parser,e,"script");return r.colSeparationType="small",r},htmlBuilder:hc,mathmlBuilder:fc});uc({type:"array",names:["subarray"],props:{numArgs:1},handler(t,e){var r=N4(e[0]),n=r?[e[0]]:gr(e[0],"ordgroup").body,i=n.map(function(s){var l=FC(s),u=l.text;if("lc".indexOf(u)!==-1)return{type:"align",align:u};throw new lt("Unknown column alignment: "+u,s)});if(i.length>1)throw new lt("{subarray} can contain only one column");var a={cols:i,hskipBeforeAndAfter:!1,arraystretch:.5};if(a=xh(t.parser,a,"script"),a.body.length>0&&a.body[0].length>1)throw new lt("{subarray} can contain only one column");return a},htmlBuilder:hc,mathmlBuilder:fc});uc({type:"array",names:["cases","dcases","rcases","drcases"],props:{numArgs:0},handler(t){var e={arraystretch:1.2,cols:[{type:"align",align:"l",pregap:0,postgap:1},{type:"align",align:"l",pregap:0,postgap:0}]},r=xh(t.parser,e,HC(t.envName));return{type:"leftright",mode:t.mode,body:[r],left:t.envName.indexOf("r")>-1?".":"\\{",right:t.envName.indexOf("r")>-1?"\\}":".",rightColor:void 0}},htmlBuilder:hc,mathmlBuilder:fc});uc({type:"array",names:["align","align*","aligned","split"],props:{numArgs:0},handler:f$,htmlBuilder:hc,mathmlBuilder:fc});uc({type:"array",names:["gathered","gather","gather*"],props:{numArgs:0},handler(t){Jt.contains(["gather","gather*"],t.envName)&&I4(t);var e={cols:[{type:"align",align:"c"}],addJot:!0,colSeparationType:"gather",autoTag:UC(t.envName),emptySingleRow:!0,leqno:t.parser.settings.leqno};return xh(t.parser,e,"display")},htmlBuilder:hc,mathmlBuilder:fc});uc({type:"array",names:["alignat","alignat*","alignedat"],props:{numArgs:1},handler:f$,htmlBuilder:hc,mathmlBuilder:fc});uc({type:"array",names:["equation","equation*"],props:{numArgs:0},handler(t){I4(t);var e={autoTag:UC(t.envName),emptySingleRow:!0,singleRow:!0,maxNumCols:1,leqno:t.parser.settings.leqno};return xh(t.parser,e,"display")},htmlBuilder:hc,mathmlBuilder:fc});uc({type:"array",names:["CD"],props:{numArgs:0},handler(t){return I4(t),p4e(t.parser)},htmlBuilder:hc,mathmlBuilder:fc});le("\\nonumber","\\gdef\\@eqnsw{0}");le("\\notag","\\nonumber");St({type:"text",names:["\\hline","\\hdashline"],props:{numArgs:0,allowedInText:!0,allowedInMath:!0},handler(t,e){throw new lt(t.funcName+" valid only within array environment")}});yG=u$;St({type:"environment",names:["\\begin","\\end"],props:{numArgs:1,argTypes:["text"]},handler(t,e){var{parser:r,funcName:n}=t,i=e[0];if(i.type!=="ordgroup")throw new lt("Invalid environment name",i);for(var a="",s=0;s{var r=t.font,n=e.withFont(r);return Pr(t.body,n)},"htmlBuilder$5"),p$=o((t,e)=>{var r=t.font,n=e.withFont(r);return yn(t.body,n)},"mathmlBuilder$4"),vG={"\\Bbb":"\\mathbb","\\bold":"\\mathbf","\\frak":"\\mathfrak","\\bm":"\\boldsymbol"};St({type:"font",names:["\\mathrm","\\mathit","\\mathbf","\\mathnormal","\\mathbb","\\mathcal","\\mathfrak","\\mathscr","\\mathsf","\\mathtt","\\Bbb","\\bold","\\frak"],props:{numArgs:1,allowedInArgument:!0},handler:o((t,e)=>{var{parser:r,funcName:n}=t,i=C4(e[0]),a=n;return a in vG&&(a=vG[a]),{type:"font",mode:r.mode,font:a.slice(1),body:i}},"handler"),htmlBuilder:d$,mathmlBuilder:p$});St({type:"mclass",names:["\\boldsymbol","\\bm"],props:{numArgs:1},handler:o((t,e)=>{var{parser:r}=t,n=e[0],i=Jt.isCharacterBox(n);return{type:"mclass",mode:r.mode,mclass:R4(n),body:[{type:"font",mode:r.mode,font:"boldsymbol",body:n}],isCharacterBox:i}},"handler")});St({type:"font",names:["\\rm","\\sf","\\tt","\\bf","\\it","\\cal"],props:{numArgs:0,allowedInText:!0},handler:o((t,e)=>{var{parser:r,funcName:n,breakOnTokenText:i}=t,{mode:a}=r,s=r.parseExpression(!0,i),l="math"+n.slice(1);return{type:"font",mode:a,font:l,body:{type:"ordgroup",mode:r.mode,body:s}}},"handler"),htmlBuilder:d$,mathmlBuilder:p$});m$=o((t,e)=>{var r=e;return t==="display"?r=r.id>=rr.SCRIPT.id?r.text():rr.DISPLAY:t==="text"&&r.size===rr.DISPLAY.size?r=rr.TEXT:t==="script"?r=rr.SCRIPT:t==="scriptscript"&&(r=rr.SCRIPTSCRIPT),r},"adjustStyle"),WC=o((t,e)=>{var r=m$(t.size,e.style),n=r.fracNum(),i=r.fracDen(),a;a=e.havingStyle(n);var s=Pr(t.numer,a,e);if(t.continued){var l=8.5/e.fontMetrics().ptPerEm,u=3.5/e.fontMetrics().ptPerEm;s.height=s.height0?g=3*p:g=7*p,y=e.fontMetrics().denom1):(d>0?(m=e.fontMetrics().num2,g=p):(m=e.fontMetrics().num3,g=3*p),y=e.fontMetrics().denom2);var v;if(f){var b=e.fontMetrics().axisHeight;m-s.depth-(b+.5*d){var r=new at.MathNode("mfrac",[yn(t.numer,e),yn(t.denom,e)]);if(!t.hasBarLine)r.setAttribute("linethickness","0px");else if(t.barSize){var n=Jn(t.barSize,e);r.setAttribute("linethickness",gt(n))}var i=m$(t.size,e.style);if(i.size!==e.style.size){r=new at.MathNode("mstyle",[r]);var a=i.size===rr.DISPLAY.size?"true":"false";r.setAttribute("displaystyle",a),r.setAttribute("scriptlevel","0")}if(t.leftDelim!=null||t.rightDelim!=null){var s=[];if(t.leftDelim!=null){var l=new at.MathNode("mo",[new at.TextNode(t.leftDelim.replace("\\",""))]);l.setAttribute("fence","true"),s.push(l)}if(s.push(r),t.rightDelim!=null){var u=new at.MathNode("mo",[new at.TextNode(t.rightDelim.replace("\\",""))]);u.setAttribute("fence","true"),s.push(u)}return PC(s)}return r},"mathmlBuilder$3");St({type:"genfrac",names:["\\dfrac","\\frac","\\tfrac","\\dbinom","\\binom","\\tbinom","\\\\atopfrac","\\\\bracefrac","\\\\brackfrac"],props:{numArgs:2,allowedInArgument:!0},handler:o((t,e)=>{var{parser:r,funcName:n}=t,i=e[0],a=e[1],s,l=null,u=null,h="auto";switch(n){case"\\dfrac":case"\\frac":case"\\tfrac":s=!0;break;case"\\\\atopfrac":s=!1;break;case"\\dbinom":case"\\binom":case"\\tbinom":s=!1,l="(",u=")";break;case"\\\\bracefrac":s=!1,l="\\{",u="\\}";break;case"\\\\brackfrac":s=!1,l="[",u="]";break;default:throw new Error("Unrecognized genfrac command")}switch(n){case"\\dfrac":case"\\dbinom":h="display";break;case"\\tfrac":case"\\tbinom":h="text";break}return{type:"genfrac",mode:r.mode,continued:!1,numer:i,denom:a,hasBarLine:s,leftDelim:l,rightDelim:u,size:h,barSize:null}},"handler"),htmlBuilder:WC,mathmlBuilder:YC});St({type:"genfrac",names:["\\cfrac"],props:{numArgs:2},handler:o((t,e)=>{var{parser:r,funcName:n}=t,i=e[0],a=e[1];return{type:"genfrac",mode:r.mode,continued:!0,numer:i,denom:a,hasBarLine:!0,leftDelim:null,rightDelim:null,size:"display",barSize:null}},"handler")});St({type:"infix",names:["\\over","\\choose","\\atop","\\brace","\\brack"],props:{numArgs:0,infix:!0},handler(t){var{parser:e,funcName:r,token:n}=t,i;switch(r){case"\\over":i="\\frac";break;case"\\choose":i="\\binom";break;case"\\atop":i="\\\\atopfrac";break;case"\\brace":i="\\\\bracefrac";break;case"\\brack":i="\\\\brackfrac";break;default:throw new Error("Unrecognized infix genfrac command")}return{type:"infix",mode:e.mode,replaceWith:i,token:n}}});xG=["display","text","script","scriptscript"],bG=o(function(e){var r=null;return e.length>0&&(r=e,r=r==="."?null:r),r},"delimFromValue");St({type:"genfrac",names:["\\genfrac"],props:{numArgs:6,allowedInArgument:!0,argTypes:["math","math","size","text","math","math"]},handler(t,e){var{parser:r}=t,n=e[4],i=e[5],a=C4(e[0]),s=a.type==="atom"&&a.family==="open"?bG(a.text):null,l=C4(e[1]),u=l.type==="atom"&&l.family==="close"?bG(l.text):null,h=gr(e[2],"size"),f,d=null;h.isBlank?f=!0:(d=h.value,f=d.number>0);var p="auto",m=e[3];if(m.type==="ordgroup"){if(m.body.length>0){var g=gr(m.body[0],"textord");p=xG[Number(g.text)]}}else m=gr(m,"textord"),p=xG[Number(m.text)];return{type:"genfrac",mode:r.mode,numer:n,denom:i,continued:!1,hasBarLine:f,barSize:d,leftDelim:s,rightDelim:u,size:p}},htmlBuilder:WC,mathmlBuilder:YC});St({type:"infix",names:["\\above"],props:{numArgs:1,argTypes:["size"],infix:!0},handler(t,e){var{parser:r,funcName:n,token:i}=t;return{type:"infix",mode:r.mode,replaceWith:"\\\\abovefrac",size:gr(e[0],"size").value,token:i}}});St({type:"genfrac",names:["\\\\abovefrac"],props:{numArgs:3,argTypes:["math","size","math"]},handler:o((t,e)=>{var{parser:r,funcName:n}=t,i=e[0],a=obe(gr(e[1],"infix").size),s=e[2],l=a.number>0;return{type:"genfrac",mode:r.mode,numer:i,denom:s,continued:!1,hasBarLine:l,barSize:a,leftDelim:null,rightDelim:null,size:"auto"}},"handler"),htmlBuilder:WC,mathmlBuilder:YC});g$=o((t,e)=>{var r=e.style,n,i;t.type==="supsub"?(n=t.sup?Pr(t.sup,e.havingStyle(r.sup()),e):Pr(t.sub,e.havingStyle(r.sub()),e),i=gr(t.base,"horizBrace")):i=gr(t,"horizBrace");var a=Pr(i.base,e.havingBaseStyle(rr.DISPLAY)),s=mu.svgSpan(i,e),l;if(i.isOver?(l=Fe.makeVList({positionType:"firstBaseline",children:[{type:"elem",elem:a},{type:"kern",size:.1},{type:"elem",elem:s}]},e),l.children[0].children[0].children[1].classes.push("svg-align")):(l=Fe.makeVList({positionType:"bottom",positionData:a.depth+.1+s.height,children:[{type:"elem",elem:s},{type:"kern",size:.1},{type:"elem",elem:a}]},e),l.children[0].children[0].children[0].classes.push("svg-align")),n){var u=Fe.makeSpan(["mord",i.isOver?"mover":"munder"],[l],e);i.isOver?l=Fe.makeVList({positionType:"firstBaseline",children:[{type:"elem",elem:u},{type:"kern",size:.2},{type:"elem",elem:n}]},e):l=Fe.makeVList({positionType:"bottom",positionData:u.depth+.2+n.height+n.depth,children:[{type:"elem",elem:n},{type:"kern",size:.2},{type:"elem",elem:u}]},e)}return Fe.makeSpan(["mord",i.isOver?"mover":"munder"],[l],e)},"htmlBuilder$3"),L4e=o((t,e)=>{var r=mu.mathMLnode(t.label);return new at.MathNode(t.isOver?"mover":"munder",[yn(t.base,e),r])},"mathmlBuilder$2");St({type:"horizBrace",names:["\\overbrace","\\underbrace"],props:{numArgs:1},handler(t,e){var{parser:r,funcName:n}=t;return{type:"horizBrace",mode:r.mode,label:n,isOver:/^\\over/.test(n),base:e[0]}},htmlBuilder:g$,mathmlBuilder:L4e});St({type:"href",names:["\\href"],props:{numArgs:2,argTypes:["url","original"],allowedInText:!0},handler:o((t,e)=>{var{parser:r}=t,n=e[1],i=gr(e[0],"url").url;return r.settings.isTrusted({command:"\\href",url:i})?{type:"href",mode:r.mode,href:i,body:gi(n)}:r.formatUnsupportedCmd("\\href")},"handler"),htmlBuilder:o((t,e)=>{var r=Fi(t.body,e,!1);return Fe.makeAnchor(t.href,[],r,e)},"htmlBuilder"),mathmlBuilder:o((t,e)=>{var r=vh(t.body,e);return r instanceof ks||(r=new ks("mrow",[r])),r.setAttribute("href",t.href),r},"mathmlBuilder")});St({type:"href",names:["\\url"],props:{numArgs:1,argTypes:["url"],allowedInText:!0},handler:o((t,e)=>{var{parser:r}=t,n=gr(e[0],"url").url;if(!r.settings.isTrusted({command:"\\url",url:n}))return r.formatUnsupportedCmd("\\url");for(var i=[],a=0;a{var{parser:r,funcName:n,token:i}=t,a=gr(e[0],"raw").string,s=e[1];r.settings.strict&&r.settings.reportNonstrict("htmlExtension","HTML extension is disabled on strict mode");var l,u={};switch(n){case"\\htmlClass":u.class=a,l={command:"\\htmlClass",class:a};break;case"\\htmlId":u.id=a,l={command:"\\htmlId",id:a};break;case"\\htmlStyle":u.style=a,l={command:"\\htmlStyle",style:a};break;case"\\htmlData":{for(var h=a.split(","),f=0;f{var r=Fi(t.body,e,!1),n=["enclosing"];t.attributes.class&&n.push(...t.attributes.class.trim().split(/\s+/));var i=Fe.makeSpan(n,r,e);for(var a in t.attributes)a!=="class"&&t.attributes.hasOwnProperty(a)&&i.setAttribute(a,t.attributes[a]);return i},"htmlBuilder"),mathmlBuilder:o((t,e)=>vh(t.body,e),"mathmlBuilder")});St({type:"htmlmathml",names:["\\html@mathml"],props:{numArgs:2,allowedInText:!0},handler:o((t,e)=>{var{parser:r}=t;return{type:"htmlmathml",mode:r.mode,html:gi(e[0]),mathml:gi(e[1])}},"handler"),htmlBuilder:o((t,e)=>{var r=Fi(t.html,e,!1);return Fe.makeFragment(r)},"htmlBuilder"),mathmlBuilder:o((t,e)=>vh(t.mathml,e),"mathmlBuilder")});yC=o(function(e){if(/^[-+]? *(\d+(\.\d*)?|\.\d+)$/.test(e))return{number:+e,unit:"bp"};var r=/([-+]?) *(\d+(?:\.\d*)?|\.\d+) *([a-z]{2})/.exec(e);if(!r)throw new lt("Invalid size: '"+e+"' in \\includegraphics");var n={number:+(r[1]+r[2]),unit:r[3]};if(!OG(n))throw new lt("Invalid unit: '"+n.unit+"' in \\includegraphics.");return n},"sizeData");St({type:"includegraphics",names:["\\includegraphics"],props:{numArgs:1,numOptionalArgs:1,argTypes:["raw","url"],allowedInText:!1},handler:o((t,e,r)=>{var{parser:n}=t,i={number:0,unit:"em"},a={number:.9,unit:"em"},s={number:0,unit:"em"},l="";if(r[0])for(var u=gr(r[0],"raw").string,h=u.split(","),f=0;f{var r=Jn(t.height,e),n=0;t.totalheight.number>0&&(n=Jn(t.totalheight,e)-r);var i=0;t.width.number>0&&(i=Jn(t.width,e));var a={height:gt(r+n)};i>0&&(a.width=gt(i)),n>0&&(a.verticalAlign=gt(-n));var s=new kC(t.src,t.alt,a);return s.height=r,s.depth=n,s},"htmlBuilder"),mathmlBuilder:o((t,e)=>{var r=new at.MathNode("mglyph",[]);r.setAttribute("alt",t.alt);var n=Jn(t.height,e),i=0;if(t.totalheight.number>0&&(i=Jn(t.totalheight,e)-n,r.setAttribute("valign",gt(-i))),r.setAttribute("height",gt(n+i)),t.width.number>0){var a=Jn(t.width,e);r.setAttribute("width",gt(a))}return r.setAttribute("src",t.src),r},"mathmlBuilder")});St({type:"kern",names:["\\kern","\\mkern","\\hskip","\\mskip"],props:{numArgs:1,argTypes:["size"],primitive:!0,allowedInText:!0},handler(t,e){var{parser:r,funcName:n}=t,i=gr(e[0],"size");if(r.settings.strict){var a=n[1]==="m",s=i.value.unit==="mu";a?(s||r.settings.reportNonstrict("mathVsTextUnits","LaTeX's "+n+" supports only mu units, "+("not "+i.value.unit+" units")),r.mode!=="math"&&r.settings.reportNonstrict("mathVsTextUnits","LaTeX's "+n+" works only in math mode")):s&&r.settings.reportNonstrict("mathVsTextUnits","LaTeX's "+n+" doesn't support mu units")}return{type:"kern",mode:r.mode,dimension:i.value}},htmlBuilder(t,e){return Fe.makeGlue(t.dimension,e)},mathmlBuilder(t,e){var r=Jn(t.dimension,e);return new at.SpaceNode(r)}});St({type:"lap",names:["\\mathllap","\\mathrlap","\\mathclap"],props:{numArgs:1,allowedInText:!0},handler:o((t,e)=>{var{parser:r,funcName:n}=t,i=e[0];return{type:"lap",mode:r.mode,alignment:n.slice(5),body:i}},"handler"),htmlBuilder:o((t,e)=>{var r;t.alignment==="clap"?(r=Fe.makeSpan([],[Pr(t.body,e)]),r=Fe.makeSpan(["inner"],[r],e)):r=Fe.makeSpan(["inner"],[Pr(t.body,e)]);var n=Fe.makeSpan(["fix"],[]),i=Fe.makeSpan([t.alignment],[r,n],e),a=Fe.makeSpan(["strut"]);return a.style.height=gt(i.height+i.depth),i.depth&&(a.style.verticalAlign=gt(-i.depth)),i.children.unshift(a),i=Fe.makeSpan(["thinbox"],[i],e),Fe.makeSpan(["mord","vbox"],[i],e)},"htmlBuilder"),mathmlBuilder:o((t,e)=>{var r=new at.MathNode("mpadded",[yn(t.body,e)]);if(t.alignment!=="rlap"){var n=t.alignment==="llap"?"-1":"-0.5";r.setAttribute("lspace",n+"width")}return r.setAttribute("width","0px"),r},"mathmlBuilder")});St({type:"styling",names:["\\(","$"],props:{numArgs:0,allowedInText:!0,allowedInMath:!1},handler(t,e){var{funcName:r,parser:n}=t,i=n.mode;n.switchMode("math");var a=r==="\\("?"\\)":"$",s=n.parseExpression(!1,a);return n.expect(a),n.switchMode(i),{type:"styling",mode:n.mode,style:"text",body:s}}});St({type:"text",names:["\\)","\\]"],props:{numArgs:0,allowedInText:!0,allowedInMath:!1},handler(t,e){throw new lt("Mismatched "+t.funcName)}});wG=o((t,e)=>{switch(e.style.size){case rr.DISPLAY.size:return t.display;case rr.TEXT.size:return t.text;case rr.SCRIPT.size:return t.script;case rr.SCRIPTSCRIPT.size:return t.scriptscript;default:return t.text}},"chooseMathStyle");St({type:"mathchoice",names:["\\mathchoice"],props:{numArgs:4,primitive:!0},handler:o((t,e)=>{var{parser:r}=t;return{type:"mathchoice",mode:r.mode,display:gi(e[0]),text:gi(e[1]),script:gi(e[2]),scriptscript:gi(e[3])}},"handler"),htmlBuilder:o((t,e)=>{var r=wG(t,e),n=Fi(r,e,!1);return Fe.makeFragment(n)},"htmlBuilder"),mathmlBuilder:o((t,e)=>{var r=wG(t,e);return vh(r,e)},"mathmlBuilder")});y$=o((t,e,r,n,i,a,s)=>{t=Fe.makeSpan([],[t]);var l=r&&Jt.isCharacterBox(r),u,h;if(e){var f=Pr(e,n.havingStyle(i.sup()),n);h={elem:f,kern:Math.max(n.fontMetrics().bigOpSpacing1,n.fontMetrics().bigOpSpacing3-f.depth)}}if(r){var d=Pr(r,n.havingStyle(i.sub()),n);u={elem:d,kern:Math.max(n.fontMetrics().bigOpSpacing2,n.fontMetrics().bigOpSpacing4-d.height)}}var p;if(h&&u){var m=n.fontMetrics().bigOpSpacing5+u.elem.height+u.elem.depth+u.kern+t.depth+s;p=Fe.makeVList({positionType:"bottom",positionData:m,children:[{type:"kern",size:n.fontMetrics().bigOpSpacing5},{type:"elem",elem:u.elem,marginLeft:gt(-a)},{type:"kern",size:u.kern},{type:"elem",elem:t},{type:"kern",size:h.kern},{type:"elem",elem:h.elem,marginLeft:gt(a)},{type:"kern",size:n.fontMetrics().bigOpSpacing5}]},n)}else if(u){var g=t.height-s;p=Fe.makeVList({positionType:"top",positionData:g,children:[{type:"kern",size:n.fontMetrics().bigOpSpacing5},{type:"elem",elem:u.elem,marginLeft:gt(-a)},{type:"kern",size:u.kern},{type:"elem",elem:t}]},n)}else if(h){var y=t.depth+s;p=Fe.makeVList({positionType:"bottom",positionData:y,children:[{type:"elem",elem:t},{type:"kern",size:h.kern},{type:"elem",elem:h.elem,marginLeft:gt(a)},{type:"kern",size:n.fontMetrics().bigOpSpacing5}]},n)}else return t;var v=[p];if(u&&a!==0&&!l){var x=Fe.makeSpan(["mspace"],[],n);x.style.marginRight=gt(a),v.unshift(x)}return Fe.makeSpan(["mop","op-limits"],v,n)},"assembleSupSub"),v$=["\\smallint"],Cp=o((t,e)=>{var r,n,i=!1,a;t.type==="supsub"?(r=t.sup,n=t.sub,a=gr(t.base,"op"),i=!0):a=gr(t,"op");var s=e.style,l=!1;s.size===rr.DISPLAY.size&&a.symbol&&!Jt.contains(v$,a.name)&&(l=!0);var u;if(a.symbol){var h=l?"Size2-Regular":"Size1-Regular",f="";if((a.name==="\\oiint"||a.name==="\\oiiint")&&(f=a.name.slice(1),a.name=f==="oiint"?"\\iint":"\\iiint"),u=Fe.makeSymbol(a.name,h,"math",e,["mop","op-symbol",l?"large-op":"small-op"]),f.length>0){var d=u.italic,p=Fe.staticSvg(f+"Size"+(l?"2":"1"),e);u=Fe.makeVList({positionType:"individualShift",children:[{type:"elem",elem:u,shift:0},{type:"elem",elem:p,shift:l?.08:0}]},e),a.name="\\"+f,u.classes.unshift("mop"),u.italic=d}}else if(a.body){var m=Fi(a.body,e,!0);m.length===1&&m[0]instanceof Es?(u=m[0],u.classes[0]="mop"):u=Fe.makeSpan(["mop"],m,e)}else{for(var g=[],y=1;y{var r;if(t.symbol)r=new ks("mo",[Mo(t.name,t.mode)]),Jt.contains(v$,t.name)&&r.setAttribute("largeop","false");else if(t.body)r=new ks("mo",Ss(t.body,e));else{r=new ks("mi",[new td(t.name.slice(1))]);var n=new ks("mo",[Mo("\u2061","text")]);t.parentIsSupSub?r=new ks("mrow",[r,n]):r=YG([r,n])}return r},"mathmlBuilder$1"),D4e={"\u220F":"\\prod","\u2210":"\\coprod","\u2211":"\\sum","\u22C0":"\\bigwedge","\u22C1":"\\bigvee","\u22C2":"\\bigcap","\u22C3":"\\bigcup","\u2A00":"\\bigodot","\u2A01":"\\bigoplus","\u2A02":"\\bigotimes","\u2A04":"\\biguplus","\u2A06":"\\bigsqcup"};St({type:"op",names:["\\coprod","\\bigvee","\\bigwedge","\\biguplus","\\bigcap","\\bigcup","\\intop","\\prod","\\sum","\\bigotimes","\\bigoplus","\\bigodot","\\bigsqcup","\\smallint","\u220F","\u2210","\u2211","\u22C0","\u22C1","\u22C2","\u22C3","\u2A00","\u2A01","\u2A02","\u2A04","\u2A06"],props:{numArgs:0},handler:o((t,e)=>{var{parser:r,funcName:n}=t,i=n;return i.length===1&&(i=D4e[i]),{type:"op",mode:r.mode,limits:!0,parentIsSupSub:!1,symbol:!0,name:i}},"handler"),htmlBuilder:Cp,mathmlBuilder:vy});St({type:"op",names:["\\mathop"],props:{numArgs:1,primitive:!0},handler:o((t,e)=>{var{parser:r}=t,n=e[0];return{type:"op",mode:r.mode,limits:!1,parentIsSupSub:!1,symbol:!1,body:gi(n)}},"handler"),htmlBuilder:Cp,mathmlBuilder:vy});N4e={"\u222B":"\\int","\u222C":"\\iint","\u222D":"\\iiint","\u222E":"\\oint","\u222F":"\\oiint","\u2230":"\\oiiint"};St({type:"op",names:["\\arcsin","\\arccos","\\arctan","\\arctg","\\arcctg","\\arg","\\ch","\\cos","\\cosec","\\cosh","\\cot","\\cotg","\\coth","\\csc","\\ctg","\\cth","\\deg","\\dim","\\exp","\\hom","\\ker","\\lg","\\ln","\\log","\\sec","\\sin","\\sinh","\\sh","\\tan","\\tanh","\\tg","\\th"],props:{numArgs:0},handler(t){var{parser:e,funcName:r}=t;return{type:"op",mode:e.mode,limits:!1,parentIsSupSub:!1,symbol:!1,name:r}},htmlBuilder:Cp,mathmlBuilder:vy});St({type:"op",names:["\\det","\\gcd","\\inf","\\lim","\\max","\\min","\\Pr","\\sup"],props:{numArgs:0},handler(t){var{parser:e,funcName:r}=t;return{type:"op",mode:e.mode,limits:!0,parentIsSupSub:!1,symbol:!1,name:r}},htmlBuilder:Cp,mathmlBuilder:vy});St({type:"op",names:["\\int","\\iint","\\iiint","\\oint","\\oiint","\\oiiint","\u222B","\u222C","\u222D","\u222E","\u222F","\u2230"],props:{numArgs:0},handler(t){var{parser:e,funcName:r}=t,n=r;return n.length===1&&(n=N4e[n]),{type:"op",mode:e.mode,limits:!1,parentIsSupSub:!1,symbol:!0,name:n}},htmlBuilder:Cp,mathmlBuilder:vy});x$=o((t,e)=>{var r,n,i=!1,a;t.type==="supsub"?(r=t.sup,n=t.sub,a=gr(t.base,"operatorname"),i=!0):a=gr(t,"operatorname");var s;if(a.body.length>0){for(var l=a.body.map(d=>{var p=d.text;return typeof p=="string"?{type:"textord",mode:d.mode,text:p}:d}),u=Fi(l,e.withFont("mathrm"),!0),h=0;h{for(var r=Ss(t.body,e.withFont("mathrm")),n=!0,i=0;if.toText()).join("");r=[new at.TextNode(l)]}var u=new at.MathNode("mi",r);u.setAttribute("mathvariant","normal");var h=new at.MathNode("mo",[Mo("\u2061","text")]);return t.parentIsSupSub?new at.MathNode("mrow",[u,h]):at.newDocumentFragment([u,h])},"mathmlBuilder");St({type:"operatorname",names:["\\operatorname@","\\operatornamewithlimits"],props:{numArgs:1},handler:o((t,e)=>{var{parser:r,funcName:n}=t,i=e[0];return{type:"operatorname",mode:r.mode,body:gi(i),alwaysHandleSupSub:n==="\\operatornamewithlimits",limits:!1,parentIsSupSub:!1}},"handler"),htmlBuilder:x$,mathmlBuilder:R4e});le("\\operatorname","\\@ifstar\\operatornamewithlimits\\operatorname@");id({type:"ordgroup",htmlBuilder(t,e){return t.semisimple?Fe.makeFragment(Fi(t.body,e,!1)):Fe.makeSpan(["mord"],Fi(t.body,e,!0),e)},mathmlBuilder(t,e){return vh(t.body,e,!0)}});St({type:"overline",names:["\\overline"],props:{numArgs:1},handler(t,e){var{parser:r}=t,n=e[0];return{type:"overline",mode:r.mode,body:n}},htmlBuilder(t,e){var r=Pr(t.body,e.havingCrampedStyle()),n=Fe.makeLineSpan("overline-line",e),i=e.fontMetrics().defaultRuleThickness,a=Fe.makeVList({positionType:"firstBaseline",children:[{type:"elem",elem:r},{type:"kern",size:3*i},{type:"elem",elem:n},{type:"kern",size:i}]},e);return Fe.makeSpan(["mord","overline"],[a],e)},mathmlBuilder(t,e){var r=new at.MathNode("mo",[new at.TextNode("\u203E")]);r.setAttribute("stretchy","true");var n=new at.MathNode("mover",[yn(t.body,e),r]);return n.setAttribute("accent","true"),n}});St({type:"phantom",names:["\\phantom"],props:{numArgs:1,allowedInText:!0},handler:o((t,e)=>{var{parser:r}=t,n=e[0];return{type:"phantom",mode:r.mode,body:gi(n)}},"handler"),htmlBuilder:o((t,e)=>{var r=Fi(t.body,e.withPhantom(),!1);return Fe.makeFragment(r)},"htmlBuilder"),mathmlBuilder:o((t,e)=>{var r=Ss(t.body,e);return new at.MathNode("mphantom",r)},"mathmlBuilder")});St({type:"hphantom",names:["\\hphantom"],props:{numArgs:1,allowedInText:!0},handler:o((t,e)=>{var{parser:r}=t,n=e[0];return{type:"hphantom",mode:r.mode,body:n}},"handler"),htmlBuilder:o((t,e)=>{var r=Fe.makeSpan([],[Pr(t.body,e.withPhantom())]);if(r.height=0,r.depth=0,r.children)for(var n=0;n{var r=Ss(gi(t.body),e),n=new at.MathNode("mphantom",r),i=new at.MathNode("mpadded",[n]);return i.setAttribute("height","0px"),i.setAttribute("depth","0px"),i},"mathmlBuilder")});St({type:"vphantom",names:["\\vphantom"],props:{numArgs:1,allowedInText:!0},handler:o((t,e)=>{var{parser:r}=t,n=e[0];return{type:"vphantom",mode:r.mode,body:n}},"handler"),htmlBuilder:o((t,e)=>{var r=Fe.makeSpan(["inner"],[Pr(t.body,e.withPhantom())]),n=Fe.makeSpan(["fix"],[]);return Fe.makeSpan(["mord","rlap"],[r,n],e)},"htmlBuilder"),mathmlBuilder:o((t,e)=>{var r=Ss(gi(t.body),e),n=new at.MathNode("mphantom",r),i=new at.MathNode("mpadded",[n]);return i.setAttribute("width","0px"),i},"mathmlBuilder")});St({type:"raisebox",names:["\\raisebox"],props:{numArgs:2,argTypes:["size","hbox"],allowedInText:!0},handler(t,e){var{parser:r}=t,n=gr(e[0],"size").value,i=e[1];return{type:"raisebox",mode:r.mode,dy:n,body:i}},htmlBuilder(t,e){var r=Pr(t.body,e),n=Jn(t.dy,e);return Fe.makeVList({positionType:"shift",positionData:-n,children:[{type:"elem",elem:r}]},e)},mathmlBuilder(t,e){var r=new at.MathNode("mpadded",[yn(t.body,e)]),n=t.dy.number+t.dy.unit;return r.setAttribute("voffset",n),r}});St({type:"internal",names:["\\relax"],props:{numArgs:0,allowedInText:!0},handler(t){var{parser:e}=t;return{type:"internal",mode:e.mode}}});St({type:"rule",names:["\\rule"],props:{numArgs:2,numOptionalArgs:1,argTypes:["size","size","size"]},handler(t,e,r){var{parser:n}=t,i=r[0],a=gr(e[0],"size"),s=gr(e[1],"size");return{type:"rule",mode:n.mode,shift:i&&gr(i,"size").value,width:a.value,height:s.value}},htmlBuilder(t,e){var r=Fe.makeSpan(["mord","rule"],[],e),n=Jn(t.width,e),i=Jn(t.height,e),a=t.shift?Jn(t.shift,e):0;return r.style.borderRightWidth=gt(n),r.style.borderTopWidth=gt(i),r.style.bottom=gt(a),r.width=n,r.height=i+a,r.depth=-a,r.maxFontSize=i*1.125*e.sizeMultiplier,r},mathmlBuilder(t,e){var r=Jn(t.width,e),n=Jn(t.height,e),i=t.shift?Jn(t.shift,e):0,a=e.color&&e.getColor()||"black",s=new at.MathNode("mspace");s.setAttribute("mathbackground",a),s.setAttribute("width",gt(r)),s.setAttribute("height",gt(n));var l=new at.MathNode("mpadded",[s]);return i>=0?l.setAttribute("height",gt(i)):(l.setAttribute("height",gt(i)),l.setAttribute("depth",gt(-i))),l.setAttribute("voffset",gt(i)),l}});o(b$,"sizingGroup");TG=["\\tiny","\\sixptsize","\\scriptsize","\\footnotesize","\\small","\\normalsize","\\large","\\Large","\\LARGE","\\huge","\\Huge"],M4e=o((t,e)=>{var r=e.havingSize(t.size);return b$(t.body,r,e)},"htmlBuilder");St({type:"sizing",names:TG,props:{numArgs:0,allowedInText:!0},handler:o((t,e)=>{var{breakOnTokenText:r,funcName:n,parser:i}=t,a=i.parseExpression(!1,r);return{type:"sizing",mode:i.mode,size:TG.indexOf(n)+1,body:a}},"handler"),htmlBuilder:M4e,mathmlBuilder:o((t,e)=>{var r=e.havingSize(t.size),n=Ss(t.body,r),i=new at.MathNode("mstyle",n);return i.setAttribute("mathsize",gt(r.sizeMultiplier)),i},"mathmlBuilder")});St({type:"smash",names:["\\smash"],props:{numArgs:1,numOptionalArgs:1,allowedInText:!0},handler:o((t,e,r)=>{var{parser:n}=t,i=!1,a=!1,s=r[0]&&gr(r[0],"ordgroup");if(s)for(var l="",u=0;u{var r=Fe.makeSpan([],[Pr(t.body,e)]);if(!t.smashHeight&&!t.smashDepth)return r;if(t.smashHeight&&(r.height=0,r.children))for(var n=0;n{var r=new at.MathNode("mpadded",[yn(t.body,e)]);return t.smashHeight&&r.setAttribute("height","0px"),t.smashDepth&&r.setAttribute("depth","0px"),r},"mathmlBuilder")});St({type:"sqrt",names:["\\sqrt"],props:{numArgs:1,numOptionalArgs:1},handler(t,e,r){var{parser:n}=t,i=r[0],a=e[0];return{type:"sqrt",mode:n.mode,body:a,index:i}},htmlBuilder(t,e){var r=Pr(t.body,e.havingCrampedStyle());r.height===0&&(r.height=e.fontMetrics().xHeight),r=Fe.wrapFragment(r,e);var n=e.fontMetrics(),i=n.defaultRuleThickness,a=i;e.style.idr.height+r.depth+s&&(s=(s+d-r.height-r.depth)/2);var p=u.height-r.height-s-h;r.style.paddingLeft=gt(f);var m=Fe.makeVList({positionType:"firstBaseline",children:[{type:"elem",elem:r,wrapperClasses:["svg-align"]},{type:"kern",size:-(r.height+p)},{type:"elem",elem:u},{type:"kern",size:h}]},e);if(t.index){var g=e.havingStyle(rr.SCRIPTSCRIPT),y=Pr(t.index,g,e),v=.6*(m.height-m.depth),x=Fe.makeVList({positionType:"shift",positionData:-v,children:[{type:"elem",elem:y}]},e),b=Fe.makeSpan(["root"],[x]);return Fe.makeSpan(["mord","sqrt"],[b,m],e)}else return Fe.makeSpan(["mord","sqrt"],[m],e)},mathmlBuilder(t,e){var{body:r,index:n}=t;return n?new at.MathNode("mroot",[yn(r,e),yn(n,e)]):new at.MathNode("msqrt",[yn(r,e)])}});kG={display:rr.DISPLAY,text:rr.TEXT,script:rr.SCRIPT,scriptscript:rr.SCRIPTSCRIPT};St({type:"styling",names:["\\displaystyle","\\textstyle","\\scriptstyle","\\scriptscriptstyle"],props:{numArgs:0,allowedInText:!0,primitive:!0},handler(t,e){var{breakOnTokenText:r,funcName:n,parser:i}=t,a=i.parseExpression(!0,r),s=n.slice(1,n.length-5);return{type:"styling",mode:i.mode,style:s,body:a}},htmlBuilder(t,e){var r=kG[t.style],n=e.havingStyle(r).withFont("");return b$(t.body,n,e)},mathmlBuilder(t,e){var r=kG[t.style],n=e.havingStyle(r),i=Ss(t.body,n),a=new at.MathNode("mstyle",i),s={display:["0","true"],text:["0","false"],script:["1","false"],scriptscript:["2","false"]},l=s[t.style];return a.setAttribute("scriptlevel",l[0]),a.setAttribute("displaystyle",l[1]),a}});I4e=o(function(e,r){var n=e.base;if(n)if(n.type==="op"){var i=n.limits&&(r.style.size===rr.DISPLAY.size||n.alwaysHandleSupSub);return i?Cp:null}else if(n.type==="operatorname"){var a=n.alwaysHandleSupSub&&(r.style.size===rr.DISPLAY.size||n.limits);return a?x$:null}else{if(n.type==="accent")return Jt.isCharacterBox(n.base)?zC:null;if(n.type==="horizBrace"){var s=!e.sub;return s===n.isOver?g$:null}else return null}else return null},"htmlBuilderDelegate");id({type:"supsub",htmlBuilder(t,e){var r=I4e(t,e);if(r)return r(t,e);var{base:n,sup:i,sub:a}=t,s=Pr(n,e),l,u,h=e.fontMetrics(),f=0,d=0,p=n&&Jt.isCharacterBox(n);if(i){var m=e.havingStyle(e.style.sup());l=Pr(i,m,e),p||(f=s.height-m.fontMetrics().supDrop*m.sizeMultiplier/e.sizeMultiplier)}if(a){var g=e.havingStyle(e.style.sub());u=Pr(a,g,e),p||(d=s.depth+g.fontMetrics().subDrop*g.sizeMultiplier/e.sizeMultiplier)}var y;e.style===rr.DISPLAY?y=h.sup1:e.style.cramped?y=h.sup3:y=h.sup2;var v=e.sizeMultiplier,x=gt(.5/h.ptPerEm/v),b=null;if(u){var w=t.base&&t.base.type==="op"&&t.base.name&&(t.base.name==="\\oiint"||t.base.name==="\\oiiint");(s instanceof Es||w)&&(b=gt(-s.italic))}var _;if(l&&u){f=Math.max(f,y,l.depth+.25*h.xHeight),d=Math.max(d,h.sub2);var T=h.defaultRuleThickness,E=4*T;if(f-l.depth-(u.height-d)0&&(f+=L,d-=L)}var S=[{type:"elem",elem:u,shift:d,marginRight:x,marginLeft:b},{type:"elem",elem:l,shift:-f,marginRight:x}];_=Fe.makeVList({positionType:"individualShift",children:S},e)}else if(u){d=Math.max(d,h.sub1,u.height-.8*h.xHeight);var A=[{type:"elem",elem:u,marginLeft:b,marginRight:x}];_=Fe.makeVList({positionType:"shift",positionData:d,children:A},e)}else if(l)f=Math.max(f,y,l.depth+.25*h.xHeight),_=Fe.makeVList({positionType:"shift",positionData:-f,children:[{type:"elem",elem:l,marginRight:x}]},e);else throw new Error("supsub must have either sup or sub.");var I=SC(s,"right")||"mord";return Fe.makeSpan([I],[s,Fe.makeSpan(["msupsub"],[_])],e)},mathmlBuilder(t,e){var r=!1,n,i;t.base&&t.base.type==="horizBrace"&&(i=!!t.sup,i===t.base.isOver&&(r=!0,n=t.base.isOver)),t.base&&(t.base.type==="op"||t.base.type==="operatorname")&&(t.base.parentIsSupSub=!0);var a=[yn(t.base,e)];t.sub&&a.push(yn(t.sub,e)),t.sup&&a.push(yn(t.sup,e));var s;if(r)s=n?"mover":"munder";else if(t.sub)if(t.sup){var h=t.base;h&&h.type==="op"&&h.limits&&e.style===rr.DISPLAY||h&&h.type==="operatorname"&&h.alwaysHandleSupSub&&(e.style===rr.DISPLAY||h.limits)?s="munderover":s="msubsup"}else{var u=t.base;u&&u.type==="op"&&u.limits&&(e.style===rr.DISPLAY||u.alwaysHandleSupSub)||u&&u.type==="operatorname"&&u.alwaysHandleSupSub&&(u.limits||e.style===rr.DISPLAY)?s="munder":s="msub"}else{var l=t.base;l&&l.type==="op"&&l.limits&&(e.style===rr.DISPLAY||l.alwaysHandleSupSub)||l&&l.type==="operatorname"&&l.alwaysHandleSupSub&&(l.limits||e.style===rr.DISPLAY)?s="mover":s="msup"}return new at.MathNode(s,a)}});id({type:"atom",htmlBuilder(t,e){return Fe.mathsym(t.text,t.mode,e,["m"+t.family])},mathmlBuilder(t,e){var r=new at.MathNode("mo",[Mo(t.text,t.mode)]);if(t.family==="bin"){var n=BC(t,e);n==="bold-italic"&&r.setAttribute("mathvariant",n)}else t.family==="punct"?r.setAttribute("separator","true"):(t.family==="open"||t.family==="close")&&r.setAttribute("stretchy","false");return r}});w$={mi:"italic",mn:"normal",mtext:"normal"};id({type:"mathord",htmlBuilder(t,e){return Fe.makeOrd(t,e,"mathord")},mathmlBuilder(t,e){var r=new at.MathNode("mi",[Mo(t.text,t.mode,e)]),n=BC(t,e)||"italic";return n!==w$[r.type]&&r.setAttribute("mathvariant",n),r}});id({type:"textord",htmlBuilder(t,e){return Fe.makeOrd(t,e,"textord")},mathmlBuilder(t,e){var r=Mo(t.text,t.mode,e),n=BC(t,e)||"normal",i;return t.mode==="text"?i=new at.MathNode("mtext",[r]):/[0-9]/.test(t.text)?i=new at.MathNode("mn",[r]):t.text==="\\prime"?i=new at.MathNode("mo",[r]):i=new at.MathNode("mi",[r]),n!==w$[i.type]&&i.setAttribute("mathvariant",n),i}});vC={"\\nobreak":"nobreak","\\allowbreak":"allowbreak"},xC={" ":{},"\\ ":{},"~":{className:"nobreak"},"\\space":{},"\\nobreakspace":{className:"nobreak"}};id({type:"spacing",htmlBuilder(t,e){if(xC.hasOwnProperty(t.text)){var r=xC[t.text].className||"";if(t.mode==="text"){var n=Fe.makeOrd(t,e,"textord");return n.classes.push(r),n}else return Fe.makeSpan(["mspace",r],[Fe.mathsym(t.text,t.mode,e)],e)}else{if(vC.hasOwnProperty(t.text))return Fe.makeSpan(["mspace",vC[t.text]],[],e);throw new lt('Unknown type of space "'+t.text+'"')}},mathmlBuilder(t,e){var r;if(xC.hasOwnProperty(t.text))r=new at.MathNode("mtext",[new at.TextNode("\xA0")]);else{if(vC.hasOwnProperty(t.text))return new at.MathNode("mspace");throw new lt('Unknown type of space "'+t.text+'"')}return r}});EG=o(()=>{var t=new at.MathNode("mtd",[]);return t.setAttribute("width","50%"),t},"pad");id({type:"tag",mathmlBuilder(t,e){var r=new at.MathNode("mtable",[new at.MathNode("mtr",[EG(),new at.MathNode("mtd",[vh(t.body,e)]),EG(),new at.MathNode("mtd",[vh(t.tag,e)])])]);return r.setAttribute("width","100%"),r}});SG={"\\text":void 0,"\\textrm":"textrm","\\textsf":"textsf","\\texttt":"texttt","\\textnormal":"textrm"},CG={"\\textbf":"textbf","\\textmd":"textmd"},O4e={"\\textit":"textit","\\textup":"textup"},AG=o((t,e)=>{var r=t.font;if(r){if(SG[r])return e.withTextFontFamily(SG[r]);if(CG[r])return e.withTextFontWeight(CG[r]);if(r==="\\emph")return e.fontShape==="textit"?e.withTextFontShape("textup"):e.withTextFontShape("textit")}else return e;return e.withTextFontShape(O4e[r])},"optionsWithFont");St({type:"text",names:["\\text","\\textrm","\\textsf","\\texttt","\\textnormal","\\textbf","\\textmd","\\textit","\\textup","\\emph"],props:{numArgs:1,argTypes:["text"],allowedInArgument:!0,allowedInText:!0},handler(t,e){var{parser:r,funcName:n}=t,i=e[0];return{type:"text",mode:r.mode,body:gi(i),font:n}},htmlBuilder(t,e){var r=AG(t,e),n=Fi(t.body,r,!0);return Fe.makeSpan(["mord","text"],n,r)},mathmlBuilder(t,e){var r=AG(t,e);return vh(t.body,r)}});St({type:"underline",names:["\\underline"],props:{numArgs:1,allowedInText:!0},handler(t,e){var{parser:r}=t;return{type:"underline",mode:r.mode,body:e[0]}},htmlBuilder(t,e){var r=Pr(t.body,e),n=Fe.makeLineSpan("underline-line",e),i=e.fontMetrics().defaultRuleThickness,a=Fe.makeVList({positionType:"top",positionData:r.height,children:[{type:"kern",size:i},{type:"elem",elem:n},{type:"kern",size:3*i},{type:"elem",elem:r}]},e);return Fe.makeSpan(["mord","underline"],[a],e)},mathmlBuilder(t,e){var r=new at.MathNode("mo",[new at.TextNode("\u203E")]);r.setAttribute("stretchy","true");var n=new at.MathNode("munder",[yn(t.body,e),r]);return n.setAttribute("accentunder","true"),n}});St({type:"vcenter",names:["\\vcenter"],props:{numArgs:1,argTypes:["original"],allowedInText:!1},handler(t,e){var{parser:r}=t;return{type:"vcenter",mode:r.mode,body:e[0]}},htmlBuilder(t,e){var r=Pr(t.body,e),n=e.fontMetrics().axisHeight,i=.5*(r.height-n-(r.depth+n));return Fe.makeVList({positionType:"shift",positionData:i,children:[{type:"elem",elem:r}]},e)},mathmlBuilder(t,e){return new at.MathNode("mpadded",[yn(t.body,e)],["vcenter"])}});St({type:"verb",names:["\\verb"],props:{numArgs:0,allowedInText:!0},handler(t,e,r){throw new lt("\\verb ended by end of line instead of matching delimiter")},htmlBuilder(t,e){for(var r=_G(t),n=[],i=e.havingStyle(e.style.text()),a=0;at.body.replace(/ /g,t.star?"\u2423":"\xA0"),"makeVerb"),gh=HG,T$=`[ \r + ]`,P4e="\\\\[a-zA-Z@]+",B4e="\\\\[^\uD800-\uDFFF]",F4e="("+P4e+")"+T$+"*",z4e=`\\\\( +|[ \r ]+ +?)[ \r ]*`,DC="[\u0300-\u036F]",G4e=new RegExp(DC+"+$"),$4e="("+T$+"+)|"+(z4e+"|")+"([!-\\[\\]-\u2027\u202A-\uD7FF\uF900-\uFFFF]"+(DC+"*")+"|[\uD800-\uDBFF][\uDC00-\uDFFF]"+(DC+"*")+"|\\\\verb\\*([^]).*?\\4|\\\\verb([^*a-zA-Z]).*?\\5"+("|"+F4e)+("|"+B4e+")"),A4=class{static{o(this,"Lexer")}constructor(e,r){this.input=void 0,this.settings=void 0,this.tokenRegex=void 0,this.catcodes=void 0,this.input=e,this.settings=r,this.tokenRegex=new RegExp($4e,"g"),this.catcodes={"%":14,"~":13}}setCatcode(e,r){this.catcodes[e]=r}lex(){var e=this.input,r=this.tokenRegex.lastIndex;if(r===e.length)return new Ro("EOF",new Js(this,r,r));var n=this.tokenRegex.exec(e);if(n===null||n.index!==r)throw new lt("Unexpected character: '"+e[r]+"'",new Ro(e[r],new Js(this,r,r+1)));var i=n[6]||n[3]||(n[2]?"\\ ":" ");if(this.catcodes[i]===14){var a=e.indexOf(` +`,this.tokenRegex.lastIndex);return a===-1?(this.tokenRegex.lastIndex=e.length,this.settings.reportNonstrict("commentAtEnd","% comment has no terminating newline; LaTeX would fail because of commenting the end of math mode (e.g. $)")):this.tokenRegex.lastIndex=a+1,this.lex()}return new Ro(i,new Js(this,r,this.tokenRegex.lastIndex))}},NC=class{static{o(this,"Namespace")}constructor(e,r){e===void 0&&(e={}),r===void 0&&(r={}),this.current=void 0,this.builtins=void 0,this.undefStack=void 0,this.current=r,this.builtins=e,this.undefStack=[]}beginGroup(){this.undefStack.push({})}endGroup(){if(this.undefStack.length===0)throw new lt("Unbalanced namespace destruction: attempt to pop global namespace; please report this as a bug");var e=this.undefStack.pop();for(var r in e)e.hasOwnProperty(r)&&(e[r]==null?delete this.current[r]:this.current[r]=e[r])}endGroups(){for(;this.undefStack.length>0;)this.endGroup()}has(e){return this.current.hasOwnProperty(e)||this.builtins.hasOwnProperty(e)}get(e){return this.current.hasOwnProperty(e)?this.current[e]:this.builtins[e]}set(e,r,n){if(n===void 0&&(n=!1),n){for(var i=0;i0&&(this.undefStack[this.undefStack.length-1][e]=r)}else{var a=this.undefStack[this.undefStack.length-1];a&&!a.hasOwnProperty(e)&&(a[e]=this.current[e])}r==null?delete this.current[e]:this.current[e]=r}},V4e=h$;le("\\noexpand",function(t){var e=t.popToken();return t.isExpandable(e.text)&&(e.noexpand=!0,e.treatAsRelax=!0),{tokens:[e],numArgs:0}});le("\\expandafter",function(t){var e=t.popToken();return t.expandOnce(!0),{tokens:[e],numArgs:0}});le("\\@firstoftwo",function(t){var e=t.consumeArgs(2);return{tokens:e[0],numArgs:0}});le("\\@secondoftwo",function(t){var e=t.consumeArgs(2);return{tokens:e[1],numArgs:0}});le("\\@ifnextchar",function(t){var e=t.consumeArgs(3);t.consumeSpaces();var r=t.future();return e[0].length===1&&e[0][0].text===r.text?{tokens:e[1],numArgs:0}:{tokens:e[2],numArgs:0}});le("\\@ifstar","\\@ifnextchar *{\\@firstoftwo{#1}}");le("\\TextOrMath",function(t){var e=t.consumeArgs(2);return t.mode==="text"?{tokens:e[0],numArgs:0}:{tokens:e[1],numArgs:0}});LG={0:0,1:1,2:2,3:3,4:4,5:5,6:6,7:7,8:8,9:9,a:10,A:10,b:11,B:11,c:12,C:12,d:13,D:13,e:14,E:14,f:15,F:15};le("\\char",function(t){var e=t.popToken(),r,n="";if(e.text==="'")r=8,e=t.popToken();else if(e.text==='"')r=16,e=t.popToken();else if(e.text==="`")if(e=t.popToken(),e.text[0]==="\\")n=e.text.charCodeAt(1);else{if(e.text==="EOF")throw new lt("\\char` missing argument");n=e.text.charCodeAt(0)}else r=10;if(r){if(n=LG[e.text],n==null||n>=r)throw new lt("Invalid base-"+r+" digit "+e.text);for(var i;(i=LG[t.future().text])!=null&&i{var n=t.consumeArg().tokens;if(n.length!==1)throw new lt("\\newcommand's first argument must be a macro name");var i=n[0].text,a=t.isDefined(i);if(a&&!e)throw new lt("\\newcommand{"+i+"} attempting to redefine "+(i+"; use \\renewcommand"));if(!a&&!r)throw new lt("\\renewcommand{"+i+"} when command "+i+" does not yet exist; use \\newcommand");var s=0;if(n=t.consumeArg().tokens,n.length===1&&n[0].text==="["){for(var l="",u=t.expandNextToken();u.text!=="]"&&u.text!=="EOF";)l+=u.text,u=t.expandNextToken();if(!l.match(/^\s*[0-9]+\s*$/))throw new lt("Invalid number of arguments: "+l);s=parseInt(l),n=t.consumeArg().tokens}return t.macros.set(i,{tokens:n,numArgs:s}),""},"newcommand");le("\\newcommand",t=>qC(t,!1,!0));le("\\renewcommand",t=>qC(t,!0,!1));le("\\providecommand",t=>qC(t,!0,!0));le("\\message",t=>{var e=t.consumeArgs(1)[0];return console.log(e.reverse().map(r=>r.text).join("")),""});le("\\errmessage",t=>{var e=t.consumeArgs(1)[0];return console.error(e.reverse().map(r=>r.text).join("")),""});le("\\show",t=>{var e=t.popToken(),r=e.text;return console.log(e,t.macros.get(r),gh[r],Cn.math[r],Cn.text[r]),""});le("\\bgroup","{");le("\\egroup","}");le("~","\\nobreakspace");le("\\lq","`");le("\\rq","'");le("\\aa","\\r a");le("\\AA","\\r A");le("\\textcopyright","\\html@mathml{\\textcircled{c}}{\\char`\xA9}");le("\\copyright","\\TextOrMath{\\textcopyright}{\\text{\\textcopyright}}");le("\\textregistered","\\html@mathml{\\textcircled{\\scriptsize R}}{\\char`\xAE}");le("\u212C","\\mathscr{B}");le("\u2130","\\mathscr{E}");le("\u2131","\\mathscr{F}");le("\u210B","\\mathscr{H}");le("\u2110","\\mathscr{I}");le("\u2112","\\mathscr{L}");le("\u2133","\\mathscr{M}");le("\u211B","\\mathscr{R}");le("\u212D","\\mathfrak{C}");le("\u210C","\\mathfrak{H}");le("\u2128","\\mathfrak{Z}");le("\\Bbbk","\\Bbb{k}");le("\xB7","\\cdotp");le("\\llap","\\mathllap{\\textrm{#1}}");le("\\rlap","\\mathrlap{\\textrm{#1}}");le("\\clap","\\mathclap{\\textrm{#1}}");le("\\mathstrut","\\vphantom{(}");le("\\underbar","\\underline{\\text{#1}}");le("\\not",'\\html@mathml{\\mathrel{\\mathrlap\\@not}}{\\char"338}');le("\\neq","\\html@mathml{\\mathrel{\\not=}}{\\mathrel{\\char`\u2260}}");le("\\ne","\\neq");le("\u2260","\\neq");le("\\notin","\\html@mathml{\\mathrel{{\\in}\\mathllap{/\\mskip1mu}}}{\\mathrel{\\char`\u2209}}");le("\u2209","\\notin");le("\u2258","\\html@mathml{\\mathrel{=\\kern{-1em}\\raisebox{0.4em}{$\\scriptsize\\frown$}}}{\\mathrel{\\char`\u2258}}");le("\u2259","\\html@mathml{\\stackrel{\\tiny\\wedge}{=}}{\\mathrel{\\char`\u2258}}");le("\u225A","\\html@mathml{\\stackrel{\\tiny\\vee}{=}}{\\mathrel{\\char`\u225A}}");le("\u225B","\\html@mathml{\\stackrel{\\scriptsize\\star}{=}}{\\mathrel{\\char`\u225B}}");le("\u225D","\\html@mathml{\\stackrel{\\tiny\\mathrm{def}}{=}}{\\mathrel{\\char`\u225D}}");le("\u225E","\\html@mathml{\\stackrel{\\tiny\\mathrm{m}}{=}}{\\mathrel{\\char`\u225E}}");le("\u225F","\\html@mathml{\\stackrel{\\tiny?}{=}}{\\mathrel{\\char`\u225F}}");le("\u27C2","\\perp");le("\u203C","\\mathclose{!\\mkern-0.8mu!}");le("\u220C","\\notni");le("\u231C","\\ulcorner");le("\u231D","\\urcorner");le("\u231E","\\llcorner");le("\u231F","\\lrcorner");le("\xA9","\\copyright");le("\xAE","\\textregistered");le("\uFE0F","\\textregistered");le("\\ulcorner",'\\html@mathml{\\@ulcorner}{\\mathop{\\char"231c}}');le("\\urcorner",'\\html@mathml{\\@urcorner}{\\mathop{\\char"231d}}');le("\\llcorner",'\\html@mathml{\\@llcorner}{\\mathop{\\char"231e}}');le("\\lrcorner",'\\html@mathml{\\@lrcorner}{\\mathop{\\char"231f}}');le("\\vdots","\\mathord{\\varvdots\\rule{0pt}{15pt}}");le("\u22EE","\\vdots");le("\\varGamma","\\mathit{\\Gamma}");le("\\varDelta","\\mathit{\\Delta}");le("\\varTheta","\\mathit{\\Theta}");le("\\varLambda","\\mathit{\\Lambda}");le("\\varXi","\\mathit{\\Xi}");le("\\varPi","\\mathit{\\Pi}");le("\\varSigma","\\mathit{\\Sigma}");le("\\varUpsilon","\\mathit{\\Upsilon}");le("\\varPhi","\\mathit{\\Phi}");le("\\varPsi","\\mathit{\\Psi}");le("\\varOmega","\\mathit{\\Omega}");le("\\substack","\\begin{subarray}{c}#1\\end{subarray}");le("\\colon","\\nobreak\\mskip2mu\\mathpunct{}\\mathchoice{\\mkern-3mu}{\\mkern-3mu}{}{}{:}\\mskip6mu\\relax");le("\\boxed","\\fbox{$\\displaystyle{#1}$}");le("\\iff","\\DOTSB\\;\\Longleftrightarrow\\;");le("\\implies","\\DOTSB\\;\\Longrightarrow\\;");le("\\impliedby","\\DOTSB\\;\\Longleftarrow\\;");DG={",":"\\dotsc","\\not":"\\dotsb","+":"\\dotsb","=":"\\dotsb","<":"\\dotsb",">":"\\dotsb","-":"\\dotsb","*":"\\dotsb",":":"\\dotsb","\\DOTSB":"\\dotsb","\\coprod":"\\dotsb","\\bigvee":"\\dotsb","\\bigwedge":"\\dotsb","\\biguplus":"\\dotsb","\\bigcap":"\\dotsb","\\bigcup":"\\dotsb","\\prod":"\\dotsb","\\sum":"\\dotsb","\\bigotimes":"\\dotsb","\\bigoplus":"\\dotsb","\\bigodot":"\\dotsb","\\bigsqcup":"\\dotsb","\\And":"\\dotsb","\\longrightarrow":"\\dotsb","\\Longrightarrow":"\\dotsb","\\longleftarrow":"\\dotsb","\\Longleftarrow":"\\dotsb","\\longleftrightarrow":"\\dotsb","\\Longleftrightarrow":"\\dotsb","\\mapsto":"\\dotsb","\\longmapsto":"\\dotsb","\\hookrightarrow":"\\dotsb","\\doteq":"\\dotsb","\\mathbin":"\\dotsb","\\mathrel":"\\dotsb","\\relbar":"\\dotsb","\\Relbar":"\\dotsb","\\xrightarrow":"\\dotsb","\\xleftarrow":"\\dotsb","\\DOTSI":"\\dotsi","\\int":"\\dotsi","\\oint":"\\dotsi","\\iint":"\\dotsi","\\iiint":"\\dotsi","\\iiiint":"\\dotsi","\\idotsint":"\\dotsi","\\DOTSX":"\\dotsx"};le("\\dots",function(t){var e="\\dotso",r=t.expandAfterFuture().text;return r in DG?e=DG[r]:(r.slice(0,4)==="\\not"||r in Cn.math&&Jt.contains(["bin","rel"],Cn.math[r].group))&&(e="\\dotsb"),e});XC={")":!0,"]":!0,"\\rbrack":!0,"\\}":!0,"\\rbrace":!0,"\\rangle":!0,"\\rceil":!0,"\\rfloor":!0,"\\rgroup":!0,"\\rmoustache":!0,"\\right":!0,"\\bigr":!0,"\\biggr":!0,"\\Bigr":!0,"\\Biggr":!0,$:!0,";":!0,".":!0,",":!0};le("\\dotso",function(t){var e=t.future().text;return e in XC?"\\ldots\\,":"\\ldots"});le("\\dotsc",function(t){var e=t.future().text;return e in XC&&e!==","?"\\ldots\\,":"\\ldots"});le("\\cdots",function(t){var e=t.future().text;return e in XC?"\\@cdots\\,":"\\@cdots"});le("\\dotsb","\\cdots");le("\\dotsm","\\cdots");le("\\dotsi","\\!\\cdots");le("\\dotsx","\\ldots\\,");le("\\DOTSI","\\relax");le("\\DOTSB","\\relax");le("\\DOTSX","\\relax");le("\\tmspace","\\TextOrMath{\\kern#1#3}{\\mskip#1#2}\\relax");le("\\,","\\tmspace+{3mu}{.1667em}");le("\\thinspace","\\,");le("\\>","\\mskip{4mu}");le("\\:","\\tmspace+{4mu}{.2222em}");le("\\medspace","\\:");le("\\;","\\tmspace+{5mu}{.2777em}");le("\\thickspace","\\;");le("\\!","\\tmspace-{3mu}{.1667em}");le("\\negthinspace","\\!");le("\\negmedspace","\\tmspace-{4mu}{.2222em}");le("\\negthickspace","\\tmspace-{5mu}{.277em}");le("\\enspace","\\kern.5em ");le("\\enskip","\\hskip.5em\\relax");le("\\quad","\\hskip1em\\relax");le("\\qquad","\\hskip2em\\relax");le("\\tag","\\@ifstar\\tag@literal\\tag@paren");le("\\tag@paren","\\tag@literal{({#1})}");le("\\tag@literal",t=>{if(t.macros.get("\\df@tag"))throw new lt("Multiple \\tag");return"\\gdef\\df@tag{\\text{#1}}"});le("\\bmod","\\mathchoice{\\mskip1mu}{\\mskip1mu}{\\mskip5mu}{\\mskip5mu}\\mathbin{\\rm mod}\\mathchoice{\\mskip1mu}{\\mskip1mu}{\\mskip5mu}{\\mskip5mu}");le("\\pod","\\allowbreak\\mathchoice{\\mkern18mu}{\\mkern8mu}{\\mkern8mu}{\\mkern8mu}(#1)");le("\\pmod","\\pod{{\\rm mod}\\mkern6mu#1}");le("\\mod","\\allowbreak\\mathchoice{\\mkern18mu}{\\mkern12mu}{\\mkern12mu}{\\mkern12mu}{\\rm mod}\\,\\,#1");le("\\newline","\\\\\\relax");le("\\TeX","\\textrm{\\html@mathml{T\\kern-.1667em\\raisebox{-.5ex}{E}\\kern-.125emX}{TeX}}");k$=gt(lc["Main-Regular"][84][1]-.7*lc["Main-Regular"][65][1]);le("\\LaTeX","\\textrm{\\html@mathml{"+("L\\kern-.36em\\raisebox{"+k$+"}{\\scriptstyle A}")+"\\kern-.15em\\TeX}{LaTeX}}");le("\\KaTeX","\\textrm{\\html@mathml{"+("K\\kern-.17em\\raisebox{"+k$+"}{\\scriptstyle A}")+"\\kern-.15em\\TeX}{KaTeX}}");le("\\hspace","\\@ifstar\\@hspacer\\@hspace");le("\\@hspace","\\hskip #1\\relax");le("\\@hspacer","\\rule{0pt}{0pt}\\hskip #1\\relax");le("\\ordinarycolon",":");le("\\vcentcolon","\\mathrel{\\mathop\\ordinarycolon}");le("\\dblcolon",'\\html@mathml{\\mathrel{\\vcentcolon\\mathrel{\\mkern-.9mu}\\vcentcolon}}{\\mathop{\\char"2237}}');le("\\coloneqq",'\\html@mathml{\\mathrel{\\vcentcolon\\mathrel{\\mkern-1.2mu}=}}{\\mathop{\\char"2254}}');le("\\Coloneqq",'\\html@mathml{\\mathrel{\\dblcolon\\mathrel{\\mkern-1.2mu}=}}{\\mathop{\\char"2237\\char"3d}}');le("\\coloneq",'\\html@mathml{\\mathrel{\\vcentcolon\\mathrel{\\mkern-1.2mu}\\mathrel{-}}}{\\mathop{\\char"3a\\char"2212}}');le("\\Coloneq",'\\html@mathml{\\mathrel{\\dblcolon\\mathrel{\\mkern-1.2mu}\\mathrel{-}}}{\\mathop{\\char"2237\\char"2212}}');le("\\eqqcolon",'\\html@mathml{\\mathrel{=\\mathrel{\\mkern-1.2mu}\\vcentcolon}}{\\mathop{\\char"2255}}');le("\\Eqqcolon",'\\html@mathml{\\mathrel{=\\mathrel{\\mkern-1.2mu}\\dblcolon}}{\\mathop{\\char"3d\\char"2237}}');le("\\eqcolon",'\\html@mathml{\\mathrel{\\mathrel{-}\\mathrel{\\mkern-1.2mu}\\vcentcolon}}{\\mathop{\\char"2239}}');le("\\Eqcolon",'\\html@mathml{\\mathrel{\\mathrel{-}\\mathrel{\\mkern-1.2mu}\\dblcolon}}{\\mathop{\\char"2212\\char"2237}}');le("\\colonapprox",'\\html@mathml{\\mathrel{\\vcentcolon\\mathrel{\\mkern-1.2mu}\\approx}}{\\mathop{\\char"3a\\char"2248}}');le("\\Colonapprox",'\\html@mathml{\\mathrel{\\dblcolon\\mathrel{\\mkern-1.2mu}\\approx}}{\\mathop{\\char"2237\\char"2248}}');le("\\colonsim",'\\html@mathml{\\mathrel{\\vcentcolon\\mathrel{\\mkern-1.2mu}\\sim}}{\\mathop{\\char"3a\\char"223c}}');le("\\Colonsim",'\\html@mathml{\\mathrel{\\dblcolon\\mathrel{\\mkern-1.2mu}\\sim}}{\\mathop{\\char"2237\\char"223c}}');le("\u2237","\\dblcolon");le("\u2239","\\eqcolon");le("\u2254","\\coloneqq");le("\u2255","\\eqqcolon");le("\u2A74","\\Coloneqq");le("\\ratio","\\vcentcolon");le("\\coloncolon","\\dblcolon");le("\\colonequals","\\coloneqq");le("\\coloncolonequals","\\Coloneqq");le("\\equalscolon","\\eqqcolon");le("\\equalscoloncolon","\\Eqqcolon");le("\\colonminus","\\coloneq");le("\\coloncolonminus","\\Coloneq");le("\\minuscolon","\\eqcolon");le("\\minuscoloncolon","\\Eqcolon");le("\\coloncolonapprox","\\Colonapprox");le("\\coloncolonsim","\\Colonsim");le("\\simcolon","\\mathrel{\\sim\\mathrel{\\mkern-1.2mu}\\vcentcolon}");le("\\simcoloncolon","\\mathrel{\\sim\\mathrel{\\mkern-1.2mu}\\dblcolon}");le("\\approxcolon","\\mathrel{\\approx\\mathrel{\\mkern-1.2mu}\\vcentcolon}");le("\\approxcoloncolon","\\mathrel{\\approx\\mathrel{\\mkern-1.2mu}\\dblcolon}");le("\\notni","\\html@mathml{\\not\\ni}{\\mathrel{\\char`\u220C}}");le("\\limsup","\\DOTSB\\operatorname*{lim\\,sup}");le("\\liminf","\\DOTSB\\operatorname*{lim\\,inf}");le("\\injlim","\\DOTSB\\operatorname*{inj\\,lim}");le("\\projlim","\\DOTSB\\operatorname*{proj\\,lim}");le("\\varlimsup","\\DOTSB\\operatorname*{\\overline{lim}}");le("\\varliminf","\\DOTSB\\operatorname*{\\underline{lim}}");le("\\varinjlim","\\DOTSB\\operatorname*{\\underrightarrow{lim}}");le("\\varprojlim","\\DOTSB\\operatorname*{\\underleftarrow{lim}}");le("\\gvertneqq","\\html@mathml{\\@gvertneqq}{\u2269}");le("\\lvertneqq","\\html@mathml{\\@lvertneqq}{\u2268}");le("\\ngeqq","\\html@mathml{\\@ngeqq}{\u2271}");le("\\ngeqslant","\\html@mathml{\\@ngeqslant}{\u2271}");le("\\nleqq","\\html@mathml{\\@nleqq}{\u2270}");le("\\nleqslant","\\html@mathml{\\@nleqslant}{\u2270}");le("\\nshortmid","\\html@mathml{\\@nshortmid}{\u2224}");le("\\nshortparallel","\\html@mathml{\\@nshortparallel}{\u2226}");le("\\nsubseteqq","\\html@mathml{\\@nsubseteqq}{\u2288}");le("\\nsupseteqq","\\html@mathml{\\@nsupseteqq}{\u2289}");le("\\varsubsetneq","\\html@mathml{\\@varsubsetneq}{\u228A}");le("\\varsubsetneqq","\\html@mathml{\\@varsubsetneqq}{\u2ACB}");le("\\varsupsetneq","\\html@mathml{\\@varsupsetneq}{\u228B}");le("\\varsupsetneqq","\\html@mathml{\\@varsupsetneqq}{\u2ACC}");le("\\imath","\\html@mathml{\\@imath}{\u0131}");le("\\jmath","\\html@mathml{\\@jmath}{\u0237}");le("\\llbracket","\\html@mathml{\\mathopen{[\\mkern-3.2mu[}}{\\mathopen{\\char`\u27E6}}");le("\\rrbracket","\\html@mathml{\\mathclose{]\\mkern-3.2mu]}}{\\mathclose{\\char`\u27E7}}");le("\u27E6","\\llbracket");le("\u27E7","\\rrbracket");le("\\lBrace","\\html@mathml{\\mathopen{\\{\\mkern-3.2mu[}}{\\mathopen{\\char`\u2983}}");le("\\rBrace","\\html@mathml{\\mathclose{]\\mkern-3.2mu\\}}}{\\mathclose{\\char`\u2984}}");le("\u2983","\\lBrace");le("\u2984","\\rBrace");le("\\minuso","\\mathbin{\\html@mathml{{\\mathrlap{\\mathchoice{\\kern{0.145em}}{\\kern{0.145em}}{\\kern{0.1015em}}{\\kern{0.0725em}}\\circ}{-}}}{\\char`\u29B5}}");le("\u29B5","\\minuso");le("\\darr","\\downarrow");le("\\dArr","\\Downarrow");le("\\Darr","\\Downarrow");le("\\lang","\\langle");le("\\rang","\\rangle");le("\\uarr","\\uparrow");le("\\uArr","\\Uparrow");le("\\Uarr","\\Uparrow");le("\\N","\\mathbb{N}");le("\\R","\\mathbb{R}");le("\\Z","\\mathbb{Z}");le("\\alef","\\aleph");le("\\alefsym","\\aleph");le("\\Alpha","\\mathrm{A}");le("\\Beta","\\mathrm{B}");le("\\bull","\\bullet");le("\\Chi","\\mathrm{X}");le("\\clubs","\\clubsuit");le("\\cnums","\\mathbb{C}");le("\\Complex","\\mathbb{C}");le("\\Dagger","\\ddagger");le("\\diamonds","\\diamondsuit");le("\\empty","\\emptyset");le("\\Epsilon","\\mathrm{E}");le("\\Eta","\\mathrm{H}");le("\\exist","\\exists");le("\\harr","\\leftrightarrow");le("\\hArr","\\Leftrightarrow");le("\\Harr","\\Leftrightarrow");le("\\hearts","\\heartsuit");le("\\image","\\Im");le("\\infin","\\infty");le("\\Iota","\\mathrm{I}");le("\\isin","\\in");le("\\Kappa","\\mathrm{K}");le("\\larr","\\leftarrow");le("\\lArr","\\Leftarrow");le("\\Larr","\\Leftarrow");le("\\lrarr","\\leftrightarrow");le("\\lrArr","\\Leftrightarrow");le("\\Lrarr","\\Leftrightarrow");le("\\Mu","\\mathrm{M}");le("\\natnums","\\mathbb{N}");le("\\Nu","\\mathrm{N}");le("\\Omicron","\\mathrm{O}");le("\\plusmn","\\pm");le("\\rarr","\\rightarrow");le("\\rArr","\\Rightarrow");le("\\Rarr","\\Rightarrow");le("\\real","\\Re");le("\\reals","\\mathbb{R}");le("\\Reals","\\mathbb{R}");le("\\Rho","\\mathrm{P}");le("\\sdot","\\cdot");le("\\sect","\\S");le("\\spades","\\spadesuit");le("\\sub","\\subset");le("\\sube","\\subseteq");le("\\supe","\\supseteq");le("\\Tau","\\mathrm{T}");le("\\thetasym","\\vartheta");le("\\weierp","\\wp");le("\\Zeta","\\mathrm{Z}");le("\\argmin","\\DOTSB\\operatorname*{arg\\,min}");le("\\argmax","\\DOTSB\\operatorname*{arg\\,max}");le("\\plim","\\DOTSB\\mathop{\\operatorname{plim}}\\limits");le("\\bra","\\mathinner{\\langle{#1}|}");le("\\ket","\\mathinner{|{#1}\\rangle}");le("\\braket","\\mathinner{\\langle{#1}\\rangle}");le("\\Bra","\\left\\langle#1\\right|");le("\\Ket","\\left|#1\\right\\rangle");E$=o(t=>e=>{var r=e.consumeArg().tokens,n=e.consumeArg().tokens,i=e.consumeArg().tokens,a=e.consumeArg().tokens,s=e.macros.get("|"),l=e.macros.get("\\|");e.macros.beginGroup();var u=o(d=>p=>{t&&(p.macros.set("|",s),i.length&&p.macros.set("\\|",l));var m=d;if(!d&&i.length){var g=p.future();g.text==="|"&&(p.popToken(),m=!0)}return{tokens:m?i:n,numArgs:0}},"midMacro");e.macros.set("|",u(!1)),i.length&&e.macros.set("\\|",u(!0));var h=e.consumeArg().tokens,f=e.expandTokens([...a,...h,...r]);return e.macros.endGroup(),{tokens:f.reverse(),numArgs:0}},"braketHelper");le("\\bra@ket",E$(!1));le("\\bra@set",E$(!0));le("\\Braket","\\bra@ket{\\left\\langle}{\\,\\middle\\vert\\,}{\\,\\middle\\vert\\,}{\\right\\rangle}");le("\\Set","\\bra@set{\\left\\{\\:}{\\;\\middle\\vert\\;}{\\;\\middle\\Vert\\;}{\\:\\right\\}}");le("\\set","\\bra@set{\\{\\,}{\\mid}{}{\\,\\}}");le("\\angln","{\\angl n}");le("\\blue","\\textcolor{##6495ed}{#1}");le("\\orange","\\textcolor{##ffa500}{#1}");le("\\pink","\\textcolor{##ff00af}{#1}");le("\\red","\\textcolor{##df0030}{#1}");le("\\green","\\textcolor{##28ae7b}{#1}");le("\\gray","\\textcolor{gray}{#1}");le("\\purple","\\textcolor{##9d38bd}{#1}");le("\\blueA","\\textcolor{##ccfaff}{#1}");le("\\blueB","\\textcolor{##80f6ff}{#1}");le("\\blueC","\\textcolor{##63d9ea}{#1}");le("\\blueD","\\textcolor{##11accd}{#1}");le("\\blueE","\\textcolor{##0c7f99}{#1}");le("\\tealA","\\textcolor{##94fff5}{#1}");le("\\tealB","\\textcolor{##26edd5}{#1}");le("\\tealC","\\textcolor{##01d1c1}{#1}");le("\\tealD","\\textcolor{##01a995}{#1}");le("\\tealE","\\textcolor{##208170}{#1}");le("\\greenA","\\textcolor{##b6ffb0}{#1}");le("\\greenB","\\textcolor{##8af281}{#1}");le("\\greenC","\\textcolor{##74cf70}{#1}");le("\\greenD","\\textcolor{##1fab54}{#1}");le("\\greenE","\\textcolor{##0d923f}{#1}");le("\\goldA","\\textcolor{##ffd0a9}{#1}");le("\\goldB","\\textcolor{##ffbb71}{#1}");le("\\goldC","\\textcolor{##ff9c39}{#1}");le("\\goldD","\\textcolor{##e07d10}{#1}");le("\\goldE","\\textcolor{##a75a05}{#1}");le("\\redA","\\textcolor{##fca9a9}{#1}");le("\\redB","\\textcolor{##ff8482}{#1}");le("\\redC","\\textcolor{##f9685d}{#1}");le("\\redD","\\textcolor{##e84d39}{#1}");le("\\redE","\\textcolor{##bc2612}{#1}");le("\\maroonA","\\textcolor{##ffbde0}{#1}");le("\\maroonB","\\textcolor{##ff92c6}{#1}");le("\\maroonC","\\textcolor{##ed5fa6}{#1}");le("\\maroonD","\\textcolor{##ca337c}{#1}");le("\\maroonE","\\textcolor{##9e034e}{#1}");le("\\purpleA","\\textcolor{##ddd7ff}{#1}");le("\\purpleB","\\textcolor{##c6b9fc}{#1}");le("\\purpleC","\\textcolor{##aa87ff}{#1}");le("\\purpleD","\\textcolor{##7854ab}{#1}");le("\\purpleE","\\textcolor{##543b78}{#1}");le("\\mintA","\\textcolor{##f5f9e8}{#1}");le("\\mintB","\\textcolor{##edf2df}{#1}");le("\\mintC","\\textcolor{##e0e5cc}{#1}");le("\\grayA","\\textcolor{##f6f7f7}{#1}");le("\\grayB","\\textcolor{##f0f1f2}{#1}");le("\\grayC","\\textcolor{##e3e5e6}{#1}");le("\\grayD","\\textcolor{##d6d8da}{#1}");le("\\grayE","\\textcolor{##babec2}{#1}");le("\\grayF","\\textcolor{##888d93}{#1}");le("\\grayG","\\textcolor{##626569}{#1}");le("\\grayH","\\textcolor{##3b3e40}{#1}");le("\\grayI","\\textcolor{##21242c}{#1}");le("\\kaBlue","\\textcolor{##314453}{#1}");le("\\kaGreen","\\textcolor{##71B307}{#1}");S$={"^":!0,_:!0,"\\limits":!0,"\\nolimits":!0},RC=class{static{o(this,"MacroExpander")}constructor(e,r,n){this.settings=void 0,this.expansionCount=void 0,this.lexer=void 0,this.macros=void 0,this.stack=void 0,this.mode=void 0,this.settings=r,this.expansionCount=0,this.feed(e),this.macros=new NC(V4e,r.macros),this.mode=n,this.stack=[]}feed(e){this.lexer=new A4(e,this.settings)}switchMode(e){this.mode=e}beginGroup(){this.macros.beginGroup()}endGroup(){this.macros.endGroup()}endGroups(){this.macros.endGroups()}future(){return this.stack.length===0&&this.pushToken(this.lexer.lex()),this.stack[this.stack.length-1]}popToken(){return this.future(),this.stack.pop()}pushToken(e){this.stack.push(e)}pushTokens(e){this.stack.push(...e)}scanArgument(e){var r,n,i;if(e){if(this.consumeSpaces(),this.future().text!=="[")return null;r=this.popToken(),{tokens:i,end:n}=this.consumeArg(["]"])}else({tokens:i,start:r,end:n}=this.consumeArg());return this.pushToken(new Ro("EOF",n.loc)),this.pushTokens(i),r.range(n,"")}consumeSpaces(){for(;;){var e=this.future();if(e.text===" ")this.stack.pop();else break}}consumeArg(e){var r=[],n=e&&e.length>0;n||this.consumeSpaces();var i=this.future(),a,s=0,l=0;do{if(a=this.popToken(),r.push(a),a.text==="{")++s;else if(a.text==="}"){if(--s,s===-1)throw new lt("Extra }",a)}else if(a.text==="EOF")throw new lt("Unexpected end of input in a macro argument, expected '"+(e&&n?e[l]:"}")+"'",a);if(e&&n)if((s===0||s===1&&e[l]==="{")&&a.text===e[l]){if(++l,l===e.length){r.splice(-l,l);break}}else l=0}while(s!==0||n);return i.text==="{"&&r[r.length-1].text==="}"&&(r.pop(),r.shift()),r.reverse(),{tokens:r,start:i,end:a}}consumeArgs(e,r){if(r){if(r.length!==e+1)throw new lt("The length of delimiters doesn't match the number of args!");for(var n=r[0],i=0;ithis.settings.maxExpand)throw new lt("Too many expansions: infinite loop or need to increase maxExpand setting")}expandOnce(e){var r=this.popToken(),n=r.text,i=r.noexpand?null:this._getExpansion(n);if(i==null||e&&i.unexpandable){if(e&&i==null&&n[0]==="\\"&&!this.isDefined(n))throw new lt("Undefined control sequence: "+n);return this.pushToken(r),!1}this.countExpansion(1);var a=i.tokens,s=this.consumeArgs(i.numArgs,i.delimiters);if(i.numArgs){a=a.slice();for(var l=a.length-1;l>=0;--l){var u=a[l];if(u.text==="#"){if(l===0)throw new lt("Incomplete placeholder at end of macro body",u);if(u=a[--l],u.text==="#")a.splice(l+1,1);else if(/^[1-9]$/.test(u.text))a.splice(l,2,...s[+u.text-1]);else throw new lt("Not a valid argument number",u)}}}return this.pushTokens(a),a.length}expandAfterFuture(){return this.expandOnce(),this.future()}expandNextToken(){for(;;)if(this.expandOnce()===!1){var e=this.stack.pop();return e.treatAsRelax&&(e.text="\\relax"),e}throw new Error}expandMacro(e){return this.macros.has(e)?this.expandTokens([new Ro(e)]):void 0}expandTokens(e){var r=[],n=this.stack.length;for(this.pushTokens(e);this.stack.length>n;)if(this.expandOnce(!0)===!1){var i=this.stack.pop();i.treatAsRelax&&(i.noexpand=!1,i.treatAsRelax=!1),r.push(i)}return this.countExpansion(r.length),r}expandMacroAsText(e){var r=this.expandMacro(e);return r&&r.map(n=>n.text).join("")}_getExpansion(e){var r=this.macros.get(e);if(r==null)return r;if(e.length===1){var n=this.lexer.catcodes[e];if(n!=null&&n!==13)return}var i=typeof r=="function"?r(this):r;if(typeof i=="string"){var a=0;if(i.indexOf("#")!==-1)for(var s=i.replace(/##/g,"");s.indexOf("#"+(a+1))!==-1;)++a;for(var l=new A4(i,this.settings),u=[],h=l.lex();h.text!=="EOF";)u.push(h),h=l.lex();u.reverse();var f={tokens:u,numArgs:a};return f}return i}isDefined(e){return this.macros.has(e)||gh.hasOwnProperty(e)||Cn.math.hasOwnProperty(e)||Cn.text.hasOwnProperty(e)||S$.hasOwnProperty(e)}isExpandable(e){var r=this.macros.get(e);return r!=null?typeof r=="string"||typeof r=="function"||!r.unexpandable:gh.hasOwnProperty(e)&&!gh[e].primitive}},NG=/^[₊₋₌₍₎₀₁₂₃₄₅₆₇₈₉ₐₑₕᵢⱼₖₗₘₙₒₚᵣₛₜᵤᵥₓᵦᵧᵨᵩᵪ]/,v4=Object.freeze({"\u208A":"+","\u208B":"-","\u208C":"=","\u208D":"(","\u208E":")","\u2080":"0","\u2081":"1","\u2082":"2","\u2083":"3","\u2084":"4","\u2085":"5","\u2086":"6","\u2087":"7","\u2088":"8","\u2089":"9","\u2090":"a","\u2091":"e","\u2095":"h","\u1D62":"i","\u2C7C":"j","\u2096":"k","\u2097":"l","\u2098":"m","\u2099":"n","\u2092":"o","\u209A":"p","\u1D63":"r","\u209B":"s","\u209C":"t","\u1D64":"u","\u1D65":"v","\u2093":"x","\u1D66":"\u03B2","\u1D67":"\u03B3","\u1D68":"\u03C1","\u1D69":"\u03D5","\u1D6A":"\u03C7","\u207A":"+","\u207B":"-","\u207C":"=","\u207D":"(","\u207E":")","\u2070":"0","\xB9":"1","\xB2":"2","\xB3":"3","\u2074":"4","\u2075":"5","\u2076":"6","\u2077":"7","\u2078":"8","\u2079":"9","\u1D2C":"A","\u1D2E":"B","\u1D30":"D","\u1D31":"E","\u1D33":"G","\u1D34":"H","\u1D35":"I","\u1D36":"J","\u1D37":"K","\u1D38":"L","\u1D39":"M","\u1D3A":"N","\u1D3C":"O","\u1D3E":"P","\u1D3F":"R","\u1D40":"T","\u1D41":"U","\u2C7D":"V","\u1D42":"W","\u1D43":"a","\u1D47":"b","\u1D9C":"c","\u1D48":"d","\u1D49":"e","\u1DA0":"f","\u1D4D":"g",\u02B0:"h","\u2071":"i",\u02B2:"j","\u1D4F":"k",\u02E1:"l","\u1D50":"m",\u207F:"n","\u1D52":"o","\u1D56":"p",\u02B3:"r",\u02E2:"s","\u1D57":"t","\u1D58":"u","\u1D5B":"v",\u02B7:"w",\u02E3:"x",\u02B8:"y","\u1DBB":"z","\u1D5D":"\u03B2","\u1D5E":"\u03B3","\u1D5F":"\u03B4","\u1D60":"\u03D5","\u1D61":"\u03C7","\u1DBF":"\u03B8"}),bC={"\u0301":{text:"\\'",math:"\\acute"},"\u0300":{text:"\\`",math:"\\grave"},"\u0308":{text:'\\"',math:"\\ddot"},"\u0303":{text:"\\~",math:"\\tilde"},"\u0304":{text:"\\=",math:"\\bar"},"\u0306":{text:"\\u",math:"\\breve"},"\u030C":{text:"\\v",math:"\\check"},"\u0302":{text:"\\^",math:"\\hat"},"\u0307":{text:"\\.",math:"\\dot"},"\u030A":{text:"\\r",math:"\\mathring"},"\u030B":{text:"\\H"},"\u0327":{text:"\\c"}},RG={\u00E1:"a\u0301",\u00E0:"a\u0300",\u00E4:"a\u0308",\u01DF:"a\u0308\u0304",\u00E3:"a\u0303",\u0101:"a\u0304",\u0103:"a\u0306",\u1EAF:"a\u0306\u0301",\u1EB1:"a\u0306\u0300",\u1EB5:"a\u0306\u0303",\u01CE:"a\u030C",\u00E2:"a\u0302",\u1EA5:"a\u0302\u0301",\u1EA7:"a\u0302\u0300",\u1EAB:"a\u0302\u0303",\u0227:"a\u0307",\u01E1:"a\u0307\u0304",\u00E5:"a\u030A",\u01FB:"a\u030A\u0301",\u1E03:"b\u0307",\u0107:"c\u0301",\u1E09:"c\u0327\u0301",\u010D:"c\u030C",\u0109:"c\u0302",\u010B:"c\u0307",\u00E7:"c\u0327",\u010F:"d\u030C",\u1E0B:"d\u0307",\u1E11:"d\u0327",\u00E9:"e\u0301",\u00E8:"e\u0300",\u00EB:"e\u0308",\u1EBD:"e\u0303",\u0113:"e\u0304",\u1E17:"e\u0304\u0301",\u1E15:"e\u0304\u0300",\u0115:"e\u0306",\u1E1D:"e\u0327\u0306",\u011B:"e\u030C",\u00EA:"e\u0302",\u1EBF:"e\u0302\u0301",\u1EC1:"e\u0302\u0300",\u1EC5:"e\u0302\u0303",\u0117:"e\u0307",\u0229:"e\u0327",\u1E1F:"f\u0307",\u01F5:"g\u0301",\u1E21:"g\u0304",\u011F:"g\u0306",\u01E7:"g\u030C",\u011D:"g\u0302",\u0121:"g\u0307",\u0123:"g\u0327",\u1E27:"h\u0308",\u021F:"h\u030C",\u0125:"h\u0302",\u1E23:"h\u0307",\u1E29:"h\u0327",\u00ED:"i\u0301",\u00EC:"i\u0300",\u00EF:"i\u0308",\u1E2F:"i\u0308\u0301",\u0129:"i\u0303",\u012B:"i\u0304",\u012D:"i\u0306",\u01D0:"i\u030C",\u00EE:"i\u0302",\u01F0:"j\u030C",\u0135:"j\u0302",\u1E31:"k\u0301",\u01E9:"k\u030C",\u0137:"k\u0327",\u013A:"l\u0301",\u013E:"l\u030C",\u013C:"l\u0327",\u1E3F:"m\u0301",\u1E41:"m\u0307",\u0144:"n\u0301",\u01F9:"n\u0300",\u00F1:"n\u0303",\u0148:"n\u030C",\u1E45:"n\u0307",\u0146:"n\u0327",\u00F3:"o\u0301",\u00F2:"o\u0300",\u00F6:"o\u0308",\u022B:"o\u0308\u0304",\u00F5:"o\u0303",\u1E4D:"o\u0303\u0301",\u1E4F:"o\u0303\u0308",\u022D:"o\u0303\u0304",\u014D:"o\u0304",\u1E53:"o\u0304\u0301",\u1E51:"o\u0304\u0300",\u014F:"o\u0306",\u01D2:"o\u030C",\u00F4:"o\u0302",\u1ED1:"o\u0302\u0301",\u1ED3:"o\u0302\u0300",\u1ED7:"o\u0302\u0303",\u022F:"o\u0307",\u0231:"o\u0307\u0304",\u0151:"o\u030B",\u1E55:"p\u0301",\u1E57:"p\u0307",\u0155:"r\u0301",\u0159:"r\u030C",\u1E59:"r\u0307",\u0157:"r\u0327",\u015B:"s\u0301",\u1E65:"s\u0301\u0307",\u0161:"s\u030C",\u1E67:"s\u030C\u0307",\u015D:"s\u0302",\u1E61:"s\u0307",\u015F:"s\u0327",\u1E97:"t\u0308",\u0165:"t\u030C",\u1E6B:"t\u0307",\u0163:"t\u0327",\u00FA:"u\u0301",\u00F9:"u\u0300",\u00FC:"u\u0308",\u01D8:"u\u0308\u0301",\u01DC:"u\u0308\u0300",\u01D6:"u\u0308\u0304",\u01DA:"u\u0308\u030C",\u0169:"u\u0303",\u1E79:"u\u0303\u0301",\u016B:"u\u0304",\u1E7B:"u\u0304\u0308",\u016D:"u\u0306",\u01D4:"u\u030C",\u00FB:"u\u0302",\u016F:"u\u030A",\u0171:"u\u030B",\u1E7D:"v\u0303",\u1E83:"w\u0301",\u1E81:"w\u0300",\u1E85:"w\u0308",\u0175:"w\u0302",\u1E87:"w\u0307",\u1E98:"w\u030A",\u1E8D:"x\u0308",\u1E8B:"x\u0307",\u00FD:"y\u0301",\u1EF3:"y\u0300",\u00FF:"y\u0308",\u1EF9:"y\u0303",\u0233:"y\u0304",\u0177:"y\u0302",\u1E8F:"y\u0307",\u1E99:"y\u030A",\u017A:"z\u0301",\u017E:"z\u030C",\u1E91:"z\u0302",\u017C:"z\u0307",\u00C1:"A\u0301",\u00C0:"A\u0300",\u00C4:"A\u0308",\u01DE:"A\u0308\u0304",\u00C3:"A\u0303",\u0100:"A\u0304",\u0102:"A\u0306",\u1EAE:"A\u0306\u0301",\u1EB0:"A\u0306\u0300",\u1EB4:"A\u0306\u0303",\u01CD:"A\u030C",\u00C2:"A\u0302",\u1EA4:"A\u0302\u0301",\u1EA6:"A\u0302\u0300",\u1EAA:"A\u0302\u0303",\u0226:"A\u0307",\u01E0:"A\u0307\u0304",\u00C5:"A\u030A",\u01FA:"A\u030A\u0301",\u1E02:"B\u0307",\u0106:"C\u0301",\u1E08:"C\u0327\u0301",\u010C:"C\u030C",\u0108:"C\u0302",\u010A:"C\u0307",\u00C7:"C\u0327",\u010E:"D\u030C",\u1E0A:"D\u0307",\u1E10:"D\u0327",\u00C9:"E\u0301",\u00C8:"E\u0300",\u00CB:"E\u0308",\u1EBC:"E\u0303",\u0112:"E\u0304",\u1E16:"E\u0304\u0301",\u1E14:"E\u0304\u0300",\u0114:"E\u0306",\u1E1C:"E\u0327\u0306",\u011A:"E\u030C",\u00CA:"E\u0302",\u1EBE:"E\u0302\u0301",\u1EC0:"E\u0302\u0300",\u1EC4:"E\u0302\u0303",\u0116:"E\u0307",\u0228:"E\u0327",\u1E1E:"F\u0307",\u01F4:"G\u0301",\u1E20:"G\u0304",\u011E:"G\u0306",\u01E6:"G\u030C",\u011C:"G\u0302",\u0120:"G\u0307",\u0122:"G\u0327",\u1E26:"H\u0308",\u021E:"H\u030C",\u0124:"H\u0302",\u1E22:"H\u0307",\u1E28:"H\u0327",\u00CD:"I\u0301",\u00CC:"I\u0300",\u00CF:"I\u0308",\u1E2E:"I\u0308\u0301",\u0128:"I\u0303",\u012A:"I\u0304",\u012C:"I\u0306",\u01CF:"I\u030C",\u00CE:"I\u0302",\u0130:"I\u0307",\u0134:"J\u0302",\u1E30:"K\u0301",\u01E8:"K\u030C",\u0136:"K\u0327",\u0139:"L\u0301",\u013D:"L\u030C",\u013B:"L\u0327",\u1E3E:"M\u0301",\u1E40:"M\u0307",\u0143:"N\u0301",\u01F8:"N\u0300",\u00D1:"N\u0303",\u0147:"N\u030C",\u1E44:"N\u0307",\u0145:"N\u0327",\u00D3:"O\u0301",\u00D2:"O\u0300",\u00D6:"O\u0308",\u022A:"O\u0308\u0304",\u00D5:"O\u0303",\u1E4C:"O\u0303\u0301",\u1E4E:"O\u0303\u0308",\u022C:"O\u0303\u0304",\u014C:"O\u0304",\u1E52:"O\u0304\u0301",\u1E50:"O\u0304\u0300",\u014E:"O\u0306",\u01D1:"O\u030C",\u00D4:"O\u0302",\u1ED0:"O\u0302\u0301",\u1ED2:"O\u0302\u0300",\u1ED6:"O\u0302\u0303",\u022E:"O\u0307",\u0230:"O\u0307\u0304",\u0150:"O\u030B",\u1E54:"P\u0301",\u1E56:"P\u0307",\u0154:"R\u0301",\u0158:"R\u030C",\u1E58:"R\u0307",\u0156:"R\u0327",\u015A:"S\u0301",\u1E64:"S\u0301\u0307",\u0160:"S\u030C",\u1E66:"S\u030C\u0307",\u015C:"S\u0302",\u1E60:"S\u0307",\u015E:"S\u0327",\u0164:"T\u030C",\u1E6A:"T\u0307",\u0162:"T\u0327",\u00DA:"U\u0301",\u00D9:"U\u0300",\u00DC:"U\u0308",\u01D7:"U\u0308\u0301",\u01DB:"U\u0308\u0300",\u01D5:"U\u0308\u0304",\u01D9:"U\u0308\u030C",\u0168:"U\u0303",\u1E78:"U\u0303\u0301",\u016A:"U\u0304",\u1E7A:"U\u0304\u0308",\u016C:"U\u0306",\u01D3:"U\u030C",\u00DB:"U\u0302",\u016E:"U\u030A",\u0170:"U\u030B",\u1E7C:"V\u0303",\u1E82:"W\u0301",\u1E80:"W\u0300",\u1E84:"W\u0308",\u0174:"W\u0302",\u1E86:"W\u0307",\u1E8C:"X\u0308",\u1E8A:"X\u0307",\u00DD:"Y\u0301",\u1EF2:"Y\u0300",\u0178:"Y\u0308",\u1EF8:"Y\u0303",\u0232:"Y\u0304",\u0176:"Y\u0302",\u1E8E:"Y\u0307",\u0179:"Z\u0301",\u017D:"Z\u030C",\u1E90:"Z\u0302",\u017B:"Z\u0307",\u03AC:"\u03B1\u0301",\u1F70:"\u03B1\u0300",\u1FB1:"\u03B1\u0304",\u1FB0:"\u03B1\u0306",\u03AD:"\u03B5\u0301",\u1F72:"\u03B5\u0300",\u03AE:"\u03B7\u0301",\u1F74:"\u03B7\u0300",\u03AF:"\u03B9\u0301",\u1F76:"\u03B9\u0300",\u03CA:"\u03B9\u0308",\u0390:"\u03B9\u0308\u0301",\u1FD2:"\u03B9\u0308\u0300",\u1FD1:"\u03B9\u0304",\u1FD0:"\u03B9\u0306",\u03CC:"\u03BF\u0301",\u1F78:"\u03BF\u0300",\u03CD:"\u03C5\u0301",\u1F7A:"\u03C5\u0300",\u03CB:"\u03C5\u0308",\u03B0:"\u03C5\u0308\u0301",\u1FE2:"\u03C5\u0308\u0300",\u1FE1:"\u03C5\u0304",\u1FE0:"\u03C5\u0306",\u03CE:"\u03C9\u0301",\u1F7C:"\u03C9\u0300",\u038E:"\u03A5\u0301",\u1FEA:"\u03A5\u0300",\u03AB:"\u03A5\u0308",\u1FE9:"\u03A5\u0304",\u1FE8:"\u03A5\u0306",\u038F:"\u03A9\u0301",\u1FFA:"\u03A9\u0300"},_4=class t{static{o(this,"Parser")}constructor(e,r){this.mode=void 0,this.gullet=void 0,this.settings=void 0,this.leftrightDepth=void 0,this.nextToken=void 0,this.mode="math",this.gullet=new RC(e,r,this.mode),this.settings=r,this.leftrightDepth=0}expect(e,r){if(r===void 0&&(r=!0),this.fetch().text!==e)throw new lt("Expected '"+e+"', got '"+this.fetch().text+"'",this.fetch());r&&this.consume()}consume(){this.nextToken=null}fetch(){return this.nextToken==null&&(this.nextToken=this.gullet.expandNextToken()),this.nextToken}switchMode(e){this.mode=e,this.gullet.switchMode(e)}parse(){this.settings.globalGroup||this.gullet.beginGroup(),this.settings.colorIsTextColor&&this.gullet.macros.set("\\color","\\textcolor");try{var e=this.parseExpression(!1);return this.expect("EOF"),this.settings.globalGroup||this.gullet.endGroup(),e}finally{this.gullet.endGroups()}}subparse(e){var r=this.nextToken;this.consume(),this.gullet.pushToken(new Ro("}")),this.gullet.pushTokens(e);var n=this.parseExpression(!1);return this.expect("}"),this.nextToken=r,n}parseExpression(e,r){for(var n=[];;){this.mode==="math"&&this.consumeSpaces();var i=this.fetch();if(t.endOfExpression.indexOf(i.text)!==-1||r&&i.text===r||e&&gh[i.text]&&gh[i.text].infix)break;var a=this.parseAtom(r);if(a){if(a.type==="internal")continue}else break;n.push(a)}return this.mode==="text"&&this.formLigatures(n),this.handleInfixNodes(n)}handleInfixNodes(e){for(var r=-1,n,i=0;i=0&&this.settings.reportNonstrict("unicodeTextInMathMode",'Latin-1/Unicode text character "'+r[0]+'" used in math mode',e);var l=Cn[this.mode][r].group,u=Js.range(e),h;if(Mbe.hasOwnProperty(l)){var f=l;h={type:"atom",mode:this.mode,family:f,loc:u,text:r}}else h={type:l,mode:this.mode,loc:u,text:r};s=h}else if(r.charCodeAt(0)>=128)this.settings.strict&&(IG(r.charCodeAt(0))?this.mode==="math"&&this.settings.reportNonstrict("unicodeTextInMathMode",'Unicode text character "'+r[0]+'" used in math mode',e):this.settings.reportNonstrict("unknownSymbol",'Unrecognized Unicode character "'+r[0]+'"'+(" ("+r.charCodeAt(0)+")"),e)),s={type:"textord",mode:"text",loc:Js.range(e),text:r};else return null;if(this.consume(),a)for(var d=0;d{e.tagName==="A"&&e.hasAttribute("target")&&e.setAttribute(t,e.getAttribute("target")??"")}),Ap.default.addHook("afterSanitizeAttributes",e=>{e.tagName==="A"&&e.hasAttribute(t)&&(e.setAttribute("target",e.getAttribute(t)??""),e.removeAttribute(t),e.getAttribute("target")==="_blank"&&e.setAttribute("rel","noopener"))})}var Ap,ad,q4e,X4e,R$,D$,kr,K4e,Q4e,Z4e,J4e,M$,e3e,xr,t3e,r3e,yu,QC,n3e,i3e,N$,ZC,yi,sd,bh,qe,fr=M(()=>{"use strict";Ap=Ji(lC(),1),ad=//gi,q4e=o(t=>t?M$(t).replace(/\\n/g,"#br#").split("#br#"):[""],"getRows"),X4e=(()=>{let t=!1;return()=>{t||(j4e(),t=!0)}})();o(j4e,"setupDompurifyHooks");R$=o(t=>(X4e(),Ap.default.sanitize(t)),"removeScript"),D$=o((t,e)=>{if(e.flowchart?.htmlLabels!==!1){let r=e.securityLevel;r==="antiscript"||r==="strict"?t=R$(t):r!=="loose"&&(t=M$(t),t=t.replace(//g,">"),t=t.replace(/=/g,"="),t=J4e(t))}return t},"sanitizeMore"),kr=o((t,e)=>t&&(e.dompurifyConfig?t=Ap.default.sanitize(D$(t,e),e.dompurifyConfig).toString():t=Ap.default.sanitize(D$(t,e),{FORBID_TAGS:["style"]}).toString(),t),"sanitizeText"),K4e=o((t,e)=>typeof t=="string"?kr(t,e):t.flat().map(r=>kr(r,e)),"sanitizeTextOrArray"),Q4e=o(t=>ad.test(t),"hasBreaks"),Z4e=o(t=>t.split(ad),"splitBreaks"),J4e=o(t=>t.replace(/#br#/g,"
"),"placeholderToBreak"),M$=o(t=>t.replace(ad,"#br#"),"breakToPlaceholder"),e3e=o(t=>{let e="";return t&&(e=window.location.protocol+"//"+window.location.host+window.location.pathname+window.location.search,e=e.replaceAll(/\(/g,"\\("),e=e.replaceAll(/\)/g,"\\)")),e},"getUrl"),xr=o(t=>!(t===!1||["false","null","0"].includes(String(t).trim().toLowerCase())),"evaluate"),t3e=o(function(...t){let e=t.filter(r=>!isNaN(r));return Math.max(...e)},"getMax"),r3e=o(function(...t){let e=t.filter(r=>!isNaN(r));return Math.min(...e)},"getMin"),yu=o(function(t){let e=t.split(/(,)/),r=[];for(let n=0;n0&&n+1Math.max(0,t.split(e).length-1),"countOccurrence"),n3e=o((t,e)=>{let r=QC(t,"~"),n=QC(e,"~");return r===1&&n===1},"shouldCombineSets"),i3e=o(t=>{let e=QC(t,"~"),r=!1;if(e<=1)return t;e%2!==0&&t.startsWith("~")&&(t=t.substring(1),r=!0);let n=[...t],i=n.indexOf("~"),a=n.lastIndexOf("~");for(;i!==-1&&a!==-1&&i!==a;)n[i]="<",n[a]=">",i=n.indexOf("~"),a=n.lastIndexOf("~");return r&&n.unshift("~"),n.join("")},"processSet"),N$=o(()=>window.MathMLElement!==void 0,"isMathMLSupported"),ZC=/\$\$(.*)\$\$/g,yi=o(t=>(t.match(ZC)?.length??0)>0,"hasKatex"),sd=o(async(t,e)=>{t=await bh(t,e);let r=document.createElement("div");r.innerHTML=t,r.id="katex-temp",r.style.visibility="hidden",r.style.position="absolute",r.style.top="0",document.querySelector("body")?.insertAdjacentElement("beforeend",r);let i={width:r.clientWidth,height:r.clientHeight};return r.remove(),i},"calculateMathMLDimensions"),bh=o(async(t,e)=>{if(!yi(t))return t;if(!(N$()||e.legacyMathML||e.forceLegacyMathML))return t.replace(ZC,"MathML is unsupported in this environment.");let{default:r}=await Promise.resolve().then(()=>(L$(),_$)),n=e.forceLegacyMathML||!N$()&&e.legacyMathML?"htmlAndMathml":"mathml";return t.split(ad).map(i=>yi(i)?`
${i}
`:`
${i}
`).join("").replace(ZC,(i,a)=>r.renderToString(a,{throwOnError:!0,displayMode:!0,output:n}).replace(/\n/g," ").replace(//g,""))},"renderKatex"),qe={getRows:q4e,sanitizeText:kr,sanitizeTextOrArray:K4e,hasBreaks:Q4e,splitBreaks:Z4e,lineBreakRegex:ad,removeScript:R$,getUrl:e3e,evaluate:xr,getMax:t3e,getMin:r3e}});var a3e,s3e,Zr,Io,ai=M(()=>{"use strict";ut();a3e=o(function(t,e){for(let r of e)t.attr(r[0],r[1])},"d3Attrs"),s3e=o(function(t,e,r){let n=new Map;return r?(n.set("width","100%"),n.set("style",`max-width: ${e}px;`)):(n.set("height",t),n.set("width",e)),n},"calculateSvgSizeAttrs"),Zr=o(function(t,e,r,n){let i=s3e(e,r,n);a3e(t,i)},"configureSvgSize"),Io=o(function(t,e,r,n){let i=e.node().getBBox(),a=i.width,s=i.height;Y.info(`SVG bounds: ${a}x${s}`,i);let l=0,u=0;Y.info(`Graph bounds: ${l}x${u}`,t),l=a+r*2,u=s+r*2,Y.info(`Calculated bounds: ${l}x${u}`),Zr(e,u,l,n);let h=`${i.x-r} ${i.y-r} ${i.width+2*r} ${i.height+2*r}`;e.attr("viewBox",h)},"setupGraphViewbox")});var O4,o3e,I$,O$,JC=M(()=>{"use strict";ut();O4={},o3e=o((t,e,r)=>{let n="";return t in O4&&O4[t]?n=O4[t](r):Y.warn(`No theme found for ${t}`),` & { + font-family: ${r.fontFamily}; + font-size: ${r.fontSize}; + fill: ${r.textColor} + } + + /* Classes common for multiple diagrams */ + + & .error-icon { + fill: ${r.errorBkgColor}; + } + & .error-text { + fill: ${r.errorTextColor}; + stroke: ${r.errorTextColor}; + } + + & .edge-thickness-normal { + stroke-width: 1px; + } + & .edge-thickness-thick { + stroke-width: 3.5px + } + & .edge-pattern-solid { + stroke-dasharray: 0; + } + & .edge-thickness-invisible { + stroke-width: 0; + fill: none; + } + & .edge-pattern-dashed{ + stroke-dasharray: 3; + } + .edge-pattern-dotted { + stroke-dasharray: 2; + } + + & .marker { + fill: ${r.lineColor}; + stroke: ${r.lineColor}; + } + & .marker.cross { + stroke: ${r.lineColor}; + } + + & svg { + font-family: ${r.fontFamily}; + font-size: ${r.fontSize}; + } + & p { + margin: 0 + } + + ${n} + + ${e} +`},"getStyles"),I$=o((t,e)=>{e!==void 0&&(O4[t]=e)},"addStylesForDiagram"),O$=o3e});var xy={};vr(xy,{clear:()=>Lr,getAccDescription:()=>zr,getAccTitle:()=>Br,getDiagramTitle:()=>Jr,setAccDescription:()=>Fr,setAccTitle:()=>Mr,setDiagramTitle:()=>cn});var e7,t7,r7,n7,Lr,Mr,Br,Fr,zr,cn,Jr,Ai=M(()=>{"use strict";fr();Za();e7="",t7="",r7="",n7=o(t=>kr(t,Cr()),"sanitizeText"),Lr=o(()=>{e7="",r7="",t7=""},"clear"),Mr=o(t=>{e7=n7(t).replace(/^\s+/g,"")},"setAccTitle"),Br=o(()=>e7,"getAccTitle"),Fr=o(t=>{r7=n7(t).replace(/\n\s+/g,` +`)},"setAccDescription"),zr=o(()=>r7,"getAccDescription"),cn=o(t=>{t7=n7(t)},"setDiagramTitle"),Jr=o(()=>t7,"getDiagramTitle")});var P$,l3e,pe,a7,B4,s7,o7,c3e,P4,od,by,i7,Vt=M(()=>{"use strict";Zf();ut();Za();fr();ai();JC();Ai();P$=Y,l3e=J1,pe=Cr,a7=o4,B4=ph,s7=o(t=>kr(t,pe()),"sanitizeText"),o7=Io,c3e=o(()=>xy,"getCommonDb"),P4={},od=o((t,e,r)=>{P4[t]&&P$.warn(`Diagram with id ${t} already registered. Overwriting.`),P4[t]=e,r&&VS(t,r),I$(t,e.styles),e.injectUtils?.(P$,l3e,pe,s7,o7,c3e(),()=>{})},"registerDiagram"),by=o(t=>{if(t in P4)return P4[t];throw new i7(t)},"getDiagram"),i7=class extends Error{static{o(this,"DiagramNotFoundError")}constructor(e){super(`Diagram ${e} not found.`)}}});var bl,wh,ts,xl,dc,wy,l7,c7,F4,z4,B$,u3e,h3e,f3e,d3e,p3e,m3e,g3e,y3e,v3e,x3e,b3e,w3e,T3e,k3e,E3e,S3e,C3e,F$,A3e,_3e,z$,L3e,D3e,N3e,R3e,Th,M3e,I3e,O3e,P3e,B3e,Ty,u7=M(()=>{"use strict";Vt();fr();Ai();bl=[],wh=[""],ts="global",xl="",dc=[{alias:"global",label:{text:"global"},type:{text:"global"},tags:null,link:null,parentBoundary:""}],wy=[],l7="",c7=!1,F4=4,z4=2,u3e=o(function(){return B$},"getC4Type"),h3e=o(function(t){B$=kr(t,pe())},"setC4Type"),f3e=o(function(t,e,r,n,i,a,s,l,u){if(t==null||e===void 0||e===null||r===void 0||r===null||n===void 0||n===null)return;let h={},f=wy.find(d=>d.from===e&&d.to===r);if(f?h=f:wy.push(h),h.type=t,h.from=e,h.to=r,h.label={text:n},i==null)h.techn={text:""};else if(typeof i=="object"){let[d,p]=Object.entries(i)[0];h[d]={text:p}}else h.techn={text:i};if(a==null)h.descr={text:""};else if(typeof a=="object"){let[d,p]=Object.entries(a)[0];h[d]={text:p}}else h.descr={text:a};if(typeof s=="object"){let[d,p]=Object.entries(s)[0];h[d]=p}else h.sprite=s;if(typeof l=="object"){let[d,p]=Object.entries(l)[0];h[d]=p}else h.tags=l;if(typeof u=="object"){let[d,p]=Object.entries(u)[0];h[d]=p}else h.link=u;h.wrap=Th()},"addRel"),d3e=o(function(t,e,r,n,i,a,s){if(e===null||r===null)return;let l={},u=bl.find(h=>h.alias===e);if(u&&e===u.alias?l=u:(l.alias=e,bl.push(l)),r==null?l.label={text:""}:l.label={text:r},n==null)l.descr={text:""};else if(typeof n=="object"){let[h,f]=Object.entries(n)[0];l[h]={text:f}}else l.descr={text:n};if(typeof i=="object"){let[h,f]=Object.entries(i)[0];l[h]=f}else l.sprite=i;if(typeof a=="object"){let[h,f]=Object.entries(a)[0];l[h]=f}else l.tags=a;if(typeof s=="object"){let[h,f]=Object.entries(s)[0];l[h]=f}else l.link=s;l.typeC4Shape={text:t},l.parentBoundary=ts,l.wrap=Th()},"addPersonOrSystem"),p3e=o(function(t,e,r,n,i,a,s,l){if(e===null||r===null)return;let u={},h=bl.find(f=>f.alias===e);if(h&&e===h.alias?u=h:(u.alias=e,bl.push(u)),r==null?u.label={text:""}:u.label={text:r},n==null)u.techn={text:""};else if(typeof n=="object"){let[f,d]=Object.entries(n)[0];u[f]={text:d}}else u.techn={text:n};if(i==null)u.descr={text:""};else if(typeof i=="object"){let[f,d]=Object.entries(i)[0];u[f]={text:d}}else u.descr={text:i};if(typeof a=="object"){let[f,d]=Object.entries(a)[0];u[f]=d}else u.sprite=a;if(typeof s=="object"){let[f,d]=Object.entries(s)[0];u[f]=d}else u.tags=s;if(typeof l=="object"){let[f,d]=Object.entries(l)[0];u[f]=d}else u.link=l;u.wrap=Th(),u.typeC4Shape={text:t},u.parentBoundary=ts},"addContainer"),m3e=o(function(t,e,r,n,i,a,s,l){if(e===null||r===null)return;let u={},h=bl.find(f=>f.alias===e);if(h&&e===h.alias?u=h:(u.alias=e,bl.push(u)),r==null?u.label={text:""}:u.label={text:r},n==null)u.techn={text:""};else if(typeof n=="object"){let[f,d]=Object.entries(n)[0];u[f]={text:d}}else u.techn={text:n};if(i==null)u.descr={text:""};else if(typeof i=="object"){let[f,d]=Object.entries(i)[0];u[f]={text:d}}else u.descr={text:i};if(typeof a=="object"){let[f,d]=Object.entries(a)[0];u[f]=d}else u.sprite=a;if(typeof s=="object"){let[f,d]=Object.entries(s)[0];u[f]=d}else u.tags=s;if(typeof l=="object"){let[f,d]=Object.entries(l)[0];u[f]=d}else u.link=l;u.wrap=Th(),u.typeC4Shape={text:t},u.parentBoundary=ts},"addComponent"),g3e=o(function(t,e,r,n,i){if(t===null||e===null)return;let a={},s=dc.find(l=>l.alias===t);if(s&&t===s.alias?a=s:(a.alias=t,dc.push(a)),e==null?a.label={text:""}:a.label={text:e},r==null)a.type={text:"system"};else if(typeof r=="object"){let[l,u]=Object.entries(r)[0];a[l]={text:u}}else a.type={text:r};if(typeof n=="object"){let[l,u]=Object.entries(n)[0];a[l]=u}else a.tags=n;if(typeof i=="object"){let[l,u]=Object.entries(i)[0];a[l]=u}else a.link=i;a.parentBoundary=ts,a.wrap=Th(),xl=ts,ts=t,wh.push(xl)},"addPersonOrSystemBoundary"),y3e=o(function(t,e,r,n,i){if(t===null||e===null)return;let a={},s=dc.find(l=>l.alias===t);if(s&&t===s.alias?a=s:(a.alias=t,dc.push(a)),e==null?a.label={text:""}:a.label={text:e},r==null)a.type={text:"container"};else if(typeof r=="object"){let[l,u]=Object.entries(r)[0];a[l]={text:u}}else a.type={text:r};if(typeof n=="object"){let[l,u]=Object.entries(n)[0];a[l]=u}else a.tags=n;if(typeof i=="object"){let[l,u]=Object.entries(i)[0];a[l]=u}else a.link=i;a.parentBoundary=ts,a.wrap=Th(),xl=ts,ts=t,wh.push(xl)},"addContainerBoundary"),v3e=o(function(t,e,r,n,i,a,s,l){if(e===null||r===null)return;let u={},h=dc.find(f=>f.alias===e);if(h&&e===h.alias?u=h:(u.alias=e,dc.push(u)),r==null?u.label={text:""}:u.label={text:r},n==null)u.type={text:"node"};else if(typeof n=="object"){let[f,d]=Object.entries(n)[0];u[f]={text:d}}else u.type={text:n};if(i==null)u.descr={text:""};else if(typeof i=="object"){let[f,d]=Object.entries(i)[0];u[f]={text:d}}else u.descr={text:i};if(typeof s=="object"){let[f,d]=Object.entries(s)[0];u[f]=d}else u.tags=s;if(typeof l=="object"){let[f,d]=Object.entries(l)[0];u[f]=d}else u.link=l;u.nodeType=t,u.parentBoundary=ts,u.wrap=Th(),xl=ts,ts=e,wh.push(xl)},"addDeploymentNode"),x3e=o(function(){ts=xl,wh.pop(),xl=wh.pop(),wh.push(xl)},"popBoundaryParseStack"),b3e=o(function(t,e,r,n,i,a,s,l,u,h,f){let d=bl.find(p=>p.alias===e);if(!(d===void 0&&(d=dc.find(p=>p.alias===e),d===void 0))){if(r!=null)if(typeof r=="object"){let[p,m]=Object.entries(r)[0];d[p]=m}else d.bgColor=r;if(n!=null)if(typeof n=="object"){let[p,m]=Object.entries(n)[0];d[p]=m}else d.fontColor=n;if(i!=null)if(typeof i=="object"){let[p,m]=Object.entries(i)[0];d[p]=m}else d.borderColor=i;if(a!=null)if(typeof a=="object"){let[p,m]=Object.entries(a)[0];d[p]=m}else d.shadowing=a;if(s!=null)if(typeof s=="object"){let[p,m]=Object.entries(s)[0];d[p]=m}else d.shape=s;if(l!=null)if(typeof l=="object"){let[p,m]=Object.entries(l)[0];d[p]=m}else d.sprite=l;if(u!=null)if(typeof u=="object"){let[p,m]=Object.entries(u)[0];d[p]=m}else d.techn=u;if(h!=null)if(typeof h=="object"){let[p,m]=Object.entries(h)[0];d[p]=m}else d.legendText=h;if(f!=null)if(typeof f=="object"){let[p,m]=Object.entries(f)[0];d[p]=m}else d.legendSprite=f}},"updateElStyle"),w3e=o(function(t,e,r,n,i,a,s){let l=wy.find(u=>u.from===e&&u.to===r);if(l!==void 0){if(n!=null)if(typeof n=="object"){let[u,h]=Object.entries(n)[0];l[u]=h}else l.textColor=n;if(i!=null)if(typeof i=="object"){let[u,h]=Object.entries(i)[0];l[u]=h}else l.lineColor=i;if(a!=null)if(typeof a=="object"){let[u,h]=Object.entries(a)[0];l[u]=parseInt(h)}else l.offsetX=parseInt(a);if(s!=null)if(typeof s=="object"){let[u,h]=Object.entries(s)[0];l[u]=parseInt(h)}else l.offsetY=parseInt(s)}},"updateRelStyle"),T3e=o(function(t,e,r){let n=F4,i=z4;if(typeof e=="object"){let a=Object.values(e)[0];n=parseInt(a)}else n=parseInt(e);if(typeof r=="object"){let a=Object.values(r)[0];i=parseInt(a)}else i=parseInt(r);n>=1&&(F4=n),i>=1&&(z4=i)},"updateLayoutConfig"),k3e=o(function(){return F4},"getC4ShapeInRow"),E3e=o(function(){return z4},"getC4BoundaryInRow"),S3e=o(function(){return ts},"getCurrentBoundaryParse"),C3e=o(function(){return xl},"getParentBoundaryParse"),F$=o(function(t){return t==null?bl:bl.filter(e=>e.parentBoundary===t)},"getC4ShapeArray"),A3e=o(function(t){return bl.find(e=>e.alias===t)},"getC4Shape"),_3e=o(function(t){return Object.keys(F$(t))},"getC4ShapeKeys"),z$=o(function(t){return t==null?dc:dc.filter(e=>e.parentBoundary===t)},"getBoundaries"),L3e=z$,D3e=o(function(){return wy},"getRels"),N3e=o(function(){return l7},"getTitle"),R3e=o(function(t){c7=t},"setWrap"),Th=o(function(){return c7},"autoWrap"),M3e=o(function(){bl=[],dc=[{alias:"global",label:{text:"global"},type:{text:"global"},tags:null,link:null,parentBoundary:""}],xl="",ts="global",wh=[""],wy=[],wh=[""],l7="",c7=!1,F4=4,z4=2},"clear"),I3e={SOLID:0,DOTTED:1,NOTE:2,SOLID_CROSS:3,DOTTED_CROSS:4,SOLID_OPEN:5,DOTTED_OPEN:6,LOOP_START:10,LOOP_END:11,ALT_START:12,ALT_ELSE:13,ALT_END:14,OPT_START:15,OPT_END:16,ACTIVE_START:17,ACTIVE_END:18,PAR_START:19,PAR_AND:20,PAR_END:21,RECT_START:22,RECT_END:23,SOLID_POINT:24,DOTTED_POINT:25},O3e={FILLED:0,OPEN:1},P3e={LEFTOF:0,RIGHTOF:1,OVER:2},B3e=o(function(t){l7=kr(t,pe())},"setTitle"),Ty={addPersonOrSystem:d3e,addPersonOrSystemBoundary:g3e,addContainer:p3e,addContainerBoundary:y3e,addComponent:m3e,addDeploymentNode:v3e,popBoundaryParseStack:x3e,addRel:f3e,updateElStyle:b3e,updateRelStyle:w3e,updateLayoutConfig:T3e,autoWrap:Th,setWrap:R3e,getC4ShapeArray:F$,getC4Shape:A3e,getC4ShapeKeys:_3e,getBoundaries:z$,getBoundarys:L3e,getCurrentBoundaryParse:S3e,getParentBoundaryParse:C3e,getRels:D3e,getTitle:N3e,getC4Type:u3e,getC4ShapeInRow:k3e,getC4BoundaryInRow:E3e,setAccTitle:Mr,getAccTitle:Br,getAccDescription:zr,setAccDescription:Fr,getConfig:o(()=>pe().c4,"getConfig"),clear:M3e,LINETYPE:I3e,ARROWTYPE:O3e,PLACEMENT:P3e,setTitle:B3e,setC4Type:h3e}});function ld(t,e){return t==null||e==null?NaN:te?1:t>=e?0:NaN}var h7=M(()=>{"use strict";o(ld,"ascending")});function f7(t,e){return t==null||e==null?NaN:et?1:e>=t?0:NaN}var G$=M(()=>{"use strict";o(f7,"descending")});function cd(t){let e,r,n;t.length!==2?(e=ld,r=o((l,u)=>ld(t(l),u),"compare2"),n=o((l,u)=>t(l)-u,"delta")):(e=t===ld||t===f7?t:F3e,r=t,n=t);function i(l,u,h=0,f=l.length){if(h>>1;r(l[d],u)<0?h=d+1:f=d}while(h>>1;r(l[d],u)<=0?h=d+1:f=d}while(hh&&n(l[d-1],u)>-n(l[d],u)?d-1:d}return o(s,"center"),{left:i,center:s,right:a}}function F3e(){return 0}var d7=M(()=>{"use strict";h7();G$();o(cd,"bisector");o(F3e,"zero")});function p7(t){return t===null?NaN:+t}var $$=M(()=>{"use strict";o(p7,"number")});var V$,U$,z3e,G3e,m7,H$=M(()=>{"use strict";h7();d7();$$();V$=cd(ld),U$=V$.right,z3e=V$.left,G3e=cd(p7).center,m7=U$});function W$({_intern:t,_key:e},r){let n=e(r);return t.has(n)?t.get(n):r}function $3e({_intern:t,_key:e},r){let n=e(r);return t.has(n)?t.get(n):(t.set(n,r),r)}function V3e({_intern:t,_key:e},r){let n=e(r);return t.has(n)&&(r=t.get(n),t.delete(n)),r}function U3e(t){return t!==null&&typeof t=="object"?t.valueOf():t}var _p,Y$=M(()=>{"use strict";_p=class extends Map{static{o(this,"InternMap")}constructor(e,r=U3e){if(super(),Object.defineProperties(this,{_intern:{value:new Map},_key:{value:r}}),e!=null)for(let[n,i]of e)this.set(n,i)}get(e){return super.get(W$(this,e))}has(e){return super.has(W$(this,e))}set(e,r){return super.set($3e(this,e),r)}delete(e){return super.delete(V3e(this,e))}};o(W$,"intern_get");o($3e,"intern_set");o(V3e,"intern_delete");o(U3e,"keyof")});function G4(t,e,r){let n=(e-t)/Math.max(0,r),i=Math.floor(Math.log10(n)),a=n/Math.pow(10,i),s=a>=H3e?10:a>=W3e?5:a>=Y3e?2:1,l,u,h;return i<0?(h=Math.pow(10,-i)/s,l=Math.round(t*h),u=Math.round(e*h),l/he&&--u,h=-h):(h=Math.pow(10,i)*s,l=Math.round(t/h),u=Math.round(e/h),l*he&&--u),u0))return[];if(t===e)return[t];let n=e=i))return[];let l=a-i+1,u=new Array(l);if(n)if(s<0)for(let h=0;h{"use strict";H3e=Math.sqrt(50),W3e=Math.sqrt(10),Y3e=Math.sqrt(2);o(G4,"tickSpec");o($4,"ticks");o(ky,"tickIncrement");o(Lp,"tickStep")});function V4(t,e){let r;if(e===void 0)for(let n of t)n!=null&&(r=n)&&(r=n);else{let n=-1;for(let i of t)(i=e(i,++n,t))!=null&&(r=i)&&(r=i)}return r}var X$=M(()=>{"use strict";o(V4,"max")});function U4(t,e){let r;if(e===void 0)for(let n of t)n!=null&&(r>n||r===void 0&&n>=n)&&(r=n);else{let n=-1;for(let i of t)(i=e(i,++n,t))!=null&&(r>i||r===void 0&&i>=i)&&(r=i)}return r}var j$=M(()=>{"use strict";o(U4,"min")});function H4(t,e,r){t=+t,e=+e,r=(i=arguments.length)<2?(e=t,t=0,1):i<3?1:+r;for(var n=-1,i=Math.max(0,Math.ceil((e-t)/r))|0,a=new Array(i);++n{"use strict";o(H4,"range")});var kh=M(()=>{"use strict";H$();d7();X$();j$();K$();q$();Y$()});function g7(t){return t}var Q$=M(()=>{"use strict";o(g7,"default")});function q3e(t){return"translate("+t+",0)"}function X3e(t){return"translate(0,"+t+")"}function j3e(t){return e=>+t(e)}function K3e(t,e){return e=Math.max(0,t.bandwidth()-e*2)/2,t.round()&&(e=Math.round(e)),r=>+t(r)+e}function Q3e(){return!this.__axis}function J$(t,e){var r=[],n=null,i=null,a=6,s=6,l=3,u=typeof window<"u"&&window.devicePixelRatio>1?0:.5,h=t===Y4||t===W4?-1:1,f=t===W4||t===y7?"x":"y",d=t===Y4||t===v7?q3e:X3e;function p(m){var g=n??(e.ticks?e.ticks.apply(e,r):e.domain()),y=i??(e.tickFormat?e.tickFormat.apply(e,r):g7),v=Math.max(a,0)+l,x=e.range(),b=+x[0]+u,w=+x[x.length-1]+u,_=(e.bandwidth?K3e:j3e)(e.copy(),u),T=m.selection?m.selection():m,E=T.selectAll(".domain").data([null]),L=T.selectAll(".tick").data(g,e).order(),S=L.exit(),A=L.enter().append("g").attr("class","tick"),I=L.select("line"),D=L.select("text");E=E.merge(E.enter().insert("path",".tick").attr("class","domain").attr("stroke","currentColor")),L=L.merge(A),I=I.merge(A.append("line").attr("stroke","currentColor").attr(f+"2",h*a)),D=D.merge(A.append("text").attr("fill","currentColor").attr(f,h*v).attr("dy",t===Y4?"0em":t===v7?"0.71em":"0.32em")),m!==T&&(E=E.transition(m),L=L.transition(m),I=I.transition(m),D=D.transition(m),S=S.transition(m).attr("opacity",Z$).attr("transform",function(k){return isFinite(k=_(k))?d(k+u):this.getAttribute("transform")}),A.attr("opacity",Z$).attr("transform",function(k){var R=this.parentNode.__axis;return d((R&&isFinite(R=R(k))?R:_(k))+u)})),S.remove(),E.attr("d",t===W4||t===y7?s?"M"+h*s+","+b+"H"+u+"V"+w+"H"+h*s:"M"+u+","+b+"V"+w:s?"M"+b+","+h*s+"V"+u+"H"+w+"V"+h*s:"M"+b+","+u+"H"+w),L.attr("opacity",1).attr("transform",function(k){return d(_(k)+u)}),I.attr(f+"2",h*a),D.attr(f,h*v).text(y),T.filter(Q3e).attr("fill","none").attr("font-size",10).attr("font-family","sans-serif").attr("text-anchor",t===y7?"start":t===W4?"end":"middle"),T.each(function(){this.__axis=_})}return o(p,"axis"),p.scale=function(m){return arguments.length?(e=m,p):e},p.ticks=function(){return r=Array.from(arguments),p},p.tickArguments=function(m){return arguments.length?(r=m==null?[]:Array.from(m),p):r.slice()},p.tickValues=function(m){return arguments.length?(n=m==null?null:Array.from(m),p):n&&n.slice()},p.tickFormat=function(m){return arguments.length?(i=m,p):i},p.tickSize=function(m){return arguments.length?(a=s=+m,p):a},p.tickSizeInner=function(m){return arguments.length?(a=+m,p):a},p.tickSizeOuter=function(m){return arguments.length?(s=+m,p):s},p.tickPadding=function(m){return arguments.length?(l=+m,p):l},p.offset=function(m){return arguments.length?(u=+m,p):u},p}function x7(t){return J$(Y4,t)}function b7(t){return J$(v7,t)}var Y4,y7,v7,W4,Z$,eV=M(()=>{"use strict";Q$();Y4=1,y7=2,v7=3,W4=4,Z$=1e-6;o(q3e,"translateX");o(X3e,"translateY");o(j3e,"number");o(K3e,"center");o(Q3e,"entering");o(J$,"axis");o(x7,"axisTop");o(b7,"axisBottom")});var tV=M(()=>{"use strict";eV()});function nV(){for(var t=0,e=arguments.length,r={},n;t=0&&(n=r.slice(i+1),r=r.slice(0,i)),r&&!e.hasOwnProperty(r))throw new Error("unknown type: "+r);return{type:r,name:n}})}function e5e(t,e){for(var r=0,n=t.length,i;r{"use strict";Z3e={value:o(()=>{},"value")};o(nV,"dispatch");o(q4,"Dispatch");o(J3e,"parseTypenames");q4.prototype=nV.prototype={constructor:q4,on:o(function(t,e){var r=this._,n=J3e(t+"",r),i,a=-1,s=n.length;if(arguments.length<2){for(;++a0)for(var r=new Array(i),n=0,i,a;n{"use strict";iV()});var X4,k7,E7=M(()=>{"use strict";X4="http://www.w3.org/1999/xhtml",k7={svg:"http://www.w3.org/2000/svg",xhtml:X4,xlink:"http://www.w3.org/1999/xlink",xml:"http://www.w3.org/XML/1998/namespace",xmlns:"http://www.w3.org/2000/xmlns/"}});function pc(t){var e=t+="",r=e.indexOf(":");return r>=0&&(e=t.slice(0,r))!=="xmlns"&&(t=t.slice(r+1)),k7.hasOwnProperty(e)?{space:k7[e],local:t}:t}var j4=M(()=>{"use strict";E7();o(pc,"default")});function t5e(t){return function(){var e=this.ownerDocument,r=this.namespaceURI;return r===X4&&e.documentElement.namespaceURI===X4?e.createElement(t):e.createElementNS(r,t)}}function r5e(t){return function(){return this.ownerDocument.createElementNS(t.space,t.local)}}function Ey(t){var e=pc(t);return(e.local?r5e:t5e)(e)}var S7=M(()=>{"use strict";j4();E7();o(t5e,"creatorInherit");o(r5e,"creatorFixed");o(Ey,"default")});function n5e(){}function Eh(t){return t==null?n5e:function(){return this.querySelector(t)}}var K4=M(()=>{"use strict";o(n5e,"none");o(Eh,"default")});function C7(t){typeof t!="function"&&(t=Eh(t));for(var e=this._groups,r=e.length,n=new Array(r),i=0;i{"use strict";wl();K4();o(C7,"default")});function A7(t){return t==null?[]:Array.isArray(t)?t:Array.from(t)}var sV=M(()=>{"use strict";o(A7,"array")});function i5e(){return[]}function Dp(t){return t==null?i5e:function(){return this.querySelectorAll(t)}}var _7=M(()=>{"use strict";o(i5e,"empty");o(Dp,"default")});function a5e(t){return function(){return A7(t.apply(this,arguments))}}function L7(t){typeof t=="function"?t=a5e(t):t=Dp(t);for(var e=this._groups,r=e.length,n=[],i=[],a=0;a{"use strict";wl();sV();_7();o(a5e,"arrayAll");o(L7,"default")});function Np(t){return function(){return this.matches(t)}}function Q4(t){return function(e){return e.matches(t)}}var Sy=M(()=>{"use strict";o(Np,"default");o(Q4,"childMatcher")});function o5e(t){return function(){return s5e.call(this.children,t)}}function l5e(){return this.firstElementChild}function D7(t){return this.select(t==null?l5e:o5e(typeof t=="function"?t:Q4(t)))}var s5e,lV=M(()=>{"use strict";Sy();s5e=Array.prototype.find;o(o5e,"childFind");o(l5e,"childFirst");o(D7,"default")});function u5e(){return Array.from(this.children)}function h5e(t){return function(){return c5e.call(this.children,t)}}function N7(t){return this.selectAll(t==null?u5e:h5e(typeof t=="function"?t:Q4(t)))}var c5e,cV=M(()=>{"use strict";Sy();c5e=Array.prototype.filter;o(u5e,"children");o(h5e,"childrenFilter");o(N7,"default")});function R7(t){typeof t!="function"&&(t=Np(t));for(var e=this._groups,r=e.length,n=new Array(r),i=0;i{"use strict";wl();Sy();o(R7,"default")});function Cy(t){return new Array(t.length)}var M7=M(()=>{"use strict";o(Cy,"default")});function I7(){return new si(this._enter||this._groups.map(Cy),this._parents)}function Ay(t,e){this.ownerDocument=t.ownerDocument,this.namespaceURI=t.namespaceURI,this._next=null,this._parent=t,this.__data__=e}var O7=M(()=>{"use strict";M7();wl();o(I7,"default");o(Ay,"EnterNode");Ay.prototype={constructor:Ay,appendChild:o(function(t){return this._parent.insertBefore(t,this._next)},"appendChild"),insertBefore:o(function(t,e){return this._parent.insertBefore(t,e)},"insertBefore"),querySelector:o(function(t){return this._parent.querySelector(t)},"querySelector"),querySelectorAll:o(function(t){return this._parent.querySelectorAll(t)},"querySelectorAll")}});function P7(t){return function(){return t}}var hV=M(()=>{"use strict";o(P7,"default")});function f5e(t,e,r,n,i,a){for(var s=0,l,u=e.length,h=a.length;s=w&&(w=b+1);!(T=v[w])&&++w{"use strict";wl();O7();hV();o(f5e,"bindIndex");o(d5e,"bindKey");o(p5e,"datum");o(B7,"default");o(m5e,"arraylike")});function F7(){return new si(this._exit||this._groups.map(Cy),this._parents)}var dV=M(()=>{"use strict";M7();wl();o(F7,"default")});function z7(t,e,r){var n=this.enter(),i=this,a=this.exit();return typeof t=="function"?(n=t(n),n&&(n=n.selection())):n=n.append(t+""),e!=null&&(i=e(i),i&&(i=i.selection())),r==null?a.remove():r(a),n&&i?n.merge(i).order():i}var pV=M(()=>{"use strict";o(z7,"default")});function G7(t){for(var e=t.selection?t.selection():t,r=this._groups,n=e._groups,i=r.length,a=n.length,s=Math.min(i,a),l=new Array(i),u=0;u{"use strict";wl();o(G7,"default")});function $7(){for(var t=this._groups,e=-1,r=t.length;++e=0;)(s=n[i])&&(a&&s.compareDocumentPosition(a)^4&&a.parentNode.insertBefore(s,a),a=s);return this}var gV=M(()=>{"use strict";o($7,"default")});function V7(t){t||(t=g5e);function e(d,p){return d&&p?t(d.__data__,p.__data__):!d-!p}o(e,"compareNode");for(var r=this._groups,n=r.length,i=new Array(n),a=0;ae?1:t>=e?0:NaN}var yV=M(()=>{"use strict";wl();o(V7,"default");o(g5e,"ascending")});function U7(){var t=arguments[0];return arguments[0]=this,t.apply(null,arguments),this}var vV=M(()=>{"use strict";o(U7,"default")});function H7(){return Array.from(this)}var xV=M(()=>{"use strict";o(H7,"default")});function W7(){for(var t=this._groups,e=0,r=t.length;e{"use strict";o(W7,"default")});function Y7(){let t=0;for(let e of this)++t;return t}var wV=M(()=>{"use strict";o(Y7,"default")});function q7(){return!this.node()}var TV=M(()=>{"use strict";o(q7,"default")});function X7(t){for(var e=this._groups,r=0,n=e.length;r{"use strict";o(X7,"default")});function y5e(t){return function(){this.removeAttribute(t)}}function v5e(t){return function(){this.removeAttributeNS(t.space,t.local)}}function x5e(t,e){return function(){this.setAttribute(t,e)}}function b5e(t,e){return function(){this.setAttributeNS(t.space,t.local,e)}}function w5e(t,e){return function(){var r=e.apply(this,arguments);r==null?this.removeAttribute(t):this.setAttribute(t,r)}}function T5e(t,e){return function(){var r=e.apply(this,arguments);r==null?this.removeAttributeNS(t.space,t.local):this.setAttributeNS(t.space,t.local,r)}}function j7(t,e){var r=pc(t);if(arguments.length<2){var n=this.node();return r.local?n.getAttributeNS(r.space,r.local):n.getAttribute(r)}return this.each((e==null?r.local?v5e:y5e:typeof e=="function"?r.local?T5e:w5e:r.local?b5e:x5e)(r,e))}var EV=M(()=>{"use strict";j4();o(y5e,"attrRemove");o(v5e,"attrRemoveNS");o(x5e,"attrConstant");o(b5e,"attrConstantNS");o(w5e,"attrFunction");o(T5e,"attrFunctionNS");o(j7,"default")});function _y(t){return t.ownerDocument&&t.ownerDocument.defaultView||t.document&&t||t.defaultView}var K7=M(()=>{"use strict";o(_y,"default")});function k5e(t){return function(){this.style.removeProperty(t)}}function E5e(t,e,r){return function(){this.style.setProperty(t,e,r)}}function S5e(t,e,r){return function(){var n=e.apply(this,arguments);n==null?this.style.removeProperty(t):this.style.setProperty(t,n,r)}}function Q7(t,e,r){return arguments.length>1?this.each((e==null?k5e:typeof e=="function"?S5e:E5e)(t,e,r??"")):Sh(this.node(),t)}function Sh(t,e){return t.style.getPropertyValue(e)||_y(t).getComputedStyle(t,null).getPropertyValue(e)}var Z7=M(()=>{"use strict";K7();o(k5e,"styleRemove");o(E5e,"styleConstant");o(S5e,"styleFunction");o(Q7,"default");o(Sh,"styleValue")});function C5e(t){return function(){delete this[t]}}function A5e(t,e){return function(){this[t]=e}}function _5e(t,e){return function(){var r=e.apply(this,arguments);r==null?delete this[t]:this[t]=r}}function J7(t,e){return arguments.length>1?this.each((e==null?C5e:typeof e=="function"?_5e:A5e)(t,e)):this.node()[t]}var SV=M(()=>{"use strict";o(C5e,"propertyRemove");o(A5e,"propertyConstant");o(_5e,"propertyFunction");o(J7,"default")});function CV(t){return t.trim().split(/^|\s+/)}function eA(t){return t.classList||new AV(t)}function AV(t){this._node=t,this._names=CV(t.getAttribute("class")||"")}function _V(t,e){for(var r=eA(t),n=-1,i=e.length;++n{"use strict";o(CV,"classArray");o(eA,"classList");o(AV,"ClassList");AV.prototype={add:o(function(t){var e=this._names.indexOf(t);e<0&&(this._names.push(t),this._node.setAttribute("class",this._names.join(" ")))},"add"),remove:o(function(t){var e=this._names.indexOf(t);e>=0&&(this._names.splice(e,1),this._node.setAttribute("class",this._names.join(" ")))},"remove"),contains:o(function(t){return this._names.indexOf(t)>=0},"contains")};o(_V,"classedAdd");o(LV,"classedRemove");o(L5e,"classedTrue");o(D5e,"classedFalse");o(N5e,"classedFunction");o(tA,"default")});function R5e(){this.textContent=""}function M5e(t){return function(){this.textContent=t}}function I5e(t){return function(){var e=t.apply(this,arguments);this.textContent=e??""}}function rA(t){return arguments.length?this.each(t==null?R5e:(typeof t=="function"?I5e:M5e)(t)):this.node().textContent}var NV=M(()=>{"use strict";o(R5e,"textRemove");o(M5e,"textConstant");o(I5e,"textFunction");o(rA,"default")});function O5e(){this.innerHTML=""}function P5e(t){return function(){this.innerHTML=t}}function B5e(t){return function(){var e=t.apply(this,arguments);this.innerHTML=e??""}}function nA(t){return arguments.length?this.each(t==null?O5e:(typeof t=="function"?B5e:P5e)(t)):this.node().innerHTML}var RV=M(()=>{"use strict";o(O5e,"htmlRemove");o(P5e,"htmlConstant");o(B5e,"htmlFunction");o(nA,"default")});function F5e(){this.nextSibling&&this.parentNode.appendChild(this)}function iA(){return this.each(F5e)}var MV=M(()=>{"use strict";o(F5e,"raise");o(iA,"default")});function z5e(){this.previousSibling&&this.parentNode.insertBefore(this,this.parentNode.firstChild)}function aA(){return this.each(z5e)}var IV=M(()=>{"use strict";o(z5e,"lower");o(aA,"default")});function sA(t){var e=typeof t=="function"?t:Ey(t);return this.select(function(){return this.appendChild(e.apply(this,arguments))})}var OV=M(()=>{"use strict";S7();o(sA,"default")});function G5e(){return null}function oA(t,e){var r=typeof t=="function"?t:Ey(t),n=e==null?G5e:typeof e=="function"?e:Eh(e);return this.select(function(){return this.insertBefore(r.apply(this,arguments),n.apply(this,arguments)||null)})}var PV=M(()=>{"use strict";S7();K4();o(G5e,"constantNull");o(oA,"default")});function $5e(){var t=this.parentNode;t&&t.removeChild(this)}function lA(){return this.each($5e)}var BV=M(()=>{"use strict";o($5e,"remove");o(lA,"default")});function V5e(){var t=this.cloneNode(!1),e=this.parentNode;return e?e.insertBefore(t,this.nextSibling):t}function U5e(){var t=this.cloneNode(!0),e=this.parentNode;return e?e.insertBefore(t,this.nextSibling):t}function cA(t){return this.select(t?U5e:V5e)}var FV=M(()=>{"use strict";o(V5e,"selection_cloneShallow");o(U5e,"selection_cloneDeep");o(cA,"default")});function uA(t){return arguments.length?this.property("__data__",t):this.node().__data__}var zV=M(()=>{"use strict";o(uA,"default")});function H5e(t){return function(e){t.call(this,e,this.__data__)}}function W5e(t){return t.trim().split(/^|\s+/).map(function(e){var r="",n=e.indexOf(".");return n>=0&&(r=e.slice(n+1),e=e.slice(0,n)),{type:e,name:r}})}function Y5e(t){return function(){var e=this.__on;if(e){for(var r=0,n=-1,i=e.length,a;r{"use strict";o(H5e,"contextListener");o(W5e,"parseTypenames");o(Y5e,"onRemove");o(q5e,"onAdd");o(hA,"default")});function $V(t,e,r){var n=_y(t),i=n.CustomEvent;typeof i=="function"?i=new i(e,r):(i=n.document.createEvent("Event"),r?(i.initEvent(e,r.bubbles,r.cancelable),i.detail=r.detail):i.initEvent(e,!1,!1)),t.dispatchEvent(i)}function X5e(t,e){return function(){return $V(this,t,e)}}function j5e(t,e){return function(){return $V(this,t,e.apply(this,arguments))}}function fA(t,e){return this.each((typeof e=="function"?j5e:X5e)(t,e))}var VV=M(()=>{"use strict";K7();o($V,"dispatchEvent");o(X5e,"dispatchConstant");o(j5e,"dispatchFunction");o(fA,"default")});function*dA(){for(var t=this._groups,e=0,r=t.length;e{"use strict";o(dA,"default")});function si(t,e){this._groups=t,this._parents=e}function HV(){return new si([[document.documentElement]],pA)}function K5e(){return this}var pA,vu,wl=M(()=>{"use strict";aV();oV();lV();cV();uV();fV();O7();dV();pV();mV();gV();yV();vV();xV();bV();wV();TV();kV();EV();Z7();SV();DV();NV();RV();MV();IV();OV();PV();BV();FV();zV();GV();VV();UV();pA=[null];o(si,"Selection");o(HV,"selection");o(K5e,"selection_selection");si.prototype=HV.prototype={constructor:si,select:C7,selectAll:L7,selectChild:D7,selectChildren:N7,filter:R7,data:B7,enter:I7,exit:F7,join:z7,merge:G7,selection:K5e,order:$7,sort:V7,call:U7,nodes:H7,node:W7,size:Y7,empty:q7,each:X7,attr:j7,style:Q7,property:J7,classed:tA,text:rA,html:nA,raise:iA,lower:aA,append:sA,insert:oA,remove:lA,clone:cA,datum:uA,on:hA,dispatch:fA,[Symbol.iterator]:dA};vu=HV});function Ve(t){return typeof t=="string"?new si([[document.querySelector(t)]],[document.documentElement]):new si([[t]],pA)}var WV=M(()=>{"use strict";wl();o(Ve,"default")});var Tl=M(()=>{"use strict";Sy();j4();WV();wl();K4();_7();Z7()});var YV=M(()=>{"use strict"});function Ch(t,e,r){t.prototype=e.prototype=r,r.constructor=t}function Rp(t,e){var r=Object.create(t.prototype);for(var n in e)r[n]=e[n];return r}var mA=M(()=>{"use strict";o(Ch,"default");o(Rp,"extend")});function Ah(){}function XV(){return this.rgb().formatHex()}function iwe(){return this.rgb().formatHex8()}function awe(){return tU(this).formatHsl()}function jV(){return this.rgb().formatRgb()}function El(t){var e,r;return t=(t+"").trim().toLowerCase(),(e=Q5e.exec(t))?(r=e[1].length,e=parseInt(e[1],16),r===6?KV(e):r===3?new da(e>>8&15|e>>4&240,e>>4&15|e&240,(e&15)<<4|e&15,1):r===8?Z4(e>>24&255,e>>16&255,e>>8&255,(e&255)/255):r===4?Z4(e>>12&15|e>>8&240,e>>8&15|e>>4&240,e>>4&15|e&240,((e&15)<<4|e&15)/255):null):(e=Z5e.exec(t))?new da(e[1],e[2],e[3],1):(e=J5e.exec(t))?new da(e[1]*255/100,e[2]*255/100,e[3]*255/100,1):(e=ewe.exec(t))?Z4(e[1],e[2],e[3],e[4]):(e=twe.exec(t))?Z4(e[1]*255/100,e[2]*255/100,e[3]*255/100,e[4]):(e=rwe.exec(t))?JV(e[1],e[2]/100,e[3]/100,1):(e=nwe.exec(t))?JV(e[1],e[2]/100,e[3]/100,e[4]):qV.hasOwnProperty(t)?KV(qV[t]):t==="transparent"?new da(NaN,NaN,NaN,0):null}function KV(t){return new da(t>>16&255,t>>8&255,t&255,1)}function Z4(t,e,r,n){return n<=0&&(t=e=r=NaN),new da(t,e,r,n)}function yA(t){return t instanceof Ah||(t=El(t)),t?(t=t.rgb(),new da(t.r,t.g,t.b,t.opacity)):new da}function Ip(t,e,r,n){return arguments.length===1?yA(t):new da(t,e,r,n??1)}function da(t,e,r,n){this.r=+t,this.g=+e,this.b=+r,this.opacity=+n}function QV(){return`#${ud(this.r)}${ud(this.g)}${ud(this.b)}`}function swe(){return`#${ud(this.r)}${ud(this.g)}${ud(this.b)}${ud((isNaN(this.opacity)?1:this.opacity)*255)}`}function ZV(){let t=t3(this.opacity);return`${t===1?"rgb(":"rgba("}${hd(this.r)}, ${hd(this.g)}, ${hd(this.b)}${t===1?")":`, ${t})`}`}function t3(t){return isNaN(t)?1:Math.max(0,Math.min(1,t))}function hd(t){return Math.max(0,Math.min(255,Math.round(t)||0))}function ud(t){return t=hd(t),(t<16?"0":"")+t.toString(16)}function JV(t,e,r,n){return n<=0?t=e=r=NaN:r<=0||r>=1?t=e=NaN:e<=0&&(t=NaN),new kl(t,e,r,n)}function tU(t){if(t instanceof kl)return new kl(t.h,t.s,t.l,t.opacity);if(t instanceof Ah||(t=El(t)),!t)return new kl;if(t instanceof kl)return t;t=t.rgb();var e=t.r/255,r=t.g/255,n=t.b/255,i=Math.min(e,r,n),a=Math.max(e,r,n),s=NaN,l=a-i,u=(a+i)/2;return l?(e===a?s=(r-n)/l+(r0&&u<1?0:s,new kl(s,l,u,t.opacity)}function rU(t,e,r,n){return arguments.length===1?tU(t):new kl(t,e,r,n??1)}function kl(t,e,r,n){this.h=+t,this.s=+e,this.l=+r,this.opacity=+n}function eU(t){return t=(t||0)%360,t<0?t+360:t}function J4(t){return Math.max(0,Math.min(1,t||0))}function gA(t,e,r){return(t<60?e+(r-e)*t/60:t<180?r:t<240?e+(r-e)*(240-t)/60:e)*255}var Ly,e3,Mp,Dy,mc,Q5e,Z5e,J5e,ewe,twe,rwe,nwe,qV,vA=M(()=>{"use strict";mA();o(Ah,"Color");Ly=.7,e3=1/Ly,Mp="\\s*([+-]?\\d+)\\s*",Dy="\\s*([+-]?(?:\\d*\\.)?\\d+(?:[eE][+-]?\\d+)?)\\s*",mc="\\s*([+-]?(?:\\d*\\.)?\\d+(?:[eE][+-]?\\d+)?)%\\s*",Q5e=/^#([0-9a-f]{3,8})$/,Z5e=new RegExp(`^rgb\\(${Mp},${Mp},${Mp}\\)$`),J5e=new RegExp(`^rgb\\(${mc},${mc},${mc}\\)$`),ewe=new RegExp(`^rgba\\(${Mp},${Mp},${Mp},${Dy}\\)$`),twe=new RegExp(`^rgba\\(${mc},${mc},${mc},${Dy}\\)$`),rwe=new RegExp(`^hsl\\(${Dy},${mc},${mc}\\)$`),nwe=new RegExp(`^hsla\\(${Dy},${mc},${mc},${Dy}\\)$`),qV={aliceblue:15792383,antiquewhite:16444375,aqua:65535,aquamarine:8388564,azure:15794175,beige:16119260,bisque:16770244,black:0,blanchedalmond:16772045,blue:255,blueviolet:9055202,brown:10824234,burlywood:14596231,cadetblue:6266528,chartreuse:8388352,chocolate:13789470,coral:16744272,cornflowerblue:6591981,cornsilk:16775388,crimson:14423100,cyan:65535,darkblue:139,darkcyan:35723,darkgoldenrod:12092939,darkgray:11119017,darkgreen:25600,darkgrey:11119017,darkkhaki:12433259,darkmagenta:9109643,darkolivegreen:5597999,darkorange:16747520,darkorchid:10040012,darkred:9109504,darksalmon:15308410,darkseagreen:9419919,darkslateblue:4734347,darkslategray:3100495,darkslategrey:3100495,darkturquoise:52945,darkviolet:9699539,deeppink:16716947,deepskyblue:49151,dimgray:6908265,dimgrey:6908265,dodgerblue:2003199,firebrick:11674146,floralwhite:16775920,forestgreen:2263842,fuchsia:16711935,gainsboro:14474460,ghostwhite:16316671,gold:16766720,goldenrod:14329120,gray:8421504,green:32768,greenyellow:11403055,grey:8421504,honeydew:15794160,hotpink:16738740,indianred:13458524,indigo:4915330,ivory:16777200,khaki:15787660,lavender:15132410,lavenderblush:16773365,lawngreen:8190976,lemonchiffon:16775885,lightblue:11393254,lightcoral:15761536,lightcyan:14745599,lightgoldenrodyellow:16448210,lightgray:13882323,lightgreen:9498256,lightgrey:13882323,lightpink:16758465,lightsalmon:16752762,lightseagreen:2142890,lightskyblue:8900346,lightslategray:7833753,lightslategrey:7833753,lightsteelblue:11584734,lightyellow:16777184,lime:65280,limegreen:3329330,linen:16445670,magenta:16711935,maroon:8388608,mediumaquamarine:6737322,mediumblue:205,mediumorchid:12211667,mediumpurple:9662683,mediumseagreen:3978097,mediumslateblue:8087790,mediumspringgreen:64154,mediumturquoise:4772300,mediumvioletred:13047173,midnightblue:1644912,mintcream:16121850,mistyrose:16770273,moccasin:16770229,navajowhite:16768685,navy:128,oldlace:16643558,olive:8421376,olivedrab:7048739,orange:16753920,orangered:16729344,orchid:14315734,palegoldenrod:15657130,palegreen:10025880,paleturquoise:11529966,palevioletred:14381203,papayawhip:16773077,peachpuff:16767673,peru:13468991,pink:16761035,plum:14524637,powderblue:11591910,purple:8388736,rebeccapurple:6697881,red:16711680,rosybrown:12357519,royalblue:4286945,saddlebrown:9127187,salmon:16416882,sandybrown:16032864,seagreen:3050327,seashell:16774638,sienna:10506797,silver:12632256,skyblue:8900331,slateblue:6970061,slategray:7372944,slategrey:7372944,snow:16775930,springgreen:65407,steelblue:4620980,tan:13808780,teal:32896,thistle:14204888,tomato:16737095,turquoise:4251856,violet:15631086,wheat:16113331,white:16777215,whitesmoke:16119285,yellow:16776960,yellowgreen:10145074};Ch(Ah,El,{copy(t){return Object.assign(new this.constructor,this,t)},displayable(){return this.rgb().displayable()},hex:XV,formatHex:XV,formatHex8:iwe,formatHsl:awe,formatRgb:jV,toString:jV});o(XV,"color_formatHex");o(iwe,"color_formatHex8");o(awe,"color_formatHsl");o(jV,"color_formatRgb");o(El,"color");o(KV,"rgbn");o(Z4,"rgba");o(yA,"rgbConvert");o(Ip,"rgb");o(da,"Rgb");Ch(da,Ip,Rp(Ah,{brighter(t){return t=t==null?e3:Math.pow(e3,t),new da(this.r*t,this.g*t,this.b*t,this.opacity)},darker(t){return t=t==null?Ly:Math.pow(Ly,t),new da(this.r*t,this.g*t,this.b*t,this.opacity)},rgb(){return this},clamp(){return new da(hd(this.r),hd(this.g),hd(this.b),t3(this.opacity))},displayable(){return-.5<=this.r&&this.r<255.5&&-.5<=this.g&&this.g<255.5&&-.5<=this.b&&this.b<255.5&&0<=this.opacity&&this.opacity<=1},hex:QV,formatHex:QV,formatHex8:swe,formatRgb:ZV,toString:ZV}));o(QV,"rgb_formatHex");o(swe,"rgb_formatHex8");o(ZV,"rgb_formatRgb");o(t3,"clampa");o(hd,"clampi");o(ud,"hex");o(JV,"hsla");o(tU,"hslConvert");o(rU,"hsl");o(kl,"Hsl");Ch(kl,rU,Rp(Ah,{brighter(t){return t=t==null?e3:Math.pow(e3,t),new kl(this.h,this.s,this.l*t,this.opacity)},darker(t){return t=t==null?Ly:Math.pow(Ly,t),new kl(this.h,this.s,this.l*t,this.opacity)},rgb(){var t=this.h%360+(this.h<0)*360,e=isNaN(t)||isNaN(this.s)?0:this.s,r=this.l,n=r+(r<.5?r:1-r)*e,i=2*r-n;return new da(gA(t>=240?t-240:t+120,i,n),gA(t,i,n),gA(t<120?t+240:t-120,i,n),this.opacity)},clamp(){return new kl(eU(this.h),J4(this.s),J4(this.l),t3(this.opacity))},displayable(){return(0<=this.s&&this.s<=1||isNaN(this.s))&&0<=this.l&&this.l<=1&&0<=this.opacity&&this.opacity<=1},formatHsl(){let t=t3(this.opacity);return`${t===1?"hsl(":"hsla("}${eU(this.h)}, ${J4(this.s)*100}%, ${J4(this.l)*100}%${t===1?")":`, ${t})`}`}}));o(eU,"clamph");o(J4,"clampt");o(gA,"hsl2rgb")});var nU,iU,aU=M(()=>{"use strict";nU=Math.PI/180,iU=180/Math.PI});function hU(t){if(t instanceof gc)return new gc(t.l,t.a,t.b,t.opacity);if(t instanceof xu)return fU(t);t instanceof da||(t=yA(t));var e=TA(t.r),r=TA(t.g),n=TA(t.b),i=xA((.2225045*e+.7168786*r+.0606169*n)/oU),a,s;return e===r&&r===n?a=s=i:(a=xA((.4360747*e+.3850649*r+.1430804*n)/sU),s=xA((.0139322*e+.0971045*r+.7141733*n)/lU)),new gc(116*i-16,500*(a-i),200*(i-s),t.opacity)}function kA(t,e,r,n){return arguments.length===1?hU(t):new gc(t,e,r,n??1)}function gc(t,e,r,n){this.l=+t,this.a=+e,this.b=+r,this.opacity=+n}function xA(t){return t>owe?Math.pow(t,1/3):t/uU+cU}function bA(t){return t>Op?t*t*t:uU*(t-cU)}function wA(t){return 255*(t<=.0031308?12.92*t:1.055*Math.pow(t,1/2.4)-.055)}function TA(t){return(t/=255)<=.04045?t/12.92:Math.pow((t+.055)/1.055,2.4)}function lwe(t){if(t instanceof xu)return new xu(t.h,t.c,t.l,t.opacity);if(t instanceof gc||(t=hU(t)),t.a===0&&t.b===0)return new xu(NaN,0{"use strict";mA();vA();aU();r3=18,sU=.96422,oU=1,lU=.82521,cU=4/29,Op=6/29,uU=3*Op*Op,owe=Op*Op*Op;o(hU,"labConvert");o(kA,"lab");o(gc,"Lab");Ch(gc,kA,Rp(Ah,{brighter(t){return new gc(this.l+r3*(t??1),this.a,this.b,this.opacity)},darker(t){return new gc(this.l-r3*(t??1),this.a,this.b,this.opacity)},rgb(){var t=(this.l+16)/116,e=isNaN(this.a)?t:t+this.a/500,r=isNaN(this.b)?t:t-this.b/200;return e=sU*bA(e),t=oU*bA(t),r=lU*bA(r),new da(wA(3.1338561*e-1.6168667*t-.4906146*r),wA(-.9787684*e+1.9161415*t+.033454*r),wA(.0719453*e-.2289914*t+1.4052427*r),this.opacity)}}));o(xA,"xyz2lab");o(bA,"lab2xyz");o(wA,"lrgb2rgb");o(TA,"rgb2lrgb");o(lwe,"hclConvert");o(Ny,"hcl");o(xu,"Hcl");o(fU,"hcl2lab");Ch(xu,Ny,Rp(Ah,{brighter(t){return new xu(this.h,this.c,this.l+r3*(t??1),this.opacity)},darker(t){return new xu(this.h,this.c,this.l-r3*(t??1),this.opacity)},rgb(){return fU(this).rgb()}}))});var Pp=M(()=>{"use strict";vA();dU()});function EA(t,e,r,n,i){var a=t*t,s=a*t;return((1-3*t+3*a-s)*e+(4-6*a+3*s)*r+(1+3*t+3*a-3*s)*n+s*i)/6}function SA(t){var e=t.length-1;return function(r){var n=r<=0?r=0:r>=1?(r=1,e-1):Math.floor(r*e),i=t[n],a=t[n+1],s=n>0?t[n-1]:2*i-a,l=n{"use strict";o(EA,"basis");o(SA,"default")});function AA(t){var e=t.length;return function(r){var n=Math.floor(((r%=1)<0?++r:r)*e),i=t[(n+e-1)%e],a=t[n%e],s=t[(n+1)%e],l=t[(n+2)%e];return EA((r-n/e)*e,i,a,s,l)}}var pU=M(()=>{"use strict";CA();o(AA,"default")});var Bp,_A=M(()=>{"use strict";Bp=o(t=>()=>t,"default")});function mU(t,e){return function(r){return t+r*e}}function cwe(t,e,r){return t=Math.pow(t,r),e=Math.pow(e,r)-t,r=1/r,function(n){return Math.pow(t+n*e,r)}}function gU(t,e){var r=e-t;return r?mU(t,r>180||r<-180?r-360*Math.round(r/360):r):Bp(isNaN(t)?e:t)}function yU(t){return(t=+t)==1?bu:function(e,r){return r-e?cwe(e,r,t):Bp(isNaN(e)?r:e)}}function bu(t,e){var r=e-t;return r?mU(t,r):Bp(isNaN(t)?e:t)}var LA=M(()=>{"use strict";_A();o(mU,"linear");o(cwe,"exponential");o(gU,"hue");o(yU,"gamma");o(bu,"nogamma")});function vU(t){return function(e){var r=e.length,n=new Array(r),i=new Array(r),a=new Array(r),s,l;for(s=0;s{"use strict";Pp();CA();pU();LA();fd=o(function t(e){var r=yU(e);function n(i,a){var s=r((i=Ip(i)).r,(a=Ip(a)).r),l=r(i.g,a.g),u=r(i.b,a.b),h=bu(i.opacity,a.opacity);return function(f){return i.r=s(f),i.g=l(f),i.b=u(f),i.opacity=h(f),i+""}}return o(n,"rgb"),n.gamma=t,n},"rgbGamma")(1);o(vU,"rgbSpline");uwe=vU(SA),hwe=vU(AA)});function NA(t,e){e||(e=[]);var r=t?Math.min(e.length,t.length):0,n=e.slice(),i;return function(a){for(i=0;i{"use strict";o(NA,"default");o(xU,"isNumberArray")});function wU(t,e){var r=e?e.length:0,n=t?Math.min(r,t.length):0,i=new Array(n),a=new Array(r),s;for(s=0;s{"use strict";n3();o(wU,"genericArray")});function RA(t,e){var r=new Date;return t=+t,e=+e,function(n){return r.setTime(t*(1-n)+e*n),r}}var kU=M(()=>{"use strict";o(RA,"default")});function ea(t,e){return t=+t,e=+e,function(r){return t*(1-r)+e*r}}var Ry=M(()=>{"use strict";o(ea,"default")});function MA(t,e){var r={},n={},i;(t===null||typeof t!="object")&&(t={}),(e===null||typeof e!="object")&&(e={});for(i in e)i in t?r[i]=_h(t[i],e[i]):n[i]=e[i];return function(a){for(i in r)n[i]=r[i](a);return n}}var EU=M(()=>{"use strict";n3();o(MA,"default")});function fwe(t){return function(){return t}}function dwe(t){return function(e){return t(e)+""}}function Fp(t,e){var r=OA.lastIndex=IA.lastIndex=0,n,i,a,s=-1,l=[],u=[];for(t=t+"",e=e+"";(n=OA.exec(t))&&(i=IA.exec(e));)(a=i.index)>r&&(a=e.slice(r,a),l[s]?l[s]+=a:l[++s]=a),(n=n[0])===(i=i[0])?l[s]?l[s]+=i:l[++s]=i:(l[++s]=null,u.push({i:s,x:ea(n,i)})),r=IA.lastIndex;return r{"use strict";Ry();OA=/[-+]?(?:\d+\.?\d*|\.?\d+)(?:[eE][-+]?\d+)?/g,IA=new RegExp(OA.source,"g");o(fwe,"zero");o(dwe,"one");o(Fp,"default")});function _h(t,e){var r=typeof e,n;return e==null||r==="boolean"?Bp(e):(r==="number"?ea:r==="string"?(n=El(e))?(e=n,fd):Fp:e instanceof El?fd:e instanceof Date?RA:xU(e)?NA:Array.isArray(e)?wU:typeof e.valueOf!="function"&&typeof e.toString!="function"||isNaN(e)?MA:ea)(t,e)}var n3=M(()=>{"use strict";Pp();DA();TU();kU();Ry();EU();PA();_A();bU();o(_h,"default")});function i3(t,e){return t=+t,e=+e,function(r){return Math.round(t*(1-r)+e*r)}}var SU=M(()=>{"use strict";o(i3,"default")});function s3(t,e,r,n,i,a){var s,l,u;return(s=Math.sqrt(t*t+e*e))&&(t/=s,e/=s),(u=t*r+e*n)&&(r-=t*u,n-=e*u),(l=Math.sqrt(r*r+n*n))&&(r/=l,n/=l,u/=l),t*n{"use strict";CU=180/Math.PI,a3={translateX:0,translateY:0,rotate:0,skewX:0,scaleX:1,scaleY:1};o(s3,"default")});function _U(t){let e=new(typeof DOMMatrix=="function"?DOMMatrix:WebKitCSSMatrix)(t+"");return e.isIdentity?a3:s3(e.a,e.b,e.c,e.d,e.e,e.f)}function LU(t){return t==null?a3:(o3||(o3=document.createElementNS("http://www.w3.org/2000/svg","g")),o3.setAttribute("transform",t),(t=o3.transform.baseVal.consolidate())?(t=t.matrix,s3(t.a,t.b,t.c,t.d,t.e,t.f)):a3)}var o3,DU=M(()=>{"use strict";AU();o(_U,"parseCss");o(LU,"parseSvg")});function NU(t,e,r,n){function i(h){return h.length?h.pop()+" ":""}o(i,"pop");function a(h,f,d,p,m,g){if(h!==d||f!==p){var y=m.push("translate(",null,e,null,r);g.push({i:y-4,x:ea(h,d)},{i:y-2,x:ea(f,p)})}else(d||p)&&m.push("translate("+d+e+p+r)}o(a,"translate");function s(h,f,d,p){h!==f?(h-f>180?f+=360:f-h>180&&(h+=360),p.push({i:d.push(i(d)+"rotate(",null,n)-2,x:ea(h,f)})):f&&d.push(i(d)+"rotate("+f+n)}o(s,"rotate");function l(h,f,d,p){h!==f?p.push({i:d.push(i(d)+"skewX(",null,n)-2,x:ea(h,f)}):f&&d.push(i(d)+"skewX("+f+n)}o(l,"skewX");function u(h,f,d,p,m,g){if(h!==d||f!==p){var y=m.push(i(m)+"scale(",null,",",null,")");g.push({i:y-4,x:ea(h,d)},{i:y-2,x:ea(f,p)})}else(d!==1||p!==1)&&m.push(i(m)+"scale("+d+","+p+")")}return o(u,"scale"),function(h,f){var d=[],p=[];return h=t(h),f=t(f),a(h.translateX,h.translateY,f.translateX,f.translateY,d,p),s(h.rotate,f.rotate,d,p),l(h.skewX,f.skewX,d,p),u(h.scaleX,h.scaleY,f.scaleX,f.scaleY,d,p),h=f=null,function(m){for(var g=-1,y=p.length,v;++g{"use strict";Ry();DU();o(NU,"interpolateTransform");BA=NU(_U,"px, ","px)","deg)"),FA=NU(LU,", ",")",")")});function MU(t){return function(e,r){var n=t((e=Ny(e)).h,(r=Ny(r)).h),i=bu(e.c,r.c),a=bu(e.l,r.l),s=bu(e.opacity,r.opacity);return function(l){return e.h=n(l),e.c=i(l),e.l=a(l),e.opacity=s(l),e+""}}}var zA,pwe,IU=M(()=>{"use strict";Pp();LA();o(MU,"hcl");zA=MU(gU),pwe=MU(bu)});var zp=M(()=>{"use strict";n3();Ry();SU();PA();RU();DA();IU()});function Fy(){return dd||(BU(mwe),dd=Py.now()+u3)}function mwe(){dd=0}function By(){this._call=this._time=this._next=null}function h3(t,e,r){var n=new By;return n.restart(t,e,r),n}function FU(){Fy(),++Gp;for(var t=l3,e;t;)(e=dd-t._time)>=0&&t._call.call(void 0,e),t=t._next;--Gp}function OU(){dd=(c3=Py.now())+u3,Gp=Iy=0;try{FU()}finally{Gp=0,ywe(),dd=0}}function gwe(){var t=Py.now(),e=t-c3;e>PU&&(u3-=e,c3=t)}function ywe(){for(var t,e=l3,r,n=1/0;e;)e._call?(n>e._time&&(n=e._time),t=e,e=e._next):(r=e._next,e._next=null,e=t?t._next=r:l3=r);Oy=t,GA(n)}function GA(t){if(!Gp){Iy&&(Iy=clearTimeout(Iy));var e=t-dd;e>24?(t<1/0&&(Iy=setTimeout(OU,t-Py.now()-u3)),My&&(My=clearInterval(My))):(My||(c3=Py.now(),My=setInterval(gwe,PU)),Gp=1,BU(OU))}}var Gp,Iy,My,PU,l3,Oy,c3,dd,u3,Py,BU,$A=M(()=>{"use strict";Gp=0,Iy=0,My=0,PU=1e3,c3=0,dd=0,u3=0,Py=typeof performance=="object"&&performance.now?performance:Date,BU=typeof window=="object"&&window.requestAnimationFrame?window.requestAnimationFrame.bind(window):function(t){setTimeout(t,17)};o(Fy,"now");o(mwe,"clearNow");o(By,"Timer");By.prototype=h3.prototype={constructor:By,restart:o(function(t,e,r){if(typeof t!="function")throw new TypeError("callback is not a function");r=(r==null?Fy():+r)+(e==null?0:+e),!this._next&&Oy!==this&&(Oy?Oy._next=this:l3=this,Oy=this),this._call=t,this._time=r,GA()},"restart"),stop:o(function(){this._call&&(this._call=null,this._time=1/0,GA())},"stop")};o(h3,"timer");o(FU,"timerFlush");o(OU,"wake");o(gwe,"poke");o(ywe,"nap");o(GA,"sleep")});function zy(t,e,r){var n=new By;return e=e==null?0:+e,n.restart(i=>{n.stop(),t(i+e)},e,r),n}var zU=M(()=>{"use strict";$A();o(zy,"default")});var f3=M(()=>{"use strict";$A();zU()});function wu(t,e,r,n,i,a){var s=t.__transition;if(!s)t.__transition={};else if(r in s)return;bwe(t,r,{name:e,index:n,group:i,on:vwe,tween:xwe,time:a.time,delay:a.delay,duration:a.duration,ease:a.ease,timer:null,state:VU})}function $y(t,e){var r=zi(t,e);if(r.state>VU)throw new Error("too late; already scheduled");return r}function pa(t,e){var r=zi(t,e);if(r.state>d3)throw new Error("too late; already running");return r}function zi(t,e){var r=t.__transition;if(!r||!(r=r[e]))throw new Error("transition not found");return r}function bwe(t,e,r){var n=t.__transition,i;n[e]=r,r.timer=h3(a,0,r.time);function a(h){r.state=GU,r.timer.restart(s,r.delay,r.time),r.delay<=h&&s(h-r.delay)}o(a,"schedule");function s(h){var f,d,p,m;if(r.state!==GU)return u();for(f in n)if(m=n[f],m.name===r.name){if(m.state===d3)return zy(s);m.state===$U?(m.state=Gy,m.timer.stop(),m.on.call("interrupt",t,t.__data__,m.index,m.group),delete n[f]):+f{"use strict";T7();f3();vwe=w7("start","end","cancel","interrupt"),xwe=[],VU=0,GU=1,p3=2,d3=3,$U=4,m3=5,Gy=6;o(wu,"default");o($y,"init");o(pa,"set");o(zi,"get");o(bwe,"create")});function Vy(t,e){var r=t.__transition,n,i,a=!0,s;if(r){e=e==null?null:e+"";for(s in r){if((n=r[s]).name!==e){a=!1;continue}i=n.state>p3&&n.state{"use strict";Cs();o(Vy,"default")});function VA(t){return this.each(function(){Vy(this,t)})}var HU=M(()=>{"use strict";UU();o(VA,"default")});function wwe(t,e){var r,n;return function(){var i=pa(this,t),a=i.tween;if(a!==r){n=r=a;for(var s=0,l=n.length;s{"use strict";Cs();o(wwe,"tweenRemove");o(Twe,"tweenFunction");o(UA,"default");o($p,"tweenValue")});function Hy(t,e){var r;return(typeof e=="number"?ea:e instanceof El?fd:(r=El(e))?(e=r,fd):Fp)(t,e)}var HA=M(()=>{"use strict";Pp();zp();o(Hy,"default")});function kwe(t){return function(){this.removeAttribute(t)}}function Ewe(t){return function(){this.removeAttributeNS(t.space,t.local)}}function Swe(t,e,r){var n,i=r+"",a;return function(){var s=this.getAttribute(t);return s===i?null:s===n?a:a=e(n=s,r)}}function Cwe(t,e,r){var n,i=r+"",a;return function(){var s=this.getAttributeNS(t.space,t.local);return s===i?null:s===n?a:a=e(n=s,r)}}function Awe(t,e,r){var n,i,a;return function(){var s,l=r(this),u;return l==null?void this.removeAttribute(t):(s=this.getAttribute(t),u=l+"",s===u?null:s===n&&u===i?a:(i=u,a=e(n=s,l)))}}function _we(t,e,r){var n,i,a;return function(){var s,l=r(this),u;return l==null?void this.removeAttributeNS(t.space,t.local):(s=this.getAttributeNS(t.space,t.local),u=l+"",s===u?null:s===n&&u===i?a:(i=u,a=e(n=s,l)))}}function WA(t,e){var r=pc(t),n=r==="transform"?FA:Hy;return this.attrTween(t,typeof e=="function"?(r.local?_we:Awe)(r,n,$p(this,"attr."+t,e)):e==null?(r.local?Ewe:kwe)(r):(r.local?Cwe:Swe)(r,n,e))}var WU=M(()=>{"use strict";zp();Tl();Uy();HA();o(kwe,"attrRemove");o(Ewe,"attrRemoveNS");o(Swe,"attrConstant");o(Cwe,"attrConstantNS");o(Awe,"attrFunction");o(_we,"attrFunctionNS");o(WA,"default")});function Lwe(t,e){return function(r){this.setAttribute(t,e.call(this,r))}}function Dwe(t,e){return function(r){this.setAttributeNS(t.space,t.local,e.call(this,r))}}function Nwe(t,e){var r,n;function i(){var a=e.apply(this,arguments);return a!==n&&(r=(n=a)&&Dwe(t,a)),r}return o(i,"tween"),i._value=e,i}function Rwe(t,e){var r,n;function i(){var a=e.apply(this,arguments);return a!==n&&(r=(n=a)&&Lwe(t,a)),r}return o(i,"tween"),i._value=e,i}function YA(t,e){var r="attr."+t;if(arguments.length<2)return(r=this.tween(r))&&r._value;if(e==null)return this.tween(r,null);if(typeof e!="function")throw new Error;var n=pc(t);return this.tween(r,(n.local?Nwe:Rwe)(n,e))}var YU=M(()=>{"use strict";Tl();o(Lwe,"attrInterpolate");o(Dwe,"attrInterpolateNS");o(Nwe,"attrTweenNS");o(Rwe,"attrTween");o(YA,"default")});function Mwe(t,e){return function(){$y(this,t).delay=+e.apply(this,arguments)}}function Iwe(t,e){return e=+e,function(){$y(this,t).delay=e}}function qA(t){var e=this._id;return arguments.length?this.each((typeof t=="function"?Mwe:Iwe)(e,t)):zi(this.node(),e).delay}var qU=M(()=>{"use strict";Cs();o(Mwe,"delayFunction");o(Iwe,"delayConstant");o(qA,"default")});function Owe(t,e){return function(){pa(this,t).duration=+e.apply(this,arguments)}}function Pwe(t,e){return e=+e,function(){pa(this,t).duration=e}}function XA(t){var e=this._id;return arguments.length?this.each((typeof t=="function"?Owe:Pwe)(e,t)):zi(this.node(),e).duration}var XU=M(()=>{"use strict";Cs();o(Owe,"durationFunction");o(Pwe,"durationConstant");o(XA,"default")});function Bwe(t,e){if(typeof e!="function")throw new Error;return function(){pa(this,t).ease=e}}function jA(t){var e=this._id;return arguments.length?this.each(Bwe(e,t)):zi(this.node(),e).ease}var jU=M(()=>{"use strict";Cs();o(Bwe,"easeConstant");o(jA,"default")});function Fwe(t,e){return function(){var r=e.apply(this,arguments);if(typeof r!="function")throw new Error;pa(this,t).ease=r}}function KA(t){if(typeof t!="function")throw new Error;return this.each(Fwe(this._id,t))}var KU=M(()=>{"use strict";Cs();o(Fwe,"easeVarying");o(KA,"default")});function QA(t){typeof t!="function"&&(t=Np(t));for(var e=this._groups,r=e.length,n=new Array(r),i=0;i{"use strict";Tl();pd();o(QA,"default")});function ZA(t){if(t._id!==this._id)throw new Error;for(var e=this._groups,r=t._groups,n=e.length,i=r.length,a=Math.min(n,i),s=new Array(n),l=0;l{"use strict";pd();o(ZA,"default")});function zwe(t){return(t+"").trim().split(/^|\s+/).every(function(e){var r=e.indexOf(".");return r>=0&&(e=e.slice(0,r)),!e||e==="start"})}function Gwe(t,e,r){var n,i,a=zwe(e)?$y:pa;return function(){var s=a(this,t),l=s.on;l!==n&&(i=(n=l).copy()).on(e,r),s.on=i}}function JA(t,e){var r=this._id;return arguments.length<2?zi(this.node(),r).on.on(t):this.each(Gwe(r,t,e))}var JU=M(()=>{"use strict";Cs();o(zwe,"start");o(Gwe,"onFunction");o(JA,"default")});function $we(t){return function(){var e=this.parentNode;for(var r in this.__transition)if(+r!==t)return;e&&e.removeChild(this)}}function e8(){return this.on("end.remove",$we(this._id))}var eH=M(()=>{"use strict";o($we,"removeFunction");o(e8,"default")});function t8(t){var e=this._name,r=this._id;typeof t!="function"&&(t=Eh(t));for(var n=this._groups,i=n.length,a=new Array(i),s=0;s{"use strict";Tl();pd();Cs();o(t8,"default")});function r8(t){var e=this._name,r=this._id;typeof t!="function"&&(t=Dp(t));for(var n=this._groups,i=n.length,a=[],s=[],l=0;l{"use strict";Tl();pd();Cs();o(r8,"default")});function n8(){return new Vwe(this._groups,this._parents)}var Vwe,nH=M(()=>{"use strict";Tl();Vwe=vu.prototype.constructor;o(n8,"default")});function Uwe(t,e){var r,n,i;return function(){var a=Sh(this,t),s=(this.style.removeProperty(t),Sh(this,t));return a===s?null:a===r&&s===n?i:i=e(r=a,n=s)}}function iH(t){return function(){this.style.removeProperty(t)}}function Hwe(t,e,r){var n,i=r+"",a;return function(){var s=Sh(this,t);return s===i?null:s===n?a:a=e(n=s,r)}}function Wwe(t,e,r){var n,i,a;return function(){var s=Sh(this,t),l=r(this),u=l+"";return l==null&&(u=l=(this.style.removeProperty(t),Sh(this,t))),s===u?null:s===n&&u===i?a:(i=u,a=e(n=s,l))}}function Ywe(t,e){var r,n,i,a="style."+e,s="end."+a,l;return function(){var u=pa(this,t),h=u.on,f=u.value[a]==null?l||(l=iH(e)):void 0;(h!==r||i!==f)&&(n=(r=h).copy()).on(s,i=f),u.on=n}}function i8(t,e,r){var n=(t+="")=="transform"?BA:Hy;return e==null?this.styleTween(t,Uwe(t,n)).on("end.style."+t,iH(t)):typeof e=="function"?this.styleTween(t,Wwe(t,n,$p(this,"style."+t,e))).each(Ywe(this._id,t)):this.styleTween(t,Hwe(t,n,e),r).on("end.style."+t,null)}var aH=M(()=>{"use strict";zp();Tl();Cs();Uy();HA();o(Uwe,"styleNull");o(iH,"styleRemove");o(Hwe,"styleConstant");o(Wwe,"styleFunction");o(Ywe,"styleMaybeRemove");o(i8,"default")});function qwe(t,e,r){return function(n){this.style.setProperty(t,e.call(this,n),r)}}function Xwe(t,e,r){var n,i;function a(){var s=e.apply(this,arguments);return s!==i&&(n=(i=s)&&qwe(t,s,r)),n}return o(a,"tween"),a._value=e,a}function a8(t,e,r){var n="style."+(t+="");if(arguments.length<2)return(n=this.tween(n))&&n._value;if(e==null)return this.tween(n,null);if(typeof e!="function")throw new Error;return this.tween(n,Xwe(t,e,r??""))}var sH=M(()=>{"use strict";o(qwe,"styleInterpolate");o(Xwe,"styleTween");o(a8,"default")});function jwe(t){return function(){this.textContent=t}}function Kwe(t){return function(){var e=t(this);this.textContent=e??""}}function s8(t){return this.tween("text",typeof t=="function"?Kwe($p(this,"text",t)):jwe(t==null?"":t+""))}var oH=M(()=>{"use strict";Uy();o(jwe,"textConstant");o(Kwe,"textFunction");o(s8,"default")});function Qwe(t){return function(e){this.textContent=t.call(this,e)}}function Zwe(t){var e,r;function n(){var i=t.apply(this,arguments);return i!==r&&(e=(r=i)&&Qwe(i)),e}return o(n,"tween"),n._value=t,n}function o8(t){var e="text";if(arguments.length<1)return(e=this.tween(e))&&e._value;if(t==null)return this.tween(e,null);if(typeof t!="function")throw new Error;return this.tween(e,Zwe(t))}var lH=M(()=>{"use strict";o(Qwe,"textInterpolate");o(Zwe,"textTween");o(o8,"default")});function l8(){for(var t=this._name,e=this._id,r=g3(),n=this._groups,i=n.length,a=0;a{"use strict";pd();Cs();o(l8,"default")});function c8(){var t,e,r=this,n=r._id,i=r.size();return new Promise(function(a,s){var l={value:s},u={value:o(function(){--i===0&&a()},"value")};r.each(function(){var h=pa(this,n),f=h.on;f!==t&&(e=(t=f).copy(),e._.cancel.push(l),e._.interrupt.push(l),e._.end.push(u)),h.on=e}),i===0&&a()})}var uH=M(()=>{"use strict";Cs();o(c8,"default")});function rs(t,e,r,n){this._groups=t,this._parents=e,this._name=r,this._id=n}function hH(t){return vu().transition(t)}function g3(){return++Jwe}var Jwe,Tu,pd=M(()=>{"use strict";Tl();WU();YU();qU();XU();jU();KU();QU();ZU();JU();eH();tH();rH();nH();aH();sH();oH();lH();cH();Uy();uH();Jwe=0;o(rs,"Transition");o(hH,"transition");o(g3,"newId");Tu=vu.prototype;rs.prototype=hH.prototype={constructor:rs,select:t8,selectAll:r8,selectChild:Tu.selectChild,selectChildren:Tu.selectChildren,filter:QA,merge:ZA,selection:n8,transition:l8,call:Tu.call,nodes:Tu.nodes,node:Tu.node,size:Tu.size,empty:Tu.empty,each:Tu.each,on:JA,attr:WA,attrTween:YA,style:i8,styleTween:a8,text:s8,textTween:o8,remove:e8,tween:UA,delay:qA,duration:XA,ease:jA,easeVarying:KA,end:c8,[Symbol.iterator]:Tu[Symbol.iterator]}});function y3(t){return((t*=2)<=1?t*t*t:(t-=2)*t*t+2)/2}var fH=M(()=>{"use strict";o(y3,"cubicInOut")});var u8=M(()=>{"use strict";fH()});function tTe(t,e){for(var r;!(r=t.__transition)||!(r=r[e]);)if(!(t=t.parentNode))throw new Error(`transition ${e} not found`);return r}function h8(t){var e,r;t instanceof rs?(e=t._id,t=t._name):(e=g3(),(r=eTe).time=Fy(),t=t==null?null:t+"");for(var n=this._groups,i=n.length,a=0;a{"use strict";pd();Cs();u8();f3();eTe={time:null,delay:0,duration:250,ease:y3};o(tTe,"inherit");o(h8,"default")});var pH=M(()=>{"use strict";Tl();HU();dH();vu.prototype.interrupt=VA;vu.prototype.transition=h8});var v3=M(()=>{"use strict";pH()});var mH=M(()=>{"use strict"});var gH=M(()=>{"use strict"});var yH=M(()=>{"use strict"});function vH(t){return[+t[0],+t[1]]}function rTe(t){return[vH(t[0]),vH(t[1])]}function f8(t){return{type:t}}var Agt,_gt,Lgt,Dgt,Ngt,Rgt,xH=M(()=>{"use strict";v3();mH();gH();yH();({abs:Agt,max:_gt,min:Lgt}=Math);o(vH,"number1");o(rTe,"number2");Dgt={name:"x",handles:["w","e"].map(f8),input:o(function(t,e){return t==null?null:[[+t[0],e[0][1]],[+t[1],e[1][1]]]},"input"),output:o(function(t){return t&&[t[0][0],t[1][0]]},"output")},Ngt={name:"y",handles:["n","s"].map(f8),input:o(function(t,e){return t==null?null:[[e[0][0],+t[0]],[e[1][0],+t[1]]]},"input"),output:o(function(t){return t&&[t[0][1],t[1][1]]},"output")},Rgt={name:"xy",handles:["n","w","e","s","nw","ne","sw","se"].map(f8),input:o(function(t){return t==null?null:rTe(t)},"input"),output:o(function(t){return t},"output")};o(f8,"type")});var bH=M(()=>{"use strict";xH()});function wH(t){this._+=t[0];for(let e=1,r=t.length;e=0))throw new Error(`invalid digits: ${t}`);if(e>15)return wH;let r=10**e;return function(n){this._+=n[0];for(let i=1,a=n.length;i{"use strict";d8=Math.PI,p8=2*d8,md=1e-6,nTe=p8-md;o(wH,"append");o(iTe,"appendRound");gd=class{static{o(this,"Path")}constructor(e){this._x0=this._y0=this._x1=this._y1=null,this._="",this._append=e==null?wH:iTe(e)}moveTo(e,r){this._append`M${this._x0=this._x1=+e},${this._y0=this._y1=+r}`}closePath(){this._x1!==null&&(this._x1=this._x0,this._y1=this._y0,this._append`Z`)}lineTo(e,r){this._append`L${this._x1=+e},${this._y1=+r}`}quadraticCurveTo(e,r,n,i){this._append`Q${+e},${+r},${this._x1=+n},${this._y1=+i}`}bezierCurveTo(e,r,n,i,a,s){this._append`C${+e},${+r},${+n},${+i},${this._x1=+a},${this._y1=+s}`}arcTo(e,r,n,i,a){if(e=+e,r=+r,n=+n,i=+i,a=+a,a<0)throw new Error(`negative radius: ${a}`);let s=this._x1,l=this._y1,u=n-e,h=i-r,f=s-e,d=l-r,p=f*f+d*d;if(this._x1===null)this._append`M${this._x1=e},${this._y1=r}`;else if(p>md)if(!(Math.abs(d*u-h*f)>md)||!a)this._append`L${this._x1=e},${this._y1=r}`;else{let m=n-s,g=i-l,y=u*u+h*h,v=m*m+g*g,x=Math.sqrt(y),b=Math.sqrt(p),w=a*Math.tan((d8-Math.acos((y+p-v)/(2*x*b)))/2),_=w/b,T=w/x;Math.abs(_-1)>md&&this._append`L${e+_*f},${r+_*d}`,this._append`A${a},${a},0,0,${+(d*m>f*g)},${this._x1=e+T*u},${this._y1=r+T*h}`}}arc(e,r,n,i,a,s){if(e=+e,r=+r,n=+n,s=!!s,n<0)throw new Error(`negative radius: ${n}`);let l=n*Math.cos(i),u=n*Math.sin(i),h=e+l,f=r+u,d=1^s,p=s?i-a:a-i;this._x1===null?this._append`M${h},${f}`:(Math.abs(this._x1-h)>md||Math.abs(this._y1-f)>md)&&this._append`L${h},${f}`,n&&(p<0&&(p=p%p8+p8),p>nTe?this._append`A${n},${n},0,1,${d},${e-l},${r-u}A${n},${n},0,1,${d},${this._x1=h},${this._y1=f}`:p>md&&this._append`A${n},${n},0,${+(p>=d8)},${d},${this._x1=e+n*Math.cos(a)},${this._y1=r+n*Math.sin(a)}`)}rect(e,r,n,i){this._append`M${this._x0=this._x1=+e},${this._y0=this._y1=+r}h${n=+n}v${+i}h${-n}Z`}toString(){return this._}};o(TH,"path");TH.prototype=gd.prototype});var m8=M(()=>{"use strict";kH()});var EH=M(()=>{"use strict"});var SH=M(()=>{"use strict"});var CH=M(()=>{"use strict"});var AH=M(()=>{"use strict"});var _H=M(()=>{"use strict"});var LH=M(()=>{"use strict"});var DH=M(()=>{"use strict"});function g8(t){return Math.abs(t=Math.round(t))>=1e21?t.toLocaleString("en").replace(/,/g,""):t.toString(10)}function yd(t,e){if((r=(t=e?t.toExponential(e-1):t.toExponential()).indexOf("e"))<0)return null;var r,n=t.slice(0,r);return[n.length>1?n[0]+n.slice(2):n,+t.slice(r+1)]}var Wy=M(()=>{"use strict";o(g8,"default");o(yd,"formatDecimalParts")});function Sl(t){return t=yd(Math.abs(t)),t?t[1]:NaN}var Yy=M(()=>{"use strict";Wy();o(Sl,"default")});function y8(t,e){return function(r,n){for(var i=r.length,a=[],s=0,l=t[0],u=0;i>0&&l>0&&(u+l+1>n&&(l=Math.max(1,n-u)),a.push(r.substring(i-=l,i+l)),!((u+=l+1)>n));)l=t[s=(s+1)%t.length];return a.reverse().join(e)}}var NH=M(()=>{"use strict";o(y8,"default")});function v8(t){return function(e){return e.replace(/[0-9]/g,function(r){return t[+r]})}}var RH=M(()=>{"use strict";o(v8,"default")});function Lh(t){if(!(e=aTe.exec(t)))throw new Error("invalid format: "+t);var e;return new x3({fill:e[1],align:e[2],sign:e[3],symbol:e[4],zero:e[5],width:e[6],comma:e[7],precision:e[8]&&e[8].slice(1),trim:e[9],type:e[10]})}function x3(t){this.fill=t.fill===void 0?" ":t.fill+"",this.align=t.align===void 0?">":t.align+"",this.sign=t.sign===void 0?"-":t.sign+"",this.symbol=t.symbol===void 0?"":t.symbol+"",this.zero=!!t.zero,this.width=t.width===void 0?void 0:+t.width,this.comma=!!t.comma,this.precision=t.precision===void 0?void 0:+t.precision,this.trim=!!t.trim,this.type=t.type===void 0?"":t.type+""}var aTe,x8=M(()=>{"use strict";aTe=/^(?:(.)?([<>=^]))?([+\-( ])?([$#])?(0)?(\d+)?(,)?(\.\d+)?(~)?([a-z%])?$/i;o(Lh,"formatSpecifier");Lh.prototype=x3.prototype;o(x3,"FormatSpecifier");x3.prototype.toString=function(){return this.fill+this.align+this.sign+this.symbol+(this.zero?"0":"")+(this.width===void 0?"":Math.max(1,this.width|0))+(this.comma?",":"")+(this.precision===void 0?"":"."+Math.max(0,this.precision|0))+(this.trim?"~":"")+this.type}});function b8(t){e:for(var e=t.length,r=1,n=-1,i;r0&&(n=0);break}return n>0?t.slice(0,n)+t.slice(i+1):t}var MH=M(()=>{"use strict";o(b8,"default")});function T8(t,e){var r=yd(t,e);if(!r)return t+"";var n=r[0],i=r[1],a=i-(w8=Math.max(-8,Math.min(8,Math.floor(i/3)))*3)+1,s=n.length;return a===s?n:a>s?n+new Array(a-s+1).join("0"):a>0?n.slice(0,a)+"."+n.slice(a):"0."+new Array(1-a).join("0")+yd(t,Math.max(0,e+a-1))[0]}var w8,k8=M(()=>{"use strict";Wy();o(T8,"default")});function b3(t,e){var r=yd(t,e);if(!r)return t+"";var n=r[0],i=r[1];return i<0?"0."+new Array(-i).join("0")+n:n.length>i+1?n.slice(0,i+1)+"."+n.slice(i+1):n+new Array(i-n.length+2).join("0")}var IH=M(()=>{"use strict";Wy();o(b3,"default")});var E8,OH=M(()=>{"use strict";Wy();k8();IH();E8={"%":o((t,e)=>(t*100).toFixed(e),"%"),b:o(t=>Math.round(t).toString(2),"b"),c:o(t=>t+"","c"),d:g8,e:o((t,e)=>t.toExponential(e),"e"),f:o((t,e)=>t.toFixed(e),"f"),g:o((t,e)=>t.toPrecision(e),"g"),o:o(t=>Math.round(t).toString(8),"o"),p:o((t,e)=>b3(t*100,e),"p"),r:b3,s:T8,X:o(t=>Math.round(t).toString(16).toUpperCase(),"X"),x:o(t=>Math.round(t).toString(16),"x")}});function w3(t){return t}var PH=M(()=>{"use strict";o(w3,"default")});function S8(t){var e=t.grouping===void 0||t.thousands===void 0?w3:y8(BH.call(t.grouping,Number),t.thousands+""),r=t.currency===void 0?"":t.currency[0]+"",n=t.currency===void 0?"":t.currency[1]+"",i=t.decimal===void 0?".":t.decimal+"",a=t.numerals===void 0?w3:v8(BH.call(t.numerals,String)),s=t.percent===void 0?"%":t.percent+"",l=t.minus===void 0?"\u2212":t.minus+"",u=t.nan===void 0?"NaN":t.nan+"";function h(d){d=Lh(d);var p=d.fill,m=d.align,g=d.sign,y=d.symbol,v=d.zero,x=d.width,b=d.comma,w=d.precision,_=d.trim,T=d.type;T==="n"?(b=!0,T="g"):E8[T]||(w===void 0&&(w=12),_=!0,T="g"),(v||p==="0"&&m==="=")&&(v=!0,p="0",m="=");var E=y==="$"?r:y==="#"&&/[boxX]/.test(T)?"0"+T.toLowerCase():"",L=y==="$"?n:/[%p]/.test(T)?s:"",S=E8[T],A=/[defgprs%]/.test(T);w=w===void 0?6:/[gprs]/.test(T)?Math.max(1,Math.min(21,w)):Math.max(0,Math.min(20,w));function I(D){var k=E,R=L,C,O,N;if(T==="c")R=S(D)+R,D="";else{D=+D;var P=D<0||1/D<0;if(D=isNaN(D)?u:S(Math.abs(D),w),_&&(D=b8(D)),P&&+D==0&&g!=="+"&&(P=!1),k=(P?g==="("?g:l:g==="-"||g==="("?"":g)+k,R=(T==="s"?FH[8+w8/3]:"")+R+(P&&g==="("?")":""),A){for(C=-1,O=D.length;++CN||N>57){R=(N===46?i+D.slice(C+1):D.slice(C))+R,D=D.slice(0,C);break}}}b&&!v&&(D=e(D,1/0));var F=k.length+D.length+R.length,B=F>1)+k+D+R+B.slice(F);break;default:D=B+k+D+R;break}return a(D)}return o(I,"format"),I.toString=function(){return d+""},I}o(h,"newFormat");function f(d,p){var m=h((d=Lh(d),d.type="f",d)),g=Math.max(-8,Math.min(8,Math.floor(Sl(p)/3)))*3,y=Math.pow(10,-g),v=FH[8+g/3];return function(x){return m(y*x)+v}}return o(f,"formatPrefix"),{format:h,formatPrefix:f}}var BH,FH,zH=M(()=>{"use strict";Yy();NH();RH();x8();MH();OH();k8();PH();BH=Array.prototype.map,FH=["y","z","a","f","p","n","\xB5","m","","k","M","G","T","P","E","Z","Y"];o(S8,"default")});function C8(t){return T3=S8(t),k3=T3.format,E3=T3.formatPrefix,T3}var T3,k3,E3,GH=M(()=>{"use strict";zH();C8({thousands:",",grouping:[3],currency:["$",""]});o(C8,"defaultLocale")});function S3(t){return Math.max(0,-Sl(Math.abs(t)))}var $H=M(()=>{"use strict";Yy();o(S3,"default")});function C3(t,e){return Math.max(0,Math.max(-8,Math.min(8,Math.floor(Sl(e)/3)))*3-Sl(Math.abs(t)))}var VH=M(()=>{"use strict";Yy();o(C3,"default")});function A3(t,e){return t=Math.abs(t),e=Math.abs(e)-t,Math.max(0,Sl(e)-Sl(t))+1}var UH=M(()=>{"use strict";Yy();o(A3,"default")});var A8=M(()=>{"use strict";GH();x8();$H();VH();UH()});var HH=M(()=>{"use strict"});var WH=M(()=>{"use strict"});var YH=M(()=>{"use strict"});var qH=M(()=>{"use strict"});function Dh(t,e){switch(arguments.length){case 0:break;case 1:this.range(t);break;default:this.range(e).domain(t);break}return this}var qy=M(()=>{"use strict";o(Dh,"initRange")});function ku(){var t=new _p,e=[],r=[],n=_8;function i(a){let s=t.get(a);if(s===void 0){if(n!==_8)return n;t.set(a,s=e.push(a)-1)}return r[s%r.length]}return o(i,"scale"),i.domain=function(a){if(!arguments.length)return e.slice();e=[],t=new _p;for(let s of a)t.has(s)||t.set(s,e.push(s)-1);return i},i.range=function(a){return arguments.length?(r=Array.from(a),i):r.slice()},i.unknown=function(a){return arguments.length?(n=a,i):n},i.copy=function(){return ku(e,r).unknown(n)},Dh.apply(i,arguments),i}var _8,L8=M(()=>{"use strict";kh();qy();_8=Symbol("implicit");o(ku,"ordinal")});function Vp(){var t=ku().unknown(void 0),e=t.domain,r=t.range,n=0,i=1,a,s,l=!1,u=0,h=0,f=.5;delete t.unknown;function d(){var p=e().length,m=i{"use strict";kh();qy();L8();o(Vp,"band")});function D8(t){return function(){return t}}var jH=M(()=>{"use strict";o(D8,"constants")});function N8(t){return+t}var KH=M(()=>{"use strict";o(N8,"number")});function Up(t){return t}function R8(t,e){return(e-=t=+t)?function(r){return(r-t)/e}:D8(isNaN(e)?NaN:.5)}function sTe(t,e){var r;return t>e&&(r=t,t=e,e=r),function(n){return Math.max(t,Math.min(e,n))}}function oTe(t,e,r){var n=t[0],i=t[1],a=e[0],s=e[1];return i2?lTe:oTe,u=h=null,d}o(f,"rescale");function d(p){return p==null||isNaN(p=+p)?a:(u||(u=l(t.map(n),e,r)))(n(s(p)))}return o(d,"scale"),d.invert=function(p){return s(i((h||(h=l(e,t.map(n),ea)))(p)))},d.domain=function(p){return arguments.length?(t=Array.from(p,N8),f()):t.slice()},d.range=function(p){return arguments.length?(e=Array.from(p),f()):e.slice()},d.rangeRound=function(p){return e=Array.from(p),r=i3,f()},d.clamp=function(p){return arguments.length?(s=p?!0:Up,f()):s!==Up},d.interpolate=function(p){return arguments.length?(r=p,f()):r},d.unknown=function(p){return arguments.length?(a=p,d):a},function(p,m){return n=p,i=m,f()}}function Xy(){return cTe()(Up,Up)}var QH,M8=M(()=>{"use strict";kh();zp();jH();KH();QH=[0,1];o(Up,"identity");o(R8,"normalize");o(sTe,"clamper");o(oTe,"bimap");o(lTe,"polymap");o(_3,"copy");o(cTe,"transformer");o(Xy,"continuous")});function I8(t,e,r,n){var i=Lp(t,e,r),a;switch(n=Lh(n??",f"),n.type){case"s":{var s=Math.max(Math.abs(t),Math.abs(e));return n.precision==null&&!isNaN(a=C3(i,s))&&(n.precision=a),E3(n,s)}case"":case"e":case"g":case"p":case"r":{n.precision==null&&!isNaN(a=A3(i,Math.max(Math.abs(t),Math.abs(e))))&&(n.precision=a-(n.type==="e"));break}case"f":case"%":{n.precision==null&&!isNaN(a=S3(i))&&(n.precision=a-(n.type==="%")*2);break}}return k3(n)}var ZH=M(()=>{"use strict";kh();A8();o(I8,"tickFormat")});function uTe(t){var e=t.domain;return t.ticks=function(r){var n=e();return $4(n[0],n[n.length-1],r??10)},t.tickFormat=function(r,n){var i=e();return I8(i[0],i[i.length-1],r??10,n)},t.nice=function(r){r==null&&(r=10);var n=e(),i=0,a=n.length-1,s=n[i],l=n[a],u,h,f=10;for(l0;){if(h=ky(s,l,r),h===u)return n[i]=s,n[a]=l,e(n);if(h>0)s=Math.floor(s/h)*h,l=Math.ceil(l/h)*h;else if(h<0)s=Math.ceil(s*h)/h,l=Math.floor(l*h)/h;else break;u=h}return t},t}function Cl(){var t=Xy();return t.copy=function(){return _3(t,Cl())},Dh.apply(t,arguments),uTe(t)}var JH=M(()=>{"use strict";kh();M8();qy();ZH();o(uTe,"linearish");o(Cl,"linear")});function O8(t,e){t=t.slice();var r=0,n=t.length-1,i=t[r],a=t[n],s;return a{"use strict";o(O8,"nice")});function vn(t,e,r,n){function i(a){return t(a=arguments.length===0?new Date:new Date(+a)),a}return o(i,"interval"),i.floor=a=>(t(a=new Date(+a)),a),i.ceil=a=>(t(a=new Date(a-1)),e(a,1),t(a),a),i.round=a=>{let s=i(a),l=i.ceil(a);return a-s(e(a=new Date(+a),s==null?1:Math.floor(s)),a),i.range=(a,s,l)=>{let u=[];if(a=i.ceil(a),l=l==null?1:Math.floor(l),!(a0))return u;let h;do u.push(h=new Date(+a)),e(a,l),t(a);while(hvn(s=>{if(s>=s)for(;t(s),!a(s);)s.setTime(s-1)},(s,l)=>{if(s>=s)if(l<0)for(;++l<=0;)for(;e(s,-1),!a(s););else for(;--l>=0;)for(;e(s,1),!a(s););}),r&&(i.count=(a,s)=>(P8.setTime(+a),B8.setTime(+s),t(P8),t(B8),Math.floor(r(P8,B8))),i.every=a=>(a=Math.floor(a),!isFinite(a)||!(a>0)?null:a>1?i.filter(n?s=>n(s)%a===0:s=>i.count(0,s)%a===0):i)),i}var P8,B8,Eu=M(()=>{"use strict";P8=new Date,B8=new Date;o(vn,"timeInterval")});var yc,tW,F8=M(()=>{"use strict";Eu();yc=vn(()=>{},(t,e)=>{t.setTime(+t+e)},(t,e)=>e-t);yc.every=t=>(t=Math.floor(t),!isFinite(t)||!(t>0)?null:t>1?vn(e=>{e.setTime(Math.floor(e/t)*t)},(e,r)=>{e.setTime(+e+r*t)},(e,r)=>(r-e)/t):yc);tW=yc.range});var to,rW,z8=M(()=>{"use strict";Eu();to=vn(t=>{t.setTime(t-t.getMilliseconds())},(t,e)=>{t.setTime(+t+e*1e3)},(t,e)=>(e-t)/1e3,t=>t.getUTCSeconds()),rW=to.range});var Su,hTe,L3,fTe,G8=M(()=>{"use strict";Eu();Su=vn(t=>{t.setTime(t-t.getMilliseconds()-t.getSeconds()*1e3)},(t,e)=>{t.setTime(+t+e*6e4)},(t,e)=>(e-t)/6e4,t=>t.getMinutes()),hTe=Su.range,L3=vn(t=>{t.setUTCSeconds(0,0)},(t,e)=>{t.setTime(+t+e*6e4)},(t,e)=>(e-t)/6e4,t=>t.getUTCMinutes()),fTe=L3.range});var Cu,dTe,D3,pTe,$8=M(()=>{"use strict";Eu();Cu=vn(t=>{t.setTime(t-t.getMilliseconds()-t.getSeconds()*1e3-t.getMinutes()*6e4)},(t,e)=>{t.setTime(+t+e*36e5)},(t,e)=>(e-t)/36e5,t=>t.getHours()),dTe=Cu.range,D3=vn(t=>{t.setUTCMinutes(0,0,0)},(t,e)=>{t.setTime(+t+e*36e5)},(t,e)=>(e-t)/36e5,t=>t.getUTCHours()),pTe=D3.range});var Oo,mTe,Ky,gTe,N3,yTe,V8=M(()=>{"use strict";Eu();Oo=vn(t=>t.setHours(0,0,0,0),(t,e)=>t.setDate(t.getDate()+e),(t,e)=>(e-t-(e.getTimezoneOffset()-t.getTimezoneOffset())*6e4)/864e5,t=>t.getDate()-1),mTe=Oo.range,Ky=vn(t=>{t.setUTCHours(0,0,0,0)},(t,e)=>{t.setUTCDate(t.getUTCDate()+e)},(t,e)=>(e-t)/864e5,t=>t.getUTCDate()-1),gTe=Ky.range,N3=vn(t=>{t.setUTCHours(0,0,0,0)},(t,e)=>{t.setUTCDate(t.getUTCDate()+e)},(t,e)=>(e-t)/864e5,t=>Math.floor(t/864e5)),yTe=N3.range});function bd(t){return vn(e=>{e.setDate(e.getDate()-(e.getDay()+7-t)%7),e.setHours(0,0,0,0)},(e,r)=>{e.setDate(e.getDate()+r*7)},(e,r)=>(r-e-(r.getTimezoneOffset()-e.getTimezoneOffset())*6e4)/6048e5)}function wd(t){return vn(e=>{e.setUTCDate(e.getUTCDate()-(e.getUTCDay()+7-t)%7),e.setUTCHours(0,0,0,0)},(e,r)=>{e.setUTCDate(e.getUTCDate()+r*7)},(e,r)=>(r-e)/6048e5)}var Al,Nh,R3,M3,xc,I3,O3,iW,vTe,xTe,bTe,wTe,TTe,kTe,Td,Hp,aW,sW,Rh,oW,lW,cW,ETe,STe,CTe,ATe,_Te,LTe,U8=M(()=>{"use strict";Eu();o(bd,"timeWeekday");Al=bd(0),Nh=bd(1),R3=bd(2),M3=bd(3),xc=bd(4),I3=bd(5),O3=bd(6),iW=Al.range,vTe=Nh.range,xTe=R3.range,bTe=M3.range,wTe=xc.range,TTe=I3.range,kTe=O3.range;o(wd,"utcWeekday");Td=wd(0),Hp=wd(1),aW=wd(2),sW=wd(3),Rh=wd(4),oW=wd(5),lW=wd(6),cW=Td.range,ETe=Hp.range,STe=aW.range,CTe=sW.range,ATe=Rh.range,_Te=oW.range,LTe=lW.range});var Au,DTe,P3,NTe,H8=M(()=>{"use strict";Eu();Au=vn(t=>{t.setDate(1),t.setHours(0,0,0,0)},(t,e)=>{t.setMonth(t.getMonth()+e)},(t,e)=>e.getMonth()-t.getMonth()+(e.getFullYear()-t.getFullYear())*12,t=>t.getMonth()),DTe=Au.range,P3=vn(t=>{t.setUTCDate(1),t.setUTCHours(0,0,0,0)},(t,e)=>{t.setUTCMonth(t.getUTCMonth()+e)},(t,e)=>e.getUTCMonth()-t.getUTCMonth()+(e.getUTCFullYear()-t.getUTCFullYear())*12,t=>t.getUTCMonth()),NTe=P3.range});var ro,RTe,_l,MTe,W8=M(()=>{"use strict";Eu();ro=vn(t=>{t.setMonth(0,1),t.setHours(0,0,0,0)},(t,e)=>{t.setFullYear(t.getFullYear()+e)},(t,e)=>e.getFullYear()-t.getFullYear(),t=>t.getFullYear());ro.every=t=>!isFinite(t=Math.floor(t))||!(t>0)?null:vn(e=>{e.setFullYear(Math.floor(e.getFullYear()/t)*t),e.setMonth(0,1),e.setHours(0,0,0,0)},(e,r)=>{e.setFullYear(e.getFullYear()+r*t)});RTe=ro.range,_l=vn(t=>{t.setUTCMonth(0,1),t.setUTCHours(0,0,0,0)},(t,e)=>{t.setUTCFullYear(t.getUTCFullYear()+e)},(t,e)=>e.getUTCFullYear()-t.getUTCFullYear(),t=>t.getUTCFullYear());_l.every=t=>!isFinite(t=Math.floor(t))||!(t>0)?null:vn(e=>{e.setUTCFullYear(Math.floor(e.getUTCFullYear()/t)*t),e.setUTCMonth(0,1),e.setUTCHours(0,0,0,0)},(e,r)=>{e.setUTCFullYear(e.getUTCFullYear()+r*t)});MTe=_l.range});function hW(t,e,r,n,i,a){let s=[[to,1,1e3],[to,5,5*1e3],[to,15,15*1e3],[to,30,30*1e3],[a,1,6e4],[a,5,5*6e4],[a,15,15*6e4],[a,30,30*6e4],[i,1,36e5],[i,3,3*36e5],[i,6,6*36e5],[i,12,12*36e5],[n,1,864e5],[n,2,2*864e5],[r,1,6048e5],[e,1,2592e6],[e,3,3*2592e6],[t,1,31536e6]];function l(h,f,d){let p=fv).right(s,p);if(m===s.length)return t.every(Lp(h/31536e6,f/31536e6,d));if(m===0)return yc.every(Math.max(Lp(h,f,d),1));let[g,y]=s[p/s[m-1][2]{"use strict";kh();F8();z8();G8();$8();V8();U8();H8();W8();o(hW,"ticker");[OTe,PTe]=hW(_l,P3,Td,N3,D3,L3),[Y8,q8]=hW(ro,Au,Al,Oo,Cu,Su)});var B3=M(()=>{"use strict";F8();z8();G8();$8();V8();U8();H8();W8();fW()});function X8(t){if(0<=t.y&&t.y<100){var e=new Date(-1,t.m,t.d,t.H,t.M,t.S,t.L);return e.setFullYear(t.y),e}return new Date(t.y,t.m,t.d,t.H,t.M,t.S,t.L)}function j8(t){if(0<=t.y&&t.y<100){var e=new Date(Date.UTC(-1,t.m,t.d,t.H,t.M,t.S,t.L));return e.setUTCFullYear(t.y),e}return new Date(Date.UTC(t.y,t.m,t.d,t.H,t.M,t.S,t.L))}function Qy(t,e,r){return{y:t,m:e,d:r,H:0,M:0,S:0,L:0}}function K8(t){var e=t.dateTime,r=t.date,n=t.time,i=t.periods,a=t.days,s=t.shortDays,l=t.months,u=t.shortMonths,h=Zy(i),f=Jy(i),d=Zy(a),p=Jy(a),m=Zy(s),g=Jy(s),y=Zy(l),v=Jy(l),x=Zy(u),b=Jy(u),w={a:P,A:F,b:B,B:G,c:null,d:vW,e:vW,f:ake,g:mke,G:yke,H:rke,I:nke,j:ike,L:kW,m:ske,M:oke,p:z,q:W,Q:wW,s:TW,S:lke,u:cke,U:uke,V:hke,w:fke,W:dke,x:null,X:null,y:pke,Y:gke,Z:vke,"%":bW},_={a:Z,A:j,b:oe,B:K,c:null,d:xW,e:xW,f:Tke,g:Rke,G:Ike,H:xke,I:bke,j:wke,L:SW,m:kke,M:Eke,p:ee,q:J,Q:wW,s:TW,S:Ske,u:Cke,U:Ake,V:_ke,w:Lke,W:Dke,x:null,X:null,y:Nke,Y:Mke,Z:Oke,"%":bW},T={a:I,A:D,b:k,B:R,c:C,d:gW,e:gW,f:ZTe,g:mW,G:pW,H:yW,I:yW,j:XTe,L:QTe,m:qTe,M:jTe,p:A,q:YTe,Q:eke,s:tke,S:KTe,u:$Te,U:VTe,V:UTe,w:GTe,W:HTe,x:O,X:N,y:mW,Y:pW,Z:WTe,"%":JTe};w.x=E(r,w),w.X=E(n,w),w.c=E(e,w),_.x=E(r,_),_.X=E(n,_),_.c=E(e,_);function E(H,q){return function(Q){var ae=[],ue=-1,ce=0,te=H.length,Ne,se,ke;for(Q instanceof Date||(Q=new Date(+Q));++ue53)return null;"w"in ae||(ae.w=1),"Z"in ae?(ce=j8(Qy(ae.y,0,1)),te=ce.getUTCDay(),ce=te>4||te===0?Hp.ceil(ce):Hp(ce),ce=Ky.offset(ce,(ae.V-1)*7),ae.y=ce.getUTCFullYear(),ae.m=ce.getUTCMonth(),ae.d=ce.getUTCDate()+(ae.w+6)%7):(ce=X8(Qy(ae.y,0,1)),te=ce.getDay(),ce=te>4||te===0?Nh.ceil(ce):Nh(ce),ce=Oo.offset(ce,(ae.V-1)*7),ae.y=ce.getFullYear(),ae.m=ce.getMonth(),ae.d=ce.getDate()+(ae.w+6)%7)}else("W"in ae||"U"in ae)&&("w"in ae||(ae.w="u"in ae?ae.u%7:"W"in ae?1:0),te="Z"in ae?j8(Qy(ae.y,0,1)).getUTCDay():X8(Qy(ae.y,0,1)).getDay(),ae.m=0,ae.d="W"in ae?(ae.w+6)%7+ae.W*7-(te+5)%7:ae.w+ae.U*7-(te+6)%7);return"Z"in ae?(ae.H+=ae.Z/100|0,ae.M+=ae.Z%100,j8(ae)):X8(ae)}}o(L,"newParse");function S(H,q,Q,ae){for(var ue=0,ce=q.length,te=Q.length,Ne,se;ue=te)return-1;if(Ne=q.charCodeAt(ue++),Ne===37){if(Ne=q.charAt(ue++),se=T[Ne in dW?q.charAt(ue++):Ne],!se||(ae=se(H,Q,ae))<0)return-1}else if(Ne!=Q.charCodeAt(ae++))return-1}return ae}o(S,"parseSpecifier");function A(H,q,Q){var ae=h.exec(q.slice(Q));return ae?(H.p=f.get(ae[0].toLowerCase()),Q+ae[0].length):-1}o(A,"parsePeriod");function I(H,q,Q){var ae=m.exec(q.slice(Q));return ae?(H.w=g.get(ae[0].toLowerCase()),Q+ae[0].length):-1}o(I,"parseShortWeekday");function D(H,q,Q){var ae=d.exec(q.slice(Q));return ae?(H.w=p.get(ae[0].toLowerCase()),Q+ae[0].length):-1}o(D,"parseWeekday");function k(H,q,Q){var ae=x.exec(q.slice(Q));return ae?(H.m=b.get(ae[0].toLowerCase()),Q+ae[0].length):-1}o(k,"parseShortMonth");function R(H,q,Q){var ae=y.exec(q.slice(Q));return ae?(H.m=v.get(ae[0].toLowerCase()),Q+ae[0].length):-1}o(R,"parseMonth");function C(H,q,Q){return S(H,e,q,Q)}o(C,"parseLocaleDateTime");function O(H,q,Q){return S(H,r,q,Q)}o(O,"parseLocaleDate");function N(H,q,Q){return S(H,n,q,Q)}o(N,"parseLocaleTime");function P(H){return s[H.getDay()]}o(P,"formatShortWeekday");function F(H){return a[H.getDay()]}o(F,"formatWeekday");function B(H){return u[H.getMonth()]}o(B,"formatShortMonth");function G(H){return l[H.getMonth()]}o(G,"formatMonth");function z(H){return i[+(H.getHours()>=12)]}o(z,"formatPeriod");function W(H){return 1+~~(H.getMonth()/3)}o(W,"formatQuarter");function Z(H){return s[H.getUTCDay()]}o(Z,"formatUTCShortWeekday");function j(H){return a[H.getUTCDay()]}o(j,"formatUTCWeekday");function oe(H){return u[H.getUTCMonth()]}o(oe,"formatUTCShortMonth");function K(H){return l[H.getUTCMonth()]}o(K,"formatUTCMonth");function ee(H){return i[+(H.getUTCHours()>=12)]}o(ee,"formatUTCPeriod");function J(H){return 1+~~(H.getUTCMonth()/3)}return o(J,"formatUTCQuarter"),{format:o(function(H){var q=E(H+="",w);return q.toString=function(){return H},q},"format"),parse:o(function(H){var q=L(H+="",!1);return q.toString=function(){return H},q},"parse"),utcFormat:o(function(H){var q=E(H+="",_);return q.toString=function(){return H},q},"utcFormat"),utcParse:o(function(H){var q=L(H+="",!0);return q.toString=function(){return H},q},"utcParse")}}function Hr(t,e,r){var n=t<0?"-":"",i=(n?-t:t)+"",a=i.length;return n+(a[e.toLowerCase(),r]))}function GTe(t,e,r){var n=ta.exec(e.slice(r,r+1));return n?(t.w=+n[0],r+n[0].length):-1}function $Te(t,e,r){var n=ta.exec(e.slice(r,r+1));return n?(t.u=+n[0],r+n[0].length):-1}function VTe(t,e,r){var n=ta.exec(e.slice(r,r+2));return n?(t.U=+n[0],r+n[0].length):-1}function UTe(t,e,r){var n=ta.exec(e.slice(r,r+2));return n?(t.V=+n[0],r+n[0].length):-1}function HTe(t,e,r){var n=ta.exec(e.slice(r,r+2));return n?(t.W=+n[0],r+n[0].length):-1}function pW(t,e,r){var n=ta.exec(e.slice(r,r+4));return n?(t.y=+n[0],r+n[0].length):-1}function mW(t,e,r){var n=ta.exec(e.slice(r,r+2));return n?(t.y=+n[0]+(+n[0]>68?1900:2e3),r+n[0].length):-1}function WTe(t,e,r){var n=/^(Z)|([+-]\d\d)(?::?(\d\d))?/.exec(e.slice(r,r+6));return n?(t.Z=n[1]?0:-(n[2]+(n[3]||"00")),r+n[0].length):-1}function YTe(t,e,r){var n=ta.exec(e.slice(r,r+1));return n?(t.q=n[0]*3-3,r+n[0].length):-1}function qTe(t,e,r){var n=ta.exec(e.slice(r,r+2));return n?(t.m=n[0]-1,r+n[0].length):-1}function gW(t,e,r){var n=ta.exec(e.slice(r,r+2));return n?(t.d=+n[0],r+n[0].length):-1}function XTe(t,e,r){var n=ta.exec(e.slice(r,r+3));return n?(t.m=0,t.d=+n[0],r+n[0].length):-1}function yW(t,e,r){var n=ta.exec(e.slice(r,r+2));return n?(t.H=+n[0],r+n[0].length):-1}function jTe(t,e,r){var n=ta.exec(e.slice(r,r+2));return n?(t.M=+n[0],r+n[0].length):-1}function KTe(t,e,r){var n=ta.exec(e.slice(r,r+2));return n?(t.S=+n[0],r+n[0].length):-1}function QTe(t,e,r){var n=ta.exec(e.slice(r,r+3));return n?(t.L=+n[0],r+n[0].length):-1}function ZTe(t,e,r){var n=ta.exec(e.slice(r,r+6));return n?(t.L=Math.floor(n[0]/1e3),r+n[0].length):-1}function JTe(t,e,r){var n=BTe.exec(e.slice(r,r+1));return n?r+n[0].length:-1}function eke(t,e,r){var n=ta.exec(e.slice(r));return n?(t.Q=+n[0],r+n[0].length):-1}function tke(t,e,r){var n=ta.exec(e.slice(r));return n?(t.s=+n[0],r+n[0].length):-1}function vW(t,e){return Hr(t.getDate(),e,2)}function rke(t,e){return Hr(t.getHours(),e,2)}function nke(t,e){return Hr(t.getHours()%12||12,e,2)}function ike(t,e){return Hr(1+Oo.count(ro(t),t),e,3)}function kW(t,e){return Hr(t.getMilliseconds(),e,3)}function ake(t,e){return kW(t,e)+"000"}function ske(t,e){return Hr(t.getMonth()+1,e,2)}function oke(t,e){return Hr(t.getMinutes(),e,2)}function lke(t,e){return Hr(t.getSeconds(),e,2)}function cke(t){var e=t.getDay();return e===0?7:e}function uke(t,e){return Hr(Al.count(ro(t)-1,t),e,2)}function EW(t){var e=t.getDay();return e>=4||e===0?xc(t):xc.ceil(t)}function hke(t,e){return t=EW(t),Hr(xc.count(ro(t),t)+(ro(t).getDay()===4),e,2)}function fke(t){return t.getDay()}function dke(t,e){return Hr(Nh.count(ro(t)-1,t),e,2)}function pke(t,e){return Hr(t.getFullYear()%100,e,2)}function mke(t,e){return t=EW(t),Hr(t.getFullYear()%100,e,2)}function gke(t,e){return Hr(t.getFullYear()%1e4,e,4)}function yke(t,e){var r=t.getDay();return t=r>=4||r===0?xc(t):xc.ceil(t),Hr(t.getFullYear()%1e4,e,4)}function vke(t){var e=t.getTimezoneOffset();return(e>0?"-":(e*=-1,"+"))+Hr(e/60|0,"0",2)+Hr(e%60,"0",2)}function xW(t,e){return Hr(t.getUTCDate(),e,2)}function xke(t,e){return Hr(t.getUTCHours(),e,2)}function bke(t,e){return Hr(t.getUTCHours()%12||12,e,2)}function wke(t,e){return Hr(1+Ky.count(_l(t),t),e,3)}function SW(t,e){return Hr(t.getUTCMilliseconds(),e,3)}function Tke(t,e){return SW(t,e)+"000"}function kke(t,e){return Hr(t.getUTCMonth()+1,e,2)}function Eke(t,e){return Hr(t.getUTCMinutes(),e,2)}function Ske(t,e){return Hr(t.getUTCSeconds(),e,2)}function Cke(t){var e=t.getUTCDay();return e===0?7:e}function Ake(t,e){return Hr(Td.count(_l(t)-1,t),e,2)}function CW(t){var e=t.getUTCDay();return e>=4||e===0?Rh(t):Rh.ceil(t)}function _ke(t,e){return t=CW(t),Hr(Rh.count(_l(t),t)+(_l(t).getUTCDay()===4),e,2)}function Lke(t){return t.getUTCDay()}function Dke(t,e){return Hr(Hp.count(_l(t)-1,t),e,2)}function Nke(t,e){return Hr(t.getUTCFullYear()%100,e,2)}function Rke(t,e){return t=CW(t),Hr(t.getUTCFullYear()%100,e,2)}function Mke(t,e){return Hr(t.getUTCFullYear()%1e4,e,4)}function Ike(t,e){var r=t.getUTCDay();return t=r>=4||r===0?Rh(t):Rh.ceil(t),Hr(t.getUTCFullYear()%1e4,e,4)}function Oke(){return"+0000"}function bW(){return"%"}function wW(t){return+t}function TW(t){return Math.floor(+t/1e3)}var dW,ta,BTe,FTe,AW=M(()=>{"use strict";B3();o(X8,"localDate");o(j8,"utcDate");o(Qy,"newDate");o(K8,"formatLocale");dW={"-":"",_:" ",0:"0"},ta=/^\s*\d+/,BTe=/^%/,FTe=/[\\^$*+?|[\]().{}]/g;o(Hr,"pad");o(zTe,"requote");o(Zy,"formatRe");o(Jy,"formatLookup");o(GTe,"parseWeekdayNumberSunday");o($Te,"parseWeekdayNumberMonday");o(VTe,"parseWeekNumberSunday");o(UTe,"parseWeekNumberISO");o(HTe,"parseWeekNumberMonday");o(pW,"parseFullYear");o(mW,"parseYear");o(WTe,"parseZone");o(YTe,"parseQuarter");o(qTe,"parseMonthNumber");o(gW,"parseDayOfMonth");o(XTe,"parseDayOfYear");o(yW,"parseHour24");o(jTe,"parseMinutes");o(KTe,"parseSeconds");o(QTe,"parseMilliseconds");o(ZTe,"parseMicroseconds");o(JTe,"parseLiteralPercent");o(eke,"parseUnixTimestamp");o(tke,"parseUnixTimestampSeconds");o(vW,"formatDayOfMonth");o(rke,"formatHour24");o(nke,"formatHour12");o(ike,"formatDayOfYear");o(kW,"formatMilliseconds");o(ake,"formatMicroseconds");o(ske,"formatMonthNumber");o(oke,"formatMinutes");o(lke,"formatSeconds");o(cke,"formatWeekdayNumberMonday");o(uke,"formatWeekNumberSunday");o(EW,"dISO");o(hke,"formatWeekNumberISO");o(fke,"formatWeekdayNumberSunday");o(dke,"formatWeekNumberMonday");o(pke,"formatYear");o(mke,"formatYearISO");o(gke,"formatFullYear");o(yke,"formatFullYearISO");o(vke,"formatZone");o(xW,"formatUTCDayOfMonth");o(xke,"formatUTCHour24");o(bke,"formatUTCHour12");o(wke,"formatUTCDayOfYear");o(SW,"formatUTCMilliseconds");o(Tke,"formatUTCMicroseconds");o(kke,"formatUTCMonthNumber");o(Eke,"formatUTCMinutes");o(Ske,"formatUTCSeconds");o(Cke,"formatUTCWeekdayNumberMonday");o(Ake,"formatUTCWeekNumberSunday");o(CW,"UTCdISO");o(_ke,"formatUTCWeekNumberISO");o(Lke,"formatUTCWeekdayNumberSunday");o(Dke,"formatUTCWeekNumberMonday");o(Nke,"formatUTCYear");o(Rke,"formatUTCYearISO");o(Mke,"formatUTCFullYear");o(Ike,"formatUTCFullYearISO");o(Oke,"formatUTCZone");o(bW,"formatLiteralPercent");o(wW,"formatUnixTimestamp");o(TW,"formatUnixTimestampSeconds")});function Q8(t){return Wp=K8(t),kd=Wp.format,_W=Wp.parse,LW=Wp.utcFormat,DW=Wp.utcParse,Wp}var Wp,kd,_W,LW,DW,NW=M(()=>{"use strict";AW();Q8({dateTime:"%x, %X",date:"%-m/%-d/%Y",time:"%-I:%M:%S %p",periods:["AM","PM"],days:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],shortDays:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],months:["January","February","March","April","May","June","July","August","September","October","November","December"],shortMonths:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"]});o(Q8,"defaultLocale")});var Z8=M(()=>{"use strict";NW()});function Pke(t){return new Date(t)}function Bke(t){return t instanceof Date?+t:+new Date(+t)}function RW(t,e,r,n,i,a,s,l,u,h){var f=Xy(),d=f.invert,p=f.domain,m=h(".%L"),g=h(":%S"),y=h("%I:%M"),v=h("%I %p"),x=h("%a %d"),b=h("%b %d"),w=h("%B"),_=h("%Y");function T(E){return(u(E){"use strict";B3();Z8();M8();qy();eW();o(Pke,"date");o(Bke,"number");o(RW,"calendar");o(F3,"time")});var IW=M(()=>{"use strict";XH();JH();L8();MW()});function J8(t){for(var e=t.length/6|0,r=new Array(e),n=0;n{"use strict";o(J8,"default")});var e_,PW=M(()=>{"use strict";OW();e_=J8("4e79a7f28e2ce1575976b7b259a14fedc949af7aa1ff9da79c755fbab0ab")});var BW=M(()=>{"use strict";PW()});function Fn(t){return o(function(){return t},"constant")}var z3=M(()=>{"use strict";o(Fn,"default")});function zW(t){return t>1?0:t<-1?Yp:Math.acos(t)}function r_(t){return t>=1?ev:t<=-1?-ev:Math.asin(t)}var t_,ma,Mh,FW,G3,Ll,Ed,ra,Yp,ev,qp,$3=M(()=>{"use strict";t_=Math.abs,ma=Math.atan2,Mh=Math.cos,FW=Math.max,G3=Math.min,Ll=Math.sin,Ed=Math.sqrt,ra=1e-12,Yp=Math.PI,ev=Yp/2,qp=2*Yp;o(zW,"acos");o(r_,"asin")});function V3(t){let e=3;return t.digits=function(r){if(!arguments.length)return e;if(r==null)e=null;else{let n=Math.floor(r);if(!(n>=0))throw new RangeError(`invalid digits: ${r}`);e=n}return t},()=>new gd(e)}var n_=M(()=>{"use strict";m8();o(V3,"withPath")});function Fke(t){return t.innerRadius}function zke(t){return t.outerRadius}function Gke(t){return t.startAngle}function $ke(t){return t.endAngle}function Vke(t){return t&&t.padAngle}function Uke(t,e,r,n,i,a,s,l){var u=r-t,h=n-e,f=s-i,d=l-a,p=d*u-f*h;if(!(p*pC*C+O*O&&(S=I,A=D),{cx:S,cy:A,x01:-f,y01:-d,x11:S*(i/T-1),y11:A*(i/T-1)}}function Dl(){var t=Fke,e=zke,r=Fn(0),n=null,i=Gke,a=$ke,s=Vke,l=null,u=V3(h);function h(){var f,d,p=+t.apply(this,arguments),m=+e.apply(this,arguments),g=i.apply(this,arguments)-ev,y=a.apply(this,arguments)-ev,v=t_(y-g),x=y>g;if(l||(l=f=u()),mra))l.moveTo(0,0);else if(v>qp-ra)l.moveTo(m*Mh(g),m*Ll(g)),l.arc(0,0,m,g,y,!x),p>ra&&(l.moveTo(p*Mh(y),p*Ll(y)),l.arc(0,0,p,y,g,x));else{var b=g,w=y,_=g,T=y,E=v,L=v,S=s.apply(this,arguments)/2,A=S>ra&&(n?+n.apply(this,arguments):Ed(p*p+m*m)),I=G3(t_(m-p)/2,+r.apply(this,arguments)),D=I,k=I,R,C;if(A>ra){var O=r_(A/p*Ll(S)),N=r_(A/m*Ll(S));(E-=O*2)>ra?(O*=x?1:-1,_+=O,T-=O):(E=0,_=T=(g+y)/2),(L-=N*2)>ra?(N*=x?1:-1,b+=N,w-=N):(L=0,b=w=(g+y)/2)}var P=m*Mh(b),F=m*Ll(b),B=p*Mh(T),G=p*Ll(T);if(I>ra){var z=m*Mh(w),W=m*Ll(w),Z=p*Mh(_),j=p*Ll(_),oe;if(vra?k>ra?(R=U3(Z,j,P,F,m,k,x),C=U3(z,W,B,G,m,k,x),l.moveTo(R.cx+R.x01,R.cy+R.y01),kra)||!(E>ra)?l.lineTo(B,G):D>ra?(R=U3(B,G,z,W,p,-D,x),C=U3(P,F,Z,j,p,-D,x),l.lineTo(R.cx+R.x01,R.cy+R.y01),D{"use strict";z3();$3();n_();o(Fke,"arcInnerRadius");o(zke,"arcOuterRadius");o(Gke,"arcStartAngle");o($ke,"arcEndAngle");o(Vke,"arcPadAngle");o(Uke,"intersect");o(U3,"cornerTangents");o(Dl,"default")});function tv(t){return typeof t=="object"&&"length"in t?t:Array.from(t)}var o2t,i_=M(()=>{"use strict";o2t=Array.prototype.slice;o(tv,"default")});function $W(t){this._context=t}function Xp(t){return new $W(t)}var a_=M(()=>{"use strict";o($W,"Linear");$W.prototype={areaStart:o(function(){this._line=0},"areaStart"),areaEnd:o(function(){this._line=NaN},"areaEnd"),lineStart:o(function(){this._point=0},"lineStart"),lineEnd:o(function(){(this._line||this._line!==0&&this._point===1)&&this._context.closePath(),this._line=1-this._line},"lineEnd"),point:o(function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1,this._line?this._context.lineTo(t,e):this._context.moveTo(t,e);break;case 1:this._point=2;default:this._context.lineTo(t,e);break}},"point")};o(Xp,"default")});function VW(t){return t[0]}function UW(t){return t[1]}var HW=M(()=>{"use strict";o(VW,"x");o(UW,"y")});function ns(t,e){var r=Fn(!0),n=null,i=Xp,a=null,s=V3(l);t=typeof t=="function"?t:t===void 0?VW:Fn(t),e=typeof e=="function"?e:e===void 0?UW:Fn(e);function l(u){var h,f=(u=tv(u)).length,d,p=!1,m;for(n==null&&(a=i(m=s())),h=0;h<=f;++h)!(h{"use strict";i_();z3();a_();n_();HW();o(ns,"default")});function s_(t,e){return et?1:e>=t?0:NaN}var YW=M(()=>{"use strict";o(s_,"default")});function o_(t){return t}var qW=M(()=>{"use strict";o(o_,"default")});function H3(){var t=o_,e=s_,r=null,n=Fn(0),i=Fn(qp),a=Fn(0);function s(l){var u,h=(l=tv(l)).length,f,d,p=0,m=new Array(h),g=new Array(h),y=+n.apply(this,arguments),v=Math.min(qp,Math.max(-qp,i.apply(this,arguments)-y)),x,b=Math.min(Math.abs(v)/h,a.apply(this,arguments)),w=b*(v<0?-1:1),_;for(u=0;u0&&(p+=_);for(e!=null?m.sort(function(T,E){return e(g[T],g[E])}):r!=null&&m.sort(function(T,E){return r(l[T],l[E])}),u=0,d=p?(v-h*w)/p:0;u0?_*d:0)+w,g[f]={data:l[f],index:u,value:_,startAngle:y,endAngle:x,padAngle:b};return g}return o(s,"pie"),s.value=function(l){return arguments.length?(t=typeof l=="function"?l:Fn(+l),s):t},s.sortValues=function(l){return arguments.length?(e=l,r=null,s):e},s.sort=function(l){return arguments.length?(r=l,e=null,s):r},s.startAngle=function(l){return arguments.length?(n=typeof l=="function"?l:Fn(+l),s):n},s.endAngle=function(l){return arguments.length?(i=typeof l=="function"?l:Fn(+l),s):i},s.padAngle=function(l){return arguments.length?(a=typeof l=="function"?l:Fn(+l),s):a},s}var XW=M(()=>{"use strict";i_();z3();YW();qW();$3();o(H3,"default")});function l_(t){return new W3(t,!0)}function c_(t){return new W3(t,!1)}var W3,jW=M(()=>{"use strict";W3=class{static{o(this,"Bump")}constructor(e,r){this._context=e,this._x=r}areaStart(){this._line=0}areaEnd(){this._line=NaN}lineStart(){this._point=0}lineEnd(){(this._line||this._line!==0&&this._point===1)&&this._context.closePath(),this._line=1-this._line}point(e,r){switch(e=+e,r=+r,this._point){case 0:{this._point=1,this._line?this._context.lineTo(e,r):this._context.moveTo(e,r);break}case 1:this._point=2;default:{this._x?this._context.bezierCurveTo(this._x0=(this._x0+e)/2,this._y0,this._x0,r,e,r):this._context.bezierCurveTo(this._x0,this._y0=(this._y0+r)/2,e,this._y0,e,r);break}}this._x0=e,this._y0=r}};o(l_,"bumpX");o(c_,"bumpY")});function no(){}var rv=M(()=>{"use strict";o(no,"default")});function jp(t,e,r){t._context.bezierCurveTo((2*t._x0+t._x1)/3,(2*t._y0+t._y1)/3,(t._x0+2*t._x1)/3,(t._y0+2*t._y1)/3,(t._x0+4*t._x1+e)/6,(t._y0+4*t._y1+r)/6)}function nv(t){this._context=t}function Po(t){return new nv(t)}var iv=M(()=>{"use strict";o(jp,"point");o(nv,"Basis");nv.prototype={areaStart:o(function(){this._line=0},"areaStart"),areaEnd:o(function(){this._line=NaN},"areaEnd"),lineStart:o(function(){this._x0=this._x1=this._y0=this._y1=NaN,this._point=0},"lineStart"),lineEnd:o(function(){switch(this._point){case 3:jp(this,this._x1,this._y1);case 2:this._context.lineTo(this._x1,this._y1);break}(this._line||this._line!==0&&this._point===1)&&this._context.closePath(),this._line=1-this._line},"lineEnd"),point:o(function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1,this._line?this._context.lineTo(t,e):this._context.moveTo(t,e);break;case 1:this._point=2;break;case 2:this._point=3,this._context.lineTo((5*this._x0+this._x1)/6,(5*this._y0+this._y1)/6);default:jp(this,t,e);break}this._x0=this._x1,this._x1=t,this._y0=this._y1,this._y1=e},"point")};o(Po,"default")});function KW(t){this._context=t}function Y3(t){return new KW(t)}var QW=M(()=>{"use strict";rv();iv();o(KW,"BasisClosed");KW.prototype={areaStart:no,areaEnd:no,lineStart:o(function(){this._x0=this._x1=this._x2=this._x3=this._x4=this._y0=this._y1=this._y2=this._y3=this._y4=NaN,this._point=0},"lineStart"),lineEnd:o(function(){switch(this._point){case 1:{this._context.moveTo(this._x2,this._y2),this._context.closePath();break}case 2:{this._context.moveTo((this._x2+2*this._x3)/3,(this._y2+2*this._y3)/3),this._context.lineTo((this._x3+2*this._x2)/3,(this._y3+2*this._y2)/3),this._context.closePath();break}case 3:{this.point(this._x2,this._y2),this.point(this._x3,this._y3),this.point(this._x4,this._y4);break}}},"lineEnd"),point:o(function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1,this._x2=t,this._y2=e;break;case 1:this._point=2,this._x3=t,this._y3=e;break;case 2:this._point=3,this._x4=t,this._y4=e,this._context.moveTo((this._x0+4*this._x1+t)/6,(this._y0+4*this._y1+e)/6);break;default:jp(this,t,e);break}this._x0=this._x1,this._x1=t,this._y0=this._y1,this._y1=e},"point")};o(Y3,"default")});function ZW(t){this._context=t}function q3(t){return new ZW(t)}var JW=M(()=>{"use strict";iv();o(ZW,"BasisOpen");ZW.prototype={areaStart:o(function(){this._line=0},"areaStart"),areaEnd:o(function(){this._line=NaN},"areaEnd"),lineStart:o(function(){this._x0=this._x1=this._y0=this._y1=NaN,this._point=0},"lineStart"),lineEnd:o(function(){(this._line||this._line!==0&&this._point===3)&&this._context.closePath(),this._line=1-this._line},"lineEnd"),point:o(function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1;break;case 1:this._point=2;break;case 2:this._point=3;var r=(this._x0+4*this._x1+t)/6,n=(this._y0+4*this._y1+e)/6;this._line?this._context.lineTo(r,n):this._context.moveTo(r,n);break;case 3:this._point=4;default:jp(this,t,e);break}this._x0=this._x1,this._x1=t,this._y0=this._y1,this._y1=e},"point")};o(q3,"default")});function eY(t,e){this._basis=new nv(t),this._beta=e}var u_,tY=M(()=>{"use strict";iv();o(eY,"Bundle");eY.prototype={lineStart:o(function(){this._x=[],this._y=[],this._basis.lineStart()},"lineStart"),lineEnd:o(function(){var t=this._x,e=this._y,r=t.length-1;if(r>0)for(var n=t[0],i=e[0],a=t[r]-n,s=e[r]-i,l=-1,u;++l<=r;)u=l/r,this._basis.point(this._beta*t[l]+(1-this._beta)*(n+u*a),this._beta*e[l]+(1-this._beta)*(i+u*s));this._x=this._y=null,this._basis.lineEnd()},"lineEnd"),point:o(function(t,e){this._x.push(+t),this._y.push(+e)},"point")};u_=o(function t(e){function r(n){return e===1?new nv(n):new eY(n,e)}return o(r,"bundle"),r.beta=function(n){return t(+n)},r},"custom")(.85)});function Kp(t,e,r){t._context.bezierCurveTo(t._x1+t._k*(t._x2-t._x0),t._y1+t._k*(t._y2-t._y0),t._x2+t._k*(t._x1-e),t._y2+t._k*(t._y1-r),t._x2,t._y2)}function X3(t,e){this._context=t,this._k=(1-e)/6}var h_,av=M(()=>{"use strict";o(Kp,"point");o(X3,"Cardinal");X3.prototype={areaStart:o(function(){this._line=0},"areaStart"),areaEnd:o(function(){this._line=NaN},"areaEnd"),lineStart:o(function(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._point=0},"lineStart"),lineEnd:o(function(){switch(this._point){case 2:this._context.lineTo(this._x2,this._y2);break;case 3:Kp(this,this._x1,this._y1);break}(this._line||this._line!==0&&this._point===1)&&this._context.closePath(),this._line=1-this._line},"lineEnd"),point:o(function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1,this._line?this._context.lineTo(t,e):this._context.moveTo(t,e);break;case 1:this._point=2,this._x1=t,this._y1=e;break;case 2:this._point=3;default:Kp(this,t,e);break}this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=e},"point")};h_=o(function t(e){function r(n){return new X3(n,e)}return o(r,"cardinal"),r.tension=function(n){return t(+n)},r},"custom")(0)});function j3(t,e){this._context=t,this._k=(1-e)/6}var f_,d_=M(()=>{"use strict";rv();av();o(j3,"CardinalClosed");j3.prototype={areaStart:no,areaEnd:no,lineStart:o(function(){this._x0=this._x1=this._x2=this._x3=this._x4=this._x5=this._y0=this._y1=this._y2=this._y3=this._y4=this._y5=NaN,this._point=0},"lineStart"),lineEnd:o(function(){switch(this._point){case 1:{this._context.moveTo(this._x3,this._y3),this._context.closePath();break}case 2:{this._context.lineTo(this._x3,this._y3),this._context.closePath();break}case 3:{this.point(this._x3,this._y3),this.point(this._x4,this._y4),this.point(this._x5,this._y5);break}}},"lineEnd"),point:o(function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1,this._x3=t,this._y3=e;break;case 1:this._point=2,this._context.moveTo(this._x4=t,this._y4=e);break;case 2:this._point=3,this._x5=t,this._y5=e;break;default:Kp(this,t,e);break}this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=e},"point")};f_=o(function t(e){function r(n){return new j3(n,e)}return o(r,"cardinal"),r.tension=function(n){return t(+n)},r},"custom")(0)});function K3(t,e){this._context=t,this._k=(1-e)/6}var p_,m_=M(()=>{"use strict";av();o(K3,"CardinalOpen");K3.prototype={areaStart:o(function(){this._line=0},"areaStart"),areaEnd:o(function(){this._line=NaN},"areaEnd"),lineStart:o(function(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._point=0},"lineStart"),lineEnd:o(function(){(this._line||this._line!==0&&this._point===3)&&this._context.closePath(),this._line=1-this._line},"lineEnd"),point:o(function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1;break;case 1:this._point=2;break;case 2:this._point=3,this._line?this._context.lineTo(this._x2,this._y2):this._context.moveTo(this._x2,this._y2);break;case 3:this._point=4;default:Kp(this,t,e);break}this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=e},"point")};p_=o(function t(e){function r(n){return new K3(n,e)}return o(r,"cardinal"),r.tension=function(n){return t(+n)},r},"custom")(0)});function sv(t,e,r){var n=t._x1,i=t._y1,a=t._x2,s=t._y2;if(t._l01_a>ra){var l=2*t._l01_2a+3*t._l01_a*t._l12_a+t._l12_2a,u=3*t._l01_a*(t._l01_a+t._l12_a);n=(n*l-t._x0*t._l12_2a+t._x2*t._l01_2a)/u,i=(i*l-t._y0*t._l12_2a+t._y2*t._l01_2a)/u}if(t._l23_a>ra){var h=2*t._l23_2a+3*t._l23_a*t._l12_a+t._l12_2a,f=3*t._l23_a*(t._l23_a+t._l12_a);a=(a*h+t._x1*t._l23_2a-e*t._l12_2a)/f,s=(s*h+t._y1*t._l23_2a-r*t._l12_2a)/f}t._context.bezierCurveTo(n,i,a,s,t._x2,t._y2)}function rY(t,e){this._context=t,this._alpha=e}var g_,Q3=M(()=>{"use strict";$3();av();o(sv,"point");o(rY,"CatmullRom");rY.prototype={areaStart:o(function(){this._line=0},"areaStart"),areaEnd:o(function(){this._line=NaN},"areaEnd"),lineStart:o(function(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._l01_a=this._l12_a=this._l23_a=this._l01_2a=this._l12_2a=this._l23_2a=this._point=0},"lineStart"),lineEnd:o(function(){switch(this._point){case 2:this._context.lineTo(this._x2,this._y2);break;case 3:this.point(this._x2,this._y2);break}(this._line||this._line!==0&&this._point===1)&&this._context.closePath(),this._line=1-this._line},"lineEnd"),point:o(function(t,e){if(t=+t,e=+e,this._point){var r=this._x2-t,n=this._y2-e;this._l23_a=Math.sqrt(this._l23_2a=Math.pow(r*r+n*n,this._alpha))}switch(this._point){case 0:this._point=1,this._line?this._context.lineTo(t,e):this._context.moveTo(t,e);break;case 1:this._point=2;break;case 2:this._point=3;default:sv(this,t,e);break}this._l01_a=this._l12_a,this._l12_a=this._l23_a,this._l01_2a=this._l12_2a,this._l12_2a=this._l23_2a,this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=e},"point")};g_=o(function t(e){function r(n){return e?new rY(n,e):new X3(n,0)}return o(r,"catmullRom"),r.alpha=function(n){return t(+n)},r},"custom")(.5)});function nY(t,e){this._context=t,this._alpha=e}var y_,iY=M(()=>{"use strict";d_();rv();Q3();o(nY,"CatmullRomClosed");nY.prototype={areaStart:no,areaEnd:no,lineStart:o(function(){this._x0=this._x1=this._x2=this._x3=this._x4=this._x5=this._y0=this._y1=this._y2=this._y3=this._y4=this._y5=NaN,this._l01_a=this._l12_a=this._l23_a=this._l01_2a=this._l12_2a=this._l23_2a=this._point=0},"lineStart"),lineEnd:o(function(){switch(this._point){case 1:{this._context.moveTo(this._x3,this._y3),this._context.closePath();break}case 2:{this._context.lineTo(this._x3,this._y3),this._context.closePath();break}case 3:{this.point(this._x3,this._y3),this.point(this._x4,this._y4),this.point(this._x5,this._y5);break}}},"lineEnd"),point:o(function(t,e){if(t=+t,e=+e,this._point){var r=this._x2-t,n=this._y2-e;this._l23_a=Math.sqrt(this._l23_2a=Math.pow(r*r+n*n,this._alpha))}switch(this._point){case 0:this._point=1,this._x3=t,this._y3=e;break;case 1:this._point=2,this._context.moveTo(this._x4=t,this._y4=e);break;case 2:this._point=3,this._x5=t,this._y5=e;break;default:sv(this,t,e);break}this._l01_a=this._l12_a,this._l12_a=this._l23_a,this._l01_2a=this._l12_2a,this._l12_2a=this._l23_2a,this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=e},"point")};y_=o(function t(e){function r(n){return e?new nY(n,e):new j3(n,0)}return o(r,"catmullRom"),r.alpha=function(n){return t(+n)},r},"custom")(.5)});function aY(t,e){this._context=t,this._alpha=e}var v_,sY=M(()=>{"use strict";m_();Q3();o(aY,"CatmullRomOpen");aY.prototype={areaStart:o(function(){this._line=0},"areaStart"),areaEnd:o(function(){this._line=NaN},"areaEnd"),lineStart:o(function(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._l01_a=this._l12_a=this._l23_a=this._l01_2a=this._l12_2a=this._l23_2a=this._point=0},"lineStart"),lineEnd:o(function(){(this._line||this._line!==0&&this._point===3)&&this._context.closePath(),this._line=1-this._line},"lineEnd"),point:o(function(t,e){if(t=+t,e=+e,this._point){var r=this._x2-t,n=this._y2-e;this._l23_a=Math.sqrt(this._l23_2a=Math.pow(r*r+n*n,this._alpha))}switch(this._point){case 0:this._point=1;break;case 1:this._point=2;break;case 2:this._point=3,this._line?this._context.lineTo(this._x2,this._y2):this._context.moveTo(this._x2,this._y2);break;case 3:this._point=4;default:sv(this,t,e);break}this._l01_a=this._l12_a,this._l12_a=this._l23_a,this._l01_2a=this._l12_2a,this._l12_2a=this._l23_2a,this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=e},"point")};v_=o(function t(e){function r(n){return e?new aY(n,e):new K3(n,0)}return o(r,"catmullRom"),r.alpha=function(n){return t(+n)},r},"custom")(.5)});function oY(t){this._context=t}function Z3(t){return new oY(t)}var lY=M(()=>{"use strict";rv();o(oY,"LinearClosed");oY.prototype={areaStart:no,areaEnd:no,lineStart:o(function(){this._point=0},"lineStart"),lineEnd:o(function(){this._point&&this._context.closePath()},"lineEnd"),point:o(function(t,e){t=+t,e=+e,this._point?this._context.lineTo(t,e):(this._point=1,this._context.moveTo(t,e))},"point")};o(Z3,"default")});function cY(t){return t<0?-1:1}function uY(t,e,r){var n=t._x1-t._x0,i=e-t._x1,a=(t._y1-t._y0)/(n||i<0&&-0),s=(r-t._y1)/(i||n<0&&-0),l=(a*i+s*n)/(n+i);return(cY(a)+cY(s))*Math.min(Math.abs(a),Math.abs(s),.5*Math.abs(l))||0}function hY(t,e){var r=t._x1-t._x0;return r?(3*(t._y1-t._y0)/r-e)/2:e}function x_(t,e,r){var n=t._x0,i=t._y0,a=t._x1,s=t._y1,l=(a-n)/3;t._context.bezierCurveTo(n+l,i+l*e,a-l,s-l*r,a,s)}function J3(t){this._context=t}function fY(t){this._context=new dY(t)}function dY(t){this._context=t}function b_(t){return new J3(t)}function w_(t){return new fY(t)}var pY=M(()=>{"use strict";o(cY,"sign");o(uY,"slope3");o(hY,"slope2");o(x_,"point");o(J3,"MonotoneX");J3.prototype={areaStart:o(function(){this._line=0},"areaStart"),areaEnd:o(function(){this._line=NaN},"areaEnd"),lineStart:o(function(){this._x0=this._x1=this._y0=this._y1=this._t0=NaN,this._point=0},"lineStart"),lineEnd:o(function(){switch(this._point){case 2:this._context.lineTo(this._x1,this._y1);break;case 3:x_(this,this._t0,hY(this,this._t0));break}(this._line||this._line!==0&&this._point===1)&&this._context.closePath(),this._line=1-this._line},"lineEnd"),point:o(function(t,e){var r=NaN;if(t=+t,e=+e,!(t===this._x1&&e===this._y1)){switch(this._point){case 0:this._point=1,this._line?this._context.lineTo(t,e):this._context.moveTo(t,e);break;case 1:this._point=2;break;case 2:this._point=3,x_(this,hY(this,r=uY(this,t,e)),r);break;default:x_(this,this._t0,r=uY(this,t,e));break}this._x0=this._x1,this._x1=t,this._y0=this._y1,this._y1=e,this._t0=r}},"point")};o(fY,"MonotoneY");(fY.prototype=Object.create(J3.prototype)).point=function(t,e){J3.prototype.point.call(this,e,t)};o(dY,"ReflectContext");dY.prototype={moveTo:o(function(t,e){this._context.moveTo(e,t)},"moveTo"),closePath:o(function(){this._context.closePath()},"closePath"),lineTo:o(function(t,e){this._context.lineTo(e,t)},"lineTo"),bezierCurveTo:o(function(t,e,r,n,i,a){this._context.bezierCurveTo(e,t,n,r,a,i)},"bezierCurveTo")};o(b_,"monotoneX");o(w_,"monotoneY")});function gY(t){this._context=t}function mY(t){var e,r=t.length-1,n,i=new Array(r),a=new Array(r),s=new Array(r);for(i[0]=0,a[0]=2,s[0]=t[0]+2*t[1],e=1;e=0;--e)i[e]=(s[e]-i[e+1])/a[e];for(a[r-1]=(t[r]+i[r-1])/2,e=0;e{"use strict";o(gY,"Natural");gY.prototype={areaStart:o(function(){this._line=0},"areaStart"),areaEnd:o(function(){this._line=NaN},"areaEnd"),lineStart:o(function(){this._x=[],this._y=[]},"lineStart"),lineEnd:o(function(){var t=this._x,e=this._y,r=t.length;if(r)if(this._line?this._context.lineTo(t[0],e[0]):this._context.moveTo(t[0],e[0]),r===2)this._context.lineTo(t[1],e[1]);else for(var n=mY(t),i=mY(e),a=0,s=1;s{"use strict";o(t5,"Step");t5.prototype={areaStart:o(function(){this._line=0},"areaStart"),areaEnd:o(function(){this._line=NaN},"areaEnd"),lineStart:o(function(){this._x=this._y=NaN,this._point=0},"lineStart"),lineEnd:o(function(){0=0&&(this._t=1-this._t,this._line=1-this._line)},"lineEnd"),point:o(function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1,this._line?this._context.lineTo(t,e):this._context.moveTo(t,e);break;case 1:this._point=2;default:{if(this._t<=0)this._context.lineTo(this._x,e),this._context.lineTo(t,e);else{var r=this._x*(1-this._t)+t*this._t;this._context.lineTo(r,this._y),this._context.lineTo(r,e)}break}}this._x=t,this._y=e},"point")};o(r5,"default");o(T_,"stepBefore");o(k_,"stepAfter")});var xY=M(()=>{"use strict";GW();WW();XW();QW();JW();iv();jW();tY();d_();m_();av();iY();sY();Q3();lY();a_();pY();yY();vY()});var bY=M(()=>{"use strict"});var wY=M(()=>{"use strict"});function Ih(t,e,r){this.k=t,this.x=e,this.y=r}function S_(t){for(;!t.__zoom;)if(!(t=t.parentNode))return E_;return t.__zoom}var E_,C_=M(()=>{"use strict";o(Ih,"Transform");Ih.prototype={constructor:Ih,scale:o(function(t){return t===1?this:new Ih(this.k*t,this.x,this.y)},"scale"),translate:o(function(t,e){return t===0&e===0?this:new Ih(this.k,this.x+this.k*t,this.y+this.k*e)},"translate"),apply:o(function(t){return[t[0]*this.k+this.x,t[1]*this.k+this.y]},"apply"),applyX:o(function(t){return t*this.k+this.x},"applyX"),applyY:o(function(t){return t*this.k+this.y},"applyY"),invert:o(function(t){return[(t[0]-this.x)/this.k,(t[1]-this.y)/this.k]},"invert"),invertX:o(function(t){return(t-this.x)/this.k},"invertX"),invertY:o(function(t){return(t-this.y)/this.k},"invertY"),rescaleX:o(function(t){return t.copy().domain(t.range().map(this.invertX,this).map(t.invert,t))},"rescaleX"),rescaleY:o(function(t){return t.copy().domain(t.range().map(this.invertY,this).map(t.invert,t))},"rescaleY"),toString:o(function(){return"translate("+this.x+","+this.y+") scale("+this.k+")"},"toString")};E_=new Ih(1,0,0);S_.prototype=Ih.prototype;o(S_,"transform")});var TY=M(()=>{"use strict"});var kY=M(()=>{"use strict";v3();bY();wY();C_();TY()});var EY=M(()=>{"use strict";kY();C_()});var pr=M(()=>{"use strict";kh();tV();bH();EH();Pp();SH();CH();T7();YV();AH();u8();_H();DH();A8();HH();WH();zp();m8();YH();LH();qH();IW();BW();Tl();xY();B3();Z8();f3();v3();EY()});var SY=Ei(na=>{"use strict";Object.defineProperty(na,"__esModule",{value:!0});na.BLANK_URL=na.relativeFirstCharacters=na.whitespaceEscapeCharsRegex=na.urlSchemeRegex=na.ctrlCharactersRegex=na.htmlCtrlEntityRegex=na.htmlEntitiesRegex=na.invalidProtocolRegex=void 0;na.invalidProtocolRegex=/^([^\w]*)(javascript|data|vbscript)/im;na.htmlEntitiesRegex=/&#(\w+)(^\w|;)?/g;na.htmlCtrlEntityRegex=/&(newline|tab);/gi;na.ctrlCharactersRegex=/[\u0000-\u001F\u007F-\u009F\u2000-\u200D\uFEFF]/gim;na.urlSchemeRegex=/^.+(:|:)/gim;na.whitespaceEscapeCharsRegex=/(\\|%5[cC])((%(6[eE]|72|74))|[nrt])/g;na.relativeFirstCharacters=[".","/"];na.BLANK_URL="about:blank"});var Qp=Ei(n5=>{"use strict";Object.defineProperty(n5,"__esModule",{value:!0});n5.sanitizeUrl=void 0;var Ra=SY();function Hke(t){return Ra.relativeFirstCharacters.indexOf(t[0])>-1}o(Hke,"isRelativeUrlWithoutProtocol");function Wke(t){var e=t.replace(Ra.ctrlCharactersRegex,"");return e.replace(Ra.htmlEntitiesRegex,function(r,n){return String.fromCharCode(n)})}o(Wke,"decodeHtmlCharacters");function Yke(t){return URL.canParse(t)}o(Yke,"isValidUrl");function CY(t){try{return decodeURIComponent(t)}catch{return t}}o(CY,"decodeURI");function qke(t){if(!t)return Ra.BLANK_URL;var e,r=CY(t.trim());do r=Wke(r).replace(Ra.htmlCtrlEntityRegex,"").replace(Ra.ctrlCharactersRegex,"").replace(Ra.whitespaceEscapeCharsRegex,"").trim(),r=CY(r),e=r.match(Ra.ctrlCharactersRegex)||r.match(Ra.htmlEntitiesRegex)||r.match(Ra.htmlCtrlEntityRegex)||r.match(Ra.whitespaceEscapeCharsRegex);while(e&&e.length>0);var n=r;if(!n)return Ra.BLANK_URL;if(Hke(n))return n;var i=n.trimStart(),a=i.match(Ra.urlSchemeRegex);if(!a)return n;var s=a[0].toLowerCase().trim();if(Ra.invalidProtocolRegex.test(s))return Ra.BLANK_URL;var l=i.replace(/\\/g,"/");if(s==="mailto:"||s.includes("://"))return l;if(s==="http:"||s==="https:"){if(!Yke(l))return Ra.BLANK_URL;var u=new URL(l);return u.protocol=u.protocol.toLowerCase(),u.hostname=u.hostname.toLowerCase(),u.toString()}return l}o(qke,"sanitizeUrl");n5.sanitizeUrl=qke});var A_,Sd,i5,AY,_Y,LY,Nl,ov,lv=M(()=>{"use strict";A_=Ji(Qp(),1);fr();Sd=o((t,e)=>{let r=t.append("rect");if(r.attr("x",e.x),r.attr("y",e.y),r.attr("fill",e.fill),r.attr("stroke",e.stroke),r.attr("width",e.width),r.attr("height",e.height),e.name&&r.attr("name",e.name),e.rx&&r.attr("rx",e.rx),e.ry&&r.attr("ry",e.ry),e.attrs!==void 0)for(let n in e.attrs)r.attr(n,e.attrs[n]);return e.class&&r.attr("class",e.class),r},"drawRect"),i5=o((t,e)=>{let r={x:e.startx,y:e.starty,width:e.stopx-e.startx,height:e.stopy-e.starty,fill:e.fill,stroke:e.stroke,class:"rect"};Sd(t,r).lower()},"drawBackgroundRect"),AY=o((t,e)=>{let r=e.text.replace(ad," "),n=t.append("text");n.attr("x",e.x),n.attr("y",e.y),n.attr("class","legend"),n.style("text-anchor",e.anchor),e.class&&n.attr("class",e.class);let i=n.append("tspan");return i.attr("x",e.x+e.textMargin*2),i.text(r),n},"drawText"),_Y=o((t,e,r,n)=>{let i=t.append("image");i.attr("x",e),i.attr("y",r);let a=(0,A_.sanitizeUrl)(n);i.attr("xlink:href",a)},"drawImage"),LY=o((t,e,r,n)=>{let i=t.append("use");i.attr("x",e),i.attr("y",r);let a=(0,A_.sanitizeUrl)(n);i.attr("xlink:href",`#${a}`)},"drawEmbeddedImage"),Nl=o(()=>({x:0,y:0,width:100,height:100,fill:"#EDF2AE",stroke:"#666",anchor:"start",rx:0,ry:0}),"getNoteRect"),ov=o(()=>({x:0,y:0,width:100,height:100,"text-anchor":"start",style:"#666",textMargin:0,rx:0,ry:0,tspan:!0}),"getTextObj")});var DY,__,NY,Xke,jke,Kke,Qke,Zke,Jke,eEe,tEe,rEe,nEe,iEe,aEe,_u,Rl,RY=M(()=>{"use strict";fr();lv();DY=Ji(Qp(),1),__=o(function(t,e){return Sd(t,e)},"drawRect"),NY=o(function(t,e,r,n,i,a){let s=t.append("image");s.attr("width",e),s.attr("height",r),s.attr("x",n),s.attr("y",i);let l=a.startsWith("data:image/png;base64")?a:(0,DY.sanitizeUrl)(a);s.attr("xlink:href",l)},"drawImage"),Xke=o((t,e,r)=>{let n=t.append("g"),i=0;for(let a of e){let s=a.textColor?a.textColor:"#444444",l=a.lineColor?a.lineColor:"#444444",u=a.offsetX?parseInt(a.offsetX):0,h=a.offsetY?parseInt(a.offsetY):0,f="";if(i===0){let p=n.append("line");p.attr("x1",a.startPoint.x),p.attr("y1",a.startPoint.y),p.attr("x2",a.endPoint.x),p.attr("y2",a.endPoint.y),p.attr("stroke-width","1"),p.attr("stroke",l),p.style("fill","none"),a.type!=="rel_b"&&p.attr("marker-end","url("+f+"#arrowhead)"),(a.type==="birel"||a.type==="rel_b")&&p.attr("marker-start","url("+f+"#arrowend)"),i=-1}else{let p=n.append("path");p.attr("fill","none").attr("stroke-width","1").attr("stroke",l).attr("d","Mstartx,starty Qcontrolx,controly stopx,stopy ".replaceAll("startx",a.startPoint.x).replaceAll("starty",a.startPoint.y).replaceAll("controlx",a.startPoint.x+(a.endPoint.x-a.startPoint.x)/2-(a.endPoint.x-a.startPoint.x)/4).replaceAll("controly",a.startPoint.y+(a.endPoint.y-a.startPoint.y)/2).replaceAll("stopx",a.endPoint.x).replaceAll("stopy",a.endPoint.y)),a.type!=="rel_b"&&p.attr("marker-end","url("+f+"#arrowhead)"),(a.type==="birel"||a.type==="rel_b")&&p.attr("marker-start","url("+f+"#arrowend)")}let d=r.messageFont();_u(r)(a.label.text,n,Math.min(a.startPoint.x,a.endPoint.x)+Math.abs(a.endPoint.x-a.startPoint.x)/2+u,Math.min(a.startPoint.y,a.endPoint.y)+Math.abs(a.endPoint.y-a.startPoint.y)/2+h,a.label.width,a.label.height,{fill:s},d),a.techn&&a.techn.text!==""&&(d=r.messageFont(),_u(r)("["+a.techn.text+"]",n,Math.min(a.startPoint.x,a.endPoint.x)+Math.abs(a.endPoint.x-a.startPoint.x)/2+u,Math.min(a.startPoint.y,a.endPoint.y)+Math.abs(a.endPoint.y-a.startPoint.y)/2+r.messageFontSize+5+h,Math.max(a.label.width,a.techn.width),a.techn.height,{fill:s,"font-style":"italic"},d))}},"drawRels"),jke=o(function(t,e,r){let n=t.append("g"),i=e.bgColor?e.bgColor:"none",a=e.borderColor?e.borderColor:"#444444",s=e.fontColor?e.fontColor:"black",l={"stroke-width":1,"stroke-dasharray":"7.0,7.0"};e.nodeType&&(l={"stroke-width":1});let u={x:e.x,y:e.y,fill:i,stroke:a,width:e.width,height:e.height,rx:2.5,ry:2.5,attrs:l};__(n,u);let h=r.boundaryFont();h.fontWeight="bold",h.fontSize=h.fontSize+2,h.fontColor=s,_u(r)(e.label.text,n,e.x,e.y+e.label.Y,e.width,e.height,{fill:"#444444"},h),e.type&&e.type.text!==""&&(h=r.boundaryFont(),h.fontColor=s,_u(r)(e.type.text,n,e.x,e.y+e.type.Y,e.width,e.height,{fill:"#444444"},h)),e.descr&&e.descr.text!==""&&(h=r.boundaryFont(),h.fontSize=h.fontSize-2,h.fontColor=s,_u(r)(e.descr.text,n,e.x,e.y+e.descr.Y,e.width,e.height,{fill:"#444444"},h))},"drawBoundary"),Kke=o(function(t,e,r){let n=e.bgColor?e.bgColor:r[e.typeC4Shape.text+"_bg_color"],i=e.borderColor?e.borderColor:r[e.typeC4Shape.text+"_border_color"],a=e.fontColor?e.fontColor:"#FFFFFF",s="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAIAAADYYG7QAAACD0lEQVR4Xu2YoU4EMRCGT+4j8Ai8AhaH4QHgAUjQuFMECUgMIUgwJAgMhgQsAYUiJCiQIBBY+EITsjfTdme6V24v4c8vyGbb+ZjOtN0bNcvjQXmkH83WvYBWto6PLm6v7p7uH1/w2fXD+PBycX1Pv2l3IdDm/vn7x+dXQiAubRzoURa7gRZWd0iGRIiJbOnhnfYBQZNJjNbuyY2eJG8fkDE3bbG4ep6MHUAsgYxmE3nVs6VsBWJSGccsOlFPmLIViMzLOB7pCVO2AtHJMohH7Fh6zqitQK7m0rJvAVYgGcEpe//PLdDz65sM4pF9N7ICcXDKIB5Nv6j7tD0NoSdM2QrU9Gg0ewE1LqBhHR3BBdvj2vapnidjHxD/q6vd7Pvhr31AwcY8eXMTXAKECZZJFXuEq27aLgQK5uLMohCenGGuGewOxSjBvYBqeG6B+Nqiblggdjnc+ZXDy+FNFpFzw76O3UBAROuXh6FoiAcf5g9eTvUgzy0nWg6I8cXHRUpg5bOVBCo+KDpFajOf23GgPme7RSQ+lacIENUgJ6gg1k6HjgOlqnLqip4tEuhv0hNEMXUD0clyXE3p6pZA0S2nnvTlXwLJEZWlb7cTQH1+USgTN4VhAenm/wea1OCAOmqo6fE1WCb9WSKBah+rbUWPWAmE2Rvk0ApiB45eOyNAzU8xcTvj8KvkKEoOaIYeHNA3ZuygAvFMUO0AAAAASUVORK5CYII=";switch(e.typeC4Shape.text){case"person":s="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAIAAADYYG7QAAACD0lEQVR4Xu2YoU4EMRCGT+4j8Ai8AhaH4QHgAUjQuFMECUgMIUgwJAgMhgQsAYUiJCiQIBBY+EITsjfTdme6V24v4c8vyGbb+ZjOtN0bNcvjQXmkH83WvYBWto6PLm6v7p7uH1/w2fXD+PBycX1Pv2l3IdDm/vn7x+dXQiAubRzoURa7gRZWd0iGRIiJbOnhnfYBQZNJjNbuyY2eJG8fkDE3bbG4ep6MHUAsgYxmE3nVs6VsBWJSGccsOlFPmLIViMzLOB7pCVO2AtHJMohH7Fh6zqitQK7m0rJvAVYgGcEpe//PLdDz65sM4pF9N7ICcXDKIB5Nv6j7tD0NoSdM2QrU9Gg0ewE1LqBhHR3BBdvj2vapnidjHxD/q6vd7Pvhr31AwcY8eXMTXAKECZZJFXuEq27aLgQK5uLMohCenGGuGewOxSjBvYBqeG6B+Nqiblggdjnc+ZXDy+FNFpFzw76O3UBAROuXh6FoiAcf5g9eTvUgzy0nWg6I8cXHRUpg5bOVBCo+KDpFajOf23GgPme7RSQ+lacIENUgJ6gg1k6HjgOlqnLqip4tEuhv0hNEMXUD0clyXE3p6pZA0S2nnvTlXwLJEZWlb7cTQH1+USgTN4VhAenm/wea1OCAOmqo6fE1WCb9WSKBah+rbUWPWAmE2Rvk0ApiB45eOyNAzU8xcTvj8KvkKEoOaIYeHNA3ZuygAvFMUO0AAAAASUVORK5CYII=";break;case"external_person":s="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAIAAADYYG7QAAAB6ElEQVR4Xu2YLY+EMBCG9+dWr0aj0Wg0Go1Go0+j8Xdv2uTCvv1gpt0ebHKPuhDaeW4605Z9mJvx4AdXUyTUdd08z+u6flmWZRnHsWkafk9DptAwDPu+f0eAYtu2PEaGWuj5fCIZrBAC2eLBAnRCsEkkxmeaJp7iDJ2QMDdHsLg8SxKFEJaAo8lAXnmuOFIhTMpxxKATebo4UiFknuNo4OniSIXQyRxEA3YsnjGCVEjVXD7yLUAqxBGUyPv/Y4W2beMgGuS7kVQIBycH0fD+oi5pezQETxdHKmQKGk1eQEYldK+jw5GxPfZ9z7Mk0Qnhf1W1m3w//EUn5BDmSZsbR44QQLBEqrBHqOrmSKaQAxdnLArCrxZcM7A7ZKs4ioRq8LFC+NpC3WCBJsvpVw5edm9iEXFuyNfxXAgSwfrFQ1c0iNda8AdejvUgnktOtJQQxmcfFzGglc5WVCj7oDgFqU18boeFSs52CUh8LE8BIVQDT1ABrB0HtgSEYlX5doJnCwv9TXocKCaKbnwhdDKPq4lf3SwU3HLq4V/+WYhHVMa/3b4IlfyikAduCkcBc7mQ3/z/Qq/cTuikhkzB12Ae/mcJC9U+Vo8Ej1gWAtgbeGgFsAMHr50BIWOLCbezvhpBFUdY6EJuJ/QDW0XoMX60zZ0AAAAASUVORK5CYII=";break}let l=t.append("g");l.attr("class","person-man");let u=Nl();switch(e.typeC4Shape.text){case"person":case"external_person":case"system":case"external_system":case"container":case"external_container":case"component":case"external_component":u.x=e.x,u.y=e.y,u.fill=n,u.width=e.width,u.height=e.height,u.stroke=i,u.rx=2.5,u.ry=2.5,u.attrs={"stroke-width":.5},__(l,u);break;case"system_db":case"external_system_db":case"container_db":case"external_container_db":case"component_db":case"external_component_db":l.append("path").attr("fill",n).attr("stroke-width","0.5").attr("stroke",i).attr("d","Mstartx,startyc0,-10 half,-10 half,-10c0,0 half,0 half,10l0,heightc0,10 -half,10 -half,10c0,0 -half,0 -half,-10l0,-height".replaceAll("startx",e.x).replaceAll("starty",e.y).replaceAll("half",e.width/2).replaceAll("height",e.height)),l.append("path").attr("fill","none").attr("stroke-width","0.5").attr("stroke",i).attr("d","Mstartx,startyc0,10 half,10 half,10c0,0 half,0 half,-10".replaceAll("startx",e.x).replaceAll("starty",e.y).replaceAll("half",e.width/2));break;case"system_queue":case"external_system_queue":case"container_queue":case"external_container_queue":case"component_queue":case"external_component_queue":l.append("path").attr("fill",n).attr("stroke-width","0.5").attr("stroke",i).attr("d","Mstartx,startylwidth,0c5,0 5,half 5,halfc0,0 0,half -5,halfl-width,0c-5,0 -5,-half -5,-halfc0,0 0,-half 5,-half".replaceAll("startx",e.x).replaceAll("starty",e.y).replaceAll("width",e.width).replaceAll("half",e.height/2)),l.append("path").attr("fill","none").attr("stroke-width","0.5").attr("stroke",i).attr("d","Mstartx,startyc-5,0 -5,half -5,halfc0,half 5,half 5,half".replaceAll("startx",e.x+e.width).replaceAll("starty",e.y).replaceAll("half",e.height/2));break}let h=aEe(r,e.typeC4Shape.text);switch(l.append("text").attr("fill",a).attr("font-family",h.fontFamily).attr("font-size",h.fontSize-2).attr("font-style","italic").attr("lengthAdjust","spacing").attr("textLength",e.typeC4Shape.width).attr("x",e.x+e.width/2-e.typeC4Shape.width/2).attr("y",e.y+e.typeC4Shape.Y).text("<<"+e.typeC4Shape.text+">>"),e.typeC4Shape.text){case"person":case"external_person":NY(l,48,48,e.x+e.width/2-24,e.y+e.image.Y,s);break}let f=r[e.typeC4Shape.text+"Font"]();return f.fontWeight="bold",f.fontSize=f.fontSize+2,f.fontColor=a,_u(r)(e.label.text,l,e.x,e.y+e.label.Y,e.width,e.height,{fill:a},f),f=r[e.typeC4Shape.text+"Font"](),f.fontColor=a,e.techn&&e.techn?.text!==""?_u(r)(e.techn.text,l,e.x,e.y+e.techn.Y,e.width,e.height,{fill:a,"font-style":"italic"},f):e.type&&e.type.text!==""&&_u(r)(e.type.text,l,e.x,e.y+e.type.Y,e.width,e.height,{fill:a,"font-style":"italic"},f),e.descr&&e.descr.text!==""&&(f=r.personFont(),f.fontColor=a,_u(r)(e.descr.text,l,e.x,e.y+e.descr.Y,e.width,e.height,{fill:a},f)),e.height},"drawC4Shape"),Qke=o(function(t){t.append("defs").append("symbol").attr("id","database").attr("fill-rule","evenodd").attr("clip-rule","evenodd").append("path").attr("transform","scale(.5)").attr("d","M12.258.001l.256.004.255.005.253.008.251.01.249.012.247.015.246.016.242.019.241.02.239.023.236.024.233.027.231.028.229.031.225.032.223.034.22.036.217.038.214.04.211.041.208.043.205.045.201.046.198.048.194.05.191.051.187.053.183.054.18.056.175.057.172.059.168.06.163.061.16.063.155.064.15.066.074.033.073.033.071.034.07.034.069.035.068.035.067.035.066.035.064.036.064.036.062.036.06.036.06.037.058.037.058.037.055.038.055.038.053.038.052.038.051.039.05.039.048.039.047.039.045.04.044.04.043.04.041.04.04.041.039.041.037.041.036.041.034.041.033.042.032.042.03.042.029.042.027.042.026.043.024.043.023.043.021.043.02.043.018.044.017.043.015.044.013.044.012.044.011.045.009.044.007.045.006.045.004.045.002.045.001.045v17l-.001.045-.002.045-.004.045-.006.045-.007.045-.009.044-.011.045-.012.044-.013.044-.015.044-.017.043-.018.044-.02.043-.021.043-.023.043-.024.043-.026.043-.027.042-.029.042-.03.042-.032.042-.033.042-.034.041-.036.041-.037.041-.039.041-.04.041-.041.04-.043.04-.044.04-.045.04-.047.039-.048.039-.05.039-.051.039-.052.038-.053.038-.055.038-.055.038-.058.037-.058.037-.06.037-.06.036-.062.036-.064.036-.064.036-.066.035-.067.035-.068.035-.069.035-.07.034-.071.034-.073.033-.074.033-.15.066-.155.064-.16.063-.163.061-.168.06-.172.059-.175.057-.18.056-.183.054-.187.053-.191.051-.194.05-.198.048-.201.046-.205.045-.208.043-.211.041-.214.04-.217.038-.22.036-.223.034-.225.032-.229.031-.231.028-.233.027-.236.024-.239.023-.241.02-.242.019-.246.016-.247.015-.249.012-.251.01-.253.008-.255.005-.256.004-.258.001-.258-.001-.256-.004-.255-.005-.253-.008-.251-.01-.249-.012-.247-.015-.245-.016-.243-.019-.241-.02-.238-.023-.236-.024-.234-.027-.231-.028-.228-.031-.226-.032-.223-.034-.22-.036-.217-.038-.214-.04-.211-.041-.208-.043-.204-.045-.201-.046-.198-.048-.195-.05-.19-.051-.187-.053-.184-.054-.179-.056-.176-.057-.172-.059-.167-.06-.164-.061-.159-.063-.155-.064-.151-.066-.074-.033-.072-.033-.072-.034-.07-.034-.069-.035-.068-.035-.067-.035-.066-.035-.064-.036-.063-.036-.062-.036-.061-.036-.06-.037-.058-.037-.057-.037-.056-.038-.055-.038-.053-.038-.052-.038-.051-.039-.049-.039-.049-.039-.046-.039-.046-.04-.044-.04-.043-.04-.041-.04-.04-.041-.039-.041-.037-.041-.036-.041-.034-.041-.033-.042-.032-.042-.03-.042-.029-.042-.027-.042-.026-.043-.024-.043-.023-.043-.021-.043-.02-.043-.018-.044-.017-.043-.015-.044-.013-.044-.012-.044-.011-.045-.009-.044-.007-.045-.006-.045-.004-.045-.002-.045-.001-.045v-17l.001-.045.002-.045.004-.045.006-.045.007-.045.009-.044.011-.045.012-.044.013-.044.015-.044.017-.043.018-.044.02-.043.021-.043.023-.043.024-.043.026-.043.027-.042.029-.042.03-.042.032-.042.033-.042.034-.041.036-.041.037-.041.039-.041.04-.041.041-.04.043-.04.044-.04.046-.04.046-.039.049-.039.049-.039.051-.039.052-.038.053-.038.055-.038.056-.038.057-.037.058-.037.06-.037.061-.036.062-.036.063-.036.064-.036.066-.035.067-.035.068-.035.069-.035.07-.034.072-.034.072-.033.074-.033.151-.066.155-.064.159-.063.164-.061.167-.06.172-.059.176-.057.179-.056.184-.054.187-.053.19-.051.195-.05.198-.048.201-.046.204-.045.208-.043.211-.041.214-.04.217-.038.22-.036.223-.034.226-.032.228-.031.231-.028.234-.027.236-.024.238-.023.241-.02.243-.019.245-.016.247-.015.249-.012.251-.01.253-.008.255-.005.256-.004.258-.001.258.001zm-9.258 20.499v.01l.001.021.003.021.004.022.005.021.006.022.007.022.009.023.01.022.011.023.012.023.013.023.015.023.016.024.017.023.018.024.019.024.021.024.022.025.023.024.024.025.052.049.056.05.061.051.066.051.07.051.075.051.079.052.084.052.088.052.092.052.097.052.102.051.105.052.11.052.114.051.119.051.123.051.127.05.131.05.135.05.139.048.144.049.147.047.152.047.155.047.16.045.163.045.167.043.171.043.176.041.178.041.183.039.187.039.19.037.194.035.197.035.202.033.204.031.209.03.212.029.216.027.219.025.222.024.226.021.23.02.233.018.236.016.24.015.243.012.246.01.249.008.253.005.256.004.259.001.26-.001.257-.004.254-.005.25-.008.247-.011.244-.012.241-.014.237-.016.233-.018.231-.021.226-.021.224-.024.22-.026.216-.027.212-.028.21-.031.205-.031.202-.034.198-.034.194-.036.191-.037.187-.039.183-.04.179-.04.175-.042.172-.043.168-.044.163-.045.16-.046.155-.046.152-.047.148-.048.143-.049.139-.049.136-.05.131-.05.126-.05.123-.051.118-.052.114-.051.11-.052.106-.052.101-.052.096-.052.092-.052.088-.053.083-.051.079-.052.074-.052.07-.051.065-.051.06-.051.056-.05.051-.05.023-.024.023-.025.021-.024.02-.024.019-.024.018-.024.017-.024.015-.023.014-.024.013-.023.012-.023.01-.023.01-.022.008-.022.006-.022.006-.022.004-.022.004-.021.001-.021.001-.021v-4.127l-.077.055-.08.053-.083.054-.085.053-.087.052-.09.052-.093.051-.095.05-.097.05-.1.049-.102.049-.105.048-.106.047-.109.047-.111.046-.114.045-.115.045-.118.044-.12.043-.122.042-.124.042-.126.041-.128.04-.13.04-.132.038-.134.038-.135.037-.138.037-.139.035-.142.035-.143.034-.144.033-.147.032-.148.031-.15.03-.151.03-.153.029-.154.027-.156.027-.158.026-.159.025-.161.024-.162.023-.163.022-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.011-.178.01-.179.008-.179.008-.181.006-.182.005-.182.004-.184.003-.184.002h-.37l-.184-.002-.184-.003-.182-.004-.182-.005-.181-.006-.179-.008-.179-.008-.178-.01-.176-.011-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.022-.162-.023-.161-.024-.159-.025-.157-.026-.156-.027-.155-.027-.153-.029-.151-.03-.15-.03-.148-.031-.146-.032-.145-.033-.143-.034-.141-.035-.14-.035-.137-.037-.136-.037-.134-.038-.132-.038-.13-.04-.128-.04-.126-.041-.124-.042-.122-.042-.12-.044-.117-.043-.116-.045-.113-.045-.112-.046-.109-.047-.106-.047-.105-.048-.102-.049-.1-.049-.097-.05-.095-.05-.093-.052-.09-.051-.087-.052-.085-.053-.083-.054-.08-.054-.077-.054v4.127zm0-5.654v.011l.001.021.003.021.004.021.005.022.006.022.007.022.009.022.01.022.011.023.012.023.013.023.015.024.016.023.017.024.018.024.019.024.021.024.022.024.023.025.024.024.052.05.056.05.061.05.066.051.07.051.075.052.079.051.084.052.088.052.092.052.097.052.102.052.105.052.11.051.114.051.119.052.123.05.127.051.131.05.135.049.139.049.144.048.147.048.152.047.155.046.16.045.163.045.167.044.171.042.176.042.178.04.183.04.187.038.19.037.194.036.197.034.202.033.204.032.209.03.212.028.216.027.219.025.222.024.226.022.23.02.233.018.236.016.24.014.243.012.246.01.249.008.253.006.256.003.259.001.26-.001.257-.003.254-.006.25-.008.247-.01.244-.012.241-.015.237-.016.233-.018.231-.02.226-.022.224-.024.22-.025.216-.027.212-.029.21-.03.205-.032.202-.033.198-.035.194-.036.191-.037.187-.039.183-.039.179-.041.175-.042.172-.043.168-.044.163-.045.16-.045.155-.047.152-.047.148-.048.143-.048.139-.05.136-.049.131-.05.126-.051.123-.051.118-.051.114-.052.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.051.07-.052.065-.051.06-.05.056-.051.051-.049.023-.025.023-.024.021-.025.02-.024.019-.024.018-.024.017-.024.015-.023.014-.023.013-.024.012-.022.01-.023.01-.023.008-.022.006-.022.006-.022.004-.021.004-.022.001-.021.001-.021v-4.139l-.077.054-.08.054-.083.054-.085.052-.087.053-.09.051-.093.051-.095.051-.097.05-.1.049-.102.049-.105.048-.106.047-.109.047-.111.046-.114.045-.115.044-.118.044-.12.044-.122.042-.124.042-.126.041-.128.04-.13.039-.132.039-.134.038-.135.037-.138.036-.139.036-.142.035-.143.033-.144.033-.147.033-.148.031-.15.03-.151.03-.153.028-.154.028-.156.027-.158.026-.159.025-.161.024-.162.023-.163.022-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.011-.178.009-.179.009-.179.007-.181.007-.182.005-.182.004-.184.003-.184.002h-.37l-.184-.002-.184-.003-.182-.004-.182-.005-.181-.007-.179-.007-.179-.009-.178-.009-.176-.011-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.022-.162-.023-.161-.024-.159-.025-.157-.026-.156-.027-.155-.028-.153-.028-.151-.03-.15-.03-.148-.031-.146-.033-.145-.033-.143-.033-.141-.035-.14-.036-.137-.036-.136-.037-.134-.038-.132-.039-.13-.039-.128-.04-.126-.041-.124-.042-.122-.043-.12-.043-.117-.044-.116-.044-.113-.046-.112-.046-.109-.046-.106-.047-.105-.048-.102-.049-.1-.049-.097-.05-.095-.051-.093-.051-.09-.051-.087-.053-.085-.052-.083-.054-.08-.054-.077-.054v4.139zm0-5.666v.011l.001.02.003.022.004.021.005.022.006.021.007.022.009.023.01.022.011.023.012.023.013.023.015.023.016.024.017.024.018.023.019.024.021.025.022.024.023.024.024.025.052.05.056.05.061.05.066.051.07.051.075.052.079.051.084.052.088.052.092.052.097.052.102.052.105.051.11.052.114.051.119.051.123.051.127.05.131.05.135.05.139.049.144.048.147.048.152.047.155.046.16.045.163.045.167.043.171.043.176.042.178.04.183.04.187.038.19.037.194.036.197.034.202.033.204.032.209.03.212.028.216.027.219.025.222.024.226.021.23.02.233.018.236.017.24.014.243.012.246.01.249.008.253.006.256.003.259.001.26-.001.257-.003.254-.006.25-.008.247-.01.244-.013.241-.014.237-.016.233-.018.231-.02.226-.022.224-.024.22-.025.216-.027.212-.029.21-.03.205-.032.202-.033.198-.035.194-.036.191-.037.187-.039.183-.039.179-.041.175-.042.172-.043.168-.044.163-.045.16-.045.155-.047.152-.047.148-.048.143-.049.139-.049.136-.049.131-.051.126-.05.123-.051.118-.052.114-.051.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.052.07-.051.065-.051.06-.051.056-.05.051-.049.023-.025.023-.025.021-.024.02-.024.019-.024.018-.024.017-.024.015-.023.014-.024.013-.023.012-.023.01-.022.01-.023.008-.022.006-.022.006-.022.004-.022.004-.021.001-.021.001-.021v-4.153l-.077.054-.08.054-.083.053-.085.053-.087.053-.09.051-.093.051-.095.051-.097.05-.1.049-.102.048-.105.048-.106.048-.109.046-.111.046-.114.046-.115.044-.118.044-.12.043-.122.043-.124.042-.126.041-.128.04-.13.039-.132.039-.134.038-.135.037-.138.036-.139.036-.142.034-.143.034-.144.033-.147.032-.148.032-.15.03-.151.03-.153.028-.154.028-.156.027-.158.026-.159.024-.161.024-.162.023-.163.023-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.01-.178.01-.179.009-.179.007-.181.006-.182.006-.182.004-.184.003-.184.001-.185.001-.185-.001-.184-.001-.184-.003-.182-.004-.182-.006-.181-.006-.179-.007-.179-.009-.178-.01-.176-.01-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.023-.162-.023-.161-.024-.159-.024-.157-.026-.156-.027-.155-.028-.153-.028-.151-.03-.15-.03-.148-.032-.146-.032-.145-.033-.143-.034-.141-.034-.14-.036-.137-.036-.136-.037-.134-.038-.132-.039-.13-.039-.128-.041-.126-.041-.124-.041-.122-.043-.12-.043-.117-.044-.116-.044-.113-.046-.112-.046-.109-.046-.106-.048-.105-.048-.102-.048-.1-.05-.097-.049-.095-.051-.093-.051-.09-.052-.087-.052-.085-.053-.083-.053-.08-.054-.077-.054v4.153zm8.74-8.179l-.257.004-.254.005-.25.008-.247.011-.244.012-.241.014-.237.016-.233.018-.231.021-.226.022-.224.023-.22.026-.216.027-.212.028-.21.031-.205.032-.202.033-.198.034-.194.036-.191.038-.187.038-.183.04-.179.041-.175.042-.172.043-.168.043-.163.045-.16.046-.155.046-.152.048-.148.048-.143.048-.139.049-.136.05-.131.05-.126.051-.123.051-.118.051-.114.052-.11.052-.106.052-.101.052-.096.052-.092.052-.088.052-.083.052-.079.052-.074.051-.07.052-.065.051-.06.05-.056.05-.051.05-.023.025-.023.024-.021.024-.02.025-.019.024-.018.024-.017.023-.015.024-.014.023-.013.023-.012.023-.01.023-.01.022-.008.022-.006.023-.006.021-.004.022-.004.021-.001.021-.001.021.001.021.001.021.004.021.004.022.006.021.006.023.008.022.01.022.01.023.012.023.013.023.014.023.015.024.017.023.018.024.019.024.02.025.021.024.023.024.023.025.051.05.056.05.06.05.065.051.07.052.074.051.079.052.083.052.088.052.092.052.096.052.101.052.106.052.11.052.114.052.118.051.123.051.126.051.131.05.136.05.139.049.143.048.148.048.152.048.155.046.16.046.163.045.168.043.172.043.175.042.179.041.183.04.187.038.191.038.194.036.198.034.202.033.205.032.21.031.212.028.216.027.22.026.224.023.226.022.231.021.233.018.237.016.241.014.244.012.247.011.25.008.254.005.257.004.26.001.26-.001.257-.004.254-.005.25-.008.247-.011.244-.012.241-.014.237-.016.233-.018.231-.021.226-.022.224-.023.22-.026.216-.027.212-.028.21-.031.205-.032.202-.033.198-.034.194-.036.191-.038.187-.038.183-.04.179-.041.175-.042.172-.043.168-.043.163-.045.16-.046.155-.046.152-.048.148-.048.143-.048.139-.049.136-.05.131-.05.126-.051.123-.051.118-.051.114-.052.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.051.07-.052.065-.051.06-.05.056-.05.051-.05.023-.025.023-.024.021-.024.02-.025.019-.024.018-.024.017-.023.015-.024.014-.023.013-.023.012-.023.01-.023.01-.022.008-.022.006-.023.006-.021.004-.022.004-.021.001-.021.001-.021-.001-.021-.001-.021-.004-.021-.004-.022-.006-.021-.006-.023-.008-.022-.01-.022-.01-.023-.012-.023-.013-.023-.014-.023-.015-.024-.017-.023-.018-.024-.019-.024-.02-.025-.021-.024-.023-.024-.023-.025-.051-.05-.056-.05-.06-.05-.065-.051-.07-.052-.074-.051-.079-.052-.083-.052-.088-.052-.092-.052-.096-.052-.101-.052-.106-.052-.11-.052-.114-.052-.118-.051-.123-.051-.126-.051-.131-.05-.136-.05-.139-.049-.143-.048-.148-.048-.152-.048-.155-.046-.16-.046-.163-.045-.168-.043-.172-.043-.175-.042-.179-.041-.183-.04-.187-.038-.191-.038-.194-.036-.198-.034-.202-.033-.205-.032-.21-.031-.212-.028-.216-.027-.22-.026-.224-.023-.226-.022-.231-.021-.233-.018-.237-.016-.241-.014-.244-.012-.247-.011-.25-.008-.254-.005-.257-.004-.26-.001-.26.001z")},"insertDatabaseIcon"),Zke=o(function(t){t.append("defs").append("symbol").attr("id","computer").attr("width","24").attr("height","24").append("path").attr("transform","scale(.5)").attr("d","M2 2v13h20v-13h-20zm18 11h-16v-9h16v9zm-10.228 6l.466-1h3.524l.467 1h-4.457zm14.228 3h-24l2-6h2.104l-1.33 4h18.45l-1.297-4h2.073l2 6zm-5-10h-14v-7h14v7z")},"insertComputerIcon"),Jke=o(function(t){t.append("defs").append("symbol").attr("id","clock").attr("width","24").attr("height","24").append("path").attr("transform","scale(.5)").attr("d","M12 2c5.514 0 10 4.486 10 10s-4.486 10-10 10-10-4.486-10-10 4.486-10 10-10zm0-2c-6.627 0-12 5.373-12 12s5.373 12 12 12 12-5.373 12-12-5.373-12-12-12zm5.848 12.459c.202.038.202.333.001.372-1.907.361-6.045 1.111-6.547 1.111-.719 0-1.301-.582-1.301-1.301 0-.512.77-5.447 1.125-7.445.034-.192.312-.181.343.014l.985 6.238 5.394 1.011z")},"insertClockIcon"),eEe=o(function(t){t.append("defs").append("marker").attr("id","arrowhead").attr("refX",9).attr("refY",5).attr("markerUnits","userSpaceOnUse").attr("markerWidth",12).attr("markerHeight",12).attr("orient","auto").append("path").attr("d","M 0 0 L 10 5 L 0 10 z")},"insertArrowHead"),tEe=o(function(t){t.append("defs").append("marker").attr("id","arrowend").attr("refX",1).attr("refY",5).attr("markerUnits","userSpaceOnUse").attr("markerWidth",12).attr("markerHeight",12).attr("orient","auto").append("path").attr("d","M 10 0 L 0 5 L 10 10 z")},"insertArrowEnd"),rEe=o(function(t){t.append("defs").append("marker").attr("id","filled-head").attr("refX",18).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L14,7 L9,1 Z")},"insertArrowFilledHead"),nEe=o(function(t){t.append("defs").append("marker").attr("id","sequencenumber").attr("refX",15).attr("refY",15).attr("markerWidth",60).attr("markerHeight",40).attr("orient","auto").append("circle").attr("cx",15).attr("cy",15).attr("r",6)},"insertDynamicNumber"),iEe=o(function(t){let r=t.append("defs").append("marker").attr("id","crosshead").attr("markerWidth",15).attr("markerHeight",8).attr("orient","auto").attr("refX",16).attr("refY",4);r.append("path").attr("fill","black").attr("stroke","#000000").style("stroke-dasharray","0, 0").attr("stroke-width","1px").attr("d","M 9,2 V 6 L16,4 Z"),r.append("path").attr("fill","none").attr("stroke","#000000").style("stroke-dasharray","0, 0").attr("stroke-width","1px").attr("d","M 0,1 L 6,7 M 6,1 L 0,7")},"insertArrowCrossHead"),aEe=o((t,e)=>({fontFamily:t[e+"FontFamily"],fontSize:t[e+"FontSize"],fontWeight:t[e+"FontWeight"]}),"getC4ShapeFont"),_u=function(){function t(i,a,s,l,u,h,f){let d=a.append("text").attr("x",s+u/2).attr("y",l+h/2+5).style("text-anchor","middle").text(i);n(d,f)}o(t,"byText");function e(i,a,s,l,u,h,f,d){let{fontSize:p,fontFamily:m,fontWeight:g}=d,y=i.split(qe.lineBreakRegex);for(let v=0;v{"use strict";sEe=typeof global=="object"&&global&&global.Object===Object&&global,s5=sEe});var oEe,lEe,oi,Bo=M(()=>{"use strict";L_();oEe=typeof self=="object"&&self&&self.Object===Object&&self,lEe=s5||oEe||Function("return this")(),oi=lEe});var cEe,ia,Cd=M(()=>{"use strict";Bo();cEe=oi.Symbol,ia=cEe});function fEe(t){var e=uEe.call(t,cv),r=t[cv];try{t[cv]=void 0;var n=!0}catch{}var i=hEe.call(t);return n&&(e?t[cv]=r:delete t[cv]),i}var MY,uEe,hEe,cv,IY,OY=M(()=>{"use strict";Cd();MY=Object.prototype,uEe=MY.hasOwnProperty,hEe=MY.toString,cv=ia?ia.toStringTag:void 0;o(fEe,"getRawTag");IY=fEe});function mEe(t){return pEe.call(t)}var dEe,pEe,PY,BY=M(()=>{"use strict";dEe=Object.prototype,pEe=dEe.toString;o(mEe,"objectToString");PY=mEe});function vEe(t){return t==null?t===void 0?yEe:gEe:FY&&FY in Object(t)?IY(t):PY(t)}var gEe,yEe,FY,ga,Lu=M(()=>{"use strict";Cd();OY();BY();gEe="[object Null]",yEe="[object Undefined]",FY=ia?ia.toStringTag:void 0;o(vEe,"baseGetTag");ga=vEe});function xEe(t){var e=typeof t;return t!=null&&(e=="object"||e=="function")}var xn,io=M(()=>{"use strict";o(xEe,"isObject");xn=xEe});function EEe(t){if(!xn(t))return!1;var e=ga(t);return e==wEe||e==TEe||e==bEe||e==kEe}var bEe,wEe,TEe,kEe,_i,uv=M(()=>{"use strict";Lu();io();bEe="[object AsyncFunction]",wEe="[object Function]",TEe="[object GeneratorFunction]",kEe="[object Proxy]";o(EEe,"isFunction");_i=EEe});var SEe,o5,zY=M(()=>{"use strict";Bo();SEe=oi["__core-js_shared__"],o5=SEe});function CEe(t){return!!GY&&GY in t}var GY,$Y,VY=M(()=>{"use strict";zY();GY=function(){var t=/[^.]+$/.exec(o5&&o5.keys&&o5.keys.IE_PROTO||"");return t?"Symbol(src)_1."+t:""}();o(CEe,"isMasked");$Y=CEe});function LEe(t){if(t!=null){try{return _Ee.call(t)}catch{}try{return t+""}catch{}}return""}var AEe,_Ee,Du,D_=M(()=>{"use strict";AEe=Function.prototype,_Ee=AEe.toString;o(LEe,"toSource");Du=LEe});function BEe(t){if(!xn(t)||$Y(t))return!1;var e=_i(t)?PEe:NEe;return e.test(Du(t))}var DEe,NEe,REe,MEe,IEe,OEe,PEe,UY,HY=M(()=>{"use strict";uv();VY();io();D_();DEe=/[\\^$.*+?()[\]{}|]/g,NEe=/^\[object .+?Constructor\]$/,REe=Function.prototype,MEe=Object.prototype,IEe=REe.toString,OEe=MEe.hasOwnProperty,PEe=RegExp("^"+IEe.call(OEe).replace(DEe,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");o(BEe,"baseIsNative");UY=BEe});function FEe(t,e){return t?.[e]}var WY,YY=M(()=>{"use strict";o(FEe,"getValue");WY=FEe});function zEe(t,e){var r=WY(t,e);return UY(r)?r:void 0}var As,Oh=M(()=>{"use strict";HY();YY();o(zEe,"getNative");As=zEe});var GEe,Nu,hv=M(()=>{"use strict";Oh();GEe=As(Object,"create"),Nu=GEe});function $Ee(){this.__data__=Nu?Nu(null):{},this.size=0}var qY,XY=M(()=>{"use strict";hv();o($Ee,"hashClear");qY=$Ee});function VEe(t){var e=this.has(t)&&delete this.__data__[t];return this.size-=e?1:0,e}var jY,KY=M(()=>{"use strict";o(VEe,"hashDelete");jY=VEe});function YEe(t){var e=this.__data__;if(Nu){var r=e[t];return r===UEe?void 0:r}return WEe.call(e,t)?e[t]:void 0}var UEe,HEe,WEe,QY,ZY=M(()=>{"use strict";hv();UEe="__lodash_hash_undefined__",HEe=Object.prototype,WEe=HEe.hasOwnProperty;o(YEe,"hashGet");QY=YEe});function jEe(t){var e=this.__data__;return Nu?e[t]!==void 0:XEe.call(e,t)}var qEe,XEe,JY,eq=M(()=>{"use strict";hv();qEe=Object.prototype,XEe=qEe.hasOwnProperty;o(jEe,"hashHas");JY=jEe});function QEe(t,e){var r=this.__data__;return this.size+=this.has(t)?0:1,r[t]=Nu&&e===void 0?KEe:e,this}var KEe,tq,rq=M(()=>{"use strict";hv();KEe="__lodash_hash_undefined__";o(QEe,"hashSet");tq=QEe});function Zp(t){var e=-1,r=t==null?0:t.length;for(this.clear();++e{"use strict";XY();KY();ZY();eq();rq();o(Zp,"Hash");Zp.prototype.clear=qY;Zp.prototype.delete=jY;Zp.prototype.get=QY;Zp.prototype.has=JY;Zp.prototype.set=tq;N_=Zp});function ZEe(){this.__data__=[],this.size=0}var iq,aq=M(()=>{"use strict";o(ZEe,"listCacheClear");iq=ZEe});function JEe(t,e){return t===e||t!==t&&e!==e}var Fo,Ad=M(()=>{"use strict";o(JEe,"eq");Fo=JEe});function e6e(t,e){for(var r=t.length;r--;)if(Fo(t[r][0],e))return r;return-1}var Ph,fv=M(()=>{"use strict";Ad();o(e6e,"assocIndexOf");Ph=e6e});function n6e(t){var e=this.__data__,r=Ph(e,t);if(r<0)return!1;var n=e.length-1;return r==n?e.pop():r6e.call(e,r,1),--this.size,!0}var t6e,r6e,sq,oq=M(()=>{"use strict";fv();t6e=Array.prototype,r6e=t6e.splice;o(n6e,"listCacheDelete");sq=n6e});function i6e(t){var e=this.__data__,r=Ph(e,t);return r<0?void 0:e[r][1]}var lq,cq=M(()=>{"use strict";fv();o(i6e,"listCacheGet");lq=i6e});function a6e(t){return Ph(this.__data__,t)>-1}var uq,hq=M(()=>{"use strict";fv();o(a6e,"listCacheHas");uq=a6e});function s6e(t,e){var r=this.__data__,n=Ph(r,t);return n<0?(++this.size,r.push([t,e])):r[n][1]=e,this}var fq,dq=M(()=>{"use strict";fv();o(s6e,"listCacheSet");fq=s6e});function Jp(t){var e=-1,r=t==null?0:t.length;for(this.clear();++e{"use strict";aq();oq();cq();hq();dq();o(Jp,"ListCache");Jp.prototype.clear=iq;Jp.prototype.delete=sq;Jp.prototype.get=lq;Jp.prototype.has=uq;Jp.prototype.set=fq;Bh=Jp});var o6e,Fh,l5=M(()=>{"use strict";Oh();Bo();o6e=As(oi,"Map"),Fh=o6e});function l6e(){this.size=0,this.__data__={hash:new N_,map:new(Fh||Bh),string:new N_}}var pq,mq=M(()=>{"use strict";nq();dv();l5();o(l6e,"mapCacheClear");pq=l6e});function c6e(t){var e=typeof t;return e=="string"||e=="number"||e=="symbol"||e=="boolean"?t!=="__proto__":t===null}var gq,yq=M(()=>{"use strict";o(c6e,"isKeyable");gq=c6e});function u6e(t,e){var r=t.__data__;return gq(e)?r[typeof e=="string"?"string":"hash"]:r.map}var zh,pv=M(()=>{"use strict";yq();o(u6e,"getMapData");zh=u6e});function h6e(t){var e=zh(this,t).delete(t);return this.size-=e?1:0,e}var vq,xq=M(()=>{"use strict";pv();o(h6e,"mapCacheDelete");vq=h6e});function f6e(t){return zh(this,t).get(t)}var bq,wq=M(()=>{"use strict";pv();o(f6e,"mapCacheGet");bq=f6e});function d6e(t){return zh(this,t).has(t)}var Tq,kq=M(()=>{"use strict";pv();o(d6e,"mapCacheHas");Tq=d6e});function p6e(t,e){var r=zh(this,t),n=r.size;return r.set(t,e),this.size+=r.size==n?0:1,this}var Eq,Sq=M(()=>{"use strict";pv();o(p6e,"mapCacheSet");Eq=p6e});function em(t){var e=-1,r=t==null?0:t.length;for(this.clear();++e{"use strict";mq();xq();wq();kq();Sq();o(em,"MapCache");em.prototype.clear=pq;em.prototype.delete=vq;em.prototype.get=bq;em.prototype.has=Tq;em.prototype.set=Eq;_d=em});function R_(t,e){if(typeof t!="function"||e!=null&&typeof e!="function")throw new TypeError(m6e);var r=o(function(){var n=arguments,i=e?e.apply(this,n):n[0],a=r.cache;if(a.has(i))return a.get(i);var s=t.apply(this,n);return r.cache=a.set(i,s)||a,s},"memoized");return r.cache=new(R_.Cache||_d),r}var m6e,tm,M_=M(()=>{"use strict";c5();m6e="Expected a function";o(R_,"memoize");R_.Cache=_d;tm=R_});function g6e(){this.__data__=new Bh,this.size=0}var Cq,Aq=M(()=>{"use strict";dv();o(g6e,"stackClear");Cq=g6e});function y6e(t){var e=this.__data__,r=e.delete(t);return this.size=e.size,r}var _q,Lq=M(()=>{"use strict";o(y6e,"stackDelete");_q=y6e});function v6e(t){return this.__data__.get(t)}var Dq,Nq=M(()=>{"use strict";o(v6e,"stackGet");Dq=v6e});function x6e(t){return this.__data__.has(t)}var Rq,Mq=M(()=>{"use strict";o(x6e,"stackHas");Rq=x6e});function w6e(t,e){var r=this.__data__;if(r instanceof Bh){var n=r.__data__;if(!Fh||n.length{"use strict";dv();l5();c5();b6e=200;o(w6e,"stackSet");Iq=w6e});function rm(t){var e=this.__data__=new Bh(t);this.size=e.size}var bc,mv=M(()=>{"use strict";dv();Aq();Lq();Nq();Mq();Oq();o(rm,"Stack");rm.prototype.clear=Cq;rm.prototype.delete=_q;rm.prototype.get=Dq;rm.prototype.has=Rq;rm.prototype.set=Iq;bc=rm});var T6e,nm,I_=M(()=>{"use strict";Oh();T6e=function(){try{var t=As(Object,"defineProperty");return t({},"",{}),t}catch{}}(),nm=T6e});function k6e(t,e,r){e=="__proto__"&&nm?nm(t,e,{configurable:!0,enumerable:!0,value:r,writable:!0}):t[e]=r}var wc,im=M(()=>{"use strict";I_();o(k6e,"baseAssignValue");wc=k6e});function E6e(t,e,r){(r!==void 0&&!Fo(t[e],r)||r===void 0&&!(e in t))&&wc(t,e,r)}var gv,O_=M(()=>{"use strict";im();Ad();o(E6e,"assignMergeValue");gv=E6e});function S6e(t){return function(e,r,n){for(var i=-1,a=Object(e),s=n(e),l=s.length;l--;){var u=s[t?l:++i];if(r(a[u],u,a)===!1)break}return e}}var Pq,Bq=M(()=>{"use strict";o(S6e,"createBaseFor");Pq=S6e});var C6e,am,u5=M(()=>{"use strict";Bq();C6e=Pq(),am=C6e});function _6e(t,e){if(e)return t.slice();var r=t.length,n=Gq?Gq(r):new t.constructor(r);return t.copy(n),n}var $q,Fq,A6e,zq,Gq,h5,P_=M(()=>{"use strict";Bo();$q=typeof exports=="object"&&exports&&!exports.nodeType&&exports,Fq=$q&&typeof module=="object"&&module&&!module.nodeType&&module,A6e=Fq&&Fq.exports===$q,zq=A6e?oi.Buffer:void 0,Gq=zq?zq.allocUnsafe:void 0;o(_6e,"cloneBuffer");h5=_6e});var L6e,sm,B_=M(()=>{"use strict";Bo();L6e=oi.Uint8Array,sm=L6e});function D6e(t){var e=new t.constructor(t.byteLength);return new sm(e).set(new sm(t)),e}var om,f5=M(()=>{"use strict";B_();o(D6e,"cloneArrayBuffer");om=D6e});function N6e(t,e){var r=e?om(t.buffer):t.buffer;return new t.constructor(r,t.byteOffset,t.length)}var d5,F_=M(()=>{"use strict";f5();o(N6e,"cloneTypedArray");d5=N6e});function R6e(t,e){var r=-1,n=t.length;for(e||(e=Array(n));++r{"use strict";o(R6e,"copyArray");p5=R6e});var Vq,M6e,Uq,Hq=M(()=>{"use strict";io();Vq=Object.create,M6e=function(){function t(){}return o(t,"object"),function(e){if(!xn(e))return{};if(Vq)return Vq(e);t.prototype=e;var r=new t;return t.prototype=void 0,r}}(),Uq=M6e});function I6e(t,e){return function(r){return t(e(r))}}var m5,G_=M(()=>{"use strict";o(I6e,"overArg");m5=I6e});var O6e,lm,g5=M(()=>{"use strict";G_();O6e=m5(Object.getPrototypeOf,Object),lm=O6e});function B6e(t){var e=t&&t.constructor,r=typeof e=="function"&&e.prototype||P6e;return t===r}var P6e,Tc,cm=M(()=>{"use strict";P6e=Object.prototype;o(B6e,"isPrototype");Tc=B6e});function F6e(t){return typeof t.constructor=="function"&&!Tc(t)?Uq(lm(t)):{}}var y5,$_=M(()=>{"use strict";Hq();g5();cm();o(F6e,"initCloneObject");y5=F6e});function z6e(t){return t!=null&&typeof t=="object"}var ei,zo=M(()=>{"use strict";o(z6e,"isObjectLike");ei=z6e});function $6e(t){return ei(t)&&ga(t)==G6e}var G6e,V_,Wq=M(()=>{"use strict";Lu();zo();G6e="[object Arguments]";o($6e,"baseIsArguments");V_=$6e});var Yq,V6e,U6e,H6e,Ml,um=M(()=>{"use strict";Wq();zo();Yq=Object.prototype,V6e=Yq.hasOwnProperty,U6e=Yq.propertyIsEnumerable,H6e=V_(function(){return arguments}())?V_:function(t){return ei(t)&&V6e.call(t,"callee")&&!U6e.call(t,"callee")},Ml=H6e});var W6e,Dt,Hn=M(()=>{"use strict";W6e=Array.isArray,Dt=W6e});function q6e(t){return typeof t=="number"&&t>-1&&t%1==0&&t<=Y6e}var Y6e,hm,v5=M(()=>{"use strict";Y6e=9007199254740991;o(q6e,"isLength");hm=q6e});function X6e(t){return t!=null&&hm(t.length)&&!_i(t)}var li,Go=M(()=>{"use strict";uv();v5();o(X6e,"isArrayLike");li=X6e});function j6e(t){return ei(t)&&li(t)}var Ld,x5=M(()=>{"use strict";Go();zo();o(j6e,"isArrayLikeObject");Ld=j6e});function K6e(){return!1}var qq,Xq=M(()=>{"use strict";o(K6e,"stubFalse");qq=K6e});var Qq,jq,Q6e,Kq,Z6e,J6e,Il,fm=M(()=>{"use strict";Bo();Xq();Qq=typeof exports=="object"&&exports&&!exports.nodeType&&exports,jq=Qq&&typeof module=="object"&&module&&!module.nodeType&&module,Q6e=jq&&jq.exports===Qq,Kq=Q6e?oi.Buffer:void 0,Z6e=Kq?Kq.isBuffer:void 0,J6e=Z6e||qq,Il=J6e});function aSe(t){if(!ei(t)||ga(t)!=eSe)return!1;var e=lm(t);if(e===null)return!0;var r=nSe.call(e,"constructor")&&e.constructor;return typeof r=="function"&&r instanceof r&&Zq.call(r)==iSe}var eSe,tSe,rSe,Zq,nSe,iSe,Jq,eX=M(()=>{"use strict";Lu();g5();zo();eSe="[object Object]",tSe=Function.prototype,rSe=Object.prototype,Zq=tSe.toString,nSe=rSe.hasOwnProperty,iSe=Zq.call(Object);o(aSe,"isPlainObject");Jq=aSe});function DSe(t){return ei(t)&&hm(t.length)&&!!zn[ga(t)]}var sSe,oSe,lSe,cSe,uSe,hSe,fSe,dSe,pSe,mSe,gSe,ySe,vSe,xSe,bSe,wSe,TSe,kSe,ESe,SSe,CSe,ASe,_Se,LSe,zn,tX,rX=M(()=>{"use strict";Lu();v5();zo();sSe="[object Arguments]",oSe="[object Array]",lSe="[object Boolean]",cSe="[object Date]",uSe="[object Error]",hSe="[object Function]",fSe="[object Map]",dSe="[object Number]",pSe="[object Object]",mSe="[object RegExp]",gSe="[object Set]",ySe="[object String]",vSe="[object WeakMap]",xSe="[object ArrayBuffer]",bSe="[object DataView]",wSe="[object Float32Array]",TSe="[object Float64Array]",kSe="[object Int8Array]",ESe="[object Int16Array]",SSe="[object Int32Array]",CSe="[object Uint8Array]",ASe="[object Uint8ClampedArray]",_Se="[object Uint16Array]",LSe="[object Uint32Array]",zn={};zn[wSe]=zn[TSe]=zn[kSe]=zn[ESe]=zn[SSe]=zn[CSe]=zn[ASe]=zn[_Se]=zn[LSe]=!0;zn[sSe]=zn[oSe]=zn[xSe]=zn[lSe]=zn[bSe]=zn[cSe]=zn[uSe]=zn[hSe]=zn[fSe]=zn[dSe]=zn[pSe]=zn[mSe]=zn[gSe]=zn[ySe]=zn[vSe]=!1;o(DSe,"baseIsTypedArray");tX=DSe});function NSe(t){return function(e){return t(e)}}var $o,Dd=M(()=>{"use strict";o(NSe,"baseUnary");$o=NSe});var nX,yv,RSe,U_,MSe,Vo,vv=M(()=>{"use strict";L_();nX=typeof exports=="object"&&exports&&!exports.nodeType&&exports,yv=nX&&typeof module=="object"&&module&&!module.nodeType&&module,RSe=yv&&yv.exports===nX,U_=RSe&&s5.process,MSe=function(){try{var t=yv&&yv.require&&yv.require("util").types;return t||U_&&U_.binding&&U_.binding("util")}catch{}}(),Vo=MSe});var iX,ISe,Gh,xv=M(()=>{"use strict";rX();Dd();vv();iX=Vo&&Vo.isTypedArray,ISe=iX?$o(iX):tX,Gh=ISe});function OSe(t,e){if(!(e==="constructor"&&typeof t[e]=="function")&&e!="__proto__")return t[e]}var bv,H_=M(()=>{"use strict";o(OSe,"safeGet");bv=OSe});function FSe(t,e,r){var n=t[e];(!(BSe.call(t,e)&&Fo(n,r))||r===void 0&&!(e in t))&&wc(t,e,r)}var PSe,BSe,kc,dm=M(()=>{"use strict";im();Ad();PSe=Object.prototype,BSe=PSe.hasOwnProperty;o(FSe,"assignValue");kc=FSe});function zSe(t,e,r,n){var i=!r;r||(r={});for(var a=-1,s=e.length;++a{"use strict";dm();im();o(zSe,"copyObject");Uo=zSe});function GSe(t,e){for(var r=-1,n=Array(t);++r{"use strict";o(GSe,"baseTimes");aX=GSe});function USe(t,e){var r=typeof t;return e=e??$Se,!!e&&(r=="number"||r!="symbol"&&VSe.test(t))&&t>-1&&t%1==0&&t{"use strict";$Se=9007199254740991,VSe=/^(?:0|[1-9]\d*)$/;o(USe,"isIndex");$h=USe});function YSe(t,e){var r=Dt(t),n=!r&&Ml(t),i=!r&&!n&&Il(t),a=!r&&!n&&!i&&Gh(t),s=r||n||i||a,l=s?aX(t.length,String):[],u=l.length;for(var h in t)(e||WSe.call(t,h))&&!(s&&(h=="length"||i&&(h=="offset"||h=="parent")||a&&(h=="buffer"||h=="byteLength"||h=="byteOffset")||$h(h,u)))&&l.push(h);return l}var HSe,WSe,b5,W_=M(()=>{"use strict";sX();um();Hn();fm();wv();xv();HSe=Object.prototype,WSe=HSe.hasOwnProperty;o(YSe,"arrayLikeKeys");b5=YSe});function qSe(t){var e=[];if(t!=null)for(var r in Object(t))e.push(r);return e}var oX,lX=M(()=>{"use strict";o(qSe,"nativeKeysIn");oX=qSe});function KSe(t){if(!xn(t))return oX(t);var e=Tc(t),r=[];for(var n in t)n=="constructor"&&(e||!jSe.call(t,n))||r.push(n);return r}var XSe,jSe,cX,uX=M(()=>{"use strict";io();cm();lX();XSe=Object.prototype,jSe=XSe.hasOwnProperty;o(KSe,"baseKeysIn");cX=KSe});function QSe(t){return li(t)?b5(t,!0):cX(t)}var _s,Vh=M(()=>{"use strict";W_();uX();Go();o(QSe,"keysIn");_s=QSe});function ZSe(t){return Uo(t,_s(t))}var hX,fX=M(()=>{"use strict";Nd();Vh();o(ZSe,"toPlainObject");hX=ZSe});function JSe(t,e,r,n,i,a,s){var l=bv(t,r),u=bv(e,r),h=s.get(u);if(h){gv(t,r,h);return}var f=a?a(l,u,r+"",t,e,s):void 0,d=f===void 0;if(d){var p=Dt(u),m=!p&&Il(u),g=!p&&!m&&Gh(u);f=u,p||m||g?Dt(l)?f=l:Ld(l)?f=p5(l):m?(d=!1,f=h5(u,!0)):g?(d=!1,f=d5(u,!0)):f=[]:Jq(u)||Ml(u)?(f=l,Ml(l)?f=hX(l):(!xn(l)||_i(l))&&(f=y5(u))):d=!1}d&&(s.set(u,f),i(f,u,n,a,s),s.delete(u)),gv(t,r,f)}var dX,pX=M(()=>{"use strict";O_();P_();F_();z_();$_();um();Hn();x5();fm();uv();io();eX();xv();H_();fX();o(JSe,"baseMergeDeep");dX=JSe});function mX(t,e,r,n,i){t!==e&&am(e,function(a,s){if(i||(i=new bc),xn(a))dX(t,e,s,r,mX,n,i);else{var l=n?n(bv(t,s),a,s+"",t,e,i):void 0;l===void 0&&(l=a),gv(t,s,l)}},_s)}var gX,yX=M(()=>{"use strict";mv();O_();u5();pX();io();Vh();H_();o(mX,"baseMerge");gX=mX});function eCe(t){return t}var aa,Ru=M(()=>{"use strict";o(eCe,"identity");aa=eCe});function tCe(t,e,r){switch(r.length){case 0:return t.call(e);case 1:return t.call(e,r[0]);case 2:return t.call(e,r[0],r[1]);case 3:return t.call(e,r[0],r[1],r[2])}return t.apply(e,r)}var vX,xX=M(()=>{"use strict";o(tCe,"apply");vX=tCe});function rCe(t,e,r){return e=bX(e===void 0?t.length-1:e,0),function(){for(var n=arguments,i=-1,a=bX(n.length-e,0),s=Array(a);++i{"use strict";xX();bX=Math.max;o(rCe,"overRest");w5=rCe});function nCe(t){return function(){return t}}var Ls,q_=M(()=>{"use strict";o(nCe,"constant");Ls=nCe});var iCe,wX,TX=M(()=>{"use strict";q_();I_();Ru();iCe=nm?function(t,e){return nm(t,"toString",{configurable:!0,enumerable:!1,value:Ls(e),writable:!0})}:aa,wX=iCe});function lCe(t){var e=0,r=0;return function(){var n=oCe(),i=sCe-(n-r);if(r=n,i>0){if(++e>=aCe)return arguments[0]}else e=0;return t.apply(void 0,arguments)}}var aCe,sCe,oCe,kX,EX=M(()=>{"use strict";aCe=800,sCe=16,oCe=Date.now;o(lCe,"shortOut");kX=lCe});var cCe,T5,X_=M(()=>{"use strict";TX();EX();cCe=kX(wX),T5=cCe});function uCe(t,e){return T5(w5(t,e,aa),t+"")}var Ec,pm=M(()=>{"use strict";Ru();Y_();X_();o(uCe,"baseRest");Ec=uCe});function hCe(t,e,r){if(!xn(r))return!1;var n=typeof e;return(n=="number"?li(r)&&$h(e,r.length):n=="string"&&e in r)?Fo(r[e],t):!1}var ao,Rd=M(()=>{"use strict";Ad();Go();wv();io();o(hCe,"isIterateeCall");ao=hCe});function fCe(t){return Ec(function(e,r){var n=-1,i=r.length,a=i>1?r[i-1]:void 0,s=i>2?r[2]:void 0;for(a=t.length>3&&typeof a=="function"?(i--,a):void 0,s&&ao(r[0],r[1],s)&&(a=i<3?void 0:a,i=1),e=Object(e);++n{"use strict";pm();Rd();o(fCe,"createAssigner");k5=fCe});var dCe,Uh,K_=M(()=>{"use strict";yX();j_();dCe=k5(function(t,e,r){gX(t,e,r)}),Uh=dCe});function J_(t,e){if(!t)return e;let r=`curve${t.charAt(0).toUpperCase()+t.slice(1)}`;return pCe[r]??e}function vCe(t,e){let r=t.trim();if(r)return e.securityLevel!=="loose"?(0,AX.sanitizeUrl)(r):r}function DX(t,e){return!t||!e?0:Math.sqrt(Math.pow(e.x-t.x,2)+Math.pow(e.y-t.y,2))}function bCe(t){let e,r=0;t.forEach(i=>{r+=DX(i,e),e=i});let n=r/2;return e9(t,n)}function wCe(t){return t.length===1?t[0]:bCe(t)}function kCe(t,e,r){let n=structuredClone(r);Y.info("our points",n),e!=="start_left"&&e!=="start_right"&&n.reverse();let i=25+t,a=e9(n,i),s=10+t*.5,l=Math.atan2(n[0].y-a.y,n[0].x-a.x),u={x:0,y:0};return e==="start_left"?(u.x=Math.sin(l+Math.PI)*s+(n[0].x+a.x)/2,u.y=-Math.cos(l+Math.PI)*s+(n[0].y+a.y)/2):e==="end_right"?(u.x=Math.sin(l-Math.PI)*s+(n[0].x+a.x)/2-5,u.y=-Math.cos(l-Math.PI)*s+(n[0].y+a.y)/2-5):e==="end_left"?(u.x=Math.sin(l)*s+(n[0].x+a.x)/2-5,u.y=-Math.cos(l)*s+(n[0].y+a.y)/2-5):(u.x=Math.sin(l)*s+(n[0].x+a.x)/2,u.y=-Math.cos(l)*s+(n[0].y+a.y)/2),u}function t9(t){let e="",r="";for(let n of t)n!==void 0&&(n.startsWith("color:")||n.startsWith("text-align:")?r=r+n+";":e=e+n+";");return{style:e,labelStyle:r}}function ECe(t){let e="",r="0123456789abcdef",n=r.length;for(let i=0;i{"use strict";AX=Ji(Qp(),1);pr();fr();nC();ut();Zf();gp();M_();K_();Qb();Z_="\u200B",pCe={curveBasis:Po,curveBasisClosed:Y3,curveBasisOpen:q3,curveBumpX:l_,curveBumpY:c_,curveBundle:u_,curveCardinalClosed:f_,curveCardinalOpen:p_,curveCardinal:h_,curveCatmullRomClosed:y_,curveCatmullRomOpen:v_,curveCatmullRom:g_,curveLinear:Xp,curveLinearClosed:Z3,curveMonotoneX:b_,curveMonotoneY:w_,curveNatural:e5,curveStep:r5,curveStepAfter:k_,curveStepBefore:T_},mCe=/\s*(?:(\w+)(?=:):|(\w+))\s*(?:(\w+)|((?:(?!}%{2}).|\r?\n)*))?\s*(?:}%{2})?/gi,gCe=o(function(t,e){let r=_X(t,/(?:init\b)|(?:initialize\b)/),n={};if(Array.isArray(r)){let s=r.map(l=>l.args);xp(s),n=Vn(n,[...s])}else n=r.args;if(!n)return;let i=mp(t,e),a="config";return n[a]!==void 0&&(i==="flowchart-v2"&&(i="flowchart"),n[i]=n[a],delete n[a]),n},"detectInit"),_X=o(function(t,e=null){try{let r=new RegExp(`[%]{2}(?![{]${mCe.source})(?=[}][%]{2}).* +`,"ig");t=t.trim().replace(r,"").replace(/'/gm,'"'),Y.debug(`Detecting diagram directive${e!==null?" type:"+e:""} based on the text:${t}`);let n,i=[];for(;(n=Kf.exec(t))!==null;)if(n.index===Kf.lastIndex&&Kf.lastIndex++,n&&!e||e&&n[1]?.match(e)||e&&n[2]?.match(e)){let a=n[1]?n[1]:n[2],s=n[3]?n[3].trim():n[4]?JSON.parse(n[4].trim()):null;i.push({type:a,args:s})}return i.length===0?{type:t,args:null}:i.length===1?i[0]:i}catch(r){return Y.error(`ERROR: ${r.message} - Unable to parse directive type: '${e}' based on the text: '${t}'`),{type:void 0,args:null}}},"detectDirective"),LX=o(function(t){return t.replace(Kf,"")},"removeDirectives"),yCe=o(function(t,e){for(let[r,n]of e.entries())if(n.match(t))return r;return-1},"isSubstringInArray");o(J_,"interpolateToCurve");o(vCe,"formatUrl");xCe=o((t,...e)=>{let r=t.split("."),n=r.length-1,i=r[n],a=window;for(let s=0;s{let r=Math.pow(10,e);return Math.round(t*r)/r},"roundNumber"),e9=o((t,e)=>{let r,n=e;for(let i of t){if(r){let a=DX(i,r);if(a=1)return{x:i.x,y:i.y};if(s>0&&s<1)return{x:SX((1-s)*r.x+s*i.x,5),y:SX((1-s)*r.y+s*i.y,5)}}}r=i}throw new Error("Could not find a suitable point for the given distance")},"calculatePoint"),TCe=o((t,e,r)=>{Y.info(`our points ${JSON.stringify(e)}`),e[0]!==r&&(e=e.reverse());let i=e9(e,25),a=t?10:5,s=Math.atan2(e[0].y-i.y,e[0].x-i.x),l={x:0,y:0};return l.x=Math.sin(s)*a+(e[0].x+i.x)/2,l.y=-Math.cos(s)*a+(e[0].y+i.y)/2,l},"calcCardinalityPosition");o(kCe,"calcTerminalLabelPosition");o(t9,"getStylesFromArray");CX=0,r9=o(()=>(CX++,"id-"+Math.random().toString(36).substr(2,12)+"-"+CX),"generateId");o(ECe,"makeRandomHex");n9=o(t=>ECe(t.length),"random"),SCe=o(function(){return{x:0,y:0,fill:void 0,anchor:"start",style:"#666",width:100,height:100,textMargin:0,rx:0,ry:0,valign:void 0,text:""}},"getTextObj"),CCe=o(function(t,e){let r=e.text.replace(qe.lineBreakRegex," "),[,n]=Ho(e.fontSize),i=t.append("text");i.attr("x",e.x),i.attr("y",e.y),i.style("text-anchor",e.anchor),i.style("font-family",e.fontFamily),i.style("font-size",n),i.style("font-weight",e.fontWeight),i.attr("fill",e.fill),e.class!==void 0&&i.attr("class",e.class);let a=i.append("tspan");return a.attr("x",e.x+e.textMargin*2),a.attr("fill",e.fill),a.text(r),i},"drawSimpleText"),i9=tm((t,e,r)=>{if(!t||(r=Object.assign({fontSize:12,fontWeight:400,fontFamily:"Arial",joinWith:"
"},r),qe.lineBreakRegex.test(t)))return t;let n=t.split(" ").filter(Boolean),i=[],a="";return n.forEach((s,l)=>{let u=so(`${s} `,r),h=so(a,r);if(u>e){let{hyphenatedStrings:p,remainingWord:m}=ACe(s,e,"-",r);i.push(a,...p),a=m}else h+u>=e?(i.push(a),a=s):a=[a,s].filter(Boolean).join(" ");l+1===n.length&&i.push(a)}),i.filter(s=>s!=="").join(r.joinWith)},(t,e,r)=>`${t}${e}${r.fontSize}${r.fontWeight}${r.fontFamily}${r.joinWith}`),ACe=tm((t,e,r="-",n)=>{n=Object.assign({fontSize:12,fontWeight:400,fontFamily:"Arial",margin:0},n);let i=[...t],a=[],s="";return i.forEach((l,u)=>{let h=`${s}${l}`;if(so(h,n)>=e){let d=u+1,p=i.length===d,m=`${h}${r}`;a.push(p?h:m),s=""}else s=h}),{hyphenatedStrings:a,remainingWord:s}},(t,e,r="-",n)=>`${t}${e}${r}${n.fontSize}${n.fontWeight}${n.fontFamily}`);o(S5,"calculateTextHeight");o(so,"calculateTextWidth");a9=tm((t,e)=>{let{fontSize:r=12,fontFamily:n="Arial",fontWeight:i=400}=e;if(!t)return{width:0,height:0};let[,a]=Ho(r),s=["sans-serif",n],l=t.split(qe.lineBreakRegex),u=[],h=Ve("body");if(!h.remove)return{width:0,height:0,lineHeight:0};let f=h.append("svg");for(let p of s){let m=0,g={width:0,height:0,lineHeight:0};for(let y of l){let v=SCe();v.text=y||Z_;let x=CCe(f,v).style("font-size",a).style("font-weight",i).style("font-family",p),b=(x._groups||x)[0][0].getBBox();if(b.width===0&&b.height===0)throw new Error("svg element not in render tree");g.width=Math.round(Math.max(g.width,b.width)),m=Math.round(b.height),g.height+=m,g.lineHeight=Math.round(Math.max(g.lineHeight,m))}u.push(g)}f.remove();let d=isNaN(u[1].height)||isNaN(u[1].width)||isNaN(u[1].lineHeight)||u[0].height>u[1].height&&u[0].width>u[1].width&&u[0].lineHeight>u[1].lineHeight?0:1;return u[d]},(t,e)=>`${t}${e.fontSize}${e.fontWeight}${e.fontFamily}`),Q_=class{constructor(e=!1,r){this.count=0;this.count=r?r.length:0,this.next=e?()=>this.count++:()=>Date.now()}static{o(this,"InitIDGenerator")}},_Ce=o(function(t){return E5=E5||document.createElement("div"),t=escape(t).replace(/%26/g,"&").replace(/%23/g,"#").replace(/%3B/g,";"),E5.innerHTML=t,unescape(E5.textContent)},"entityDecode");o(s9,"isDetailedError");LCe=o((t,e,r,n)=>{if(!n)return;let i=t.node()?.getBBox();i&&t.append("text").text(n).attr("text-anchor","middle").attr("x",i.x+i.width/2).attr("y",-r).attr("class",e)},"insertTitle"),Ho=o(t=>{if(typeof t=="number")return[t,t+"px"];let e=parseInt(t??"",10);return Number.isNaN(e)?[void 0,void 0]:t===String(e)?[e,t+"px"]:[e,t]},"parseFontSize");o(Ds,"cleanAndMerge");Ut={assignWithDepth:Vn,wrapLabel:i9,calculateTextHeight:S5,calculateTextWidth:so,calculateTextDimensions:a9,cleanAndMerge:Ds,detectInit:gCe,detectDirective:_X,isSubstringInArray:yCe,interpolateToCurve:J_,calcLabelPosition:wCe,calcCardinalityPosition:TCe,calcTerminalLabelPosition:kCe,formatUrl:vCe,getStylesFromArray:t9,generateId:r9,random:n9,runFunc:xCe,entityDecode:_Ce,insertTitle:LCe,parseFontSize:Ho,InitIDGenerator:Q_},NX=o(function(t){let e=t;return e=e.replace(/style.*:\S*#.*;/g,function(r){return r.substring(0,r.length-1)}),e=e.replace(/classDef.*:\S*#.*;/g,function(r){return r.substring(0,r.length-1)}),e=e.replace(/#\w+;/g,function(r){let n=r.substring(1,r.length-1);return/^\+?\d+$/.test(n)?"\uFB02\xB0\xB0"+n+"\xB6\xDF":"\uFB02\xB0"+n+"\xB6\xDF"}),e},"encodeEntities"),Ma=o(function(t){return t.replace(/fl°°/g,"&#").replace(/fl°/g,"&").replace(/¶ß/g,";")},"decodeEntities"),C5=o((t,e,{counter:r=0,prefix:n,suffix:i})=>`${n?`${n}_`:""}${t}_${e}_${r}${i?`_${i}`:""}`,"getEdgeId");o(Gn,"handleUndefinedAttr")});function Ol(t,e,r,n,i){if(!e[t].width)if(r)e[t].text=i9(e[t].text,i,n),e[t].textLines=e[t].text.split(qe.lineBreakRegex).length,e[t].width=i,e[t].height=S5(e[t].text,n);else{let a=e[t].text.split(qe.lineBreakRegex);e[t].textLines=a.length;let s=0;e[t].height=0,e[t].width=0;for(let l of a)e[t].width=Math.max(so(l,n),e[t].width),s=S5(l,n),e[t].height=e[t].height+s}}function PX(t,e,r,n,i){let a=new D5(i);a.data.widthLimit=r.data.widthLimit/Math.min(o9,n.length);for(let[s,l]of n.entries()){let u=0;l.image={width:0,height:0,Y:0},l.sprite&&(l.image.width=48,l.image.height=48,l.image.Y=u,u=l.image.Y+l.image.height);let h=l.wrap&&Gt.wrap,f=A5(Gt);if(f.fontSize=f.fontSize+2,f.fontWeight="bold",Ol("label",l,h,f,a.data.widthLimit),l.label.Y=u+8,u=l.label.Y+l.label.height,l.type&&l.type.text!==""){l.type.text="["+l.type.text+"]";let g=A5(Gt);Ol("type",l,h,g,a.data.widthLimit),l.type.Y=u+5,u=l.type.Y+l.type.height}if(l.descr&&l.descr.text!==""){let g=A5(Gt);g.fontSize=g.fontSize-2,Ol("descr",l,h,g,a.data.widthLimit),l.descr.Y=u+20,u=l.descr.Y+l.descr.height}if(s==0||s%o9===0){let g=r.data.startx+Gt.diagramMarginX,y=r.data.stopy+Gt.diagramMarginY+u;a.setData(g,g,y,y)}else{let g=a.data.stopx!==a.data.startx?a.data.stopx+Gt.diagramMarginX:a.data.startx,y=a.data.starty;a.setData(g,g,y,y)}a.name=l.alias;let d=i.db.getC4ShapeArray(l.alias),p=i.db.getC4ShapeKeys(l.alias);p.length>0&&OX(a,t,d,p),e=l.alias;let m=i.db.getBoundarys(e);m.length>0&&PX(t,e,a,m,i),l.alias!=="global"&&IX(t,l,a),r.data.stopy=Math.max(a.data.stopy+Gt.c4ShapeMargin,r.data.stopy),r.data.stopx=Math.max(a.data.stopx+Gt.c4ShapeMargin,r.data.stopx),_5=Math.max(_5,r.data.stopx),L5=Math.max(L5,r.data.stopy)}}var _5,L5,MX,o9,Gt,D5,l9,Tv,A5,DCe,IX,OX,Ns,RX,NCe,RCe,MCe,c9,BX=M(()=>{"use strict";pr();RY();ut();US();fr();u7();Vt();gp();hr();ai();_5=0,L5=0,MX=4,o9=2;ey.yy=Ty;Gt={},D5=class{static{o(this,"Bounds")}constructor(e){this.name="",this.data={},this.data.startx=void 0,this.data.stopx=void 0,this.data.starty=void 0,this.data.stopy=void 0,this.data.widthLimit=void 0,this.nextData={},this.nextData.startx=void 0,this.nextData.stopx=void 0,this.nextData.starty=void 0,this.nextData.stopy=void 0,this.nextData.cnt=0,l9(e.db.getConfig())}setData(e,r,n,i){this.nextData.startx=this.data.startx=e,this.nextData.stopx=this.data.stopx=r,this.nextData.starty=this.data.starty=n,this.nextData.stopy=this.data.stopy=i}updateVal(e,r,n,i){e[r]===void 0?e[r]=n:e[r]=i(n,e[r])}insert(e){this.nextData.cnt=this.nextData.cnt+1;let r=this.nextData.startx===this.nextData.stopx?this.nextData.stopx+e.margin:this.nextData.stopx+e.margin*2,n=r+e.width,i=this.nextData.starty+e.margin*2,a=i+e.height;(r>=this.data.widthLimit||n>=this.data.widthLimit||this.nextData.cnt>MX)&&(r=this.nextData.startx+e.margin+Gt.nextLinePaddingX,i=this.nextData.stopy+e.margin*2,this.nextData.stopx=n=r+e.width,this.nextData.starty=this.nextData.stopy,this.nextData.stopy=a=i+e.height,this.nextData.cnt=1),e.x=r,e.y=i,this.updateVal(this.data,"startx",r,Math.min),this.updateVal(this.data,"starty",i,Math.min),this.updateVal(this.data,"stopx",n,Math.max),this.updateVal(this.data,"stopy",a,Math.max),this.updateVal(this.nextData,"startx",r,Math.min),this.updateVal(this.nextData,"starty",i,Math.min),this.updateVal(this.nextData,"stopx",n,Math.max),this.updateVal(this.nextData,"stopy",a,Math.max)}init(e){this.name="",this.data={startx:void 0,stopx:void 0,starty:void 0,stopy:void 0,widthLimit:void 0},this.nextData={startx:void 0,stopx:void 0,starty:void 0,stopy:void 0,cnt:0},l9(e.db.getConfig())}bumpLastMargin(e){this.data.stopx+=e,this.data.stopy+=e}},l9=o(function(t){Vn(Gt,t),t.fontFamily&&(Gt.personFontFamily=Gt.systemFontFamily=Gt.messageFontFamily=t.fontFamily),t.fontSize&&(Gt.personFontSize=Gt.systemFontSize=Gt.messageFontSize=t.fontSize),t.fontWeight&&(Gt.personFontWeight=Gt.systemFontWeight=Gt.messageFontWeight=t.fontWeight)},"setConf"),Tv=o((t,e)=>({fontFamily:t[e+"FontFamily"],fontSize:t[e+"FontSize"],fontWeight:t[e+"FontWeight"]}),"c4ShapeFont"),A5=o(t=>({fontFamily:t.boundaryFontFamily,fontSize:t.boundaryFontSize,fontWeight:t.boundaryFontWeight}),"boundaryFont"),DCe=o(t=>({fontFamily:t.messageFontFamily,fontSize:t.messageFontSize,fontWeight:t.messageFontWeight}),"messageFont");o(Ol,"calcC4ShapeTextWH");IX=o(function(t,e,r){e.x=r.data.startx,e.y=r.data.starty,e.width=r.data.stopx-r.data.startx,e.height=r.data.stopy-r.data.starty,e.label.y=Gt.c4ShapeMargin-35;let n=e.wrap&&Gt.wrap,i=A5(Gt);i.fontSize=i.fontSize+2,i.fontWeight="bold";let a=so(e.label.text,i);Ol("label",e,n,i,a),Rl.drawBoundary(t,e,Gt)},"drawBoundary"),OX=o(function(t,e,r,n){let i=0;for(let a of n){i=0;let s=r[a],l=Tv(Gt,s.typeC4Shape.text);switch(l.fontSize=l.fontSize-2,s.typeC4Shape.width=so("\xAB"+s.typeC4Shape.text+"\xBB",l),s.typeC4Shape.height=l.fontSize+2,s.typeC4Shape.Y=Gt.c4ShapePadding,i=s.typeC4Shape.Y+s.typeC4Shape.height-4,s.image={width:0,height:0,Y:0},s.typeC4Shape.text){case"person":case"external_person":s.image.width=48,s.image.height=48,s.image.Y=i,i=s.image.Y+s.image.height;break}s.sprite&&(s.image.width=48,s.image.height=48,s.image.Y=i,i=s.image.Y+s.image.height);let u=s.wrap&&Gt.wrap,h=Gt.width-Gt.c4ShapePadding*2,f=Tv(Gt,s.typeC4Shape.text);if(f.fontSize=f.fontSize+2,f.fontWeight="bold",Ol("label",s,u,f,h),s.label.Y=i+8,i=s.label.Y+s.label.height,s.type&&s.type.text!==""){s.type.text="["+s.type.text+"]";let m=Tv(Gt,s.typeC4Shape.text);Ol("type",s,u,m,h),s.type.Y=i+5,i=s.type.Y+s.type.height}else if(s.techn&&s.techn.text!==""){s.techn.text="["+s.techn.text+"]";let m=Tv(Gt,s.techn.text);Ol("techn",s,u,m,h),s.techn.Y=i+5,i=s.techn.Y+s.techn.height}let d=i,p=s.label.width;if(s.descr&&s.descr.text!==""){let m=Tv(Gt,s.typeC4Shape.text);Ol("descr",s,u,m,h),s.descr.Y=i+20,i=s.descr.Y+s.descr.height,p=Math.max(s.label.width,s.descr.width),d=i-s.descr.textLines*5}p=p+Gt.c4ShapePadding,s.width=Math.max(s.width||Gt.width,p,Gt.width),s.height=Math.max(s.height||Gt.height,d,Gt.height),s.margin=s.margin||Gt.c4ShapeMargin,t.insert(s),Rl.drawC4Shape(e,s,Gt)}t.bumpLastMargin(Gt.c4ShapeMargin)},"drawC4ShapeArray"),Ns=class{static{o(this,"Point")}constructor(e,r){this.x=e,this.y=r}},RX=o(function(t,e){let r=t.x,n=t.y,i=e.x,a=e.y,s=r+t.width/2,l=n+t.height/2,u=Math.abs(r-i),h=Math.abs(n-a),f=h/u,d=t.height/t.width,p=null;return n==a&&ri?p=new Ns(r,l):r==i&&na&&(p=new Ns(s,n)),r>i&&n=f?p=new Ns(r,l+f*t.width/2):p=new Ns(s-u/h*t.height/2,n+t.height):r=f?p=new Ns(r+t.width,l+f*t.width/2):p=new Ns(s+u/h*t.height/2,n+t.height):ra?d>=f?p=new Ns(r+t.width,l-f*t.width/2):p=new Ns(s+t.height/2*u/h,n):r>i&&n>a&&(d>=f?p=new Ns(r,l-t.width/2*f):p=new Ns(s-t.height/2*u/h,n)),p},"getIntersectPoint"),NCe=o(function(t,e){let r={x:0,y:0};r.x=e.x+e.width/2,r.y=e.y+e.height/2;let n=RX(t,r);r.x=t.x+t.width/2,r.y=t.y+t.height/2;let i=RX(e,r);return{startPoint:n,endPoint:i}},"getIntersectPoints"),RCe=o(function(t,e,r,n){let i=0;for(let a of e){i=i+1;let s=a.wrap&&Gt.wrap,l=DCe(Gt);n.db.getC4Type()==="C4Dynamic"&&(a.label.text=i+": "+a.label.text);let h=so(a.label.text,l);Ol("label",a,s,l,h),a.techn&&a.techn.text!==""&&(h=so(a.techn.text,l),Ol("techn",a,s,l,h)),a.descr&&a.descr.text!==""&&(h=so(a.descr.text,l),Ol("descr",a,s,l,h));let f=r(a.from),d=r(a.to),p=NCe(f,d);a.startPoint=p.startPoint,a.endPoint=p.endPoint}Rl.drawRels(t,e,Gt)},"drawRels");o(PX,"drawInsideBoundary");MCe=o(function(t,e,r,n){Gt=pe().c4;let i=pe().securityLevel,a;i==="sandbox"&&(a=Ve("#i"+e));let s=i==="sandbox"?Ve(a.nodes()[0].contentDocument.body):Ve("body"),l=n.db;n.db.setWrap(Gt.wrap),MX=l.getC4ShapeInRow(),o9=l.getC4BoundaryInRow(),Y.debug(`C:${JSON.stringify(Gt,null,2)}`);let u=i==="sandbox"?s.select(`[id="${e}"]`):Ve(`[id="${e}"]`);Rl.insertComputerIcon(u),Rl.insertDatabaseIcon(u),Rl.insertClockIcon(u);let h=new D5(n);h.setData(Gt.diagramMarginX,Gt.diagramMarginX,Gt.diagramMarginY,Gt.diagramMarginY),h.data.widthLimit=screen.availWidth,_5=Gt.diagramMarginX,L5=Gt.diagramMarginY;let f=n.db.getTitle(),d=n.db.getBoundarys("");PX(u,"",h,d,n),Rl.insertArrowHead(u),Rl.insertArrowEnd(u),Rl.insertArrowCrossHead(u),Rl.insertArrowFilledHead(u),RCe(u,n.db.getRels(),n.db.getC4Shape,n),h.data.stopx=_5,h.data.stopy=L5;let p=h.data,g=p.stopy-p.starty+2*Gt.diagramMarginY,v=p.stopx-p.startx+2*Gt.diagramMarginX;f&&u.append("text").text(f).attr("x",(p.stopx-p.startx)/2-4*Gt.diagramMarginX).attr("y",p.starty+Gt.diagramMarginY),Zr(u,g,v,Gt.useMaxWidth);let x=f?60:0;u.attr("viewBox",p.startx-Gt.diagramMarginX+" -"+(Gt.diagramMarginY+x)+" "+v+" "+(g+x)),Y.debug("models:",p)},"draw"),c9={drawPersonOrSystemArray:OX,drawBoundary:IX,setConf:l9,draw:MCe}});var ICe,FX,zX=M(()=>{"use strict";ICe=o(t=>`.person { + stroke: ${t.personBorder}; + fill: ${t.personBkg}; + } +`,"getStyles"),FX=ICe});var GX={};vr(GX,{diagram:()=>OCe});var OCe,$X=M(()=>{"use strict";US();u7();BX();zX();OCe={parser:oz,db:Ty,renderer:c9,styles:FX,init:o(({c4:t,wrap:e})=>{c9.setConf(t),Ty.setWrap(e)},"init")}});function f9(){return{async:!1,breaks:!1,extensions:null,gfm:!0,hooks:null,pedantic:!1,renderer:null,silent:!1,tokenizer:null,walkTokens:null}}function jX(t){Id=t}function oo(t,e){if(e){if(KX.test(t))return t.replace(zCe,HX)}else if(QX.test(t))return t.replace(GCe,HX);return t}function UCe(t){return t.replace(VCe,(e,r)=>(r=r.toLowerCase(),r==="colon"?":":r.charAt(0)==="#"?r.charAt(1)==="x"?String.fromCharCode(parseInt(r.substring(2),16)):String.fromCharCode(+r.substring(1)):""))}function fn(t,e){let r=typeof t=="string"?t:t.source;e=e||"";let n={replace:o((i,a)=>{let s=typeof a=="string"?a:a.source;return s=s.replace(HCe,"$1"),r=r.replace(i,s),n},"replace"),getRegex:o(()=>new RegExp(r,e),"getRegex")};return n}function WX(t){try{t=encodeURI(t).replace(/%25/g,"%")}catch{return null}return t}function YX(t,e){let r=t.replace(/\|/g,(a,s,l)=>{let u=!1,h=s;for(;--h>=0&&l[h]==="\\";)u=!u;return u?"|":" |"}),n=r.split(/ \|/),i=0;if(n[0].trim()||n.shift(),n.length>0&&!n[n.length-1].trim()&&n.pop(),e)if(n.length>e)n.splice(e);else for(;n.length{let a=i.match(/^\s+/);if(a===null)return i;let[s]=a;return s.length>=n.length?i.slice(n.length):i}).join(` +`)}function en(t,e){return Md.parse(t,e)}var Id,KX,zCe,QX,GCe,$Ce,HX,VCe,HCe,Sv,gm,qCe,XCe,jCe,Av,KCe,ZX,JX,d9,QCe,p9,ZCe,JCe,M5,m9,e7e,ej,t7e,g9,XX,r7e,n7e,tj,i7e,rj,a7e,_v,s7e,o7e,l7e,c7e,u7e,h7e,f7e,d7e,p7e,R5,m7e,nj,ij,g7e,y9,y7e,u9,v7e,N5,Ev,Mu,ym,Cv,Iu,mm,h9,Md,PEt,BEt,FEt,zEt,GEt,$Et,VEt,aj=M(()=>{"use strict";o(f9,"_getDefaults");Id=f9();o(jX,"changeDefaults");KX=/[&<>"']/,zCe=new RegExp(KX.source,"g"),QX=/[<>"']|&(?!(#\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\w+);)/,GCe=new RegExp(QX.source,"g"),$Ce={"&":"&","<":"<",">":">",'"':""","'":"'"},HX=o(t=>$Ce[t],"getEscapeReplacement");o(oo,"escape$1");VCe=/&(#(?:\d+)|(?:#x[0-9A-Fa-f]+)|(?:\w+));?/ig;o(UCe,"unescape");HCe=/(^|[^\[])\^/g;o(fn,"edit");o(WX,"cleanUrl");Sv={exec:o(()=>null,"exec")};o(YX,"splitCells");o(kv,"rtrim");o(WCe,"findClosingBracket");o(qX,"outputLink");o(YCe,"indentCodeCompensation");gm=class{static{o(this,"_Tokenizer")}options;rules;lexer;constructor(e){this.options=e||Id}space(e){let r=this.rules.block.newline.exec(e);if(r&&r[0].length>0)return{type:"space",raw:r[0]}}code(e){let r=this.rules.block.code.exec(e);if(r){let n=r[0].replace(/^ {1,4}/gm,"");return{type:"code",raw:r[0],codeBlockStyle:"indented",text:this.options.pedantic?n:kv(n,` +`)}}}fences(e){let r=this.rules.block.fences.exec(e);if(r){let n=r[0],i=YCe(n,r[3]||"");return{type:"code",raw:n,lang:r[2]?r[2].trim().replace(this.rules.inline.anyPunctuation,"$1"):r[2],text:i}}}heading(e){let r=this.rules.block.heading.exec(e);if(r){let n=r[2].trim();if(/#$/.test(n)){let i=kv(n,"#");(this.options.pedantic||!i||/ $/.test(i))&&(n=i.trim())}return{type:"heading",raw:r[0],depth:r[1].length,text:n,tokens:this.lexer.inline(n)}}}hr(e){let r=this.rules.block.hr.exec(e);if(r)return{type:"hr",raw:kv(r[0],` +`)}}blockquote(e){let r=this.rules.block.blockquote.exec(e);if(r){let n=kv(r[0],` +`).split(` +`),i="",a="",s=[];for(;n.length>0;){let l=!1,u=[],h;for(h=0;h/.test(n[h]))u.push(n[h]),l=!0;else if(!l)u.push(n[h]);else break;n=n.slice(h);let f=u.join(` +`),d=f.replace(/\n {0,3}((?:=+|-+) *)(?=\n|$)/g,` + $1`).replace(/^ {0,3}>[ \t]?/gm,"");i=i?`${i} +${f}`:f,a=a?`${a} +${d}`:d;let p=this.lexer.state.top;if(this.lexer.state.top=!0,this.lexer.blockTokens(d,s,!0),this.lexer.state.top=p,n.length===0)break;let m=s[s.length-1];if(m?.type==="code")break;if(m?.type==="blockquote"){let g=m,y=g.raw+` +`+n.join(` +`),v=this.blockquote(y);s[s.length-1]=v,i=i.substring(0,i.length-g.raw.length)+v.raw,a=a.substring(0,a.length-g.text.length)+v.text;break}else if(m?.type==="list"){let g=m,y=g.raw+` +`+n.join(` +`),v=this.list(y);s[s.length-1]=v,i=i.substring(0,i.length-m.raw.length)+v.raw,a=a.substring(0,a.length-g.raw.length)+v.raw,n=y.substring(s[s.length-1].raw.length).split(` +`);continue}}return{type:"blockquote",raw:i,tokens:s,text:a}}}list(e){let r=this.rules.block.list.exec(e);if(r){let n=r[1].trim(),i=n.length>1,a={type:"list",raw:"",ordered:i,start:i?+n.slice(0,-1):"",loose:!1,items:[]};n=i?`\\d{1,9}\\${n.slice(-1)}`:`\\${n}`,this.options.pedantic&&(n=i?n:"[*+-]");let s=new RegExp(`^( {0,3}${n})((?:[ ][^\\n]*)?(?:\\n|$))`),l=!1;for(;e;){let u=!1,h="",f="";if(!(r=s.exec(e))||this.rules.block.hr.test(e))break;h=r[0],e=e.substring(h.length);let d=r[2].split(` +`,1)[0].replace(/^\t+/,x=>" ".repeat(3*x.length)),p=e.split(` +`,1)[0],m=!d.trim(),g=0;if(this.options.pedantic?(g=2,f=d.trimStart()):m?g=r[1].length+1:(g=r[2].search(/[^ ]/),g=g>4?1:g,f=d.slice(g),g+=r[1].length),m&&/^ *$/.test(p)&&(h+=p+` +`,e=e.substring(p.length+1),u=!0),!u){let x=new RegExp(`^ {0,${Math.min(3,g-1)}}(?:[*+-]|\\d{1,9}[.)])((?:[ ][^\\n]*)?(?:\\n|$))`),b=new RegExp(`^ {0,${Math.min(3,g-1)}}((?:- *){3,}|(?:_ *){3,}|(?:\\* *){3,})(?:\\n+|$)`),w=new RegExp(`^ {0,${Math.min(3,g-1)}}(?:\`\`\`|~~~)`),_=new RegExp(`^ {0,${Math.min(3,g-1)}}#`);for(;e;){let T=e.split(` +`,1)[0];if(p=T,this.options.pedantic&&(p=p.replace(/^ {1,4}(?=( {4})*[^ ])/g," ")),w.test(p)||_.test(p)||x.test(p)||b.test(e))break;if(p.search(/[^ ]/)>=g||!p.trim())f+=` +`+p.slice(g);else{if(m||d.search(/[^ ]/)>=4||w.test(d)||_.test(d)||b.test(d))break;f+=` +`+p}!m&&!p.trim()&&(m=!0),h+=T+` +`,e=e.substring(T.length+1),d=p.slice(g)}}a.loose||(l?a.loose=!0:/\n *\n *$/.test(h)&&(l=!0));let y=null,v;this.options.gfm&&(y=/^\[[ xX]\] /.exec(f),y&&(v=y[0]!=="[ ] ",f=f.replace(/^\[[ xX]\] +/,""))),a.items.push({type:"list_item",raw:h,task:!!y,checked:v,loose:!1,text:f,tokens:[]}),a.raw+=h}a.items[a.items.length-1].raw=a.items[a.items.length-1].raw.trimEnd(),a.items[a.items.length-1].text=a.items[a.items.length-1].text.trimEnd(),a.raw=a.raw.trimEnd();for(let u=0;ud.type==="space"),f=h.length>0&&h.some(d=>/\n.*\n/.test(d.raw));a.loose=f}if(a.loose)for(let u=0;u$/,"$1").replace(this.rules.inline.anyPunctuation,"$1"):"",a=r[3]?r[3].substring(1,r[3].length-1).replace(this.rules.inline.anyPunctuation,"$1"):r[3];return{type:"def",tag:n,raw:r[0],href:i,title:a}}}table(e){let r=this.rules.block.table.exec(e);if(!r||!/[:|]/.test(r[2]))return;let n=YX(r[1]),i=r[2].replace(/^\||\| *$/g,"").split("|"),a=r[3]&&r[3].trim()?r[3].replace(/\n[ \t]*$/,"").split(` +`):[],s={type:"table",raw:r[0],header:[],align:[],rows:[]};if(n.length===i.length){for(let l of i)/^ *-+: *$/.test(l)?s.align.push("right"):/^ *:-+: *$/.test(l)?s.align.push("center"):/^ *:-+ *$/.test(l)?s.align.push("left"):s.align.push(null);for(let l=0;l({text:u,tokens:this.lexer.inline(u),header:!1,align:s.align[h]})));return s}}lheading(e){let r=this.rules.block.lheading.exec(e);if(r)return{type:"heading",raw:r[0],depth:r[2].charAt(0)==="="?1:2,text:r[1],tokens:this.lexer.inline(r[1])}}paragraph(e){let r=this.rules.block.paragraph.exec(e);if(r){let n=r[1].charAt(r[1].length-1)===` +`?r[1].slice(0,-1):r[1];return{type:"paragraph",raw:r[0],text:n,tokens:this.lexer.inline(n)}}}text(e){let r=this.rules.block.text.exec(e);if(r)return{type:"text",raw:r[0],text:r[0],tokens:this.lexer.inline(r[0])}}escape(e){let r=this.rules.inline.escape.exec(e);if(r)return{type:"escape",raw:r[0],text:oo(r[1])}}tag(e){let r=this.rules.inline.tag.exec(e);if(r)return!this.lexer.state.inLink&&/^/i.test(r[0])&&(this.lexer.state.inLink=!1),!this.lexer.state.inRawBlock&&/^<(pre|code|kbd|script)(\s|>)/i.test(r[0])?this.lexer.state.inRawBlock=!0:this.lexer.state.inRawBlock&&/^<\/(pre|code|kbd|script)(\s|>)/i.test(r[0])&&(this.lexer.state.inRawBlock=!1),{type:"html",raw:r[0],inLink:this.lexer.state.inLink,inRawBlock:this.lexer.state.inRawBlock,block:!1,text:r[0]}}link(e){let r=this.rules.inline.link.exec(e);if(r){let n=r[2].trim();if(!this.options.pedantic&&/^$/.test(n))return;let s=kv(n.slice(0,-1),"\\");if((n.length-s.length)%2===0)return}else{let s=WCe(r[2],"()");if(s>-1){let u=(r[0].indexOf("!")===0?5:4)+r[1].length+s;r[2]=r[2].substring(0,s),r[0]=r[0].substring(0,u).trim(),r[3]=""}}let i=r[2],a="";if(this.options.pedantic){let s=/^([^'"]*[^\s])\s+(['"])(.*)\2/.exec(i);s&&(i=s[1],a=s[3])}else a=r[3]?r[3].slice(1,-1):"";return i=i.trim(),/^$/.test(n)?i=i.slice(1):i=i.slice(1,-1)),qX(r,{href:i&&i.replace(this.rules.inline.anyPunctuation,"$1"),title:a&&a.replace(this.rules.inline.anyPunctuation,"$1")},r[0],this.lexer)}}reflink(e,r){let n;if((n=this.rules.inline.reflink.exec(e))||(n=this.rules.inline.nolink.exec(e))){let i=(n[2]||n[1]).replace(/\s+/g," "),a=r[i.toLowerCase()];if(!a){let s=n[0].charAt(0);return{type:"text",raw:s,text:s}}return qX(n,a,n[0],this.lexer)}}emStrong(e,r,n=""){let i=this.rules.inline.emStrongLDelim.exec(e);if(!i||i[3]&&n.match(/[\p{L}\p{N}]/u))return;if(!(i[1]||i[2]||"")||!n||this.rules.inline.punctuation.exec(n)){let s=[...i[0]].length-1,l,u,h=s,f=0,d=i[0][0]==="*"?this.rules.inline.emStrongRDelimAst:this.rules.inline.emStrongRDelimUnd;for(d.lastIndex=0,r=r.slice(-1*e.length+s);(i=d.exec(r))!=null;){if(l=i[1]||i[2]||i[3]||i[4]||i[5]||i[6],!l)continue;if(u=[...l].length,i[3]||i[4]){h+=u;continue}else if((i[5]||i[6])&&s%3&&!((s+u)%3)){f+=u;continue}if(h-=u,h>0)continue;u=Math.min(u,u+h+f);let p=[...i[0]][0].length,m=e.slice(0,s+i.index+p+u);if(Math.min(s,u)%2){let y=m.slice(1,-1);return{type:"em",raw:m,text:y,tokens:this.lexer.inlineTokens(y)}}let g=m.slice(2,-2);return{type:"strong",raw:m,text:g,tokens:this.lexer.inlineTokens(g)}}}}codespan(e){let r=this.rules.inline.code.exec(e);if(r){let n=r[2].replace(/\n/g," "),i=/[^ ]/.test(n),a=/^ /.test(n)&&/ $/.test(n);return i&&a&&(n=n.substring(1,n.length-1)),n=oo(n,!0),{type:"codespan",raw:r[0],text:n}}}br(e){let r=this.rules.inline.br.exec(e);if(r)return{type:"br",raw:r[0]}}del(e){let r=this.rules.inline.del.exec(e);if(r)return{type:"del",raw:r[0],text:r[2],tokens:this.lexer.inlineTokens(r[2])}}autolink(e){let r=this.rules.inline.autolink.exec(e);if(r){let n,i;return r[2]==="@"?(n=oo(r[1]),i="mailto:"+n):(n=oo(r[1]),i=n),{type:"link",raw:r[0],text:n,href:i,tokens:[{type:"text",raw:n,text:n}]}}}url(e){let r;if(r=this.rules.inline.url.exec(e)){let n,i;if(r[2]==="@")n=oo(r[0]),i="mailto:"+n;else{let a;do a=r[0],r[0]=this.rules.inline._backpedal.exec(r[0])?.[0]??"";while(a!==r[0]);n=oo(r[0]),r[1]==="www."?i="http://"+r[0]:i=r[0]}return{type:"link",raw:r[0],text:n,href:i,tokens:[{type:"text",raw:n,text:n}]}}}inlineText(e){let r=this.rules.inline.text.exec(e);if(r){let n;return this.lexer.state.inRawBlock?n=r[0]:n=oo(r[0]),{type:"text",raw:r[0],text:n}}}},qCe=/^(?: *(?:\n|$))+/,XCe=/^( {4}[^\n]+(?:\n(?: *(?:\n|$))*)?)+/,jCe=/^ {0,3}(`{3,}(?=[^`\n]*(?:\n|$))|~{3,})([^\n]*)(?:\n|$)(?:|([\s\S]*?)(?:\n|$))(?: {0,3}\1[~`]* *(?=\n|$)|$)/,Av=/^ {0,3}((?:-[\t ]*){3,}|(?:_[ \t]*){3,}|(?:\*[ \t]*){3,})(?:\n+|$)/,KCe=/^ {0,3}(#{1,6})(?=\s|$)(.*)(?:\n+|$)/,ZX=/(?:[*+-]|\d{1,9}[.)])/,JX=fn(/^(?!bull |blockCode|fences|blockquote|heading|html)((?:.|\n(?!\s*?\n|bull |blockCode|fences|blockquote|heading|html))+?)\n {0,3}(=+|-+) *(?:\n+|$)/).replace(/bull/g,ZX).replace(/blockCode/g,/ {4}/).replace(/fences/g,/ {0,3}(?:`{3,}|~{3,})/).replace(/blockquote/g,/ {0,3}>/).replace(/heading/g,/ {0,3}#{1,6}/).replace(/html/g,/ {0,3}<[^\n>]+>\n/).getRegex(),d9=/^([^\n]+(?:\n(?!hr|heading|lheading|blockquote|fences|list|html|table| +\n)[^\n]+)*)/,QCe=/^[^\n]+/,p9=/(?!\s*\])(?:\\.|[^\[\]\\])+/,ZCe=fn(/^ {0,3}\[(label)\]: *(?:\n *)?([^<\s][^\s]*|<.*?>)(?:(?: +(?:\n *)?| *\n *)(title))? *(?:\n+|$)/).replace("label",p9).replace("title",/(?:"(?:\\"?|[^"\\])*"|'[^'\n]*(?:\n[^'\n]+)*\n?'|\([^()]*\))/).getRegex(),JCe=fn(/^( {0,3}bull)([ \t][^\n]+?)?(?:\n|$)/).replace(/bull/g,ZX).getRegex(),M5="address|article|aside|base|basefont|blockquote|body|caption|center|col|colgroup|dd|details|dialog|dir|div|dl|dt|fieldset|figcaption|figure|footer|form|frame|frameset|h[1-6]|head|header|hr|html|iframe|legend|li|link|main|menu|menuitem|meta|nav|noframes|ol|optgroup|option|p|param|search|section|summary|table|tbody|td|tfoot|th|thead|title|tr|track|ul",m9=/|$))/,e7e=fn("^ {0,3}(?:<(script|pre|style|textarea)[\\s>][\\s\\S]*?(?:[^\\n]*\\n+|$)|comment[^\\n]*(\\n+|$)|<\\?[\\s\\S]*?(?:\\?>\\n*|$)|\\n*|$)|\\n*|$)|)[\\s\\S]*?(?:(?:\\n *)+\\n|$)|<(?!script|pre|style|textarea)([a-z][\\w-]*)(?:attribute)*? */?>(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:(?:\\n *)+\\n|$)|(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:(?:\\n *)+\\n|$))","i").replace("comment",m9).replace("tag",M5).replace("attribute",/ +[a-zA-Z:_][\w.:-]*(?: *= *"[^"\n]*"| *= *'[^'\n]*'| *= *[^\s"'=<>`]+)?/).getRegex(),ej=fn(d9).replace("hr",Av).replace("heading"," {0,3}#{1,6}(?:\\s|$)").replace("|lheading","").replace("|table","").replace("blockquote"," {0,3}>").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)]) ").replace("html",")|<(?:script|pre|style|textarea|!--)").replace("tag",M5).getRegex(),t7e=fn(/^( {0,3}> ?(paragraph|[^\n]*)(?:\n|$))+/).replace("paragraph",ej).getRegex(),g9={blockquote:t7e,code:XCe,def:ZCe,fences:jCe,heading:KCe,hr:Av,html:e7e,lheading:JX,list:JCe,newline:qCe,paragraph:ej,table:Sv,text:QCe},XX=fn("^ *([^\\n ].*)\\n {0,3}((?:\\| *)?:?-+:? *(?:\\| *:?-+:? *)*(?:\\| *)?)(?:\\n((?:(?! *\\n|hr|heading|blockquote|code|fences|list|html).*(?:\\n|$))*)\\n*|$)").replace("hr",Av).replace("heading"," {0,3}#{1,6}(?:\\s|$)").replace("blockquote"," {0,3}>").replace("code"," {4}[^\\n]").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)]) ").replace("html",")|<(?:script|pre|style|textarea|!--)").replace("tag",M5).getRegex(),r7e={...g9,table:XX,paragraph:fn(d9).replace("hr",Av).replace("heading"," {0,3}#{1,6}(?:\\s|$)").replace("|lheading","").replace("table",XX).replace("blockquote"," {0,3}>").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)]) ").replace("html",")|<(?:script|pre|style|textarea|!--)").replace("tag",M5).getRegex()},n7e={...g9,html:fn(`^ *(?:comment *(?:\\n|\\s*$)|<(tag)[\\s\\S]+? *(?:\\n{2,}|\\s*$)|\\s]*)*?/?> *(?:\\n{2,}|\\s*$))`).replace("comment",m9).replace(/tag/g,"(?!(?:a|em|strong|small|s|cite|q|dfn|abbr|data|time|code|var|samp|kbd|sub|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo|span|br|wbr|ins|del|img)\\b)\\w+(?!:|[^\\w\\s@]*@)\\b").getRegex(),def:/^ *\[([^\]]+)\]: *]+)>?(?: +(["(][^\n]+[")]))? *(?:\n+|$)/,heading:/^(#{1,6})(.*)(?:\n+|$)/,fences:Sv,lheading:/^(.+?)\n {0,3}(=+|-+) *(?:\n+|$)/,paragraph:fn(d9).replace("hr",Av).replace("heading",` *#{1,6} *[^ +]`).replace("lheading",JX).replace("|table","").replace("blockquote"," {0,3}>").replace("|fences","").replace("|list","").replace("|html","").replace("|tag","").getRegex()},tj=/^\\([!"#$%&'()*+,\-./:;<=>?@\[\]\\^_`{|}~])/,i7e=/^(`+)([^`]|[^`][\s\S]*?[^`])\1(?!`)/,rj=/^( {2,}|\\)\n(?!\s*$)/,a7e=/^(`+|[^`])(?:(?= {2,}\n)|[\s\S]*?(?:(?=[\\]*?>/g,l7e=fn(/^(?:\*+(?:((?!\*)[punct])|[^\s*]))|^_+(?:((?!_)[punct])|([^\s_]))/,"u").replace(/punct/g,_v).getRegex(),c7e=fn("^[^_*]*?__[^_*]*?\\*[^_*]*?(?=__)|[^*]+(?=[^*])|(?!\\*)[punct](\\*+)(?=[\\s]|$)|[^punct\\s](\\*+)(?!\\*)(?=[punct\\s]|$)|(?!\\*)[punct\\s](\\*+)(?=[^punct\\s])|[\\s](\\*+)(?!\\*)(?=[punct])|(?!\\*)[punct](\\*+)(?!\\*)(?=[punct])|[^punct\\s](\\*+)(?=[^punct\\s])","gu").replace(/punct/g,_v).getRegex(),u7e=fn("^[^_*]*?\\*\\*[^_*]*?_[^_*]*?(?=\\*\\*)|[^_]+(?=[^_])|(?!_)[punct](_+)(?=[\\s]|$)|[^punct\\s](_+)(?!_)(?=[punct\\s]|$)|(?!_)[punct\\s](_+)(?=[^punct\\s])|[\\s](_+)(?!_)(?=[punct])|(?!_)[punct](_+)(?!_)(?=[punct])","gu").replace(/punct/g,_v).getRegex(),h7e=fn(/\\([punct])/,"gu").replace(/punct/g,_v).getRegex(),f7e=fn(/^<(scheme:[^\s\x00-\x1f<>]*|email)>/).replace("scheme",/[a-zA-Z][a-zA-Z0-9+.-]{1,31}/).replace("email",/[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+(@)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+(?![-_])/).getRegex(),d7e=fn(m9).replace("(?:-->|$)","-->").getRegex(),p7e=fn("^comment|^|^<[a-zA-Z][\\w-]*(?:attribute)*?\\s*/?>|^<\\?[\\s\\S]*?\\?>|^|^").replace("comment",d7e).replace("attribute",/\s+[a-zA-Z:_][\w.:-]*(?:\s*=\s*"[^"]*"|\s*=\s*'[^']*'|\s*=\s*[^\s"'=<>`]+)?/).getRegex(),R5=/(?:\[(?:\\.|[^\[\]\\])*\]|\\.|`[^`]*`|[^\[\]\\`])*?/,m7e=fn(/^!?\[(label)\]\(\s*(href)(?:\s+(title))?\s*\)/).replace("label",R5).replace("href",/<(?:\\.|[^\n<>\\])+>|[^\s\x00-\x1f]*/).replace("title",/"(?:\\"?|[^"\\])*"|'(?:\\'?|[^'\\])*'|\((?:\\\)?|[^)\\])*\)/).getRegex(),nj=fn(/^!?\[(label)\]\[(ref)\]/).replace("label",R5).replace("ref",p9).getRegex(),ij=fn(/^!?\[(ref)\](?:\[\])?/).replace("ref",p9).getRegex(),g7e=fn("reflink|nolink(?!\\()","g").replace("reflink",nj).replace("nolink",ij).getRegex(),y9={_backpedal:Sv,anyPunctuation:h7e,autolink:f7e,blockSkip:o7e,br:rj,code:i7e,del:Sv,emStrongLDelim:l7e,emStrongRDelimAst:c7e,emStrongRDelimUnd:u7e,escape:tj,link:m7e,nolink:ij,punctuation:s7e,reflink:nj,reflinkSearch:g7e,tag:p7e,text:a7e,url:Sv},y7e={...y9,link:fn(/^!?\[(label)\]\((.*?)\)/).replace("label",R5).getRegex(),reflink:fn(/^!?\[(label)\]\s*\[([^\]]*)\]/).replace("label",R5).getRegex()},u9={...y9,escape:fn(tj).replace("])","~|])").getRegex(),url:fn(/^((?:ftp|https?):\/\/|www\.)(?:[a-zA-Z0-9\-]+\.?)+[^\s<]*|^email/,"i").replace("email",/[A-Za-z0-9._+-]+(@)[a-zA-Z0-9-_]+(?:\.[a-zA-Z0-9-_]*[a-zA-Z0-9])+(?![-_])/).getRegex(),_backpedal:/(?:[^?!.,:;*_'"~()&]+|\([^)]*\)|&(?![a-zA-Z0-9]+;$)|[?!.,:;*_'"~)]+(?!$))+/,del:/^(~~?)(?=[^\s~])([\s\S]*?[^\s~])\1(?=[^~]|$)/,text:/^([`~]+|[^`~])(?:(?= {2,}\n)|(?=[a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-]+@)|[\s\S]*?(?:(?=[\\u+" ".repeat(h.length));let i,a,s;for(;e;)if(!(this.options.extensions&&this.options.extensions.block&&this.options.extensions.block.some(l=>(i=l.call({lexer:this},e,r))?(e=e.substring(i.raw.length),r.push(i),!0):!1))){if(i=this.tokenizer.space(e)){e=e.substring(i.raw.length),i.raw.length===1&&r.length>0?r[r.length-1].raw+=` +`:r.push(i);continue}if(i=this.tokenizer.code(e)){e=e.substring(i.raw.length),a=r[r.length-1],a&&(a.type==="paragraph"||a.type==="text")?(a.raw+=` +`+i.raw,a.text+=` +`+i.text,this.inlineQueue[this.inlineQueue.length-1].src=a.text):r.push(i);continue}if(i=this.tokenizer.fences(e)){e=e.substring(i.raw.length),r.push(i);continue}if(i=this.tokenizer.heading(e)){e=e.substring(i.raw.length),r.push(i);continue}if(i=this.tokenizer.hr(e)){e=e.substring(i.raw.length),r.push(i);continue}if(i=this.tokenizer.blockquote(e)){e=e.substring(i.raw.length),r.push(i);continue}if(i=this.tokenizer.list(e)){e=e.substring(i.raw.length),r.push(i);continue}if(i=this.tokenizer.html(e)){e=e.substring(i.raw.length),r.push(i);continue}if(i=this.tokenizer.def(e)){e=e.substring(i.raw.length),a=r[r.length-1],a&&(a.type==="paragraph"||a.type==="text")?(a.raw+=` +`+i.raw,a.text+=` +`+i.raw,this.inlineQueue[this.inlineQueue.length-1].src=a.text):this.tokens.links[i.tag]||(this.tokens.links[i.tag]={href:i.href,title:i.title});continue}if(i=this.tokenizer.table(e)){e=e.substring(i.raw.length),r.push(i);continue}if(i=this.tokenizer.lheading(e)){e=e.substring(i.raw.length),r.push(i);continue}if(s=e,this.options.extensions&&this.options.extensions.startBlock){let l=1/0,u=e.slice(1),h;this.options.extensions.startBlock.forEach(f=>{h=f.call({lexer:this},u),typeof h=="number"&&h>=0&&(l=Math.min(l,h))}),l<1/0&&l>=0&&(s=e.substring(0,l+1))}if(this.state.top&&(i=this.tokenizer.paragraph(s))){a=r[r.length-1],n&&a?.type==="paragraph"?(a.raw+=` +`+i.raw,a.text+=` +`+i.text,this.inlineQueue.pop(),this.inlineQueue[this.inlineQueue.length-1].src=a.text):r.push(i),n=s.length!==e.length,e=e.substring(i.raw.length);continue}if(i=this.tokenizer.text(e)){e=e.substring(i.raw.length),a=r[r.length-1],a&&a.type==="text"?(a.raw+=` +`+i.raw,a.text+=` +`+i.text,this.inlineQueue.pop(),this.inlineQueue[this.inlineQueue.length-1].src=a.text):r.push(i);continue}if(e){let l="Infinite loop on byte: "+e.charCodeAt(0);if(this.options.silent){console.error(l);break}else throw new Error(l)}}return this.state.top=!0,r}inline(e,r=[]){return this.inlineQueue.push({src:e,tokens:r}),r}inlineTokens(e,r=[]){let n,i,a,s=e,l,u,h;if(this.tokens.links){let f=Object.keys(this.tokens.links);if(f.length>0)for(;(l=this.tokenizer.rules.inline.reflinkSearch.exec(s))!=null;)f.includes(l[0].slice(l[0].lastIndexOf("[")+1,-1))&&(s=s.slice(0,l.index)+"["+"a".repeat(l[0].length-2)+"]"+s.slice(this.tokenizer.rules.inline.reflinkSearch.lastIndex))}for(;(l=this.tokenizer.rules.inline.blockSkip.exec(s))!=null;)s=s.slice(0,l.index)+"["+"a".repeat(l[0].length-2)+"]"+s.slice(this.tokenizer.rules.inline.blockSkip.lastIndex);for(;(l=this.tokenizer.rules.inline.anyPunctuation.exec(s))!=null;)s=s.slice(0,l.index)+"++"+s.slice(this.tokenizer.rules.inline.anyPunctuation.lastIndex);for(;e;)if(u||(h=""),u=!1,!(this.options.extensions&&this.options.extensions.inline&&this.options.extensions.inline.some(f=>(n=f.call({lexer:this},e,r))?(e=e.substring(n.raw.length),r.push(n),!0):!1))){if(n=this.tokenizer.escape(e)){e=e.substring(n.raw.length),r.push(n);continue}if(n=this.tokenizer.tag(e)){e=e.substring(n.raw.length),i=r[r.length-1],i&&n.type==="text"&&i.type==="text"?(i.raw+=n.raw,i.text+=n.text):r.push(n);continue}if(n=this.tokenizer.link(e)){e=e.substring(n.raw.length),r.push(n);continue}if(n=this.tokenizer.reflink(e,this.tokens.links)){e=e.substring(n.raw.length),i=r[r.length-1],i&&n.type==="text"&&i.type==="text"?(i.raw+=n.raw,i.text+=n.text):r.push(n);continue}if(n=this.tokenizer.emStrong(e,s,h)){e=e.substring(n.raw.length),r.push(n);continue}if(n=this.tokenizer.codespan(e)){e=e.substring(n.raw.length),r.push(n);continue}if(n=this.tokenizer.br(e)){e=e.substring(n.raw.length),r.push(n);continue}if(n=this.tokenizer.del(e)){e=e.substring(n.raw.length),r.push(n);continue}if(n=this.tokenizer.autolink(e)){e=e.substring(n.raw.length),r.push(n);continue}if(!this.state.inLink&&(n=this.tokenizer.url(e))){e=e.substring(n.raw.length),r.push(n);continue}if(a=e,this.options.extensions&&this.options.extensions.startInline){let f=1/0,d=e.slice(1),p;this.options.extensions.startInline.forEach(m=>{p=m.call({lexer:this},d),typeof p=="number"&&p>=0&&(f=Math.min(f,p))}),f<1/0&&f>=0&&(a=e.substring(0,f+1))}if(n=this.tokenizer.inlineText(a)){e=e.substring(n.raw.length),n.raw.slice(-1)!=="_"&&(h=n.raw.slice(-1)),u=!0,i=r[r.length-1],i&&i.type==="text"?(i.raw+=n.raw,i.text+=n.text):r.push(n);continue}if(e){let f="Infinite loop on byte: "+e.charCodeAt(0);if(this.options.silent){console.error(f);break}else throw new Error(f)}}return r}},ym=class{static{o(this,"_Renderer")}options;parser;constructor(e){this.options=e||Id}space(e){return""}code({text:e,lang:r,escaped:n}){let i=(r||"").match(/^\S*/)?.[0],a=e.replace(/\n$/,"")+` +`;return i?'
'+(n?a:oo(a,!0))+`
+`:"
"+(n?a:oo(a,!0))+`
+`}blockquote({tokens:e}){return`
+${this.parser.parse(e)}
+`}html({text:e}){return e}heading({tokens:e,depth:r}){return`${this.parser.parseInline(e)} +`}hr(e){return`
+`}list(e){let r=e.ordered,n=e.start,i="";for(let l=0;l +`+i+" +`}listitem(e){let r="";if(e.task){let n=this.checkbox({checked:!!e.checked});e.loose?e.tokens.length>0&&e.tokens[0].type==="paragraph"?(e.tokens[0].text=n+" "+e.tokens[0].text,e.tokens[0].tokens&&e.tokens[0].tokens.length>0&&e.tokens[0].tokens[0].type==="text"&&(e.tokens[0].tokens[0].text=n+" "+e.tokens[0].tokens[0].text)):e.tokens.unshift({type:"text",raw:n+" ",text:n+" "}):r+=n+" "}return r+=this.parser.parse(e.tokens,!!e.loose),`
  • ${r}
  • +`}checkbox({checked:e}){return"'}paragraph({tokens:e}){return`

    ${this.parser.parseInline(e)}

    +`}table(e){let r="",n="";for(let a=0;a${i}`),` + +`+r+` +`+i+`
    +`}tablerow({text:e}){return` +${e} +`}tablecell(e){let r=this.parser.parseInline(e.tokens),n=e.header?"th":"td";return(e.align?`<${n} align="${e.align}">`:`<${n}>`)+r+` +`}strong({tokens:e}){return`${this.parser.parseInline(e)}`}em({tokens:e}){return`${this.parser.parseInline(e)}`}codespan({text:e}){return`${e}`}br(e){return"
    "}del({tokens:e}){return`${this.parser.parseInline(e)}`}link({href:e,title:r,tokens:n}){let i=this.parser.parseInline(n),a=WX(e);if(a===null)return i;e=a;let s='
    ",s}image({href:e,title:r,text:n}){let i=WX(e);if(i===null)return n;e=i;let a=`${n}{let l=a[s].flat(1/0);n=n.concat(this.walkTokens(l,r))}):a.tokens&&(n=n.concat(this.walkTokens(a.tokens,r)))}}return n}use(...e){let r=this.defaults.extensions||{renderers:{},childTokens:{}};return e.forEach(n=>{let i={...n};if(i.async=this.defaults.async||i.async||!1,n.extensions&&(n.extensions.forEach(a=>{if(!a.name)throw new Error("extension name required");if("renderer"in a){let s=r.renderers[a.name];s?r.renderers[a.name]=function(...l){let u=a.renderer.apply(this,l);return u===!1&&(u=s.apply(this,l)),u}:r.renderers[a.name]=a.renderer}if("tokenizer"in a){if(!a.level||a.level!=="block"&&a.level!=="inline")throw new Error("extension level must be 'block' or 'inline'");let s=r[a.level];s?s.unshift(a.tokenizer):r[a.level]=[a.tokenizer],a.start&&(a.level==="block"?r.startBlock?r.startBlock.push(a.start):r.startBlock=[a.start]:a.level==="inline"&&(r.startInline?r.startInline.push(a.start):r.startInline=[a.start]))}"childTokens"in a&&a.childTokens&&(r.childTokens[a.name]=a.childTokens)}),i.extensions=r),n.renderer){let a=this.defaults.renderer||new ym(this.defaults);for(let s in n.renderer){if(!(s in a))throw new Error(`renderer '${s}' does not exist`);if(["options","parser"].includes(s))continue;let l=s,u=n.renderer[l];n.useNewRenderer||(u=this.#t(u,l,a));let h=a[l];a[l]=(...f)=>{let d=u.apply(a,f);return d===!1&&(d=h.apply(a,f)),d||""}}i.renderer=a}if(n.tokenizer){let a=this.defaults.tokenizer||new gm(this.defaults);for(let s in n.tokenizer){if(!(s in a))throw new Error(`tokenizer '${s}' does not exist`);if(["options","rules","lexer"].includes(s))continue;let l=s,u=n.tokenizer[l],h=a[l];a[l]=(...f)=>{let d=u.apply(a,f);return d===!1&&(d=h.apply(a,f)),d}}i.tokenizer=a}if(n.hooks){let a=this.defaults.hooks||new mm;for(let s in n.hooks){if(!(s in a))throw new Error(`hook '${s}' does not exist`);if(s==="options")continue;let l=s,u=n.hooks[l],h=a[l];mm.passThroughHooks.has(s)?a[l]=f=>{if(this.defaults.async)return Promise.resolve(u.call(a,f)).then(p=>h.call(a,p));let d=u.call(a,f);return h.call(a,d)}:a[l]=(...f)=>{let d=u.apply(a,f);return d===!1&&(d=h.apply(a,f)),d}}i.hooks=a}if(n.walkTokens){let a=this.defaults.walkTokens,s=n.walkTokens;i.walkTokens=function(l){let u=[];return u.push(s.call(this,l)),a&&(u=u.concat(a.call(this,l))),u}}this.defaults={...this.defaults,...i}}),this}#t(e,r,n){switch(r){case"heading":return function(i){return!i.type||i.type!==r?e.apply(this,arguments):e.call(this,n.parser.parseInline(i.tokens),i.depth,UCe(n.parser.parseInline(i.tokens,n.parser.textRenderer)))};case"code":return function(i){return!i.type||i.type!==r?e.apply(this,arguments):e.call(this,i.text,i.lang,!!i.escaped)};case"table":return function(i){if(!i.type||i.type!==r)return e.apply(this,arguments);let a="",s="";for(let u=0;u0&&f.tokens[0].type==="paragraph"?(f.tokens[0].text=g+" "+f.tokens[0].text,f.tokens[0].tokens&&f.tokens[0].tokens.length>0&&f.tokens[0].tokens[0].type==="text"&&(f.tokens[0].tokens[0].text=g+" "+f.tokens[0].tokens[0].text)):f.tokens.unshift({type:"text",text:g+" "}):m+=g+" "}m+=this.parser.parse(f.tokens,l),u+=this.listitem({type:"list_item",raw:m,text:m,task:p,checked:!!d,loose:l,tokens:f.tokens})}return e.call(this,u,a,s)};case"html":return function(i){return!i.type||i.type!==r?e.apply(this,arguments):e.call(this,i.text,i.block)};case"paragraph":return function(i){return!i.type||i.type!==r?e.apply(this,arguments):e.call(this,this.parser.parseInline(i.tokens))};case"escape":return function(i){return!i.type||i.type!==r?e.apply(this,arguments):e.call(this,i.text)};case"link":return function(i){return!i.type||i.type!==r?e.apply(this,arguments):e.call(this,i.href,i.title,this.parser.parseInline(i.tokens))};case"image":return function(i){return!i.type||i.type!==r?e.apply(this,arguments):e.call(this,i.href,i.title,i.text)};case"strong":return function(i){return!i.type||i.type!==r?e.apply(this,arguments):e.call(this,this.parser.parseInline(i.tokens))};case"em":return function(i){return!i.type||i.type!==r?e.apply(this,arguments):e.call(this,this.parser.parseInline(i.tokens))};case"codespan":return function(i){return!i.type||i.type!==r?e.apply(this,arguments):e.call(this,i.text)};case"del":return function(i){return!i.type||i.type!==r?e.apply(this,arguments):e.call(this,this.parser.parseInline(i.tokens))};case"text":return function(i){return!i.type||i.type!==r?e.apply(this,arguments):e.call(this,i.text)}}return e}setOptions(e){return this.defaults={...this.defaults,...e},this}lexer(e,r){return Mu.lex(e,r??this.defaults)}parser(e,r){return Iu.parse(e,r??this.defaults)}#e(e,r){return(n,i)=>{let a={...i},s={...this.defaults,...a};this.defaults.async===!0&&a.async===!1&&(s.silent||console.warn("marked(): The async option was set to true by an extension. The async: false option sent to parse will be ignored."),s.async=!0);let l=this.#r(!!s.silent,!!s.async);if(typeof n>"u"||n===null)return l(new Error("marked(): input parameter is undefined or null"));if(typeof n!="string")return l(new Error("marked(): input parameter is of type "+Object.prototype.toString.call(n)+", string expected"));if(s.hooks&&(s.hooks.options=s),s.async)return Promise.resolve(s.hooks?s.hooks.preprocess(n):n).then(u=>e(u,s)).then(u=>s.hooks?s.hooks.processAllTokens(u):u).then(u=>s.walkTokens?Promise.all(this.walkTokens(u,s.walkTokens)).then(()=>u):u).then(u=>r(u,s)).then(u=>s.hooks?s.hooks.postprocess(u):u).catch(l);try{s.hooks&&(n=s.hooks.preprocess(n));let u=e(n,s);s.hooks&&(u=s.hooks.processAllTokens(u)),s.walkTokens&&this.walkTokens(u,s.walkTokens);let h=r(u,s);return s.hooks&&(h=s.hooks.postprocess(h)),h}catch(u){return l(u)}}}#r(e,r){return n=>{if(n.message+=` +Please report this to https://github.com/markedjs/marked.`,e){let i="

    An error occurred:

    "+oo(n.message+"",!0)+"
    ";return r?Promise.resolve(i):i}if(r)return Promise.reject(n);throw n}}},Md=new h9;o(en,"marked");en.options=en.setOptions=function(t){return Md.setOptions(t),en.defaults=Md.defaults,jX(en.defaults),en};en.getDefaults=f9;en.defaults=Id;en.use=function(...t){return Md.use(...t),en.defaults=Md.defaults,jX(en.defaults),en};en.walkTokens=function(t,e){return Md.walkTokens(t,e)};en.parseInline=Md.parseInline;en.Parser=Iu;en.parser=Iu.parse;en.Renderer=ym;en.TextRenderer=Cv;en.Lexer=Mu;en.lexer=Mu.lex;en.Tokenizer=gm;en.Hooks=mm;en.parse=en;PEt=en.options,BEt=en.setOptions,FEt=en.use,zEt=en.walkTokens,GEt=en.parseInline,$Et=Iu.parse,VEt=Mu.lex});function x7e(t,{markdownAutoWrap:e}){let n=t.replace(//g,` +`).replace(/\n{2,}/g,` +`),i=jb(n);return e===!1?i.replace(/ /g," "):i}function sj(t,e={}){let r=x7e(t,e),n=en.lexer(r),i=[[]],a=0;function s(l,u="normal"){l.type==="text"?l.text.split(` +`).forEach((f,d)=>{d!==0&&(a++,i.push([])),f.split(" ").forEach(p=>{p=p.replace(/'/g,"'"),p&&i[a].push({content:p,type:u})})}):l.type==="strong"||l.type==="em"?l.tokens.forEach(h=>{s(h,l.type)}):l.type==="html"&&i[a].push({content:l.text,type:"normal"})}return o(s,"processNode"),n.forEach(l=>{l.type==="paragraph"?l.tokens?.forEach(u=>{s(u)}):l.type==="html"&&i[a].push({content:l.text,type:"normal"})}),i}function oj(t,{markdownAutoWrap:e}={}){let r=en.lexer(t);function n(i){return i.type==="text"?e===!1?i.text.replace(/\n */g,"
    ").replace(/ /g," "):i.text.replace(/\n */g,"
    "):i.type==="strong"?`${i.tokens?.map(n).join("")}`:i.type==="em"?`${i.tokens?.map(n).join("")}`:i.type==="paragraph"?`

    ${i.tokens?.map(n).join("")}

    `:i.type==="space"?"":i.type==="html"?`${i.text}`:i.type==="escape"?i.text:`Unsupported markdown: ${i.type}`}return o(n,"output"),r.map(n).join("")}var lj=M(()=>{"use strict";aj();GS();o(x7e,"preprocessMarkdown");o(sj,"markdownToLines");o(oj,"markdownToHTML")});function b7e(t){return Intl.Segmenter?[...new Intl.Segmenter().segment(t)].map(e=>e.segment):[...t]}function w7e(t,e){let r=b7e(e.content);return cj(t,[],r,e.type)}function cj(t,e,r,n){if(r.length===0)return[{content:e.join(""),type:n},{content:"",type:n}];let[i,...a]=r,s=[...e,i];return t([{content:s.join(""),type:n}])?cj(t,s,a,n):(e.length===0&&i&&(e.push(i),r.shift()),[{content:e.join(""),type:n},{content:r.join(""),type:n}])}function uj(t,e){if(t.some(({content:r})=>r.includes(` +`)))throw new Error("splitLineToFitWidth does not support newlines in the line");return v9(t,e)}function v9(t,e,r=[],n=[]){if(t.length===0)return n.length>0&&r.push(n),r.length>0?r:[];let i="";t[0].content===" "&&(i=" ",t.shift());let a=t.shift()??{content:" ",type:"normal"},s=[...n];if(i!==""&&s.push({content:i,type:"normal"}),s.push(a),e(s))return v9(t,e,r,s);if(n.length>0)r.push(n),t.unshift(a);else if(a.content){let[l,u]=w7e(e,a);r.push([l]),u.content&&t.unshift(u)}return v9(t,e,r)}var hj=M(()=>{"use strict";o(b7e,"splitTextToChars");o(w7e,"splitWordToFitWidth");o(cj,"splitWordToFitWidthRecursion");o(uj,"splitLineToFitWidth");o(v9,"splitLineToFitWidthRecursion")});function fj(t,e){e&&t.attr("style",e)}async function T7e(t,e,r,n,i=!1){let a=t.append("foreignObject");a.attr("width",`${10*r}px`),a.attr("height",`${10*r}px`);let s=a.append("xhtml:div"),l=e.label;e.label&&yi(e.label)&&(l=await bh(e.label.replace(qe.lineBreakRegex,` +`),pe()));let u=e.isNode?"nodeLabel":"edgeLabel",h=s.append("span");h.html(l),fj(h,e.labelStyle),h.attr("class",`${u} ${n}`),fj(s,e.labelStyle),s.style("display","table-cell"),s.style("white-space","nowrap"),s.style("line-height","1.5"),s.style("max-width",r+"px"),s.style("text-align","center"),s.attr("xmlns","http://www.w3.org/1999/xhtml"),i&&s.attr("class","labelBkg");let f=s.node().getBoundingClientRect();return f.width===r&&(s.style("display","table"),s.style("white-space","break-spaces"),s.style("width",r+"px"),f=s.node().getBoundingClientRect()),a.node()}function x9(t,e,r){return t.append("tspan").attr("class","text-outer-tspan").attr("x",0).attr("y",e*r-.1+"em").attr("dy",r+"em")}function k7e(t,e,r){let n=t.append("text"),i=x9(n,1,e);b9(i,r);let a=i.node().getComputedTextLength();return n.remove(),a}function dj(t,e,r){let n=t.append("text"),i=x9(n,1,e);b9(i,[{content:r,type:"normal"}]);let a=i.node()?.getBoundingClientRect();return a&&n.remove(),a}function E7e(t,e,r,n=!1){let a=e.append("g"),s=a.insert("rect").attr("class","background").attr("style","stroke: none"),l=a.append("text").attr("y","-10.1"),u=0;for(let h of r){let f=o(p=>k7e(a,1.1,p)<=t,"checkWidth"),d=f(h)?[h]:uj(h,f);for(let p of d){let m=x9(l,u,1.1);b9(m,p),u++}}if(n){let h=l.node().getBBox(),f=2;return s.attr("x",h.x-f).attr("y",h.y-f).attr("width",h.width+2*f).attr("height",h.height+2*f),a.node()}else return l.node()}function b9(t,e){t.text(""),e.forEach((r,n)=>{let i=t.append("tspan").attr("font-style",r.type==="em"?"italic":"normal").attr("class","text-inner-tspan").attr("font-weight",r.type==="strong"?"bold":"normal");n===0?i.text(r.content):i.text(" "+r.content)})}function w9(t){return t.replace(/fa[bklrs]?:fa-[\w-]+/g,e=>``)}var Li,Pl=M(()=>{"use strict";Vt();fr();pr();ut();lj();hr();hj();o(fj,"applyStyle");o(T7e,"addHtmlSpan");o(x9,"createTspan");o(k7e,"computeWidthOfText");o(dj,"computeDimensionOfText");o(E7e,"createFormattedText");o(b9,"updateTextContentAndStyles");o(w9,"replaceIconSubstring");Li=o(async(t,e="",{style:r="",isTitle:n=!1,classes:i="",useHtmlLabels:a=!0,isNode:s=!0,width:l=200,addSvgBackground:u=!1}={},h)=>{if(Y.debug("XYZ createText",e,r,n,i,a,s,"addSvgBackground: ",u),a){let f=oj(e,h),d=w9(Ma(f)),p=e.replace(/\\\\/g,"\\"),m={isNode:s,label:yi(e)?p:d,labelStyle:r.replace("fill:","color:")};return await T7e(t,m,l,i,u)}else{let f=e.replace(//g,"
    "),d=sj(f.replace("
    ","
    "),h),p=E7e(l,t,d,e?u:!1);if(s){/stroke:/.exec(r)&&(r=r.replace("stroke:","lineColor:"));let m=r.replace(/stroke:[^;]+;?/g,"").replace(/stroke-width:[^;]+;?/g,"").replace(/fill:[^;]+;?/g,"").replace(/color:/g,"fill:");Ve(p).attr("style",m)}else{let m=r.replace(/stroke:[^;]+;?/g,"").replace(/stroke-width:[^;]+;?/g,"").replace(/fill:[^;]+;?/g,"").replace(/background:/g,"fill:");Ve(p).select("rect").attr("style",m.replace(/background:/g,"fill:"));let g=r.replace(/stroke:[^;]+;?/g,"").replace(/stroke-width:[^;]+;?/g,"").replace(/fill:[^;]+;?/g,"").replace(/color:/g,"fill:");Ve(p).select("text").attr("style",g)}return p}},"createText")});function Wt(t){let e=t.map((r,n)=>`${n===0?"M":"L"}${r.x},${r.y}`);return e.push("Z"),e.join(" ")}function Wo(t,e,r,n,i,a){let s=[],u=r-t,h=n-e,f=u/a,d=2*Math.PI/f,p=e+h/2;for(let m=0;m<=50;m++){let g=m/50,y=t+g*u,v=p+i*Math.sin(d*(y-t));s.push({x:y,y:v})}return s}function O5(t,e,r,n,i,a){let s=[],l=i*Math.PI/180,f=(a*Math.PI/180-l)/(n-1);for(let d=0;d{"use strict";Pl();Vt();pr();bs();fr();hr();st=o(async(t,e,r)=>{let n,i=e.useHtmlLabels||xr(pe()?.htmlLabels);r?n=r:n="node default";let a=t.insert("g").attr("class",n).attr("id",e.domId||e.id),s=a.insert("g").attr("class","label").attr("style",Gn(e.labelStyle)),l;e.label===void 0?l="":l=typeof e.label=="string"?e.label:e.label[0];let u=await Li(s,kr(Ma(l),pe()),{useHtmlLabels:i,width:e.width||pe().flowchart?.wrappingWidth,cssClasses:"markdown-node-label",style:e.labelStyle,addSvgBackground:!!e.icon||!!e.img}),h=u.getBBox(),f=(e?.padding??0)/2;if(i){let d=u.children[0],p=Ve(u),m=d.getElementsByTagName("img");if(m){let g=l.replace(/]*>/g,"").trim()==="";await Promise.all([...m].map(y=>new Promise(v=>{function x(){if(y.style.display="flex",y.style.flexDirection="column",g){let b=pe().fontSize?pe().fontSize:window.getComputedStyle(document.body).fontSize,w=5,[_=ur.fontSize]=Ho(b),T=_*w+"px";y.style.minWidth=T,y.style.maxWidth=T}else y.style.width="100%";v(y)}o(x,"setupImage"),setTimeout(()=>{y.complete&&x()}),y.addEventListener("error",x),y.addEventListener("load",x)})))}h=d.getBoundingClientRect(),p.attr("width",h.width),p.attr("height",h.height)}return i?s.attr("transform","translate("+-h.width/2+", "+-h.height/2+")"):s.attr("transform","translate(0, "+-h.height/2+")"),e.centerLabel&&s.attr("transform","translate("+-h.width/2+", "+-h.height/2+")"),s.insert("rect",":first-child"),{shapeSvg:a,bbox:h,halfPadding:f,label:s}},"labelHelper"),I5=o(async(t,e,r)=>{let n=r.useHtmlLabels||xr(pe()?.flowchart?.htmlLabels),i=t.insert("g").attr("class","label").attr("style",r.labelStyle||""),a=await Li(i,kr(Ma(e),pe()),{useHtmlLabels:n,width:r.width||pe()?.flowchart?.wrappingWidth,style:r.labelStyle,addSvgBackground:!!r.icon||!!r.img}),s=a.getBBox(),l=r.padding/2;if(xr(pe()?.flowchart?.htmlLabels)){let u=a.children[0],h=Ve(a);s=u.getBoundingClientRect(),h.attr("width",s.width),h.attr("height",s.height)}return n?i.attr("transform","translate("+-s.width/2+", "+-s.height/2+")"):i.attr("transform","translate(0, "+-s.height/2+")"),r.centerLabel&&i.attr("transform","translate("+-s.width/2+", "+-s.height/2+")"),i.insert("rect",":first-child"),{shapeSvg:t,bbox:s,halfPadding:l,label:i}},"insertLabel"),je=o((t,e)=>{let r=e.node().getBBox();t.width=r.width,t.height=r.height},"updateNodeBounds"),ot=o((t,e)=>(t.look==="handDrawn"?"rough-node":"node")+" "+t.cssClasses+" "+(e||""),"getNodeClasses");o(Wt,"createPathFromPoints");o(Wo,"generateFullSineWavePoints");o(O5,"generateCirclePoints")});function S7e(t,e){return t.intersect(e)}var pj,mj=M(()=>{"use strict";o(S7e,"intersectNode");pj=S7e});function C7e(t,e,r,n){var i=t.x,a=t.y,s=i-n.x,l=a-n.y,u=Math.sqrt(e*e*l*l+r*r*s*s),h=Math.abs(e*r*s/u);n.x{"use strict";o(C7e,"intersectEllipse");P5=C7e});function A7e(t,e,r){return P5(t,e,e,r)}var gj,yj=M(()=>{"use strict";T9();o(A7e,"intersectCircle");gj=A7e});function _7e(t,e,r,n){var i,a,s,l,u,h,f,d,p,m,g,y,v,x,b;if(i=e.y-t.y,s=t.x-e.x,u=e.x*t.y-t.x*e.y,p=i*r.x+s*r.y+u,m=i*n.x+s*n.y+u,!(p!==0&&m!==0&&vj(p,m))&&(a=n.y-r.y,l=r.x-n.x,h=n.x*r.y-r.x*n.y,f=a*t.x+l*t.y+h,d=a*e.x+l*e.y+h,!(f!==0&&d!==0&&vj(f,d))&&(g=i*l-a*s,g!==0)))return y=Math.abs(g/2),v=s*h-l*u,x=v<0?(v-y)/g:(v+y)/g,v=a*u-i*h,b=v<0?(v-y)/g:(v+y)/g,{x,y:b}}function vj(t,e){return t*e>0}var xj,bj=M(()=>{"use strict";o(_7e,"intersectLine");o(vj,"sameSign");xj=_7e});function L7e(t,e,r){let n=t.x,i=t.y,a=[],s=Number.POSITIVE_INFINITY,l=Number.POSITIVE_INFINITY;typeof e.forEach=="function"?e.forEach(function(f){s=Math.min(s,f.x),l=Math.min(l,f.y)}):(s=Math.min(s,e.x),l=Math.min(l,e.y));let u=n-t.width/2-s,h=i-t.height/2-l;for(let f=0;f1&&a.sort(function(f,d){let p=f.x-r.x,m=f.y-r.y,g=Math.sqrt(p*p+m*m),y=d.x-r.x,v=d.y-r.y,x=Math.sqrt(y*y+v*v);return g{"use strict";bj();o(L7e,"intersectPolygon");wj=L7e});var D7e,Hh,k9=M(()=>{"use strict";D7e=o((t,e)=>{var r=t.x,n=t.y,i=e.x-r,a=e.y-n,s=t.width/2,l=t.height/2,u,h;return Math.abs(a)*s>Math.abs(i)*l?(a<0&&(l=-l),u=a===0?0:l*i/a,h=l):(i<0&&(s=-s),u=s,h=i===0?0:s*a/i),{x:r+u,y:n+h}},"intersectRect"),Hh=D7e});var Ye,qt=M(()=>{"use strict";mj();yj();T9();Tj();k9();Ye={node:pj,circle:gj,ellipse:P5,polygon:wj,rect:Hh}});var kj,Sc,N7e,Ze,Ke,Xt=M(()=>{"use strict";Vt();kj=o(t=>{let{handDrawnSeed:e}=pe();return{fill:t,hachureAngle:120,hachureGap:4,fillWeight:2,roughness:.7,stroke:t,seed:e}},"solidStateFill"),Sc=o(t=>{let e=N7e([...t.cssCompiledStyles||[],...t.cssStyles||[]]);return{stylesMap:e,stylesArray:[...e]}},"compileStyles"),N7e=o(t=>{let e=new Map;return t.forEach(r=>{let[n,i]=r.split(":");e.set(n.trim(),i?.trim())}),e},"styles2Map"),Ze=o(t=>{let{stylesArray:e}=Sc(t),r=[],n=[],i=[],a=[];return e.forEach(s=>{let l=s[0];l==="color"||l==="font-size"||l==="font-family"||l==="font-weight"||l==="font-style"||l==="text-decoration"||l==="text-align"||l==="text-transform"||l==="line-height"||l==="letter-spacing"||l==="word-spacing"||l==="text-shadow"||l==="text-overflow"||l==="white-space"||l==="word-wrap"||l==="word-break"||l==="overflow-wrap"||l==="hyphens"?r.push(s.join(":")+" !important"):(n.push(s.join(":")+" !important"),l.includes("stroke")&&i.push(s.join(":")+" !important"),l==="fill"&&a.push(s.join(":")+" !important"))}),{labelStyles:r.join(";"),nodeStyles:n.join(";"),stylesArray:e,borderStyles:i,backgroundStyles:a}},"styles2String"),Ke=o((t,e)=>{let{themeVariables:r,handDrawnSeed:n}=pe(),{nodeBorder:i,mainBkg:a}=r,{stylesMap:s}=Sc(t);return Object.assign({roughness:.7,fill:s.get("fill")||a,fillStyle:"hachure",fillWeight:4,hachureGap:5.2,stroke:s.get("stroke")||i,seed:n,strokeWidth:s.get("stroke-width")?.replace("px","")||1.3,fillLineDash:[0,0]},e)},"userNodeOverrides")});function E9(t,e,r){if(t&&t.length){let[n,i]=e,a=Math.PI/180*r,s=Math.cos(a),l=Math.sin(a);for(let u of t){let[h,f]=u;u[0]=(h-n)*s-(f-i)*l+n,u[1]=(h-n)*l+(f-i)*s+i}}}function R7e(t,e){return t[0]===e[0]&&t[1]===e[1]}function M7e(t,e,r,n=1){let i=r,a=Math.max(e,.1),s=t[0]&&t[0][0]&&typeof t[0][0]=="number"?[t]:t,l=[0,0];if(i)for(let h of s)E9(h,l,i);let u=function(h,f,d){let p=[];for(let b of h){let w=[...b];R7e(w[0],w[w.length-1])||w.push([w[0][0],w[0][1]]),w.length>2&&p.push(w)}let m=[];f=Math.max(f,.1);let g=[];for(let b of p)for(let w=0;wb.yminw.ymin?1:b.xw.x?1:b.ymax===w.ymax?0:(b.ymax-w.ymax)/Math.abs(b.ymax-w.ymax)),!g.length)return m;let y=[],v=g[0].ymin,x=0;for(;y.length||g.length;){if(g.length){let b=-1;for(let w=0;wv);w++)b=w;g.splice(0,b+1).forEach(w=>{y.push({s:v,edge:w})})}if(y=y.filter(b=>!(b.edge.ymax<=v)),y.sort((b,w)=>b.edge.x===w.edge.x?0:(b.edge.x-w.edge.x)/Math.abs(b.edge.x-w.edge.x)),(d!==1||x%f==0)&&y.length>1)for(let b=0;b=y.length)break;let _=y[b].edge,T=y[w].edge;m.push([[Math.round(_.x),v],[Math.round(T.x),v]])}v+=d,y.forEach(b=>{b.edge.x=b.edge.x+d*b.edge.islope}),x++}return m}(s,a,n);if(i){for(let h of s)E9(h,l,-i);(function(h,f,d){let p=[];h.forEach(m=>p.push(...m)),E9(p,f,d)})(u,l,-i)}return u}function Rv(t,e){var r;let n=e.hachureAngle+90,i=e.hachureGap;i<0&&(i=4*e.strokeWidth),i=Math.round(Math.max(i,.1));let a=1;return e.roughness>=1&&(((r=e.randomizer)===null||r===void 0?void 0:r.next())||Math.random())>.7&&(a=i),M7e(t,i,n,a||1)}function W5(t){let e=t[0],r=t[1];return Math.sqrt(Math.pow(e[0]-r[0],2)+Math.pow(e[1]-r[1],2))}function C9(t,e){return t.type===e}function G9(t){let e=[],r=function(s){let l=new Array;for(;s!=="";)if(s.match(/^([ \t\r\n,]+)/))s=s.substr(RegExp.$1.length);else if(s.match(/^([aAcChHlLmMqQsStTvVzZ])/))l[l.length]={type:I7e,text:RegExp.$1},s=s.substr(RegExp.$1.length);else{if(!s.match(/^(([-+]?[0-9]+(\.[0-9]*)?|[-+]?\.[0-9]+)([eE][-+]?[0-9]+)?)/))return[];l[l.length]={type:S9,text:`${parseFloat(RegExp.$1)}`},s=s.substr(RegExp.$1.length)}return l[l.length]={type:Ej,text:""},l}(t),n="BOD",i=0,a=r[i];for(;!C9(a,Ej);){let s=0,l=[];if(n==="BOD"){if(a.text!=="M"&&a.text!=="m")return G9("M0,0"+t);i++,s=B5[a.text],n=a.text}else C9(a,S9)?s=B5[n]:(i++,s=B5[a.text],n=a.text);if(!(i+sf%2?h+r:h+e);a.push({key:"C",data:u}),e=u[4],r=u[5];break}case"Q":a.push({key:"Q",data:[...l]}),e=l[2],r=l[3];break;case"q":{let u=l.map((h,f)=>f%2?h+r:h+e);a.push({key:"Q",data:u}),e=u[2],r=u[3];break}case"A":a.push({key:"A",data:[...l]}),e=l[5],r=l[6];break;case"a":e+=l[5],r+=l[6],a.push({key:"A",data:[l[0],l[1],l[2],l[3],l[4],e,r]});break;case"H":a.push({key:"H",data:[...l]}),e=l[0];break;case"h":e+=l[0],a.push({key:"H",data:[e]});break;case"V":a.push({key:"V",data:[...l]}),r=l[0];break;case"v":r+=l[0],a.push({key:"V",data:[r]});break;case"S":a.push({key:"S",data:[...l]}),e=l[2],r=l[3];break;case"s":{let u=l.map((h,f)=>f%2?h+r:h+e);a.push({key:"S",data:u}),e=u[2],r=u[3];break}case"T":a.push({key:"T",data:[...l]}),e=l[0],r=l[1];break;case"t":e+=l[0],r+=l[1],a.push({key:"T",data:[e,r]});break;case"Z":case"z":a.push({key:"Z",data:[]}),e=n,r=i}return a}function Mj(t){let e=[],r="",n=0,i=0,a=0,s=0,l=0,u=0;for(let{key:h,data:f}of t){switch(h){case"M":e.push({key:"M",data:[...f]}),[n,i]=f,[a,s]=f;break;case"C":e.push({key:"C",data:[...f]}),n=f[4],i=f[5],l=f[2],u=f[3];break;case"L":e.push({key:"L",data:[...f]}),[n,i]=f;break;case"H":n=f[0],e.push({key:"L",data:[n,i]});break;case"V":i=f[0],e.push({key:"L",data:[n,i]});break;case"S":{let d=0,p=0;r==="C"||r==="S"?(d=n+(n-l),p=i+(i-u)):(d=n,p=i),e.push({key:"C",data:[d,p,...f]}),l=f[0],u=f[1],n=f[2],i=f[3];break}case"T":{let[d,p]=f,m=0,g=0;r==="Q"||r==="T"?(m=n+(n-l),g=i+(i-u)):(m=n,g=i);let y=n+2*(m-n)/3,v=i+2*(g-i)/3,x=d+2*(m-d)/3,b=p+2*(g-p)/3;e.push({key:"C",data:[y,v,x,b,d,p]}),l=m,u=g,n=d,i=p;break}case"Q":{let[d,p,m,g]=f,y=n+2*(d-n)/3,v=i+2*(p-i)/3,x=m+2*(d-m)/3,b=g+2*(p-g)/3;e.push({key:"C",data:[y,v,x,b,m,g]}),l=d,u=p,n=m,i=g;break}case"A":{let d=Math.abs(f[0]),p=Math.abs(f[1]),m=f[2],g=f[3],y=f[4],v=f[5],x=f[6];d===0||p===0?(e.push({key:"C",data:[n,i,v,x,v,x]}),n=v,i=x):(n!==v||i!==x)&&(Ij(n,i,v,x,d,p,m,g,y).forEach(function(b){e.push({key:"C",data:b})}),n=v,i=x);break}case"Z":e.push({key:"Z",data:[]}),n=a,i=s}r=h}return e}function Lv(t,e,r){return[t*Math.cos(r)-e*Math.sin(r),t*Math.sin(r)+e*Math.cos(r)]}function Ij(t,e,r,n,i,a,s,l,u,h){let f=(d=s,Math.PI*d/180);var d;let p=[],m=0,g=0,y=0,v=0;if(h)[m,g,y,v]=h;else{[t,e]=Lv(t,e,-f),[r,n]=Lv(r,n,-f);let R=(t-r)/2,C=(e-n)/2,O=R*R/(i*i)+C*C/(a*a);O>1&&(O=Math.sqrt(O),i*=O,a*=O);let N=i*i,P=a*a,F=N*P-N*C*C-P*R*R,B=N*C*C+P*R*R,G=(l===u?-1:1)*Math.sqrt(Math.abs(F/B));y=G*i*C/a+(t+r)/2,v=G*-a*R/i+(e+n)/2,m=Math.asin(parseFloat(((e-v)/a).toFixed(9))),g=Math.asin(parseFloat(((n-v)/a).toFixed(9))),tg&&(m-=2*Math.PI),!u&&g>m&&(g-=2*Math.PI)}let x=g-m;if(Math.abs(x)>120*Math.PI/180){let R=g,C=r,O=n;g=u&&g>m?m+120*Math.PI/180*1:m+120*Math.PI/180*-1,p=Ij(r=y+i*Math.cos(g),n=v+a*Math.sin(g),C,O,i,a,s,0,u,[g,R,y,v])}x=g-m;let b=Math.cos(m),w=Math.sin(m),_=Math.cos(g),T=Math.sin(g),E=Math.tan(x/4),L=4/3*i*E,S=4/3*a*E,A=[t,e],I=[t+L*w,e-S*b],D=[r+L*T,n-S*_],k=[r,n];if(I[0]=2*A[0]-I[0],I[1]=2*A[1]-I[1],h)return[I,D,k].concat(p);{p=[I,D,k].concat(p);let R=[];for(let C=0;C2){let i=[];for(let a=0;a2*Math.PI&&(m=0,g=2*Math.PI);let y=2*Math.PI/u.curveStepCount,v=Math.min(y/2,(g-m)/2),x=Dj(v,h,f,d,p,m,g,1,u);if(!u.disableMultiStroke){let b=Dj(v,h,f,d,p,m,g,1.5,u);x.push(...b)}return s&&(l?x.push(...Wh(h,f,h+d*Math.cos(m),f+p*Math.sin(m),u),...Wh(h,f,h+d*Math.cos(g),f+p*Math.sin(g),u)):x.push({op:"lineTo",data:[h,f]},{op:"lineTo",data:[h+d*Math.cos(m),f+p*Math.sin(m)]})),{type:"path",ops:x}}function Aj(t,e){let r=Mj(Rj(G9(t))),n=[],i=[0,0],a=[0,0];for(let{key:s,data:l}of r)switch(s){case"M":a=[l[0],l[1]],i=[l[0],l[1]];break;case"L":n.push(...Wh(a[0],a[1],l[0],l[1],e)),a=[l[0],l[1]];break;case"C":{let[u,h,f,d,p,m]=l;n.push(...B7e(u,h,f,d,p,m,a,e)),a=[p,m];break}case"Z":n.push(...Wh(a[0],a[1],i[0],i[1],e)),a=[i[0],i[1]]}return{type:"path",ops:n}}function A9(t,e){let r=[];for(let n of t)if(n.length){let i=e.maxRandomnessOffset||0,a=n.length;if(a>2){r.push({op:"move",data:[n[0][0]+nr(i,e),n[0][1]+nr(i,e)]});for(let s=1;s500?.4:-.0016668*u+1.233334;let f=i.maxRandomnessOffset||0;f*f*100>l&&(f=u/10);let d=f/2,p=.2+.2*Bj(i),m=i.bowing*i.maxRandomnessOffset*(n-e)/200,g=i.bowing*i.maxRandomnessOffset*(t-r)/200;m=nr(m,i,h),g=nr(g,i,h);let y=[],v=o(()=>nr(d,i,h),"M"),x=o(()=>nr(f,i,h),"k"),b=i.preserveVertices;return a&&(s?y.push({op:"move",data:[t+(b?0:v()),e+(b?0:v())]}):y.push({op:"move",data:[t+(b?0:nr(f,i,h)),e+(b?0:nr(f,i,h))]})),s?y.push({op:"bcurveTo",data:[m+t+(r-t)*p+v(),g+e+(n-e)*p+v(),m+t+2*(r-t)*p+v(),g+e+2*(n-e)*p+v(),r+(b?0:v()),n+(b?0:v())]}):y.push({op:"bcurveTo",data:[m+t+(r-t)*p+x(),g+e+(n-e)*p+x(),m+t+2*(r-t)*p+x(),g+e+2*(n-e)*p+x(),r+(b?0:x()),n+(b?0:x())]}),y}function F5(t,e,r){if(!t.length)return[];let n=[];n.push([t[0][0]+nr(e,r),t[0][1]+nr(e,r)]),n.push([t[0][0]+nr(e,r),t[0][1]+nr(e,r)]);for(let i=1;i3){let a=[],s=1-r.curveTightness;i.push({op:"move",data:[t[1][0],t[1][1]]});for(let l=1;l+21&&i.push(l)):i.push(l),i.push(t[e+3])}else{let u=t[e+0],h=t[e+1],f=t[e+2],d=t[e+3],p=Od(u,h,.5),m=Od(h,f,.5),g=Od(f,d,.5),y=Od(p,m,.5),v=Od(m,g,.5),x=Od(y,v,.5);B9([u,p,y,x],0,r,i),B9([x,v,g,d],0,r,i)}var a,s;return i}function z7e(t,e){return H5(t,0,t.length,e)}function H5(t,e,r,n,i){let a=i||[],s=t[e],l=t[r-1],u=0,h=1;for(let f=e+1;fu&&(u=d,h=f)}return Math.sqrt(u)>n?(H5(t,e,h+1,n,a),H5(t,h,r,n,a)):(a.length||a.push(s),a.push(l)),a}function _9(t,e=.15,r){let n=[],i=(t.length-1)/3;for(let a=0;a0?H5(n,0,n.length,r):n}var Nv,L9,D9,N9,R9,M9,Rs,I9,I7e,S9,Ej,B5,O7e,lo,xm,F9,z5,z9,Xe,jt=M(()=>{"use strict";o(E9,"t");o(R7e,"e");o(M7e,"s");o(Rv,"n");Nv=class{static{o(this,"o")}constructor(e){this.helper=e}fillPolygons(e,r){return this._fillPolygons(e,r)}_fillPolygons(e,r){let n=Rv(e,r);return{type:"fillSketch",ops:this.renderLines(n,r)}}renderLines(e,r){let n=[];for(let i of e)n.push(...this.helper.doubleLineOps(i[0][0],i[0][1],i[1][0],i[1][1],r));return n}};o(W5,"a");L9=class extends Nv{static{o(this,"h")}fillPolygons(e,r){let n=r.hachureGap;n<0&&(n=4*r.strokeWidth),n=Math.max(n,.1);let i=Rv(e,Object.assign({},r,{hachureGap:n})),a=Math.PI/180*r.hachureAngle,s=[],l=.5*n*Math.cos(a),u=.5*n*Math.sin(a);for(let[h,f]of i)W5([h,f])&&s.push([[h[0]-l,h[1]+u],[...f]],[[h[0]+l,h[1]-u],[...f]]);return{type:"fillSketch",ops:this.renderLines(s,r)}}},D9=class extends Nv{static{o(this,"r")}fillPolygons(e,r){let n=this._fillPolygons(e,r),i=Object.assign({},r,{hachureAngle:r.hachureAngle+90}),a=this._fillPolygons(e,i);return n.ops=n.ops.concat(a.ops),n}},N9=class{static{o(this,"i")}constructor(e){this.helper=e}fillPolygons(e,r){let n=Rv(e,r=Object.assign({},r,{hachureAngle:0}));return this.dotsOnLines(n,r)}dotsOnLines(e,r){let n=[],i=r.hachureGap;i<0&&(i=4*r.strokeWidth),i=Math.max(i,.1);let a=r.fillWeight;a<0&&(a=r.strokeWidth/2);let s=i/4;for(let l of e){let u=W5(l),h=u/i,f=Math.ceil(h)-1,d=u-f*i,p=(l[0][0]+l[1][0])/2-i/4,m=Math.min(l[0][1],l[1][1]);for(let g=0;g{let l=W5(s),u=Math.floor(l/(n+i)),h=(l+i-u*(n+i))/2,f=s[0],d=s[1];f[0]>d[0]&&(f=s[1],d=s[0]);let p=Math.atan((d[1]-f[1])/(d[0]-f[0]));for(let m=0;m{let s=W5(a),l=Math.round(s/(2*r)),u=a[0],h=a[1];u[0]>h[0]&&(u=a[1],h=a[0]);let f=Math.atan((h[1]-u[1])/(h[0]-u[0]));for(let d=0;d2*Math.PI&&(L=0,S=2*Math.PI);let A=(S-L)/b.curveStepCount,I=[];for(let D=L;D<=S;D+=A)I.push([w+T*Math.cos(D),_+E*Math.sin(D)]);return I.push([w+T*Math.cos(S),_+E*Math.sin(S)]),I.push([w,_]),vm([I],b)}(e,r,n,i,a,s,h));return h.stroke!==lo&&f.push(d),this._d("arc",f,h)}curve(e,r){let n=this._o(r),i=[],a=Sj(e,n);if(n.fill&&n.fill!==lo)if(n.fillStyle==="solid"){let s=Sj(e,Object.assign(Object.assign({},n),{disableMultiStroke:!0,roughness:n.roughness?n.roughness+n.fillShapeRoughnessGain:0}));i.push({type:"fillPath",ops:this._mergedShape(s.ops)})}else{let s=[],l=e;if(l.length){let u=typeof l[0][0]=="number"?[l]:l;for(let h of u)h.length<3?s.push(...h):h.length===3?s.push(..._9(Nj([h[0],h[0],h[1],h[2]]),10,(1+n.roughness)/2)):s.push(..._9(Nj(h),10,(1+n.roughness)/2))}s.length&&i.push(vm([s],n))}return n.stroke!==lo&&i.push(a),this._d("curve",i,n)}polygon(e,r){let n=this._o(r),i=[],a=G5(e,!0,n);return n.fill&&(n.fillStyle==="solid"?i.push(A9([e],n)):i.push(vm([e],n))),n.stroke!==lo&&i.push(a),this._d("polygon",i,n)}path(e,r){let n=this._o(r),i=[];if(!e)return this._d("path",i,n);e=(e||"").replace(/\n/g," ").replace(/(-\s)/g,"-").replace("/(ss)/g"," ");let a=n.fill&&n.fill!=="transparent"&&n.fill!==lo,s=n.stroke!==lo,l=!!(n.simplification&&n.simplification<1),u=function(f,d,p){let m=Mj(Rj(G9(f))),g=[],y=[],v=[0,0],x=[],b=o(()=>{x.length>=4&&y.push(..._9(x,d)),x=[]},"i"),w=o(()=>{b(),y.length&&(g.push(y),y=[])},"c");for(let{key:T,data:E}of m)switch(T){case"M":w(),v=[E[0],E[1]],y.push(v);break;case"L":b(),y.push([E[0],E[1]]);break;case"C":if(!x.length){let L=y.length?y[y.length-1]:v;x.push([L[0],L[1]])}x.push([E[0],E[1]]),x.push([E[2],E[3]]),x.push([E[4],E[5]]);break;case"Z":b(),y.push([v[0],v[1]])}if(w(),!p)return g;let _=[];for(let T of g){let E=z7e(T,p);E.length&&_.push(E)}return _}(e,1,l?4-4*(n.simplification||1):(1+n.roughness)/2),h=Aj(e,n);if(a)if(n.fillStyle==="solid")if(u.length===1){let f=Aj(e,Object.assign(Object.assign({},n),{disableMultiStroke:!0,roughness:n.roughness?n.roughness+n.fillShapeRoughnessGain:0}));i.push({type:"fillPath",ops:this._mergedShape(f.ops)})}else i.push(A9(u,n));else i.push(vm(u,n));return s&&(l?u.forEach(f=>{i.push(G5(f,!1,n))}):i.push(h)),this._d("path",i,n)}opsToPath(e,r){let n="";for(let i of e.ops){let a=typeof r=="number"&&r>=0?i.data.map(s=>+s.toFixed(r)):i.data;switch(i.op){case"move":n+=`M${a[0]} ${a[1]} `;break;case"bcurveTo":n+=`C${a[0]} ${a[1]}, ${a[2]} ${a[3]}, ${a[4]} ${a[5]} `;break;case"lineTo":n+=`L${a[0]} ${a[1]} `}}return n.trim()}toPaths(e){let r=e.sets||[],n=e.options||this.defaultOptions,i=[];for(let a of r){let s=null;switch(a.type){case"path":s={d:this.opsToPath(a),stroke:n.stroke,strokeWidth:n.strokeWidth,fill:lo};break;case"fillPath":s={d:this.opsToPath(a),stroke:lo,strokeWidth:0,fill:n.fill||lo};break;case"fillSketch":s=this.fillSketch(a,n)}s&&i.push(s)}return i}fillSketch(e,r){let n=r.fillWeight;return n<0&&(n=r.strokeWidth/2),{d:this.opsToPath(e),stroke:r.fill||lo,strokeWidth:n,fill:lo}}_mergedShape(e){return e.filter((r,n)=>n===0||r.op!=="move")}},F9=class{static{o(this,"st")}constructor(e,r){this.canvas=e,this.ctx=this.canvas.getContext("2d"),this.gen=new xm(r)}draw(e){let r=e.sets||[],n=e.options||this.getDefaultOptions(),i=this.ctx,a=e.options.fixedDecimalPlaceDigits;for(let s of r)switch(s.type){case"path":i.save(),i.strokeStyle=n.stroke==="none"?"transparent":n.stroke,i.lineWidth=n.strokeWidth,n.strokeLineDash&&i.setLineDash(n.strokeLineDash),n.strokeLineDashOffset&&(i.lineDashOffset=n.strokeLineDashOffset),this._drawToContext(i,s,a),i.restore();break;case"fillPath":{i.save(),i.fillStyle=n.fill||"";let l=e.shape==="curve"||e.shape==="polygon"||e.shape==="path"?"evenodd":"nonzero";this._drawToContext(i,s,a,l),i.restore();break}case"fillSketch":this.fillSketch(i,s,n)}}fillSketch(e,r,n){let i=n.fillWeight;i<0&&(i=n.strokeWidth/2),e.save(),n.fillLineDash&&e.setLineDash(n.fillLineDash),n.fillLineDashOffset&&(e.lineDashOffset=n.fillLineDashOffset),e.strokeStyle=n.fill||"",e.lineWidth=i,this._drawToContext(e,r,n.fixedDecimalPlaceDigits),e.restore()}_drawToContext(e,r,n,i="nonzero"){e.beginPath();for(let a of r.ops){let s=typeof n=="number"&&n>=0?a.data.map(l=>+l.toFixed(n)):a.data;switch(a.op){case"move":e.moveTo(s[0],s[1]);break;case"bcurveTo":e.bezierCurveTo(s[0],s[1],s[2],s[3],s[4],s[5]);break;case"lineTo":e.lineTo(s[0],s[1])}}r.type==="fillPath"?e.fill(i):e.stroke()}get generator(){return this.gen}getDefaultOptions(){return this.gen.defaultOptions}line(e,r,n,i,a){let s=this.gen.line(e,r,n,i,a);return this.draw(s),s}rectangle(e,r,n,i,a){let s=this.gen.rectangle(e,r,n,i,a);return this.draw(s),s}ellipse(e,r,n,i,a){let s=this.gen.ellipse(e,r,n,i,a);return this.draw(s),s}circle(e,r,n,i){let a=this.gen.circle(e,r,n,i);return this.draw(a),a}linearPath(e,r){let n=this.gen.linearPath(e,r);return this.draw(n),n}polygon(e,r){let n=this.gen.polygon(e,r);return this.draw(n),n}arc(e,r,n,i,a,s,l=!1,u){let h=this.gen.arc(e,r,n,i,a,s,l,u);return this.draw(h),h}curve(e,r){let n=this.gen.curve(e,r);return this.draw(n),n}path(e,r){let n=this.gen.path(e,r);return this.draw(n),n}},z5="http://www.w3.org/2000/svg",z9=class{static{o(this,"ot")}constructor(e,r){this.svg=e,this.gen=new xm(r)}draw(e){let r=e.sets||[],n=e.options||this.getDefaultOptions(),i=this.svg.ownerDocument||window.document,a=i.createElementNS(z5,"g"),s=e.options.fixedDecimalPlaceDigits;for(let l of r){let u=null;switch(l.type){case"path":u=i.createElementNS(z5,"path"),u.setAttribute("d",this.opsToPath(l,s)),u.setAttribute("stroke",n.stroke),u.setAttribute("stroke-width",n.strokeWidth+""),u.setAttribute("fill","none"),n.strokeLineDash&&u.setAttribute("stroke-dasharray",n.strokeLineDash.join(" ").trim()),n.strokeLineDashOffset&&u.setAttribute("stroke-dashoffset",`${n.strokeLineDashOffset}`);break;case"fillPath":u=i.createElementNS(z5,"path"),u.setAttribute("d",this.opsToPath(l,s)),u.setAttribute("stroke","none"),u.setAttribute("stroke-width","0"),u.setAttribute("fill",n.fill||""),e.shape!=="curve"&&e.shape!=="polygon"||u.setAttribute("fill-rule","evenodd");break;case"fillSketch":u=this.fillSketch(i,l,n)}u&&a.appendChild(u)}return a}fillSketch(e,r,n){let i=n.fillWeight;i<0&&(i=n.strokeWidth/2);let a=e.createElementNS(z5,"path");return a.setAttribute("d",this.opsToPath(r,n.fixedDecimalPlaceDigits)),a.setAttribute("stroke",n.fill||""),a.setAttribute("stroke-width",i+""),a.setAttribute("fill","none"),n.fillLineDash&&a.setAttribute("stroke-dasharray",n.fillLineDash.join(" ").trim()),n.fillLineDashOffset&&a.setAttribute("stroke-dashoffset",`${n.fillLineDashOffset}`),a}get generator(){return this.gen}getDefaultOptions(){return this.gen.defaultOptions}opsToPath(e,r){return this.gen.opsToPath(e,r)}line(e,r,n,i,a){let s=this.gen.line(e,r,n,i,a);return this.draw(s)}rectangle(e,r,n,i,a){let s=this.gen.rectangle(e,r,n,i,a);return this.draw(s)}ellipse(e,r,n,i,a){let s=this.gen.ellipse(e,r,n,i,a);return this.draw(s)}circle(e,r,n,i){let a=this.gen.circle(e,r,n,i);return this.draw(a)}linearPath(e,r){let n=this.gen.linearPath(e,r);return this.draw(n)}polygon(e,r){let n=this.gen.polygon(e,r);return this.draw(n)}arc(e,r,n,i,a,s,l=!1,u){let h=this.gen.arc(e,r,n,i,a,s,l,u);return this.draw(h)}curve(e,r){let n=this.gen.curve(e,r);return this.draw(n)}path(e,r){let n=this.gen.path(e,r);return this.draw(n)}},Xe={canvas:o((t,e)=>new F9(t,e),"canvas"),svg:o((t,e)=>new z9(t,e),"svg"),generator:o(t=>new xm(t),"generator"),newSeed:o(()=>xm.newSeed(),"newSeed")}});function Fj(t,e){let{labelStyles:r}=Ze(e);e.labelStyle=r;let n=ot(e),i=n;n||(i="anchor");let a=t.insert("g").attr("class",i).attr("id",e.domId||e.id),s=1,{cssStyles:l}=e,u=Xe.svg(a),h=Ke(e,{fill:"black",stroke:"none",fillStyle:"solid"});e.look!=="handDrawn"&&(h.roughness=0);let f=u.circle(0,0,s*2,h),d=a.insert(()=>f,":first-child");return d.attr("class","anchor").attr("style",Gn(l)),je(e,d),e.intersect=function(p){return Y.info("Circle intersect",e,s,p),Ye.circle(e,s,p)},a}var zj=M(()=>{"use strict";ut();Ot();qt();Xt();jt();hr();o(Fj,"anchor")});function Gj(t,e,r,n,i,a,s){let u=(t+r)/2,h=(e+n)/2,f=Math.atan2(n-e,r-t),d=(r-t)/2,p=(n-e)/2,m=d/i,g=p/a,y=Math.sqrt(m**2+g**2);if(y>1)throw new Error("The given radii are too small to create an arc between the points.");let v=Math.sqrt(1-y**2),x=u+v*a*Math.sin(f)*(s?-1:1),b=h-v*i*Math.cos(f)*(s?-1:1),w=Math.atan2((e-b)/a,(t-x)/i),T=Math.atan2((n-b)/a,(r-x)/i)-w;s&&T<0&&(T+=2*Math.PI),!s&&T>0&&(T-=2*Math.PI);let E=[];for(let L=0;L<20;L++){let S=L/19,A=w+S*T,I=x+i*Math.cos(A),D=b+a*Math.sin(A);E.push({x:I,y:D})}return E}async function $j(t,e){let{labelStyles:r,nodeStyles:n}=Ze(e);e.labelStyle=r;let{shapeSvg:i,bbox:a}=await st(t,e,ot(e)),s=a.width+e.padding+20,l=a.height+e.padding,u=l/2,h=u/(2.5+l/50),{cssStyles:f}=e,d=[{x:s/2,y:-l/2},{x:-s/2,y:-l/2},...Gj(-s/2,-l/2,-s/2,l/2,h,u,!1),{x:s/2,y:l/2},...Gj(s/2,l/2,s/2,-l/2,h,u,!0)],p=Xe.svg(i),m=Ke(e,{});e.look!=="handDrawn"&&(m.roughness=0,m.fillStyle="solid");let g=Wt(d),y=p.path(g,m),v=i.insert(()=>y,":first-child");return v.attr("class","basic label-container"),f&&e.look!=="handDrawn"&&v.selectAll("path").attr("style",f),n&&e.look!=="handDrawn"&&v.selectAll("path").attr("style",n),v.attr("transform",`translate(${h/2}, 0)`),je(e,v),e.intersect=function(x){return Ye.polygon(e,d,x)},i}var Vj=M(()=>{"use strict";Ot();qt();Xt();jt();o(Gj,"generateArcPoints");o($j,"bowTieRect")});function Ia(t,e,r,n){return t.insert("polygon",":first-child").attr("points",n.map(function(i){return i.x+","+i.y}).join(" ")).attr("class","label-container").attr("transform","translate("+-e/2+","+r/2+")")}var Ou=M(()=>{"use strict";o(Ia,"insertPolygonShape")});async function Uj(t,e){let{labelStyles:r,nodeStyles:n}=Ze(e);e.labelStyle=r;let{shapeSvg:i,bbox:a}=await st(t,e,ot(e)),s=a.height+e.padding,l=12,u=a.width+e.padding+l,h=0,f=u,d=-s,p=0,m=[{x:h+l,y:d},{x:f,y:d},{x:f,y:p},{x:h,y:p},{x:h,y:d+l},{x:h+l,y:d}],g,{cssStyles:y}=e;if(e.look==="handDrawn"){let v=Xe.svg(i),x=Ke(e,{}),b=Wt(m),w=v.path(b,x);g=i.insert(()=>w,":first-child").attr("transform",`translate(${-u/2}, ${s/2})`),y&&g.attr("style",y)}else g=Ia(i,u,s,m);return n&&g.attr("style",n),je(e,g),e.intersect=function(v){return Ye.polygon(e,m,v)},i}var Hj=M(()=>{"use strict";Ot();qt();Xt();jt();Ou();Ot();o(Uj,"card")});function Wj(t,e){let{nodeStyles:r}=Ze(e);e.label="";let n=t.insert("g").attr("class",ot(e)).attr("id",e.domId??e.id),{cssStyles:i}=e,a=Math.max(28,e.width??0),s=[{x:0,y:a/2},{x:a/2,y:0},{x:0,y:-a/2},{x:-a/2,y:0}],l=Xe.svg(n),u=Ke(e,{});e.look!=="handDrawn"&&(u.roughness=0,u.fillStyle="solid");let h=Wt(s),f=l.path(h,u),d=n.insert(()=>f,":first-child");return i&&e.look!=="handDrawn"&&d.selectAll("path").attr("style",i),r&&e.look!=="handDrawn"&&d.selectAll("path").attr("style",r),e.width=28,e.height=28,e.intersect=function(p){return Ye.polygon(e,s,p)},n}var Yj=M(()=>{"use strict";qt();jt();Xt();Ot();o(Wj,"choice")});async function qj(t,e){let{labelStyles:r,nodeStyles:n}=Ze(e);e.labelStyle=r;let{shapeSvg:i,bbox:a,halfPadding:s}=await st(t,e,ot(e)),l=a.width/2+s,u,{cssStyles:h}=e;if(e.look==="handDrawn"){let f=Xe.svg(i),d=Ke(e,{}),p=f.circle(0,0,l*2,d);u=i.insert(()=>p,":first-child"),u.attr("class","basic label-container").attr("style",Gn(h))}else u=i.insert("circle",":first-child").attr("class","basic label-container").attr("style",n).attr("r",l).attr("cx",0).attr("cy",0);return je(e,u),e.intersect=function(f){return Y.info("Circle intersect",e,l,f),Ye.circle(e,l,f)},i}var Xj=M(()=>{"use strict";ut();Ot();qt();Xt();jt();hr();o(qj,"circle")});function G7e(t){let e=Math.cos(Math.PI/4),r=Math.sin(Math.PI/4),n=t*2,i={x:n/2*e,y:n/2*r},a={x:-(n/2)*e,y:n/2*r},s={x:-(n/2)*e,y:-(n/2)*r},l={x:n/2*e,y:-(n/2)*r};return`M ${a.x},${a.y} L ${l.x},${l.y} + M ${i.x},${i.y} L ${s.x},${s.y}`}function jj(t,e){let{labelStyles:r,nodeStyles:n}=Ze(e);e.labelStyle=r,e.label="";let i=t.insert("g").attr("class",ot(e)).attr("id",e.domId??e.id),a=Math.max(30,e?.width??0),{cssStyles:s}=e,l=Xe.svg(i),u=Ke(e,{});e.look!=="handDrawn"&&(u.roughness=0,u.fillStyle="solid");let h=l.circle(0,0,a*2,u),f=G7e(a),d=l.path(f,u),p=i.insert(()=>h,":first-child");return p.insert(()=>d),s&&e.look!=="handDrawn"&&p.selectAll("path").attr("style",s),n&&e.look!=="handDrawn"&&p.selectAll("path").attr("style",n),je(e,p),e.intersect=function(m){return Y.info("crossedCircle intersect",e,{radius:a,point:m}),Ye.circle(e,a,m)},i}var Kj=M(()=>{"use strict";ut();Ot();Xt();jt();qt();o(G7e,"createLine");o(jj,"crossedCircle")});function Yh(t,e,r,n=100,i=0,a=180){let s=[],l=i*Math.PI/180,f=(a*Math.PI/180-l)/(n-1);for(let d=0;dw,":first-child").attr("stroke-opacity",0),_.insert(()=>x,":first-child"),_.attr("class","text"),f&&e.look!=="handDrawn"&&_.selectAll("path").attr("style",f),n&&e.look!=="handDrawn"&&_.selectAll("path").attr("style",n),_.attr("transform",`translate(${h}, 0)`),s.attr("transform",`translate(${-l/2+h-(a.x-(a.left??0))},${-u/2+(e.padding??0)/2-(a.y-(a.top??0))})`),je(e,_),e.intersect=function(T){return Ye.polygon(e,p,T)},i}var Zj=M(()=>{"use strict";Ot();qt();Xt();jt();o(Yh,"generateCirclePoints");o(Qj,"curlyBraceLeft")});function qh(t,e,r,n=100,i=0,a=180){let s=[],l=i*Math.PI/180,f=(a*Math.PI/180-l)/(n-1);for(let d=0;dw,":first-child").attr("stroke-opacity",0),_.insert(()=>x,":first-child"),_.attr("class","text"),f&&e.look!=="handDrawn"&&_.selectAll("path").attr("style",f),n&&e.look!=="handDrawn"&&_.selectAll("path").attr("style",n),_.attr("transform",`translate(${-h}, 0)`),s.attr("transform",`translate(${-l/2+(e.padding??0)/2-(a.x-(a.left??0))},${-u/2+(e.padding??0)/2-(a.y-(a.top??0))})`),je(e,_),e.intersect=function(T){return Ye.polygon(e,p,T)},i}var eK=M(()=>{"use strict";Ot();qt();Xt();jt();o(qh,"generateCirclePoints");o(Jj,"curlyBraceRight")});function Oa(t,e,r,n=100,i=0,a=180){let s=[],l=i*Math.PI/180,f=(a*Math.PI/180-l)/(n-1);for(let d=0;dL,":first-child").attr("stroke-opacity",0),S.insert(()=>b,":first-child"),S.insert(()=>T,":first-child"),S.attr("class","text"),f&&e.look!=="handDrawn"&&S.selectAll("path").attr("style",f),n&&e.look!=="handDrawn"&&S.selectAll("path").attr("style",n),S.attr("transform",`translate(${h-h/4}, 0)`),s.attr("transform",`translate(${-l/2+(e.padding??0)/2-(a.x-(a.left??0))},${-u/2+(e.padding??0)/2-(a.y-(a.top??0))})`),je(e,S),e.intersect=function(A){return Ye.polygon(e,m,A)},i}var rK=M(()=>{"use strict";Ot();qt();Xt();jt();o(Oa,"generateCirclePoints");o(tK,"curlyBraces")});async function nK(t,e){let{labelStyles:r,nodeStyles:n}=Ze(e);e.labelStyle=r;let{shapeSvg:i,bbox:a}=await st(t,e,ot(e)),s=80,l=20,u=Math.max(s,(a.width+(e.padding??0)*2)*1.25,e?.width??0),h=Math.max(l,a.height+(e.padding??0)*2,e?.height??0),f=h/2,{cssStyles:d}=e,p=Xe.svg(i),m=Ke(e,{});e.look!=="handDrawn"&&(m.roughness=0,m.fillStyle="solid");let g=u,y=h,v=g-f,x=y/4,b=[{x:v,y:0},{x,y:0},{x:0,y:y/2},{x,y},{x:v,y},...O5(-v,-y/2,f,50,270,90)],w=Wt(b),_=p.path(w,m),T=i.insert(()=>_,":first-child");return T.attr("class","basic label-container"),d&&e.look!=="handDrawn"&&T.selectChildren("path").attr("style",d),n&&e.look!=="handDrawn"&&T.selectChildren("path").attr("style",n),T.attr("transform",`translate(${-u/2}, ${-h/2})`),je(e,T),e.intersect=function(E){return Ye.polygon(e,b,E)},i}var iK=M(()=>{"use strict";Ot();qt();Xt();jt();o(nK,"curvedTrapezoid")});async function aK(t,e){let{labelStyles:r,nodeStyles:n}=Ze(e);e.labelStyle=r;let{shapeSvg:i,bbox:a,label:s}=await st(t,e,ot(e)),l=Math.max(a.width+e.padding,e.width??0),u=l/2,h=u/(2.5+l/50),f=Math.max(a.height+h+e.padding,e.height??0),d,{cssStyles:p}=e;if(e.look==="handDrawn"){let m=Xe.svg(i),g=V7e(0,0,l,f,u,h),y=U7e(0,h,l,f,u,h),v=m.path(g,Ke(e,{})),x=m.path(y,Ke(e,{fill:"none"}));d=i.insert(()=>x,":first-child"),d=i.insert(()=>v,":first-child"),d.attr("class","basic label-container"),p&&d.attr("style",p)}else{let m=$7e(0,0,l,f,u,h);d=i.insert("path",":first-child").attr("d",m).attr("class","basic label-container").attr("style",Gn(p)).attr("style",n)}return d.attr("label-offset-y",h),d.attr("transform",`translate(${-l/2}, ${-(f/2+h)})`),je(e,d),s.attr("transform",`translate(${-(a.width/2)-(a.x-(a.left??0))}, ${-(a.height/2)+(e.padding??0)/1.5-(a.y-(a.top??0))})`),e.intersect=function(m){let g=Ye.rect(e,m),y=g.x-(e.x??0);if(u!=0&&(Math.abs(y)<(e.width??0)/2||Math.abs(y)==(e.width??0)/2&&Math.abs(g.y-(e.y??0))>(e.height??0)/2-h)){let v=h*h*(1-y*y/(u*u));v>0&&(v=Math.sqrt(v)),v=h-v,m.y-(e.y??0)>0&&(v=-v),g.y+=v}return g},i}var $7e,V7e,U7e,sK=M(()=>{"use strict";Ot();qt();Xt();jt();hr();$7e=o((t,e,r,n,i,a)=>[`M${t},${e+a}`,`a${i},${a} 0,0,0 ${r},0`,`a${i},${a} 0,0,0 ${-r},0`,`l0,${n}`,`a${i},${a} 0,0,0 ${r},0`,`l0,${-n}`].join(" "),"createCylinderPathD"),V7e=o((t,e,r,n,i,a)=>[`M${t},${e+a}`,`M${t+r},${e+a}`,`a${i},${a} 0,0,0 ${-r},0`,`l0,${n}`,`a${i},${a} 0,0,0 ${r},0`,`l0,${-n}`].join(" "),"createOuterCylinderPathD"),U7e=o((t,e,r,n,i,a)=>[`M${t-r/2},${-n/2}`,`a${i},${a} 0,0,0 ${r},0`].join(" "),"createInnerCylinderPathD");o(aK,"cylinder")});async function oK(t,e){let{labelStyles:r,nodeStyles:n}=Ze(e);e.labelStyle=r;let{shapeSvg:i,bbox:a,label:s}=await st(t,e,ot(e)),l=a.width+e.padding,u=a.height+e.padding,h=u*.2,f=-l/2,d=-u/2-h/2,{cssStyles:p}=e,m=Xe.svg(i),g=Ke(e,{});e.look!=="handDrawn"&&(g.roughness=0,g.fillStyle="solid");let y=[{x:f,y:d+h},{x:-f,y:d+h},{x:-f,y:-d},{x:f,y:-d},{x:f,y:d},{x:-f,y:d},{x:-f,y:d+h}],v=m.polygon(y.map(b=>[b.x,b.y]),g),x=i.insert(()=>v,":first-child");return x.attr("class","basic label-container"),p&&e.look!=="handDrawn"&&x.selectAll("path").attr("style",p),n&&e.look!=="handDrawn"&&x.selectAll("path").attr("style",n),s.attr("transform",`translate(${f+(e.padding??0)/2-(a.x-(a.left??0))}, ${d+h+(e.padding??0)/2-(a.y-(a.top??0))})`),je(e,x),e.intersect=function(b){return Ye.rect(e,b)},i}var lK=M(()=>{"use strict";Ot();qt();Xt();jt();o(oK,"dividedRectangle")});async function cK(t,e){let{labelStyles:r,nodeStyles:n}=Ze(e);e.labelStyle=r;let{shapeSvg:i,bbox:a,halfPadding:s}=await st(t,e,ot(e)),u=a.width/2+s+5,h=a.width/2+s,f,{cssStyles:d}=e;if(e.look==="handDrawn"){let p=Xe.svg(i),m=Ke(e,{roughness:.2,strokeWidth:2.5}),g=Ke(e,{roughness:.2,strokeWidth:1.5}),y=p.circle(0,0,u*2,m),v=p.circle(0,0,h*2,g);f=i.insert("g",":first-child"),f.attr("class",Gn(e.cssClasses)).attr("style",Gn(d)),f.node()?.appendChild(y),f.node()?.appendChild(v)}else{f=i.insert("g",":first-child");let p=f.insert("circle",":first-child"),m=f.insert("circle");f.attr("class","basic label-container").attr("style",n),p.attr("class","outer-circle").attr("style",n).attr("r",u).attr("cx",0).attr("cy",0),m.attr("class","inner-circle").attr("style",n).attr("r",h).attr("cx",0).attr("cy",0)}return je(e,f),e.intersect=function(p){return Y.info("DoubleCircle intersect",e,u,p),Ye.circle(e,u,p)},i}var uK=M(()=>{"use strict";ut();Ot();qt();Xt();jt();hr();o(cK,"doublecircle")});function hK(t,e,{config:{themeVariables:r}}){let{labelStyles:n,nodeStyles:i}=Ze(e);e.label="",e.labelStyle=n;let a=t.insert("g").attr("class",ot(e)).attr("id",e.domId??e.id),s=7,{cssStyles:l}=e,u=Xe.svg(a),{nodeBorder:h}=r,f=Ke(e,{fillStyle:"solid"});e.look!=="handDrawn"&&(f.roughness=0);let d=u.circle(0,0,s*2,f),p=a.insert(()=>d,":first-child");return p.selectAll("path").attr("style",`fill: ${h} !important;`),l&&l.length>0&&e.look!=="handDrawn"&&p.selectAll("path").attr("style",l),i&&e.look!=="handDrawn"&&p.selectAll("path").attr("style",i),je(e,p),e.intersect=function(m){return Y.info("filledCircle intersect",e,{radius:s,point:m}),Ye.circle(e,s,m)},a}var fK=M(()=>{"use strict";jt();ut();qt();Xt();Ot();o(hK,"filledCircle")});async function dK(t,e){let{labelStyles:r,nodeStyles:n}=Ze(e);e.labelStyle=r;let{shapeSvg:i,bbox:a,label:s}=await st(t,e,ot(e)),l=a.width+(e.padding??0),u=l+a.height,h=l+a.height,f=[{x:0,y:-u},{x:h,y:-u},{x:h/2,y:0}],{cssStyles:d}=e,p=Xe.svg(i),m=Ke(e,{});e.look!=="handDrawn"&&(m.roughness=0,m.fillStyle="solid");let g=Wt(f),y=p.path(g,m),v=i.insert(()=>y,":first-child").attr("transform",`translate(${-u/2}, ${u/2})`);return d&&e.look!=="handDrawn"&&v.selectChildren("path").attr("style",d),n&&e.look!=="handDrawn"&&v.selectChildren("path").attr("style",n),e.width=l,e.height=u,je(e,v),s.attr("transform",`translate(${-a.width/2-(a.x-(a.left??0))}, ${-u/2+(e.padding??0)/2+(a.y-(a.top??0))})`),e.intersect=function(x){return Y.info("Triangle intersect",e,f,x),Ye.polygon(e,f,x)},i}var pK=M(()=>{"use strict";ut();Ot();qt();Xt();jt();Ot();o(dK,"flippedTriangle")});function mK(t,e,{dir:r,config:{state:n,themeVariables:i}}){let{nodeStyles:a}=Ze(e);e.label="";let s=t.insert("g").attr("class",ot(e)).attr("id",e.domId??e.id),{cssStyles:l}=e,u=Math.max(70,e?.width??0),h=Math.max(10,e?.height??0);r==="LR"&&(u=Math.max(10,e?.width??0),h=Math.max(70,e?.height??0));let f=-1*u/2,d=-1*h/2,p=Xe.svg(s),m=Ke(e,{stroke:i.lineColor,fill:i.lineColor});e.look!=="handDrawn"&&(m.roughness=0,m.fillStyle="solid");let g=p.rectangle(f,d,u,h,m),y=s.insert(()=>g,":first-child");l&&e.look!=="handDrawn"&&y.selectAll("path").attr("style",l),a&&e.look!=="handDrawn"&&y.selectAll("path").attr("style",a),je(e,y);let v=n?.padding??0;return e.width&&e.height&&(e.width+=v/2||0,e.height+=v/2||0),e.intersect=function(x){return Ye.rect(e,x)},s}var gK=M(()=>{"use strict";jt();qt();Xt();Ot();o(mK,"forkJoin")});async function yK(t,e){let{labelStyles:r,nodeStyles:n}=Ze(e);e.labelStyle=r;let i=80,a=50,{shapeSvg:s,bbox:l}=await st(t,e,ot(e)),u=Math.max(i,l.width+(e.padding??0)*2,e?.width??0),h=Math.max(a,l.height+(e.padding??0)*2,e?.height??0),f=h/2,{cssStyles:d}=e,p=Xe.svg(s),m=Ke(e,{});e.look!=="handDrawn"&&(m.roughness=0,m.fillStyle="solid");let g=[{x:-u/2,y:-h/2},{x:u/2-f,y:-h/2},...O5(-u/2+f,0,f,50,90,270),{x:u/2-f,y:h/2},{x:-u/2,y:h/2}],y=Wt(g),v=p.path(y,m),x=s.insert(()=>v,":first-child");return x.attr("class","basic label-container"),d&&e.look!=="handDrawn"&&x.selectChildren("path").attr("style",d),n&&e.look!=="handDrawn"&&x.selectChildren("path").attr("style",n),je(e,x),e.intersect=function(b){return Y.info("Pill intersect",e,{radius:f,point:b}),Ye.polygon(e,g,b)},s}var vK=M(()=>{"use strict";ut();Ot();qt();Xt();jt();o(yK,"halfRoundedRectangle")});async function xK(t,e){let{labelStyles:r,nodeStyles:n}=Ze(e);e.labelStyle=r;let{shapeSvg:i,bbox:a}=await st(t,e,ot(e)),s=4,l=a.height+e.padding,u=l/s,h=a.width+2*u+e.padding,f=[{x:u,y:0},{x:h-u,y:0},{x:h,y:-l/2},{x:h-u,y:-l},{x:u,y:-l},{x:0,y:-l/2}],d,{cssStyles:p}=e;if(e.look==="handDrawn"){let m=Xe.svg(i),g=Ke(e,{}),y=H7e(0,0,h,l,u),v=m.path(y,g);d=i.insert(()=>v,":first-child").attr("transform",`translate(${-h/2}, ${l/2})`),p&&d.attr("style",p)}else d=Ia(i,h,l,f);return n&&d.attr("style",n),e.width=h,e.height=l,je(e,d),e.intersect=function(m){return Ye.polygon(e,f,m)},i}var H7e,bK=M(()=>{"use strict";Ot();qt();Xt();jt();Ou();H7e=o((t,e,r,n,i)=>[`M${t+i},${e}`,`L${t+r-i},${e}`,`L${t+r},${e-n/2}`,`L${t+r-i},${e-n}`,`L${t+i},${e-n}`,`L${t},${e-n/2}`,"Z"].join(" "),"createHexagonPathD");o(xK,"hexagon")});async function wK(t,e){let{labelStyles:r,nodeStyles:n}=Ze(e);e.label="",e.labelStyle=r;let{shapeSvg:i}=await st(t,e,ot(e)),a=Math.max(30,e?.width??0),s=Math.max(30,e?.height??0),{cssStyles:l}=e,u=Xe.svg(i),h=Ke(e,{});e.look!=="handDrawn"&&(h.roughness=0,h.fillStyle="solid");let f=[{x:0,y:0},{x:a,y:0},{x:0,y:s},{x:a,y:s}],d=Wt(f),p=u.path(d,h),m=i.insert(()=>p,":first-child");return m.attr("class","basic label-container"),l&&e.look!=="handDrawn"&&m.selectChildren("path").attr("style",l),n&&e.look!=="handDrawn"&&m.selectChildren("path").attr("style",n),m.attr("transform",`translate(${-a/2}, ${-s/2})`),je(e,m),e.intersect=function(g){return Y.info("Pill intersect",e,{points:f}),Ye.polygon(e,f,g)},i}var TK=M(()=>{"use strict";ut();Ot();qt();Xt();jt();o(wK,"hourglass")});async function kK(t,e,{config:{themeVariables:r,flowchart:n}}){let{labelStyles:i}=Ze(e);e.labelStyle=i;let a=e.assetHeight??48,s=e.assetWidth??48,l=Math.max(a,s),u=n?.wrappingWidth;e.width=Math.max(l,u??0);let{shapeSvg:h,bbox:f,label:d}=await st(t,e,"icon-shape default"),p=e.pos==="t",m=l,g=l,{nodeBorder:y}=r,{stylesMap:v}=Sc(e),x=-g/2,b=-m/2,w=e.label?8:0,_=Xe.svg(h),T=Ke(e,{stroke:"none",fill:"none"});e.look!=="handDrawn"&&(T.roughness=0,T.fillStyle="solid");let E=_.rectangle(x,b,g,m,T),L=Math.max(g,f.width),S=m+f.height+w,A=_.rectangle(-L/2,-S/2,L,S,{...T,fill:"transparent",stroke:"none"}),I=h.insert(()=>E,":first-child"),D=h.insert(()=>A);if(e.icon){let k=h.append("g");k.html(`${await _o(e.icon,{height:l,width:l,fallbackPrefix:""})}`);let R=k.node().getBBox(),C=R.width,O=R.height,N=R.x,P=R.y;k.attr("transform",`translate(${-C/2-N},${p?f.height/2+w/2-O/2-P:-f.height/2-w/2-O/2-P})`),k.attr("style",`color: ${v.get("stroke")??y};`)}return d.attr("transform",`translate(${-f.width/2-(f.x-(f.left??0))},${p?-S/2:S/2-f.height})`),I.attr("transform",`translate(0,${p?f.height/2+w/2:-f.height/2-w/2})`),je(e,D),e.intersect=function(k){if(Y.info("iconSquare intersect",e,k),!e.label)return Ye.rect(e,k);let R=e.x??0,C=e.y??0,O=e.height??0,N=[];return p?N=[{x:R-f.width/2,y:C-O/2},{x:R+f.width/2,y:C-O/2},{x:R+f.width/2,y:C-O/2+f.height+w},{x:R+g/2,y:C-O/2+f.height+w},{x:R+g/2,y:C+O/2},{x:R-g/2,y:C+O/2},{x:R-g/2,y:C-O/2+f.height+w},{x:R-f.width/2,y:C-O/2+f.height+w}]:N=[{x:R-g/2,y:C-O/2},{x:R+g/2,y:C-O/2},{x:R+g/2,y:C-O/2+m},{x:R+f.width/2,y:C-O/2+m},{x:R+f.width/2/2,y:C+O/2},{x:R-f.width/2,y:C+O/2},{x:R-f.width/2,y:C-O/2+m},{x:R-g/2,y:C-O/2+m}],Ye.polygon(e,N,k)},h}var EK=M(()=>{"use strict";jt();ut();su();qt();Xt();Ot();o(kK,"icon")});async function SK(t,e,{config:{themeVariables:r,flowchart:n}}){let{labelStyles:i}=Ze(e);e.labelStyle=i;let a=e.assetHeight??48,s=e.assetWidth??48,l=Math.max(a,s),u=n?.wrappingWidth;e.width=Math.max(l,u??0);let{shapeSvg:h,bbox:f,label:d}=await st(t,e,"icon-shape default"),p=20,m=e.label?8:0,g=e.pos==="t",{nodeBorder:y,mainBkg:v}=r,{stylesMap:x}=Sc(e),b=Xe.svg(h),w=Ke(e,{});e.look!=="handDrawn"&&(w.roughness=0,w.fillStyle="solid");let _=x.get("fill");w.stroke=_??v;let T=h.append("g");e.icon&&T.html(`${await _o(e.icon,{height:l,width:l,fallbackPrefix:""})}`);let E=T.node().getBBox(),L=E.width,S=E.height,A=E.x,I=E.y,D=Math.max(L,S)*Math.SQRT2+p*2,k=b.circle(0,0,D,w),R=Math.max(D,f.width),C=D+f.height+m,O=b.rectangle(-R/2,-C/2,R,C,{...w,fill:"transparent",stroke:"none"}),N=h.insert(()=>k,":first-child"),P=h.insert(()=>O);return T.attr("transform",`translate(${-L/2-A},${g?f.height/2+m/2-S/2-I:-f.height/2-m/2-S/2-I})`),T.attr("style",`color: ${x.get("stroke")??y};`),d.attr("transform",`translate(${-f.width/2-(f.x-(f.left??0))},${g?-C/2:C/2-f.height})`),N.attr("transform",`translate(0,${g?f.height/2+m/2:-f.height/2-m/2})`),je(e,P),e.intersect=function(F){return Y.info("iconSquare intersect",e,F),Ye.rect(e,F)},h}var CK=M(()=>{"use strict";jt();ut();su();qt();Xt();Ot();o(SK,"iconCircle")});var Pa,Xh=M(()=>{"use strict";Pa=o((t,e,r,n,i)=>["M",t+i,e,"H",t+r-i,"A",i,i,0,0,1,t+r,e+i,"V",e+n-i,"A",i,i,0,0,1,t+r-i,e+n,"H",t+i,"A",i,i,0,0,1,t,e+n-i,"V",e+i,"A",i,i,0,0,1,t+i,e,"Z"].join(" "),"createRoundedRectPathD")});async function AK(t,e,{config:{themeVariables:r,flowchart:n}}){let{labelStyles:i}=Ze(e);e.labelStyle=i;let a=e.assetHeight??48,s=e.assetWidth??48,l=Math.max(a,s),u=n?.wrappingWidth;e.width=Math.max(l,u??0);let{shapeSvg:h,bbox:f,halfPadding:d,label:p}=await st(t,e,"icon-shape default"),m=e.pos==="t",g=l+d*2,y=l+d*2,{nodeBorder:v,mainBkg:x}=r,{stylesMap:b}=Sc(e),w=-y/2,_=-g/2,T=e.label?8:0,E=Xe.svg(h),L=Ke(e,{});e.look!=="handDrawn"&&(L.roughness=0,L.fillStyle="solid");let S=b.get("fill");L.stroke=S??x;let A=E.path(Pa(w,_,y,g,5),L),I=Math.max(y,f.width),D=g+f.height+T,k=E.rectangle(-I/2,-D/2,I,D,{...L,fill:"transparent",stroke:"none"}),R=h.insert(()=>A,":first-child").attr("class","icon-shape2"),C=h.insert(()=>k);if(e.icon){let O=h.append("g");O.html(`${await _o(e.icon,{height:l,width:l,fallbackPrefix:""})}`);let N=O.node().getBBox(),P=N.width,F=N.height,B=N.x,G=N.y;O.attr("transform",`translate(${-P/2-B},${m?f.height/2+T/2-F/2-G:-f.height/2-T/2-F/2-G})`),O.attr("style",`color: ${b.get("stroke")??v};`)}return p.attr("transform",`translate(${-f.width/2-(f.x-(f.left??0))},${m?-D/2:D/2-f.height})`),R.attr("transform",`translate(0,${m?f.height/2+T/2:-f.height/2-T/2})`),je(e,C),e.intersect=function(O){if(Y.info("iconSquare intersect",e,O),!e.label)return Ye.rect(e,O);let N=e.x??0,P=e.y??0,F=e.height??0,B=[];return m?B=[{x:N-f.width/2,y:P-F/2},{x:N+f.width/2,y:P-F/2},{x:N+f.width/2,y:P-F/2+f.height+T},{x:N+y/2,y:P-F/2+f.height+T},{x:N+y/2,y:P+F/2},{x:N-y/2,y:P+F/2},{x:N-y/2,y:P-F/2+f.height+T},{x:N-f.width/2,y:P-F/2+f.height+T}]:B=[{x:N-y/2,y:P-F/2},{x:N+y/2,y:P-F/2},{x:N+y/2,y:P-F/2+g},{x:N+f.width/2,y:P-F/2+g},{x:N+f.width/2/2,y:P+F/2},{x:N-f.width/2,y:P+F/2},{x:N-f.width/2,y:P-F/2+g},{x:N-y/2,y:P-F/2+g}],Ye.polygon(e,B,O)},h}var _K=M(()=>{"use strict";jt();ut();su();qt();Xt();Xh();Ot();o(AK,"iconRounded")});async function LK(t,e,{config:{themeVariables:r,flowchart:n}}){let{labelStyles:i}=Ze(e);e.labelStyle=i;let a=e.assetHeight??48,s=e.assetWidth??48,l=Math.max(a,s),u=n?.wrappingWidth;e.width=Math.max(l,u??0);let{shapeSvg:h,bbox:f,halfPadding:d,label:p}=await st(t,e,"icon-shape default"),m=e.pos==="t",g=l+d*2,y=l+d*2,{nodeBorder:v,mainBkg:x}=r,{stylesMap:b}=Sc(e),w=-y/2,_=-g/2,T=e.label?8:0,E=Xe.svg(h),L=Ke(e,{});e.look!=="handDrawn"&&(L.roughness=0,L.fillStyle="solid");let S=b.get("fill");L.stroke=S??x;let A=E.path(Pa(w,_,y,g,.1),L),I=Math.max(y,f.width),D=g+f.height+T,k=E.rectangle(-I/2,-D/2,I,D,{...L,fill:"transparent",stroke:"none"}),R=h.insert(()=>A,":first-child"),C=h.insert(()=>k);if(e.icon){let O=h.append("g");O.html(`${await _o(e.icon,{height:l,width:l,fallbackPrefix:""})}`);let N=O.node().getBBox(),P=N.width,F=N.height,B=N.x,G=N.y;O.attr("transform",`translate(${-P/2-B},${m?f.height/2+T/2-F/2-G:-f.height/2-T/2-F/2-G})`),O.attr("style",`color: ${b.get("stroke")??v};`)}return p.attr("transform",`translate(${-f.width/2-(f.x-(f.left??0))},${m?-D/2:D/2-f.height})`),R.attr("transform",`translate(0,${m?f.height/2+T/2:-f.height/2-T/2})`),je(e,C),e.intersect=function(O){if(Y.info("iconSquare intersect",e,O),!e.label)return Ye.rect(e,O);let N=e.x??0,P=e.y??0,F=e.height??0,B=[];return m?B=[{x:N-f.width/2,y:P-F/2},{x:N+f.width/2,y:P-F/2},{x:N+f.width/2,y:P-F/2+f.height+T},{x:N+y/2,y:P-F/2+f.height+T},{x:N+y/2,y:P+F/2},{x:N-y/2,y:P+F/2},{x:N-y/2,y:P-F/2+f.height+T},{x:N-f.width/2,y:P-F/2+f.height+T}]:B=[{x:N-y/2,y:P-F/2},{x:N+y/2,y:P-F/2},{x:N+y/2,y:P-F/2+g},{x:N+f.width/2,y:P-F/2+g},{x:N+f.width/2/2,y:P+F/2},{x:N-f.width/2,y:P+F/2},{x:N-f.width/2,y:P-F/2+g},{x:N-y/2,y:P-F/2+g}],Ye.polygon(e,B,O)},h}var DK=M(()=>{"use strict";jt();ut();su();qt();Xh();Xt();Ot();o(LK,"iconSquare")});async function NK(t,e,{config:{flowchart:r}}){let n=new Image;n.src=e?.img??"",await n.decode();let i=Number(n.naturalWidth.toString().replace("px","")),a=Number(n.naturalHeight.toString().replace("px",""));e.imageAspectRatio=i/a;let{labelStyles:s}=Ze(e);e.labelStyle=s;let l=r?.wrappingWidth;e.defaultWidth=r?.wrappingWidth;let u=Math.max(e.label?l??0:0,e?.assetWidth??i),h=e.constraint==="on"&&e?.assetHeight?e.assetHeight*e.imageAspectRatio:u,f=e.constraint==="on"?h/e.imageAspectRatio:e?.assetHeight??a;e.width=Math.max(h,l??0);let{shapeSvg:d,bbox:p,label:m}=await st(t,e,"image-shape default"),g=e.pos==="t",y=-h/2,v=-f/2,x=e.label?8:0,b=Xe.svg(d),w=Ke(e,{});e.look!=="handDrawn"&&(w.roughness=0,w.fillStyle="solid");let _=b.rectangle(y,v,h,f,w),T=Math.max(h,p.width),E=f+p.height+x,L=b.rectangle(-T/2,-E/2,T,E,{...w,fill:"none",stroke:"none"}),S=d.insert(()=>_,":first-child"),A=d.insert(()=>L);if(e.img){let I=d.append("image");I.attr("href",e.img),I.attr("width",h),I.attr("height",f),I.attr("preserveAspectRatio","none"),I.attr("transform",`translate(${-h/2},${g?E/2-f:-E/2})`)}return m.attr("transform",`translate(${-p.width/2-(p.x-(p.left??0))},${g?-f/2-p.height/2-x/2:f/2-p.height/2+x/2})`),S.attr("transform",`translate(0,${g?p.height/2+x/2:-p.height/2-x/2})`),je(e,A),e.intersect=function(I){if(Y.info("iconSquare intersect",e,I),!e.label)return Ye.rect(e,I);let D=e.x??0,k=e.y??0,R=e.height??0,C=[];return g?C=[{x:D-p.width/2,y:k-R/2},{x:D+p.width/2,y:k-R/2},{x:D+p.width/2,y:k-R/2+p.height+x},{x:D+h/2,y:k-R/2+p.height+x},{x:D+h/2,y:k+R/2},{x:D-h/2,y:k+R/2},{x:D-h/2,y:k-R/2+p.height+x},{x:D-p.width/2,y:k-R/2+p.height+x}]:C=[{x:D-h/2,y:k-R/2},{x:D+h/2,y:k-R/2},{x:D+h/2,y:k-R/2+f},{x:D+p.width/2,y:k-R/2+f},{x:D+p.width/2/2,y:k+R/2},{x:D-p.width/2,y:k+R/2},{x:D-p.width/2,y:k-R/2+f},{x:D-h/2,y:k-R/2+f}],Ye.polygon(e,C,I)},d}var RK=M(()=>{"use strict";jt();ut();qt();Xt();Ot();o(NK,"imageSquare")});async function MK(t,e){let{labelStyles:r,nodeStyles:n}=Ze(e);e.labelStyle=r;let{shapeSvg:i,bbox:a}=await st(t,e,ot(e)),s=Math.max(a.width+(e.padding??0)*2,e?.width??0),l=Math.max(a.height+(e.padding??0)*2,e?.height??0),u=[{x:0,y:0},{x:s,y:0},{x:s+3*l/6,y:-l},{x:-3*l/6,y:-l}],h,{cssStyles:f}=e;if(e.look==="handDrawn"){let d=Xe.svg(i),p=Ke(e,{}),m=Wt(u),g=d.path(m,p);h=i.insert(()=>g,":first-child").attr("transform",`translate(${-s/2}, ${l/2})`),f&&h.attr("style",f)}else h=Ia(i,s,l,u);return n&&h.attr("style",n),e.width=s,e.height=l,je(e,h),e.intersect=function(d){return Ye.polygon(e,u,d)},i}var IK=M(()=>{"use strict";Ot();qt();Xt();jt();Ou();o(MK,"inv_trapezoid")});async function Pd(t,e,r){let{labelStyles:n,nodeStyles:i}=Ze(e);e.labelStyle=n;let{shapeSvg:a,bbox:s}=await st(t,e,ot(e)),l=Math.max(s.width+r.labelPaddingX*2,e?.width||0),u=Math.max(s.height+r.labelPaddingY*2,e?.height||0),h=-l/2,f=-u/2,d,{rx:p,ry:m}=e,{cssStyles:g}=e;if(r?.rx&&r.ry&&(p=r.rx,m=r.ry),e.look==="handDrawn"){let y=Xe.svg(a),v=Ke(e,{}),x=p||m?y.path(Pa(h,f,l,u,p||0),v):y.rectangle(h,f,l,u,v);d=a.insert(()=>x,":first-child"),d.attr("class","basic label-container").attr("style",Gn(g))}else d=a.insert("rect",":first-child"),d.attr("class","basic label-container").attr("style",i).attr("rx",Gn(p)).attr("ry",Gn(m)).attr("x",h).attr("y",f).attr("width",l).attr("height",u);return je(e,d),e.intersect=function(y){return Ye.rect(e,y)},a}var Mv=M(()=>{"use strict";Ot();qt();Xh();Xt();jt();hr();o(Pd,"drawRect")});async function OK(t,e){let{shapeSvg:r,bbox:n,label:i}=await st(t,e,"label"),a=r.insert("rect",":first-child");return a.attr("width",.1).attr("height",.1),r.attr("class","label edgeLabel"),i.attr("transform",`translate(${-(n.width/2)-(n.x-(n.left??0))}, ${-(n.height/2)-(n.y-(n.top??0))})`),je(e,a),e.intersect=function(u){return Ye.rect(e,u)},r}var PK=M(()=>{"use strict";Mv();Ot();qt();o(OK,"labelRect")});async function BK(t,e){let{labelStyles:r,nodeStyles:n}=Ze(e);e.labelStyle=r;let{shapeSvg:i,bbox:a}=await st(t,e,ot(e)),s=Math.max(a.width+(e.padding??0),e?.width??0),l=Math.max(a.height+(e.padding??0),e?.height??0),u=[{x:0,y:0},{x:s+3*l/6,y:0},{x:s,y:-l},{x:-(3*l)/6,y:-l}],h,{cssStyles:f}=e;if(e.look==="handDrawn"){let d=Xe.svg(i),p=Ke(e,{}),m=Wt(u),g=d.path(m,p);h=i.insert(()=>g,":first-child").attr("transform",`translate(${-s/2}, ${l/2})`),f&&h.attr("style",f)}else h=Ia(i,s,l,u);return n&&h.attr("style",n),e.width=s,e.height=l,je(e,h),e.intersect=function(d){return Ye.polygon(e,u,d)},i}var FK=M(()=>{"use strict";Ot();qt();Xt();jt();Ou();o(BK,"lean_left")});async function zK(t,e){let{labelStyles:r,nodeStyles:n}=Ze(e);e.labelStyle=r;let{shapeSvg:i,bbox:a}=await st(t,e,ot(e)),s=Math.max(a.width+(e.padding??0),e?.width??0),l=Math.max(a.height+(e.padding??0),e?.height??0),u=[{x:-3*l/6,y:0},{x:s,y:0},{x:s+3*l/6,y:-l},{x:0,y:-l}],h,{cssStyles:f}=e;if(e.look==="handDrawn"){let d=Xe.svg(i),p=Ke(e,{}),m=Wt(u),g=d.path(m,p);h=i.insert(()=>g,":first-child").attr("transform",`translate(${-s/2}, ${l/2})`),f&&h.attr("style",f)}else h=Ia(i,s,l,u);return n&&h.attr("style",n),e.width=s,e.height=l,je(e,h),e.intersect=function(d){return Ye.polygon(e,u,d)},i}var GK=M(()=>{"use strict";Ot();qt();Xt();jt();Ou();o(zK,"lean_right")});function $K(t,e){let{labelStyles:r,nodeStyles:n}=Ze(e);e.label="",e.labelStyle=r;let i=t.insert("g").attr("class",ot(e)).attr("id",e.domId??e.id),{cssStyles:a}=e,s=Math.max(35,e?.width??0),l=Math.max(35,e?.height??0),u=7,h=[{x:s,y:0},{x:0,y:l+u/2},{x:s-2*u,y:l+u/2},{x:0,y:2*l},{x:s,y:l-u/2},{x:2*u,y:l-u/2}],f=Xe.svg(i),d=Ke(e,{});e.look!=="handDrawn"&&(d.roughness=0,d.fillStyle="solid");let p=Wt(h),m=f.path(p,d),g=i.insert(()=>m,":first-child");return a&&e.look!=="handDrawn"&&g.selectAll("path").attr("style",a),n&&e.look!=="handDrawn"&&g.selectAll("path").attr("style",n),g.attr("transform",`translate(-${s/2},${-l})`),je(e,g),e.intersect=function(y){return Y.info("lightningBolt intersect",e,y),Ye.polygon(e,h,y)},i}var VK=M(()=>{"use strict";ut();Ot();Xt();jt();qt();Ot();o($K,"lightningBolt")});async function UK(t,e){let{labelStyles:r,nodeStyles:n}=Ze(e);e.labelStyle=r;let{shapeSvg:i,bbox:a,label:s}=await st(t,e,ot(e)),l=Math.max(a.width+(e.padding??0),e.width??0),u=l/2,h=u/(2.5+l/50),f=Math.max(a.height+h+(e.padding??0),e.height??0),d=f*.1,p,{cssStyles:m}=e;if(e.look==="handDrawn"){let g=Xe.svg(i),y=Y7e(0,0,l,f,u,h,d),v=q7e(0,h,l,f,u,h),x=Ke(e,{}),b=g.path(y,x),w=g.path(v,x);i.insert(()=>w,":first-child").attr("class","line"),p=i.insert(()=>b,":first-child"),p.attr("class","basic label-container"),m&&p.attr("style",m)}else{let g=W7e(0,0,l,f,u,h,d);p=i.insert("path",":first-child").attr("d",g).attr("class","basic label-container").attr("style",Gn(m)).attr("style",n)}return p.attr("label-offset-y",h),p.attr("transform",`translate(${-l/2}, ${-(f/2+h)})`),je(e,p),s.attr("transform",`translate(${-(a.width/2)-(a.x-(a.left??0))}, ${-(a.height/2)+h-(a.y-(a.top??0))})`),e.intersect=function(g){let y=Ye.rect(e,g),v=y.x-(e.x??0);if(u!=0&&(Math.abs(v)<(e.width??0)/2||Math.abs(v)==(e.width??0)/2&&Math.abs(y.y-(e.y??0))>(e.height??0)/2-h)){let x=h*h*(1-v*v/(u*u));x>0&&(x=Math.sqrt(x)),x=h-x,g.y-(e.y??0)>0&&(x=-x),y.y+=x}return y},i}var W7e,Y7e,q7e,HK=M(()=>{"use strict";Ot();qt();Xt();jt();hr();W7e=o((t,e,r,n,i,a,s)=>[`M${t},${e+a}`,`a${i},${a} 0,0,0 ${r},0`,`a${i},${a} 0,0,0 ${-r},0`,`l0,${n}`,`a${i},${a} 0,0,0 ${r},0`,`l0,${-n}`,`M${t},${e+a+s}`,`a${i},${a} 0,0,0 ${r},0`].join(" "),"createCylinderPathD"),Y7e=o((t,e,r,n,i,a,s)=>[`M${t},${e+a}`,`M${t+r},${e+a}`,`a${i},${a} 0,0,0 ${-r},0`,`l0,${n}`,`a${i},${a} 0,0,0 ${r},0`,`l0,${-n}`,`M${t},${e+a+s}`,`a${i},${a} 0,0,0 ${r},0`].join(" "),"createOuterCylinderPathD"),q7e=o((t,e,r,n,i,a)=>[`M${t-r/2},${-n/2}`,`a${i},${a} 0,0,0 ${r},0`].join(" "),"createInnerCylinderPathD");o(UK,"linedCylinder")});async function WK(t,e){let{labelStyles:r,nodeStyles:n}=Ze(e);e.labelStyle=r;let{shapeSvg:i,bbox:a,label:s}=await st(t,e,ot(e)),l=Math.max(a.width+(e.padding??0)*2,e?.width??0),u=Math.max(a.height+(e.padding??0)*2,e?.height??0),h=u/4,f=u+h,{cssStyles:d}=e,p=Xe.svg(i),m=Ke(e,{});e.look!=="handDrawn"&&(m.roughness=0,m.fillStyle="solid");let g=[{x:-l/2-l/2*.1,y:-f/2},{x:-l/2-l/2*.1,y:f/2},...Wo(-l/2-l/2*.1,f/2,l/2+l/2*.1,f/2,h,.8),{x:l/2+l/2*.1,y:-f/2},{x:-l/2-l/2*.1,y:-f/2},{x:-l/2,y:-f/2},{x:-l/2,y:f/2*1.1},{x:-l/2,y:-f/2}],y=p.polygon(g.map(x=>[x.x,x.y]),m),v=i.insert(()=>y,":first-child");return v.attr("class","basic label-container"),d&&e.look!=="handDrawn"&&v.selectAll("path").attr("style",d),n&&e.look!=="handDrawn"&&v.selectAll("path").attr("style",n),v.attr("transform",`translate(0,${-h/2})`),s.attr("transform",`translate(${-l/2+(e.padding??0)+l/2*.1/2-(a.x-(a.left??0))},${-u/2+(e.padding??0)-h/2-(a.y-(a.top??0))})`),je(e,v),e.intersect=function(x){return Ye.polygon(e,g,x)},i}var YK=M(()=>{"use strict";Ot();qt();jt();Xt();o(WK,"linedWaveEdgedRect")});async function qK(t,e){let{labelStyles:r,nodeStyles:n}=Ze(e);e.labelStyle=r;let{shapeSvg:i,bbox:a,label:s}=await st(t,e,ot(e)),l=Math.max(a.width+(e.padding??0)*2,e?.width??0),u=Math.max(a.height+(e.padding??0)*2,e?.height??0),h=5,f=-l/2,d=-u/2,{cssStyles:p}=e,m=Xe.svg(i),g=Ke(e,{}),y=[{x:f-h,y:d+h},{x:f-h,y:d+u+h},{x:f+l-h,y:d+u+h},{x:f+l-h,y:d+u},{x:f+l,y:d+u},{x:f+l,y:d+u-h},{x:f+l+h,y:d+u-h},{x:f+l+h,y:d-h},{x:f+h,y:d-h},{x:f+h,y:d},{x:f,y:d},{x:f,y:d+h}],v=[{x:f,y:d+h},{x:f+l-h,y:d+h},{x:f+l-h,y:d+u},{x:f+l,y:d+u},{x:f+l,y:d},{x:f,y:d}];e.look!=="handDrawn"&&(g.roughness=0,g.fillStyle="solid");let x=Wt(y),b=m.path(x,g),w=Wt(v),_=m.path(w,{...g,fill:"none"}),T=i.insert(()=>_,":first-child");return T.insert(()=>b,":first-child"),T.attr("class","basic label-container"),p&&e.look!=="handDrawn"&&T.selectAll("path").attr("style",p),n&&e.look!=="handDrawn"&&T.selectAll("path").attr("style",n),s.attr("transform",`translate(${-(a.width/2)-h-(a.x-(a.left??0))}, ${-(a.height/2)+h-(a.y-(a.top??0))})`),je(e,T),e.intersect=function(E){return Ye.polygon(e,y,E)},i}var XK=M(()=>{"use strict";Ot();Xt();jt();qt();o(qK,"multiRect")});async function jK(t,e){let{labelStyles:r,nodeStyles:n}=Ze(e);e.labelStyle=r;let{shapeSvg:i,bbox:a,label:s}=await st(t,e,ot(e)),l=Math.max(a.width+(e.padding??0)*2,e?.width??0),u=Math.max(a.height+(e.padding??0)*2,e?.height??0),h=u/4,f=u+h,d=-l/2,p=-f/2,m=5,{cssStyles:g}=e,y=Wo(d-m,p+f+m,d+l-m,p+f+m,h,.8),v=y?.[y.length-1],x=[{x:d-m,y:p+m},{x:d-m,y:p+f+m},...y,{x:d+l-m,y:v.y-m},{x:d+l,y:v.y-m},{x:d+l,y:v.y-2*m},{x:d+l+m,y:v.y-2*m},{x:d+l+m,y:p-m},{x:d+m,y:p-m},{x:d+m,y:p},{x:d,y:p},{x:d,y:p+m}],b=[{x:d,y:p+m},{x:d+l-m,y:p+m},{x:d+l-m,y:v.y-m},{x:d+l,y:v.y-m},{x:d+l,y:p},{x:d,y:p}],w=Xe.svg(i),_=Ke(e,{});e.look!=="handDrawn"&&(_.roughness=0,_.fillStyle="solid");let T=Wt(x),E=w.path(T,_),L=Wt(b),S=w.path(L,_),A=i.insert(()=>E,":first-child");return A.insert(()=>S),A.attr("class","basic label-container"),g&&e.look!=="handDrawn"&&A.selectAll("path").attr("style",g),n&&e.look!=="handDrawn"&&A.selectAll("path").attr("style",n),A.attr("transform",`translate(0,${-h/2})`),s.attr("transform",`translate(${-(a.width/2)-m-(a.x-(a.left??0))}, ${-(a.height/2)+m-h/2-(a.y-(a.top??0))})`),je(e,A),e.intersect=function(I){return Ye.polygon(e,x,I)},i}var KK=M(()=>{"use strict";Ot();qt();jt();Xt();o(jK,"multiWaveEdgedRectangle")});async function QK(t,e,{config:{themeVariables:r}}){let{labelStyles:n,nodeStyles:i}=Ze(e);e.labelStyle=n,e.useHtmlLabels||Cr().flowchart?.htmlLabels!==!1||(e.centerLabel=!0);let{shapeSvg:s,bbox:l}=await st(t,e,ot(e)),u=Math.max(l.width+(e.padding??0)*2,e?.width??0),h=Math.max(l.height+(e.padding??0)*2,e?.height??0),f=-u/2,d=-h/2,{cssStyles:p}=e,m=Xe.svg(s),g=Ke(e,{fill:r.noteBkgColor,stroke:r.noteBorderColor});e.look!=="handDrawn"&&(g.roughness=0,g.fillStyle="solid");let y=m.rectangle(f,d,u,h,g),v=s.insert(()=>y,":first-child");return v.attr("class","basic label-container"),p&&e.look!=="handDrawn"&&v.selectAll("path").attr("style",p),i&&e.look!=="handDrawn"&&v.selectAll("path").attr("style",i),je(e,v),e.intersect=function(x){return Ye.rect(e,x)},s}var ZK=M(()=>{"use strict";jt();qt();Xt();Ot();Za();o(QK,"note")});async function JK(t,e){let{labelStyles:r,nodeStyles:n}=Ze(e);e.labelStyle=r;let{shapeSvg:i,bbox:a}=await st(t,e,ot(e)),s=a.width+e.padding,l=a.height+e.padding,u=s+l,h=[{x:u/2,y:0},{x:u,y:-u/2},{x:u/2,y:-u},{x:0,y:-u/2}],f,{cssStyles:d}=e;if(e.look==="handDrawn"){let p=Xe.svg(i),m=Ke(e,{}),g=X7e(0,0,u),y=p.path(g,m);f=i.insert(()=>y,":first-child").attr("transform",`translate(${-u/2}, ${u/2})`),d&&f.attr("style",d)}else f=Ia(i,u,u,h);return n&&f.attr("style",n),je(e,f),e.intersect=function(p){return Y.debug(`APA12 Intersect called SPLIT +point:`,p,` +node: +`,e,` +res:`,Ye.polygon(e,h,p)),Ye.polygon(e,h,p)},i}var X7e,eQ=M(()=>{"use strict";ut();Ot();qt();Xt();jt();Ou();X7e=o((t,e,r)=>[`M${t+r/2},${e}`,`L${t+r},${e-r/2}`,`L${t+r/2},${e-r}`,`L${t},${e-r/2}`,"Z"].join(" "),"createDecisionBoxPathD");o(JK,"question")});async function tQ(t,e){let{labelStyles:r,nodeStyles:n}=Ze(e);e.labelStyle=r;let{shapeSvg:i,bbox:a,label:s}=await st(t,e,ot(e)),l=Math.max(a.width+(e.padding??0),e?.width??0),u=Math.max(a.height+(e.padding??0),e?.height??0),h=-l/2,f=-u/2,d=f/2,p=[{x:h+d,y:f},{x:h,y:0},{x:h+d,y:-f},{x:-h,y:-f},{x:-h,y:f}],{cssStyles:m}=e,g=Xe.svg(i),y=Ke(e,{});e.look!=="handDrawn"&&(y.roughness=0,y.fillStyle="solid");let v=Wt(p),x=g.path(v,y),b=i.insert(()=>x,":first-child");return b.attr("class","basic label-container"),m&&e.look!=="handDrawn"&&b.selectAll("path").attr("style",m),n&&e.look!=="handDrawn"&&b.selectAll("path").attr("style",n),b.attr("transform",`translate(${-d/2},0)`),s.attr("transform",`translate(${-d/2-a.width/2-(a.x-(a.left??0))}, ${-(a.height/2)-(a.y-(a.top??0))})`),je(e,b),e.intersect=function(w){return Ye.polygon(e,p,w)},i}var rQ=M(()=>{"use strict";Ot();qt();Xt();jt();o(tQ,"rect_left_inv_arrow")});function j7e(t,e){e&&t.attr("style",e)}async function K7e(t){let e=Ve(document.createElementNS("http://www.w3.org/2000/svg","foreignObject")),r=e.append("xhtml:div"),n=t.label;t.label&&yi(t.label)&&(n=await bh(t.label.replace(qe.lineBreakRegex,` +`),pe()));let i=t.isNode?"nodeLabel":"edgeLabel";return r.html('"+n+""),j7e(r,t.labelStyle),r.style("display","inline-block"),r.style("padding-right","1px"),r.style("white-space","nowrap"),r.attr("xmlns","http://www.w3.org/1999/xhtml"),e.node()}var Q7e,Cc,Y5=M(()=>{"use strict";pr();ut();Vt();fr();hr();o(j7e,"applyStyle");o(K7e,"addHtmlLabel");Q7e=o(async(t,e,r,n)=>{let i=t||"";if(typeof i=="object"&&(i=i[0]),xr(pe().flowchart.htmlLabels)){i=i.replace(/\\n|\n/g,"
    "),Y.info("vertexText"+i);let a={isNode:n,label:Ma(i).replace(/fa[blrs]?:fa-[\w-]+/g,l=>``),labelStyle:e&&e.replace("fill:","color:")};return await K7e(a)}else{let a=document.createElementNS("http://www.w3.org/2000/svg","text");a.setAttribute("style",e.replace("color:","fill:"));let s=[];typeof i=="string"?s=i.split(/\\n|\n|/gi):Array.isArray(i)?s=i:s=[];for(let l of s){let u=document.createElementNS("http://www.w3.org/2000/svg","tspan");u.setAttributeNS("http://www.w3.org/XML/1998/namespace","xml:space","preserve"),u.setAttribute("dy","1em"),u.setAttribute("x","0"),r?u.setAttribute("class","title-row"):u.setAttribute("class","row"),u.textContent=l.trim(),a.appendChild(u)}return a}},"createLabel"),Cc=Q7e});async function nQ(t,e){let{labelStyles:r,nodeStyles:n}=Ze(e);e.labelStyle=r;let i;e.cssClasses?i="node "+e.cssClasses:i="node default";let a=t.insert("g").attr("class",i).attr("id",e.domId||e.id),s=a.insert("g"),l=a.insert("g").attr("class","label").attr("style",n),u=e.description,h=e.label,f=l.node().appendChild(await Cc(h,e.labelStyle,!0,!0)),d={width:0,height:0};if(xr(pe()?.flowchart?.htmlLabels)){let S=f.children[0],A=Ve(f);d=S.getBoundingClientRect(),A.attr("width",d.width),A.attr("height",d.height)}Y.info("Text 2",u);let p=u||[],m=f.getBBox(),g=l.node().appendChild(await Cc(p.join?p.join("
    "):p,e.labelStyle,!0,!0)),y=g.children[0],v=Ve(g);d=y.getBoundingClientRect(),v.attr("width",d.width),v.attr("height",d.height);let x=(e.padding||0)/2;Ve(g).attr("transform","translate( "+(d.width>m.width?0:(m.width-d.width)/2)+", "+(m.height+x+5)+")"),Ve(f).attr("transform","translate( "+(d.width(Y.debug("Rough node insert CXC",I),D),":first-child"),E=a.insert(()=>(Y.debug("Rough node insert CXC",I),I),":first-child")}else E=s.insert("rect",":first-child"),L=s.insert("line"),E.attr("class","outer title-state").attr("style",n).attr("x",-d.width/2-x).attr("y",-d.height/2-x).attr("width",d.width+(e.padding||0)).attr("height",d.height+(e.padding||0)),L.attr("class","divider").attr("x1",-d.width/2-x).attr("x2",d.width/2+x).attr("y1",-d.height/2-x+m.height+x).attr("y2",-d.height/2-x+m.height+x);return je(e,E),e.intersect=function(S){return Ye.rect(e,S)},a}var iQ=M(()=>{"use strict";pr();fr();Ot();Y5();qt();Xt();jt();Vt();Xh();ut();o(nQ,"rectWithTitle")});async function aQ(t,e){let r={rx:5,ry:5,classes:"",labelPaddingX:(e?.padding||0)*1,labelPaddingY:(e?.padding||0)*1};return Pd(t,e,r)}var sQ=M(()=>{"use strict";Mv();o(aQ,"roundedRect")});async function oQ(t,e){let{labelStyles:r,nodeStyles:n}=Ze(e);e.labelStyle=r;let{shapeSvg:i,bbox:a,label:s}=await st(t,e,ot(e)),l=e?.padding??0,u=Math.max(a.width+(e.padding??0)*2,e?.width??0),h=Math.max(a.height+(e.padding??0)*2,e?.height??0),f=-a.width/2-l,d=-a.height/2-l,{cssStyles:p}=e,m=Xe.svg(i),g=Ke(e,{});e.look!=="handDrawn"&&(g.roughness=0,g.fillStyle="solid");let y=[{x:f,y:d},{x:f+u+8,y:d},{x:f+u+8,y:d+h},{x:f-8,y:d+h},{x:f-8,y:d},{x:f,y:d},{x:f,y:d+h}],v=m.polygon(y.map(b=>[b.x,b.y]),g),x=i.insert(()=>v,":first-child");return x.attr("class","basic label-container").attr("style",Gn(p)),n&&e.look!=="handDrawn"&&x.selectAll("path").attr("style",n),p&&e.look!=="handDrawn"&&x.selectAll("path").attr("style",n),s.attr("transform",`translate(${-u/2+4+(e.padding??0)-(a.x-(a.left??0))},${-h/2+(e.padding??0)-(a.y-(a.top??0))})`),je(e,x),e.intersect=function(b){return Ye.rect(e,b)},i}var lQ=M(()=>{"use strict";Ot();qt();Xt();jt();hr();o(oQ,"shadedProcess")});async function cQ(t,e){let{labelStyles:r,nodeStyles:n}=Ze(e);e.labelStyle=r;let{shapeSvg:i,bbox:a,label:s}=await st(t,e,ot(e)),l=Math.max(a.width+(e.padding??0)*2,e?.width??0),u=Math.max(a.height+(e.padding??0)*2,e?.height??0),h=-l/2,f=-u/2,{cssStyles:d}=e,p=Xe.svg(i),m=Ke(e,{});e.look!=="handDrawn"&&(m.roughness=0,m.fillStyle="solid");let g=[{x:h,y:f},{x:h,y:f+u},{x:h+l,y:f+u},{x:h+l,y:f-u/2}],y=Wt(g),v=p.path(y,m),x=i.insert(()=>v,":first-child");return x.attr("class","basic label-container"),d&&e.look!=="handDrawn"&&x.selectChildren("path").attr("style",d),n&&e.look!=="handDrawn"&&x.selectChildren("path").attr("style",n),x.attr("transform",`translate(0, ${u/4})`),s.attr("transform",`translate(${-l/2+(e.padding??0)-(a.x-(a.left??0))}, ${-u/4+(e.padding??0)-(a.y-(a.top??0))})`),je(e,x),e.intersect=function(b){return Ye.polygon(e,g,b)},i}var uQ=M(()=>{"use strict";Ot();qt();Xt();jt();o(cQ,"slopedRect")});async function hQ(t,e){let r={rx:0,ry:0,classes:"",labelPaddingX:(e?.padding||0)*2,labelPaddingY:(e?.padding||0)*1};return Pd(t,e,r)}var fQ=M(()=>{"use strict";Mv();o(hQ,"squareRect")});async function dQ(t,e){let{labelStyles:r,nodeStyles:n}=Ze(e);e.labelStyle=r;let{shapeSvg:i,bbox:a}=await st(t,e,ot(e)),s=a.height+e.padding,l=a.width+s/4+e.padding,u,{cssStyles:h}=e;if(e.look==="handDrawn"){let f=Xe.svg(i),d=Ke(e,{}),p=Pa(-l/2,-s/2,l,s,s/2),m=f.path(p,d);u=i.insert(()=>m,":first-child"),u.attr("class","basic label-container").attr("style",Gn(h))}else u=i.insert("rect",":first-child"),u.attr("class","basic label-container").attr("style",n).attr("rx",s/2).attr("ry",s/2).attr("x",-l/2).attr("y",-s/2).attr("width",l).attr("height",s);return je(e,u),e.intersect=function(f){return Ye.rect(e,f)},i}var pQ=M(()=>{"use strict";Ot();qt();Xt();jt();Xh();hr();o(dQ,"stadium")});async function mQ(t,e){return Pd(t,e,{rx:5,ry:5,classes:"flowchart-node"})}var gQ=M(()=>{"use strict";Mv();o(mQ,"state")});function yQ(t,e,{config:{themeVariables:r}}){let{labelStyles:n,nodeStyles:i}=Ze(e);e.labelStyle=n;let{cssStyles:a}=e,{lineColor:s,stateBorder:l,nodeBorder:u}=r,h=t.insert("g").attr("class","node default").attr("id",e.domId||e.id),f=Xe.svg(h),d=Ke(e,{});e.look!=="handDrawn"&&(d.roughness=0,d.fillStyle="solid");let p=f.circle(0,0,14,{...d,stroke:s,strokeWidth:2}),m=l??u,g=f.circle(0,0,5,{...d,fill:m,stroke:m,strokeWidth:2,fillStyle:"solid"}),y=h.insert(()=>p,":first-child");return y.insert(()=>g),a&&y.selectAll("path").attr("style",a),i&&y.selectAll("path").attr("style",i),je(e,y),e.intersect=function(v){return Ye.circle(e,7,v)},h}var vQ=M(()=>{"use strict";jt();qt();Xt();Ot();o(yQ,"stateEnd")});function xQ(t,e,{config:{themeVariables:r}}){let{lineColor:n}=r,i=t.insert("g").attr("class","node default").attr("id",e.domId||e.id),a;if(e.look==="handDrawn"){let l=Xe.svg(i).circle(0,0,14,kj(n));a=i.insert(()=>l),a.attr("class","state-start").attr("r",7).attr("width",14).attr("height",14)}else a=i.insert("circle",":first-child"),a.attr("class","state-start").attr("r",7).attr("width",14).attr("height",14);return je(e,a),e.intersect=function(s){return Ye.circle(e,7,s)},i}var bQ=M(()=>{"use strict";jt();qt();Xt();Ot();o(xQ,"stateStart")});async function wQ(t,e){let{labelStyles:r,nodeStyles:n}=Ze(e);e.labelStyle=r;let{shapeSvg:i,bbox:a}=await st(t,e,ot(e)),s=(e?.padding||0)/2,l=a.width+e.padding,u=a.height+e.padding,h=-a.width/2-s,f=-a.height/2-s,d=[{x:0,y:0},{x:l,y:0},{x:l,y:-u},{x:0,y:-u},{x:0,y:0},{x:-8,y:0},{x:l+8,y:0},{x:l+8,y:-u},{x:-8,y:-u},{x:-8,y:0}];if(e.look==="handDrawn"){let p=Xe.svg(i),m=Ke(e,{}),g=p.rectangle(h-8,f,l+16,u,m),y=p.line(h,f,h,f+u,m),v=p.line(h+l,f,h+l,f+u,m);i.insert(()=>y,":first-child"),i.insert(()=>v,":first-child");let x=i.insert(()=>g,":first-child"),{cssStyles:b}=e;x.attr("class","basic label-container").attr("style",Gn(b)),je(e,x)}else{let p=Ia(i,l,u,d);n&&p.attr("style",n),je(e,p)}return e.intersect=function(p){return Ye.polygon(e,d,p)},i}var TQ=M(()=>{"use strict";Ot();qt();Xt();jt();Ou();hr();o(wQ,"subroutine")});async function kQ(t,e){let{labelStyles:r,nodeStyles:n}=Ze(e);e.labelStyle=r;let{shapeSvg:i,bbox:a}=await st(t,e,ot(e)),s=Math.max(a.width+(e.padding??0)*2,e?.width??0),l=Math.max(a.height+(e.padding??0)*2,e?.height??0),u=-s/2,h=-l/2,f=.2*l,d=.2*l,{cssStyles:p}=e,m=Xe.svg(i),g=Ke(e,{}),y=[{x:u-f/2,y:h},{x:u+s+f/2,y:h},{x:u+s+f/2,y:h+l},{x:u-f/2,y:h+l}],v=[{x:u+s-f/2,y:h+l},{x:u+s+f/2,y:h+l},{x:u+s+f/2,y:h+l-d}];e.look!=="handDrawn"&&(g.roughness=0,g.fillStyle="solid");let x=Wt(y),b=m.path(x,g),w=Wt(v),_=m.path(w,{...g,fillStyle:"solid"}),T=i.insert(()=>_,":first-child");return T.insert(()=>b,":first-child"),T.attr("class","basic label-container"),p&&e.look!=="handDrawn"&&T.selectAll("path").attr("style",p),n&&e.look!=="handDrawn"&&T.selectAll("path").attr("style",n),je(e,T),e.intersect=function(E){return Ye.polygon(e,y,E)},i}var EQ=M(()=>{"use strict";Ot();Xt();jt();qt();o(kQ,"taggedRect")});async function SQ(t,e){let{labelStyles:r,nodeStyles:n}=Ze(e);e.labelStyle=r;let{shapeSvg:i,bbox:a,label:s}=await st(t,e,ot(e)),l=Math.max(a.width+(e.padding??0)*2,e?.width??0),u=Math.max(a.height+(e.padding??0)*2,e?.height??0),h=u/4,f=.2*l,d=.2*u,p=u+h,{cssStyles:m}=e,g=Xe.svg(i),y=Ke(e,{});e.look!=="handDrawn"&&(y.roughness=0,y.fillStyle="solid");let v=[{x:-l/2-l/2*.1,y:p/2},...Wo(-l/2-l/2*.1,p/2,l/2+l/2*.1,p/2,h,.8),{x:l/2+l/2*.1,y:-p/2},{x:-l/2-l/2*.1,y:-p/2}],x=-l/2+l/2*.1,b=-p/2-d*.4,w=[{x:x+l-f,y:(b+u)*1.4},{x:x+l,y:b+u-d},{x:x+l,y:(b+u)*.9},...Wo(x+l,(b+u)*1.3,x+l-f,(b+u)*1.5,-u*.03,.5)],_=Wt(v),T=g.path(_,y),E=Wt(w),L=g.path(E,{...y,fillStyle:"solid"}),S=i.insert(()=>L,":first-child");return S.insert(()=>T,":first-child"),S.attr("class","basic label-container"),m&&e.look!=="handDrawn"&&S.selectAll("path").attr("style",m),n&&e.look!=="handDrawn"&&S.selectAll("path").attr("style",n),S.attr("transform",`translate(0,${-h/2})`),s.attr("transform",`translate(${-l/2+(e.padding??0)-(a.x-(a.left??0))},${-u/2+(e.padding??0)-h/2-(a.y-(a.top??0))})`),je(e,S),e.intersect=function(A){return Ye.polygon(e,v,A)},i}var CQ=M(()=>{"use strict";Ot();qt();jt();Xt();o(SQ,"taggedWaveEdgedRectangle")});async function AQ(t,e){let{labelStyles:r,nodeStyles:n}=Ze(e);e.labelStyle=r;let{shapeSvg:i,bbox:a}=await st(t,e,ot(e)),s=Math.max(a.width+e.padding,e?.width||0),l=Math.max(a.height+e.padding,e?.height||0),u=-s/2,h=-l/2,f=i.insert("rect",":first-child");return f.attr("class","text").attr("style",n).attr("rx",0).attr("ry",0).attr("x",u).attr("y",h).attr("width",s).attr("height",l),je(e,f),e.intersect=function(d){return Ye.rect(e,d)},i}var _Q=M(()=>{"use strict";Ot();qt();Xt();o(AQ,"text")});async function LQ(t,e){let{labelStyles:r,nodeStyles:n}=Ze(e);e.labelStyle=r;let{shapeSvg:i,bbox:a,label:s,halfPadding:l}=await st(t,e,ot(e)),u=e.look==="neo"?l*2:l,h=a.height+u,f=h/2,d=f/(2.5+h/50),p=a.width+d+u,{cssStyles:m}=e,g;if(e.look==="handDrawn"){let y=Xe.svg(i),v=J7e(0,0,p,h,d,f),x=eAe(0,0,p,h,d,f),b=y.path(v,Ke(e,{})),w=y.path(x,Ke(e,{fill:"none"}));g=i.insert(()=>w,":first-child"),g=i.insert(()=>b,":first-child"),g.attr("class","basic label-container"),m&&g.attr("style",m)}else{let y=Z7e(0,0,p,h,d,f);g=i.insert("path",":first-child").attr("d",y).attr("class","basic label-container").attr("style",Gn(m)).attr("style",n),g.attr("class","basic label-container"),m&&g.selectAll("path").attr("style",m),n&&g.selectAll("path").attr("style",n)}return g.attr("label-offset-x",d),g.attr("transform",`translate(${-p/2}, ${h/2} )`),s.attr("transform",`translate(${-(a.width/2)-d-(a.x-(a.left??0))}, ${-(a.height/2)-(a.y-(a.top??0))})`),je(e,g),e.intersect=function(y){let v=Ye.rect(e,y),x=v.y-(e.y??0);if(f!=0&&(Math.abs(x)<(e.height??0)/2||Math.abs(x)==(e.height??0)/2&&Math.abs(v.x-(e.x??0))>(e.width??0)/2-d)){let b=d*d*(1-x*x/(f*f));b!=0&&(b=Math.sqrt(b)),b=d-b,y.x-(e.x??0)>0&&(b=-b),v.x+=b}return v},i}var Z7e,J7e,eAe,DQ=M(()=>{"use strict";Ot();Xt();jt();qt();hr();Z7e=o((t,e,r,n,i,a)=>`M${t},${e} + a${i},${a} 0,0,1 0,${-n} + l${r},0 + a${i},${a} 0,0,1 0,${n} + M${r},${-n} + a${i},${a} 0,0,0 0,${n} + l${-r},0`,"createCylinderPathD"),J7e=o((t,e,r,n,i,a)=>[`M${t},${e}`,`M${t+r},${e}`,`a${i},${a} 0,0,0 0,${-n}`,`l${-r},0`,`a${i},${a} 0,0,0 0,${n}`,`l${r},0`].join(" "),"createOuterCylinderPathD"),eAe=o((t,e,r,n,i,a)=>[`M${t+r/2},${-n/2}`,`a${i},${a} 0,0,0 0,${n}`].join(" "),"createInnerCylinderPathD");o(LQ,"tiltedCylinder")});async function NQ(t,e){let{labelStyles:r,nodeStyles:n}=Ze(e);e.labelStyle=r;let{shapeSvg:i,bbox:a}=await st(t,e,ot(e)),s=a.width+e.padding,l=a.height+e.padding,u=[{x:-3*l/6,y:0},{x:s+3*l/6,y:0},{x:s,y:-l},{x:0,y:-l}],h,{cssStyles:f}=e;if(e.look==="handDrawn"){let d=Xe.svg(i),p=Ke(e,{}),m=Wt(u),g=d.path(m,p);h=i.insert(()=>g,":first-child").attr("transform",`translate(${-s/2}, ${l/2})`),f&&h.attr("style",f)}else h=Ia(i,s,l,u);return n&&h.attr("style",n),e.width=s,e.height=l,je(e,h),e.intersect=function(d){return Ye.polygon(e,u,d)},i}var RQ=M(()=>{"use strict";Ot();qt();Xt();jt();Ou();o(NQ,"trapezoid")});async function MQ(t,e){let{labelStyles:r,nodeStyles:n}=Ze(e);e.labelStyle=r;let{shapeSvg:i,bbox:a}=await st(t,e,ot(e)),s=60,l=20,u=Math.max(s,a.width+(e.padding??0)*2,e?.width??0),h=Math.max(l,a.height+(e.padding??0)*2,e?.height??0),{cssStyles:f}=e,d=Xe.svg(i),p=Ke(e,{});e.look!=="handDrawn"&&(p.roughness=0,p.fillStyle="solid");let m=[{x:-u/2*.8,y:-h/2},{x:u/2*.8,y:-h/2},{x:u/2,y:-h/2*.6},{x:u/2,y:h/2},{x:-u/2,y:h/2},{x:-u/2,y:-h/2*.6}],g=Wt(m),y=d.path(g,p),v=i.insert(()=>y,":first-child");return v.attr("class","basic label-container"),f&&e.look!=="handDrawn"&&v.selectChildren("path").attr("style",f),n&&e.look!=="handDrawn"&&v.selectChildren("path").attr("style",n),je(e,v),e.intersect=function(x){return Ye.polygon(e,m,x)},i}var IQ=M(()=>{"use strict";Ot();qt();Xt();jt();o(MQ,"trapezoidalPentagon")});async function OQ(t,e){let{labelStyles:r,nodeStyles:n}=Ze(e);e.labelStyle=r;let{shapeSvg:i,bbox:a,label:s}=await st(t,e,ot(e)),l=xr(pe().flowchart?.htmlLabels),u=a.width+(e.padding??0),h=u+a.height,f=u+a.height,d=[{x:0,y:0},{x:f,y:0},{x:f/2,y:-h}],{cssStyles:p}=e,m=Xe.svg(i),g=Ke(e,{});e.look!=="handDrawn"&&(g.roughness=0,g.fillStyle="solid");let y=Wt(d),v=m.path(y,g),x=i.insert(()=>v,":first-child").attr("transform",`translate(${-h/2}, ${h/2})`);return p&&e.look!=="handDrawn"&&x.selectChildren("path").attr("style",p),n&&e.look!=="handDrawn"&&x.selectChildren("path").attr("style",n),e.width=u,e.height=h,je(e,x),s.attr("transform",`translate(${-a.width/2-(a.x-(a.left??0))}, ${h/2-(a.height+(e.padding??0)/(l?2:1)-(a.y-(a.top??0)))})`),e.intersect=function(b){return Y.info("Triangle intersect",e,d,b),Ye.polygon(e,d,b)},i}var PQ=M(()=>{"use strict";ut();Ot();qt();Xt();jt();Ot();fr();Vt();o(OQ,"triangle")});async function BQ(t,e){let{labelStyles:r,nodeStyles:n}=Ze(e);e.labelStyle=r;let{shapeSvg:i,bbox:a,label:s}=await st(t,e,ot(e)),l=Math.max(a.width+(e.padding??0)*2,e?.width??0),u=Math.max(a.height+(e.padding??0)*2,e?.height??0),h=u/8,f=u+h,{cssStyles:d}=e,m=70-l,g=m>0?m/2:0,y=Xe.svg(i),v=Ke(e,{});e.look!=="handDrawn"&&(v.roughness=0,v.fillStyle="solid");let x=[{x:-l/2-g,y:f/2},...Wo(-l/2-g,f/2,l/2+g,f/2,h,.8),{x:l/2+g,y:-f/2},{x:-l/2-g,y:-f/2}],b=Wt(x),w=y.path(b,v),_=i.insert(()=>w,":first-child");return _.attr("class","basic label-container"),d&&e.look!=="handDrawn"&&_.selectAll("path").attr("style",d),n&&e.look!=="handDrawn"&&_.selectAll("path").attr("style",n),_.attr("transform",`translate(0,${-h/2})`),s.attr("transform",`translate(${-l/2+(e.padding??0)-(a.x-(a.left??0))},${-u/2+(e.padding??0)-h-(a.y-(a.top??0))})`),je(e,_),e.intersect=function(T){return Ye.polygon(e,x,T)},i}var FQ=M(()=>{"use strict";Ot();qt();jt();Xt();o(BQ,"waveEdgedRectangle")});async function zQ(t,e){let{labelStyles:r,nodeStyles:n}=Ze(e);e.labelStyle=r;let{shapeSvg:i,bbox:a}=await st(t,e,ot(e)),s=100,l=50,u=Math.max(a.width+(e.padding??0)*2,e?.width??0),h=Math.max(a.height+(e.padding??0)*2,e?.height??0),f=u/h,d=u,p=h;d>p*f?p=d/f:d=p*f,d=Math.max(d,s),p=Math.max(p,l);let m=Math.min(p*.2,p/4),g=p+m*2,{cssStyles:y}=e,v=Xe.svg(i),x=Ke(e,{});e.look!=="handDrawn"&&(x.roughness=0,x.fillStyle="solid");let b=[{x:-d/2,y:g/2},...Wo(-d/2,g/2,d/2,g/2,m,1),{x:d/2,y:-g/2},...Wo(d/2,-g/2,-d/2,-g/2,m,-1)],w=Wt(b),_=v.path(w,x),T=i.insert(()=>_,":first-child");return T.attr("class","basic label-container"),y&&e.look!=="handDrawn"&&T.selectAll("path").attr("style",y),n&&e.look!=="handDrawn"&&T.selectAll("path").attr("style",n),je(e,T),e.intersect=function(E){return Ye.polygon(e,b,E)},i}var GQ=M(()=>{"use strict";Ot();qt();Xt();jt();o(zQ,"waveRectangle")});async function $Q(t,e){let{labelStyles:r,nodeStyles:n}=Ze(e);e.labelStyle=r;let{shapeSvg:i,bbox:a,label:s}=await st(t,e,ot(e)),l=Math.max(a.width+(e.padding??0)*2,e?.width??0),u=Math.max(a.height+(e.padding??0)*2,e?.height??0),h=5,f=-l/2,d=-u/2,{cssStyles:p}=e,m=Xe.svg(i),g=Ke(e,{}),y=[{x:f-h,y:d-h},{x:f-h,y:d+u},{x:f+l,y:d+u},{x:f+l,y:d-h}],v=`M${f-h},${d-h} L${f+l},${d-h} L${f+l},${d+u} L${f-h},${d+u} L${f-h},${d-h} + M${f-h},${d} L${f+l},${d} + M${f},${d-h} L${f},${d+u}`;e.look!=="handDrawn"&&(g.roughness=0,g.fillStyle="solid");let x=m.path(v,g),b=i.insert(()=>x,":first-child");return b.attr("transform",`translate(${h/2}, ${h/2})`),b.attr("class","basic label-container"),p&&e.look!=="handDrawn"&&b.selectAll("path").attr("style",p),n&&e.look!=="handDrawn"&&b.selectAll("path").attr("style",n),s.attr("transform",`translate(${-(a.width/2)+h/2-(a.x-(a.left??0))}, ${-(a.height/2)+h/2-(a.y-(a.top??0))})`),je(e,b),e.intersect=function(w){return Ye.polygon(e,y,w)},i}var VQ=M(()=>{"use strict";Ot();Xt();jt();qt();o($Q,"windowPane")});async function UQ(t,e,r,n,i=r.class.padding??12){let a=n?0:3,s=t.insert("g").attr("class",ot(e)).attr("id",e.domId||e.id),l=null,u=null,h=null,f=null,d=0,p=0,m=0;if(l=s.insert("g").attr("class","annotation-group text"),e.annotations.length>0){let b=e.annotations[0];await q5(l,{text:`\xAB${b}\xBB`},0),d=l.node().getBBox().height}u=s.insert("g").attr("class","label-group text"),await q5(u,e,0,["font-weight: bolder"]);let g=u.node().getBBox();p=g.height,h=s.insert("g").attr("class","members-group text");let y=0;for(let b of e.members){let w=await q5(h,b,y,[b.parseClassifier()]);y+=w+a}m=h.node().getBBox().height,m<=0&&(m=i/2),f=s.insert("g").attr("class","methods-group text");let v=0;for(let b of e.methods){let w=await q5(f,b,v,[b.parseClassifier()]);v+=w+a}let x=s.node().getBBox();if(l!==null){let b=l.node().getBBox();l.attr("transform",`translate(${-b.width/2})`)}return u.attr("transform",`translate(${-g.width/2}, ${d})`),x=s.node().getBBox(),h.attr("transform",`translate(0, ${d+p+i*2})`),x=s.node().getBBox(),f.attr("transform",`translate(0, ${d+p+(m?m+i*4:i*2)})`),x=s.node().getBBox(),{shapeSvg:s,bbox:x}}async function q5(t,e,r,n=[]){let i=t.insert("g").attr("class","label").attr("style",n.join("; ")),a=Cr(),s="useHtmlLabels"in e?e.useHtmlLabels:xr(a.htmlLabels)??!0,l="";"text"in e?l=e.text:l=e.label,!s&&l.startsWith("\\")&&(l=l.substring(1)),yi(l)&&(s=!0);let u=await Li(i,s7(Ma(l)),{width:so(l,a)+50,classes:"markdown-node-label",useHtmlLabels:s},a),h,f=1;if(s){let d=u.children[0],p=Ve(u);f=d.innerHTML.split("
    ").length,d.innerHTML.includes("")&&(f+=d.innerHTML.split("").length-1);let m=d.getElementsByTagName("img");if(m){let g=l.replace(/]*>/g,"").trim()==="";await Promise.all([...m].map(y=>new Promise(v=>{function x(){if(y.style.display="flex",y.style.flexDirection="column",g){let b=a.fontSize?.toString()??window.getComputedStyle(document.body).fontSize,_=parseInt(b,10)*5+"px";y.style.minWidth=_,y.style.maxWidth=_}else y.style.width="100%";v(y)}o(x,"setupImage"),setTimeout(()=>{y.complete&&x()}),y.addEventListener("error",x),y.addEventListener("load",x)})))}h=d.getBoundingClientRect(),p.attr("width",h.width),p.attr("height",h.height)}else{n.includes("font-weight: bolder")&&Ve(u).selectAll("tspan").attr("font-weight",""),f=u.children.length;let d=u.children[0];(u.textContent===""||u.textContent.includes(">"))&&(d.textContent=l[0]+l.substring(1).replaceAll(">",">").replaceAll("<","<").trim(),l[1]===" "&&(d.textContent=d.textContent[0]+" "+d.textContent.substring(1))),d.textContent==="undefined"&&(d.textContent=""),h=u.getBBox()}return i.attr("transform","translate(0,"+(-h.height/(2*f)+r)+")"),h.height}var HQ=M(()=>{"use strict";pr();Za();Ot();hr();Vt();Pl();fr();o(UQ,"textHelper");o(q5,"addText")});async function WQ(t,e){let r=pe(),n=r.class.padding??12,i=n,a=e.useHtmlLabels??xr(r.htmlLabels)??!0,s=e;s.annotations=s.annotations??[],s.members=s.members??[],s.methods=s.methods??[];let{shapeSvg:l,bbox:u}=await UQ(t,e,r,a,i),{labelStyles:h,nodeStyles:f}=Ze(e);e.labelStyle=h,e.cssStyles=s.styles||"";let d=s.styles?.join(";")||f||"";e.cssStyles||(e.cssStyles=d.replaceAll("!important","").split(";"));let p=s.members.length===0&&s.methods.length===0&&!r.class?.hideEmptyMembersBox,m=Xe.svg(l),g=Ke(e,{});e.look!=="handDrawn"&&(g.roughness=0,g.fillStyle="solid");let y=u.width,v=u.height;s.members.length===0&&s.methods.length===0?v+=i:s.members.length>0&&s.methods.length===0&&(v+=i*2);let x=-y/2,b=-v/2,w=m.rectangle(x-n,b-n-(p?n:s.members.length===0&&s.methods.length===0?-n/2:0),y+2*n,v+2*n+(p?n*2:s.members.length===0&&s.methods.length===0?-n:0),g),_=l.insert(()=>w,":first-child");_.attr("class","basic label-container");let T=_.node().getBBox();l.selectAll(".text").each((A,I,D)=>{let k=Ve(D[I]),R=k.attr("transform"),C=0;if(R){let F=RegExp(/translate\(([^,]+),([^)]+)\)/).exec(R);F&&(C=parseFloat(F[2]))}let O=C+b+n-(p?n:s.members.length===0&&s.methods.length===0?-n/2:0);a||(O-=4);let N=x;(k.attr("class").includes("label-group")||k.attr("class").includes("annotation-group"))&&(N=-k.node()?.getBBox().width/2||0,l.selectAll("text").each(function(P,F,B){window.getComputedStyle(B[F]).textAnchor==="middle"&&(N=0)})),k.attr("transform",`translate(${N}, ${O})`)});let E=l.select(".annotation-group").node().getBBox().height-(p?n/2:0)||0,L=l.select(".label-group").node().getBBox().height-(p?n/2:0)||0,S=l.select(".members-group").node().getBBox().height-(p?n/2:0)||0;if(s.members.length>0||s.methods.length>0||p){let A=m.line(T.x,E+L+b+n,T.x+T.width,E+L+b+n,g);l.insert(()=>A).attr("class","divider").attr("style",d)}if(p||s.members.length>0||s.methods.length>0){let A=m.line(T.x,E+L+S+b+i*2+n,T.x+T.width,E+L+S+b+n+i*2,g);l.insert(()=>A).attr("class","divider").attr("style",d)}if(s.look!=="handDrawn"&&l.selectAll("path").attr("style",d),_.select(":nth-child(2)").attr("style",d),l.selectAll(".divider").select("path").attr("style",d),e.labelStyle?l.selectAll("span").attr("style",e.labelStyle):l.selectAll("span").attr("style",d),!a){let A=RegExp(/color\s*:\s*([^;]*)/),I=A.exec(d);if(I){let D=I[0].replace("color","fill");l.selectAll("tspan").attr("style",D)}else if(h){let D=A.exec(h);if(D){let k=D[0].replace("color","fill");l.selectAll("tspan").attr("style",k)}}}return je(e,_),e.intersect=function(A){return Ye.rect(e,A)},l}var YQ=M(()=>{"use strict";Ot();Vt();pr();jt();Xt();qt();HQ();fr();o(WQ,"classBox")});async function qQ(t,e,{config:r}){let{labelStyles:n,nodeStyles:i}=Ze(e);e.labelStyle=n||"";let a=10,s=e.width;e.width=(e.width??200)-10;let{shapeSvg:l,bbox:u,label:h}=await st(t,e,ot(e)),f=e.padding||10,d="",p;"ticket"in e&&e.ticket&&r?.kanban?.ticketBaseUrl&&(d=r?.kanban?.ticketBaseUrl.replace("#TICKET#",e.ticket),p=l.insert("svg:a",":first-child").attr("class","kanban-ticket-link").attr("xlink:href",d).attr("target","_blank"));let m={useHtmlLabels:e.useHtmlLabels,labelStyle:e.labelStyle||"",width:e.width,img:e.img,padding:e.padding||8,centerLabel:!1},g,y;p?{label:g,bbox:y}=await I5(p,"ticket"in e&&e.ticket||"",m):{label:g,bbox:y}=await I5(l,"ticket"in e&&e.ticket||"",m);let{label:v,bbox:x}=await I5(l,"assigned"in e&&e.assigned||"",m);e.width=s;let b=10,w=e?.width||0,_=Math.max(y.height,x.height)/2,T=Math.max(u.height+b*2,e?.height||0)+_,E=-w/2,L=-T/2;h.attr("transform","translate("+(f-w/2)+", "+(-_-u.height/2)+")"),g.attr("transform","translate("+(f-w/2)+", "+(-_+u.height/2)+")"),v.attr("transform","translate("+(f+w/2-x.width-2*a)+", "+(-_+u.height/2)+")");let S,{rx:A,ry:I}=e,{cssStyles:D}=e;if(e.look==="handDrawn"){let k=Xe.svg(l),R=Ke(e,{}),C=A||I?k.path(Pa(E,L,w,T,A||0),R):k.rectangle(E,L,w,T,R);S=l.insert(()=>C,":first-child"),S.attr("class","basic label-container").attr("style",D||null)}else{S=l.insert("rect",":first-child"),S.attr("class","basic label-container __APA__").attr("style",i).attr("rx",A??5).attr("ry",I??5).attr("x",E).attr("y",L).attr("width",w).attr("height",T);let k="priority"in e&&e.priority;if(k){let R=l.append("line"),C=E+2,O=L+Math.floor((A??0)/2),N=L+T-Math.floor((A??0)/2);R.attr("x1",C).attr("y1",O).attr("x2",C).attr("y2",N).attr("stroke-width","4").attr("stroke",tAe(k))}}return je(e,S),e.height=T,e.intersect=function(k){return Ye.rect(e,k)},l}var tAe,XQ=M(()=>{"use strict";Ot();qt();Xh();Xt();jt();tAe=o(t=>{switch(t){case"Very High":return"red";case"High":return"orange";case"Medium":return null;case"Low":return"blue";case"Very Low":return"lightblue"}},"colorFromPriority");o(qQ,"kanbanItem")});function jQ(t){return t in $9}var rAe,nAe,$9,V9=M(()=>{"use strict";zj();Vj();Hj();Yj();Xj();Kj();Zj();eK();rK();iK();sK();lK();uK();fK();pK();gK();vK();bK();TK();EK();CK();_K();DK();RK();IK();PK();FK();GK();VK();HK();YK();XK();KK();ZK();eQ();rQ();iQ();sQ();lQ();uQ();fQ();pQ();gQ();vQ();bQ();TQ();EQ();CQ();_Q();DQ();RQ();IQ();PQ();FQ();GQ();VQ();YQ();XQ();rAe=[{semanticName:"Process",name:"Rectangle",shortName:"rect",description:"Standard process shape",aliases:["proc","process","rectangle"],internalAliases:["squareRect"],handler:hQ},{semanticName:"Event",name:"Rounded Rectangle",shortName:"rounded",description:"Represents an event",aliases:["event"],internalAliases:["roundedRect"],handler:aQ},{semanticName:"Terminal Point",name:"Stadium",shortName:"stadium",description:"Terminal point",aliases:["terminal","pill"],handler:dQ},{semanticName:"Subprocess",name:"Framed Rectangle",shortName:"fr-rect",description:"Subprocess",aliases:["subprocess","subproc","framed-rectangle","subroutine"],handler:wQ},{semanticName:"Database",name:"Cylinder",shortName:"cyl",description:"Database storage",aliases:["db","database","cylinder"],handler:aK},{semanticName:"Start",name:"Circle",shortName:"circle",description:"Starting point",aliases:["circ"],handler:qj},{semanticName:"Decision",name:"Diamond",shortName:"diam",description:"Decision-making step",aliases:["decision","diamond","question"],handler:JK},{semanticName:"Prepare Conditional",name:"Hexagon",shortName:"hex",description:"Preparation or condition step",aliases:["hexagon","prepare"],handler:xK},{semanticName:"Data Input/Output",name:"Lean Right",shortName:"lean-r",description:"Represents input or output",aliases:["lean-right","in-out"],internalAliases:["lean_right"],handler:zK},{semanticName:"Data Input/Output",name:"Lean Left",shortName:"lean-l",description:"Represents output or input",aliases:["lean-left","out-in"],internalAliases:["lean_left"],handler:BK},{semanticName:"Priority Action",name:"Trapezoid Base Bottom",shortName:"trap-b",description:"Priority action",aliases:["priority","trapezoid-bottom","trapezoid"],handler:NQ},{semanticName:"Manual Operation",name:"Trapezoid Base Top",shortName:"trap-t",description:"Represents a manual task",aliases:["manual","trapezoid-top","inv-trapezoid"],internalAliases:["inv_trapezoid"],handler:MK},{semanticName:"Stop",name:"Double Circle",shortName:"dbl-circ",description:"Represents a stop point",aliases:["double-circle"],internalAliases:["doublecircle"],handler:cK},{semanticName:"Text Block",name:"Text Block",shortName:"text",description:"Text block",handler:AQ},{semanticName:"Card",name:"Notched Rectangle",shortName:"notch-rect",description:"Represents a card",aliases:["card","notched-rectangle"],handler:Uj},{semanticName:"Lined/Shaded Process",name:"Lined Rectangle",shortName:"lin-rect",description:"Lined process shape",aliases:["lined-rectangle","lined-process","lin-proc","shaded-process"],handler:oQ},{semanticName:"Start",name:"Small Circle",shortName:"sm-circ",description:"Small starting point",aliases:["start","small-circle"],internalAliases:["stateStart"],handler:xQ},{semanticName:"Stop",name:"Framed Circle",shortName:"fr-circ",description:"Stop point",aliases:["stop","framed-circle"],internalAliases:["stateEnd"],handler:yQ},{semanticName:"Fork/Join",name:"Filled Rectangle",shortName:"fork",description:"Fork or join in process flow",aliases:["join"],internalAliases:["forkJoin"],handler:mK},{semanticName:"Collate",name:"Hourglass",shortName:"hourglass",description:"Represents a collate operation",aliases:["hourglass","collate"],handler:wK},{semanticName:"Comment",name:"Curly Brace",shortName:"brace",description:"Adds a comment",aliases:["comment","brace-l"],handler:Qj},{semanticName:"Comment Right",name:"Curly Brace",shortName:"brace-r",description:"Adds a comment",handler:Jj},{semanticName:"Comment with braces on both sides",name:"Curly Braces",shortName:"braces",description:"Adds a comment",handler:tK},{semanticName:"Com Link",name:"Lightning Bolt",shortName:"bolt",description:"Communication link",aliases:["com-link","lightning-bolt"],handler:$K},{semanticName:"Document",name:"Document",shortName:"doc",description:"Represents a document",aliases:["doc","document"],handler:BQ},{semanticName:"Delay",name:"Half-Rounded Rectangle",shortName:"delay",description:"Represents a delay",aliases:["half-rounded-rectangle"],handler:yK},{semanticName:"Direct Access Storage",name:"Horizontal Cylinder",shortName:"h-cyl",description:"Direct access storage",aliases:["das","horizontal-cylinder"],handler:LQ},{semanticName:"Disk Storage",name:"Lined Cylinder",shortName:"lin-cyl",description:"Disk storage",aliases:["disk","lined-cylinder"],handler:UK},{semanticName:"Display",name:"Curved Trapezoid",shortName:"curv-trap",description:"Represents a display",aliases:["curved-trapezoid","display"],handler:nK},{semanticName:"Divided Process",name:"Divided Rectangle",shortName:"div-rect",description:"Divided process shape",aliases:["div-proc","divided-rectangle","divided-process"],handler:oK},{semanticName:"Extract",name:"Triangle",shortName:"tri",description:"Extraction process",aliases:["extract","triangle"],handler:OQ},{semanticName:"Internal Storage",name:"Window Pane",shortName:"win-pane",description:"Internal storage",aliases:["internal-storage","window-pane"],handler:$Q},{semanticName:"Junction",name:"Filled Circle",shortName:"f-circ",description:"Junction point",aliases:["junction","filled-circle"],handler:hK},{semanticName:"Loop Limit",name:"Trapezoidal Pentagon",shortName:"notch-pent",description:"Loop limit step",aliases:["loop-limit","notched-pentagon"],handler:MQ},{semanticName:"Manual File",name:"Flipped Triangle",shortName:"flip-tri",description:"Manual file operation",aliases:["manual-file","flipped-triangle"],handler:dK},{semanticName:"Manual Input",name:"Sloped Rectangle",shortName:"sl-rect",description:"Manual input step",aliases:["manual-input","sloped-rectangle"],handler:cQ},{semanticName:"Multi-Document",name:"Stacked Document",shortName:"docs",description:"Multiple documents",aliases:["documents","st-doc","stacked-document"],handler:jK},{semanticName:"Multi-Process",name:"Stacked Rectangle",shortName:"st-rect",description:"Multiple processes",aliases:["procs","processes","stacked-rectangle"],handler:qK},{semanticName:"Stored Data",name:"Bow Tie Rectangle",shortName:"bow-rect",description:"Stored data",aliases:["stored-data","bow-tie-rectangle"],handler:$j},{semanticName:"Summary",name:"Crossed Circle",shortName:"cross-circ",description:"Summary",aliases:["summary","crossed-circle"],handler:jj},{semanticName:"Tagged Document",name:"Tagged Document",shortName:"tag-doc",description:"Tagged document",aliases:["tag-doc","tagged-document"],handler:SQ},{semanticName:"Tagged Process",name:"Tagged Rectangle",shortName:"tag-rect",description:"Tagged process",aliases:["tagged-rectangle","tag-proc","tagged-process"],handler:kQ},{semanticName:"Paper Tape",name:"Flag",shortName:"flag",description:"Paper tape",aliases:["paper-tape"],handler:zQ},{semanticName:"Odd",name:"Odd",shortName:"odd",description:"Odd shape",internalAliases:["rect_left_inv_arrow"],handler:tQ},{semanticName:"Lined Document",name:"Lined Document",shortName:"lin-doc",description:"Lined document",aliases:["lined-document"],handler:WK}],nAe=o(()=>{let e=[...Object.entries({state:mQ,choice:Wj,note:QK,rectWithTitle:nQ,labelRect:OK,iconSquare:LK,iconCircle:SK,icon:kK,iconRounded:AK,imageSquare:NK,anchor:Fj,kanbanItem:qQ,classBox:WQ}),...rAe.flatMap(r=>[r.shortName,..."aliases"in r?r.aliases:[],..."internalAliases"in r?r.internalAliases:[]].map(i=>[i,r.handler]))];return Object.fromEntries(e)},"generateShapeMap"),$9=nAe();o(jQ,"isValidShape")});function hZ(t){return typeof t>"u"||t===null}function iAe(t){return typeof t=="object"&&t!==null}function aAe(t){return Array.isArray(t)?t:hZ(t)?[]:[t]}function sAe(t,e){var r,n,i,a;if(e)for(a=Object.keys(e),r=0,n=a.length;rl&&(a=" ... ",e=n-l+a.length),r-n>l&&(s=" ...",r=n+l-s.length),{str:a+t.slice(e,r).replace(/\t/g,"\u2192")+s,pos:n-e+a.length}}function H9(t,e){return Gi.repeat(" ",e-t.length)+t}function mAe(t,e){if(e=Object.create(e||null),!t.buffer)return null;e.maxLength||(e.maxLength=79),typeof e.indent!="number"&&(e.indent=1),typeof e.linesBefore!="number"&&(e.linesBefore=3),typeof e.linesAfter!="number"&&(e.linesAfter=2);for(var r=/\r?\n|\r|\0/g,n=[0],i=[],a,s=-1;a=r.exec(t.buffer);)i.push(a.index),n.push(a.index+a[0].length),t.position<=a.index&&s<0&&(s=n.length-2);s<0&&(s=n.length-1);var l="",u,h,f=Math.min(t.line+e.linesAfter,i.length).toString().length,d=e.maxLength-(e.indent+f+3);for(u=1;u<=e.linesBefore&&!(s-u<0);u++)h=U9(t.buffer,n[s-u],i[s-u],t.position-(n[s]-n[s-u]),d),l=Gi.repeat(" ",e.indent)+H9((t.line-u+1).toString(),f)+" | "+h.str+` +`+l;for(h=U9(t.buffer,n[s],i[s],t.position,d),l+=Gi.repeat(" ",e.indent)+H9((t.line+1).toString(),f)+" | "+h.str+` +`,l+=Gi.repeat("-",e.indent+f+3+h.pos)+`^ +`,u=1;u<=e.linesAfter&&!(s+u>=i.length);u++)h=U9(t.buffer,n[s+u],i[s+u],t.position-(n[s]-n[s+u]),d),l+=Gi.repeat(" ",e.indent)+H9((t.line+u+1).toString(),f)+" | "+h.str+` +`;return l.replace(/\n$/,"")}function xAe(t){var e={};return t!==null&&Object.keys(t).forEach(function(r){t[r].forEach(function(n){e[String(n)]=r})}),e}function bAe(t,e){if(e=e||{},Object.keys(e).forEach(function(r){if(yAe.indexOf(r)===-1)throw new Ms('Unknown option "'+r+'" is met in definition of "'+t+'" YAML type.')}),this.options=e,this.tag=t,this.kind=e.kind||null,this.resolve=e.resolve||function(){return!0},this.construct=e.construct||function(r){return r},this.instanceOf=e.instanceOf||null,this.predicate=e.predicate||null,this.represent=e.represent||null,this.representName=e.representName||null,this.defaultStyle=e.defaultStyle||null,this.multi=e.multi||!1,this.styleAliases=xAe(e.styleAliases||null),vAe.indexOf(this.kind)===-1)throw new Ms('Unknown kind "'+this.kind+'" is specified for "'+t+'" YAML type.')}function KQ(t,e){var r=[];return t[e].forEach(function(n){var i=r.length;r.forEach(function(a,s){a.tag===n.tag&&a.kind===n.kind&&a.multi===n.multi&&(i=s)}),r[i]=n}),r}function wAe(){var t={scalar:{},sequence:{},mapping:{},fallback:{},multi:{scalar:[],sequence:[],mapping:[],fallback:[]}},e,r;function n(i){i.multi?(t.multi[i.kind].push(i),t.multi.fallback.push(i)):t[i.kind][i.tag]=t.fallback[i.tag]=i}for(o(n,"collectType"),e=0,r=arguments.length;e=0&&(e=e.slice(1)),e===".inf"?r===1?Number.POSITIVE_INFINITY:Number.NEGATIVE_INFINITY:e===".nan"?NaN:r*parseFloat(e,10)}function YAe(t,e){var r;if(isNaN(t))switch(e){case"lowercase":return".nan";case"uppercase":return".NAN";case"camelcase":return".NaN"}else if(Number.POSITIVE_INFINITY===t)switch(e){case"lowercase":return".inf";case"uppercase":return".INF";case"camelcase":return".Inf"}else if(Number.NEGATIVE_INFINITY===t)switch(e){case"lowercase":return"-.inf";case"uppercase":return"-.INF";case"camelcase":return"-.Inf"}else if(Gi.isNegativeZero(t))return"-0.0";return r=t.toString(10),WAe.test(r)?r.replace("e",".e"):r}function qAe(t){return Object.prototype.toString.call(t)==="[object Number]"&&(t%1!==0||Gi.isNegativeZero(t))}function KAe(t){return t===null?!1:pZ.exec(t)!==null||mZ.exec(t)!==null}function QAe(t){var e,r,n,i,a,s,l,u=0,h=null,f,d,p;if(e=pZ.exec(t),e===null&&(e=mZ.exec(t)),e===null)throw new Error("Date resolve error");if(r=+e[1],n=+e[2]-1,i=+e[3],!e[4])return new Date(Date.UTC(r,n,i));if(a=+e[4],s=+e[5],l=+e[6],e[7]){for(u=e[7].slice(0,3);u.length<3;)u+="0";u=+u}return e[9]&&(f=+e[10],d=+(e[11]||0),h=(f*60+d)*6e4,e[9]==="-"&&(h=-h)),p=new Date(Date.UTC(r,n,i,a,s,l,u)),h&&p.setTime(p.getTime()-h),p}function ZAe(t){return t.toISOString()}function e8e(t){return t==="<<"||t===null}function r8e(t){if(t===null)return!1;var e,r,n=0,i=t.length,a=Q9;for(r=0;r64)){if(e<0)return!1;n+=6}return n%8===0}function n8e(t){var e,r,n=t.replace(/[\r\n=]/g,""),i=n.length,a=Q9,s=0,l=[];for(e=0;e>16&255),l.push(s>>8&255),l.push(s&255)),s=s<<6|a.indexOf(n.charAt(e));return r=i%4*6,r===0?(l.push(s>>16&255),l.push(s>>8&255),l.push(s&255)):r===18?(l.push(s>>10&255),l.push(s>>2&255)):r===12&&l.push(s>>4&255),new Uint8Array(l)}function i8e(t){var e="",r=0,n,i,a=t.length,s=Q9;for(n=0;n>18&63],e+=s[r>>12&63],e+=s[r>>6&63],e+=s[r&63]),r=(r<<8)+t[n];return i=a%3,i===0?(e+=s[r>>18&63],e+=s[r>>12&63],e+=s[r>>6&63],e+=s[r&63]):i===2?(e+=s[r>>10&63],e+=s[r>>4&63],e+=s[r<<2&63],e+=s[64]):i===1&&(e+=s[r>>2&63],e+=s[r<<4&63],e+=s[64],e+=s[64]),e}function a8e(t){return Object.prototype.toString.call(t)==="[object Uint8Array]"}function c8e(t){if(t===null)return!0;var e=[],r,n,i,a,s,l=t;for(r=0,n=l.length;r>10)+55296,(t-65536&1023)+56320)}function _8e(t,e){this.input=t,this.filename=e.filename||null,this.schema=e.schema||gZ,this.onWarning=e.onWarning||null,this.legacy=e.legacy||!1,this.json=e.json||!1,this.listener=e.listener||null,this.implicitTypes=this.schema.compiledImplicit,this.typeMap=this.schema.compiledTypeMap,this.length=t.length,this.position=0,this.line=0,this.lineStart=0,this.lineIndent=0,this.firstTabInLine=-1,this.documents=[]}function kZ(t,e){var r={name:t.filename,buffer:t.input.slice(0,-1),position:t.position,line:t.line,column:t.position-t.lineStart};return r.snippet=gAe(r),new Ms(e,r)}function Qt(t,e){throw kZ(t,e)}function K5(t,e){t.onWarning&&t.onWarning.call(null,kZ(t,e))}function jh(t,e,r,n){var i,a,s,l;if(e1&&(t.result+=Gi.repeat(` +`,e-1))}function L8e(t,e,r){var n,i,a,s,l,u,h,f,d=t.kind,p=t.result,m;if(m=t.input.charCodeAt(t.position),Is(m)||wm(m)||m===35||m===38||m===42||m===33||m===124||m===62||m===39||m===34||m===37||m===64||m===96||(m===63||m===45)&&(i=t.input.charCodeAt(t.position+1),Is(i)||r&&wm(i)))return!1;for(t.kind="scalar",t.result="",a=s=t.position,l=!1;m!==0;){if(m===58){if(i=t.input.charCodeAt(t.position+1),Is(i)||r&&wm(i))break}else if(m===35){if(n=t.input.charCodeAt(t.position-1),Is(n))break}else{if(t.position===t.lineStart&&J5(t)||r&&wm(m))break;if(Ac(m))if(u=t.line,h=t.lineStart,f=t.lineIndent,Di(t,!1,-1),t.lineIndent>=e){l=!0,m=t.input.charCodeAt(t.position);continue}else{t.position=s,t.line=u,t.lineStart=h,t.lineIndent=f;break}}l&&(jh(t,a,s,!1),J9(t,t.line-u),a=s=t.position,l=!1),Fd(m)||(s=t.position+1),m=t.input.charCodeAt(++t.position)}return jh(t,a,s,!1),t.result?!0:(t.kind=d,t.result=p,!1)}function D8e(t,e){var r,n,i;if(r=t.input.charCodeAt(t.position),r!==39)return!1;for(t.kind="scalar",t.result="",t.position++,n=i=t.position;(r=t.input.charCodeAt(t.position))!==0;)if(r===39)if(jh(t,n,t.position,!0),r=t.input.charCodeAt(++t.position),r===39)n=t.position,t.position++,i=t.position;else return!0;else Ac(r)?(jh(t,n,i,!0),J9(t,Di(t,!1,e)),n=i=t.position):t.position===t.lineStart&&J5(t)?Qt(t,"unexpected end of the document within a single quoted scalar"):(t.position++,i=t.position);Qt(t,"unexpected end of the stream within a single quoted scalar")}function N8e(t,e){var r,n,i,a,s,l;if(l=t.input.charCodeAt(t.position),l!==34)return!1;for(t.kind="scalar",t.result="",t.position++,r=n=t.position;(l=t.input.charCodeAt(t.position))!==0;){if(l===34)return jh(t,r,t.position,!0),t.position++,!0;if(l===92){if(jh(t,r,t.position,!0),l=t.input.charCodeAt(++t.position),Ac(l))Di(t,!1,e);else if(l<256&&wZ[l])t.result+=TZ[l],t.position++;else if((s=S8e(l))>0){for(i=s,a=0;i>0;i--)l=t.input.charCodeAt(++t.position),(s=E8e(l))>=0?a=(a<<4)+s:Qt(t,"expected hexadecimal character");t.result+=A8e(a),t.position++}else Qt(t,"unknown escape sequence");r=n=t.position}else Ac(l)?(jh(t,r,n,!0),J9(t,Di(t,!1,e)),r=n=t.position):t.position===t.lineStart&&J5(t)?Qt(t,"unexpected end of the document within a double quoted scalar"):(t.position++,n=t.position)}Qt(t,"unexpected end of the stream within a double quoted scalar")}function R8e(t,e){var r=!0,n,i,a,s=t.tag,l,u=t.anchor,h,f,d,p,m,g=Object.create(null),y,v,x,b;if(b=t.input.charCodeAt(t.position),b===91)f=93,m=!1,l=[];else if(b===123)f=125,m=!0,l={};else return!1;for(t.anchor!==null&&(t.anchorMap[t.anchor]=l),b=t.input.charCodeAt(++t.position);b!==0;){if(Di(t,!0,e),b=t.input.charCodeAt(t.position),b===f)return t.position++,t.tag=s,t.anchor=u,t.kind=m?"mapping":"sequence",t.result=l,!0;r?b===44&&Qt(t,"expected the node content, but found ','"):Qt(t,"missed comma between flow collection entries"),v=y=x=null,d=p=!1,b===63&&(h=t.input.charCodeAt(t.position+1),Is(h)&&(d=p=!0,t.position++,Di(t,!0,e))),n=t.line,i=t.lineStart,a=t.position,km(t,e,X5,!1,!0),v=t.tag,y=t.result,Di(t,!0,e),b=t.input.charCodeAt(t.position),(p||t.line===n)&&b===58&&(d=!0,b=t.input.charCodeAt(++t.position),Di(t,!0,e),km(t,e,X5,!1,!0),x=t.result),m?Tm(t,l,g,v,y,x,n,i,a):d?l.push(Tm(t,null,g,v,y,x,n,i,a)):l.push(y),Di(t,!0,e),b=t.input.charCodeAt(t.position),b===44?(r=!0,b=t.input.charCodeAt(++t.position)):r=!1}Qt(t,"unexpected end of the stream within a flow collection")}function M8e(t,e){var r,n,i=W9,a=!1,s=!1,l=e,u=0,h=!1,f,d;if(d=t.input.charCodeAt(t.position),d===124)n=!1;else if(d===62)n=!0;else return!1;for(t.kind="scalar",t.result="";d!==0;)if(d=t.input.charCodeAt(++t.position),d===43||d===45)W9===i?i=d===43?QQ:b8e:Qt(t,"repeat of a chomping mode identifier");else if((f=C8e(d))>=0)f===0?Qt(t,"bad explicit indentation width of a block scalar; it cannot be less than one"):s?Qt(t,"repeat of an indentation width identifier"):(l=e+f-1,s=!0);else break;if(Fd(d)){do d=t.input.charCodeAt(++t.position);while(Fd(d));if(d===35)do d=t.input.charCodeAt(++t.position);while(!Ac(d)&&d!==0)}for(;d!==0;){for(Z9(t),t.lineIndent=0,d=t.input.charCodeAt(t.position);(!s||t.lineIndentl&&(l=t.lineIndent),Ac(d)){u++;continue}if(t.lineIndente)&&u!==0)Qt(t,"bad indentation of a sequence entry");else if(t.lineIndente)&&(v&&(s=t.line,l=t.lineStart,u=t.position),km(t,e,j5,!0,i)&&(v?g=t.result:y=t.result),v||(Tm(t,d,p,m,g,y,s,l,u),m=g=y=null),Di(t,!0,-1),b=t.input.charCodeAt(t.position)),(t.line===a||t.lineIndent>e)&&b!==0)Qt(t,"bad indentation of a mapping entry");else if(t.lineIndente?u=1:t.lineIndent===e?u=0:t.lineIndente?u=1:t.lineIndent===e?u=0:t.lineIndent tag; it should be "scalar", not "'+t.kind+'"'),d=0,p=t.implicitTypes.length;d"),t.result!==null&&g.kind!==t.kind&&Qt(t,"unacceptable node kind for !<"+t.tag+'> tag; it should be "'+g.kind+'", not "'+t.kind+'"'),g.resolve(t.result,t.tag)?(t.result=g.construct(t.result,t.tag),t.anchor!==null&&(t.anchorMap[t.anchor]=t.result)):Qt(t,"cannot resolve a node with !<"+t.tag+"> explicit tag")}return t.listener!==null&&t.listener("close",t),t.tag!==null||t.anchor!==null||f}function F8e(t){var e=t.position,r,n,i,a=!1,s;for(t.version=null,t.checkLineBreaks=t.legacy,t.tagMap=Object.create(null),t.anchorMap=Object.create(null);(s=t.input.charCodeAt(t.position))!==0&&(Di(t,!0,-1),s=t.input.charCodeAt(t.position),!(t.lineIndent>0||s!==37));){for(a=!0,s=t.input.charCodeAt(++t.position),r=t.position;s!==0&&!Is(s);)s=t.input.charCodeAt(++t.position);for(n=t.input.slice(r,t.position),i=[],n.length<1&&Qt(t,"directive name must not be less than one character in length");s!==0;){for(;Fd(s);)s=t.input.charCodeAt(++t.position);if(s===35){do s=t.input.charCodeAt(++t.position);while(s!==0&&!Ac(s));break}if(Ac(s))break;for(r=t.position;s!==0&&!Is(s);)s=t.input.charCodeAt(++t.position);i.push(t.input.slice(r,t.position))}s!==0&&Z9(t),Kh.call(eZ,n)?eZ[n](t,n,i):K5(t,'unknown document directive "'+n+'"')}if(Di(t,!0,-1),t.lineIndent===0&&t.input.charCodeAt(t.position)===45&&t.input.charCodeAt(t.position+1)===45&&t.input.charCodeAt(t.position+2)===45?(t.position+=3,Di(t,!0,-1)):a&&Qt(t,"directives end mark is expected"),km(t,t.lineIndent-1,j5,!1,!0),Di(t,!0,-1),t.checkLineBreaks&&T8e.test(t.input.slice(e,t.position))&&K5(t,"non-ASCII line breaks are interpreted as content"),t.documents.push(t.result),t.position===t.lineStart&&J5(t)){t.input.charCodeAt(t.position)===46&&(t.position+=3,Di(t,!0,-1));return}if(t.position"u"&&(r=e,e=null);var n=EZ(t,r);if(typeof e!="function")return n;for(var i=0,a=n.length;i=55296&&r<=56319&&e+1=56320&&n<=57343)?(r-55296)*1024+n-56320+65536:r}function MZ(t){var e=/^\n* /;return e.test(t)}function p_e(t,e,r,n,i,a,s,l){var u,h=0,f=null,d=!1,p=!1,m=n!==-1,g=-1,y=f_e(Iv(t,0))&&d_e(Iv(t,t.length-1));if(e||s)for(u=0;u=65536?u+=2:u++){if(h=Iv(t,u),!Fv(h))return bm;y=y&&aZ(h,f,l),f=h}else{for(u=0;u=65536?u+=2:u++){if(h=Iv(t,u),h===Pv)d=!0,m&&(p=p||u-g-1>n&&t[g+1]!==" ",g=u);else if(!Fv(h))return bm;y=y&&aZ(h,f,l),f=h}p=p||m&&u-g-1>n&&t[g+1]!==" "}return!d&&!p?y&&!s&&!i(t)?IZ:a===Bv?bm:j9:r>9&&MZ(t)?bm:s?a===Bv?bm:j9:p?PZ:OZ}function m_e(t,e,r,n,i){t.dump=function(){if(e.length===0)return t.quotingType===Bv?'""':"''";if(!t.noCompatMode&&(a_e.indexOf(e)!==-1||s_e.test(e)))return t.quotingType===Bv?'"'+e+'"':"'"+e+"'";var a=t.indent*Math.max(1,r),s=t.lineWidth===-1?-1:Math.max(Math.min(t.lineWidth,40),t.lineWidth-a),l=n||t.flowLevel>-1&&r>=t.flowLevel;function u(h){return h_e(t,h)}switch(o(u,"testAmbiguity"),p_e(e,l,t.indent,s,u,t.quotingType,t.forceQuotes&&!n,i)){case IZ:return e;case j9:return"'"+e.replace(/'/g,"''")+"'";case OZ:return"|"+sZ(e,t.indent)+oZ(nZ(e,a));case PZ:return">"+sZ(e,t.indent)+oZ(nZ(g_e(e,s),a));case bm:return'"'+y_e(e)+'"';default:throw new Ms("impossible error: invalid scalar style")}}()}function sZ(t,e){var r=MZ(t)?String(e):"",n=t[t.length-1]===` +`,i=n&&(t[t.length-2]===` +`||t===` +`),a=i?"+":n?"":"-";return r+a+` +`}function oZ(t){return t[t.length-1]===` +`?t.slice(0,-1):t}function g_e(t,e){for(var r=/(\n+)([^\n]*)/g,n=function(){var h=t.indexOf(` +`);return h=h!==-1?h:t.length,r.lastIndex=h,lZ(t.slice(0,h),e)}(),i=t[0]===` +`||t[0]===" ",a,s;s=r.exec(t);){var l=s[1],u=s[2];a=u[0]===" ",n+=l+(!i&&!a&&u!==""?` +`:"")+lZ(u,e),i=a}return n}function lZ(t,e){if(t===""||t[0]===" ")return t;for(var r=/ [^ ]/g,n,i=0,a,s=0,l=0,u="";n=r.exec(t);)l=n.index,l-i>e&&(a=s>i?s:l,u+=` +`+t.slice(i,a),i=a+1),s=l;return u+=` +`,t.length-i>e&&s>i?u+=t.slice(i,s)+` +`+t.slice(s+1):u+=t.slice(i),u.slice(1)}function y_e(t){for(var e="",r=0,n,i=0;i=65536?i+=2:i++)r=Iv(t,i),n=Fa[r],!n&&Fv(r)?(e+=t[i],r>=65536&&(e+=t[i+1])):e+=n||l_e(r);return e}function v_e(t,e,r){var n="",i=t.tag,a,s,l;for(a=0,s=r.length;a"u"&&Pu(t,e,null,!1,!1))&&(n!==""&&(n+=","+(t.condenseFlow?"":" ")),n+=t.dump);t.tag=i,t.dump="["+n+"]"}function cZ(t,e,r,n){var i="",a=t.tag,s,l,u;for(s=0,l=r.length;s"u"&&Pu(t,e+1,null,!0,!0,!1,!0))&&((!n||i!=="")&&(i+=X9(t,e)),t.dump&&Pv===t.dump.charCodeAt(0)?i+="-":i+="- ",i+=t.dump);t.tag=a,t.dump=i||"[]"}function x_e(t,e,r){var n="",i=t.tag,a=Object.keys(r),s,l,u,h,f;for(s=0,l=a.length;s1024&&(f+="? "),f+=t.dump+(t.condenseFlow?'"':"")+":"+(t.condenseFlow?"":" "),Pu(t,e,h,!1,!1)&&(f+=t.dump,n+=f));t.tag=i,t.dump="{"+n+"}"}function b_e(t,e,r,n){var i="",a=t.tag,s=Object.keys(r),l,u,h,f,d,p;if(t.sortKeys===!0)s.sort();else if(typeof t.sortKeys=="function")s.sort(t.sortKeys);else if(t.sortKeys)throw new Ms("sortKeys must be a boolean or a function");for(l=0,u=s.length;l1024,d&&(t.dump&&Pv===t.dump.charCodeAt(0)?p+="?":p+="? "),p+=t.dump,d&&(p+=X9(t,e)),Pu(t,e+1,f,!0,d)&&(t.dump&&Pv===t.dump.charCodeAt(0)?p+=":":p+=": ",p+=t.dump,i+=p));t.tag=a,t.dump=i||"{}"}function uZ(t,e,r){var n,i,a,s,l,u;for(i=r?t.explicitTypes:t.implicitTypes,a=0,s=i.length;a tag resolver accepts not "'+u+'" style');t.dump=n}return!0}return!1}function Pu(t,e,r,n,i,a,s){t.tag=null,t.dump=r,uZ(t,r,!1)||uZ(t,r,!0);var l=CZ.call(t.dump),u=n,h;n&&(n=t.flowLevel<0||t.flowLevel>e);var f=l==="[object Object]"||l==="[object Array]",d,p;if(f&&(d=t.duplicates.indexOf(r),p=d!==-1),(t.tag!==null&&t.tag!=="?"||p||t.indent!==2&&e>0)&&(i=!1),p&&t.usedDuplicates[d])t.dump="*ref_"+d;else{if(f&&p&&!t.usedDuplicates[d]&&(t.usedDuplicates[d]=!0),l==="[object Object]")n&&Object.keys(t.dump).length!==0?(b_e(t,e,t.dump,i),p&&(t.dump="&ref_"+d+t.dump)):(x_e(t,e,t.dump),p&&(t.dump="&ref_"+d+" "+t.dump));else if(l==="[object Array]")n&&t.dump.length!==0?(t.noArrayIndent&&!s&&e>0?cZ(t,e-1,t.dump,i):cZ(t,e,t.dump,i),p&&(t.dump="&ref_"+d+t.dump)):(v_e(t,e,t.dump),p&&(t.dump="&ref_"+d+" "+t.dump));else if(l==="[object String]")t.tag!=="?"&&m_e(t,t.dump,e,a,u);else{if(l==="[object Undefined]")return!1;if(t.skipInvalid)return!1;throw new Ms("unacceptable kind of an object to dump "+l)}t.tag!==null&&t.tag!=="?"&&(h=encodeURI(t.tag[0]==="!"?t.tag.slice(1):t.tag).replace(/!/g,"%21"),t.tag[0]==="!"?h="!"+h:h.slice(0,18)==="tag:yaml.org,2002:"?h="!!"+h.slice(18):h="!<"+h+">",t.dump=h+" "+t.dump)}return!0}function w_e(t,e){var r=[],n=[],i,a;for(K9(t,r,n),i=0,a=n.length;i{"use strict";o(hZ,"isNothing");o(iAe,"isObject");o(aAe,"toArray");o(sAe,"extend");o(oAe,"repeat");o(lAe,"isNegativeZero");cAe=hZ,uAe=iAe,hAe=aAe,fAe=oAe,dAe=lAe,pAe=sAe,Gi={isNothing:cAe,isObject:uAe,toArray:hAe,repeat:fAe,isNegativeZero:dAe,extend:pAe};o(fZ,"formatError");o(Ov,"YAMLException$1");Ov.prototype=Object.create(Error.prototype);Ov.prototype.constructor=Ov;Ov.prototype.toString=o(function(e){return this.name+": "+fZ(this,e)},"toString");Ms=Ov;o(U9,"getLine");o(H9,"padStart");o(mAe,"makeSnippet");gAe=mAe,yAe=["kind","multi","resolve","construct","instanceOf","predicate","represent","representName","defaultStyle","styleAliases"],vAe=["scalar","sequence","mapping"];o(xAe,"compileStyleAliases");o(bAe,"Type$1");Ba=bAe;o(KQ,"compileList");o(wAe,"compileMap");o(Y9,"Schema$1");Y9.prototype.extend=o(function(e){var r=[],n=[];if(e instanceof Ba)n.push(e);else if(Array.isArray(e))n=n.concat(e);else if(e&&(Array.isArray(e.implicit)||Array.isArray(e.explicit)))e.implicit&&(r=r.concat(e.implicit)),e.explicit&&(n=n.concat(e.explicit));else throw new Ms("Schema.extend argument should be a Type, [ Type ], or a schema definition ({ implicit: [...], explicit: [...] })");r.forEach(function(a){if(!(a instanceof Ba))throw new Ms("Specified list of YAML types (or a single Type object) contains a non-Type object.");if(a.loadKind&&a.loadKind!=="scalar")throw new Ms("There is a non-scalar type in the implicit list of a schema. Implicit resolving of such types is not supported.");if(a.multi)throw new Ms("There is a multi type in the implicit list of a schema. Multi tags can only be listed as explicit.")}),n.forEach(function(a){if(!(a instanceof Ba))throw new Ms("Specified list of YAML types (or a single Type object) contains a non-Type object.")});var i=Object.create(Y9.prototype);return i.implicit=(this.implicit||[]).concat(r),i.explicit=(this.explicit||[]).concat(n),i.compiledImplicit=KQ(i,"implicit"),i.compiledExplicit=KQ(i,"explicit"),i.compiledTypeMap=wAe(i.compiledImplicit,i.compiledExplicit),i},"extend");TAe=Y9,kAe=new Ba("tag:yaml.org,2002:str",{kind:"scalar",construct:o(function(t){return t!==null?t:""},"construct")}),EAe=new Ba("tag:yaml.org,2002:seq",{kind:"sequence",construct:o(function(t){return t!==null?t:[]},"construct")}),SAe=new Ba("tag:yaml.org,2002:map",{kind:"mapping",construct:o(function(t){return t!==null?t:{}},"construct")}),CAe=new TAe({explicit:[kAe,EAe,SAe]});o(AAe,"resolveYamlNull");o(_Ae,"constructYamlNull");o(LAe,"isNull");DAe=new Ba("tag:yaml.org,2002:null",{kind:"scalar",resolve:AAe,construct:_Ae,predicate:LAe,represent:{canonical:o(function(){return"~"},"canonical"),lowercase:o(function(){return"null"},"lowercase"),uppercase:o(function(){return"NULL"},"uppercase"),camelcase:o(function(){return"Null"},"camelcase"),empty:o(function(){return""},"empty")},defaultStyle:"lowercase"});o(NAe,"resolveYamlBoolean");o(RAe,"constructYamlBoolean");o(MAe,"isBoolean");IAe=new Ba("tag:yaml.org,2002:bool",{kind:"scalar",resolve:NAe,construct:RAe,predicate:MAe,represent:{lowercase:o(function(t){return t?"true":"false"},"lowercase"),uppercase:o(function(t){return t?"TRUE":"FALSE"},"uppercase"),camelcase:o(function(t){return t?"True":"False"},"camelcase")},defaultStyle:"lowercase"});o(OAe,"isHexCode");o(PAe,"isOctCode");o(BAe,"isDecCode");o(FAe,"resolveYamlInteger");o(zAe,"constructYamlInteger");o(GAe,"isInteger");$Ae=new Ba("tag:yaml.org,2002:int",{kind:"scalar",resolve:FAe,construct:zAe,predicate:GAe,represent:{binary:o(function(t){return t>=0?"0b"+t.toString(2):"-0b"+t.toString(2).slice(1)},"binary"),octal:o(function(t){return t>=0?"0o"+t.toString(8):"-0o"+t.toString(8).slice(1)},"octal"),decimal:o(function(t){return t.toString(10)},"decimal"),hexadecimal:o(function(t){return t>=0?"0x"+t.toString(16).toUpperCase():"-0x"+t.toString(16).toUpperCase().slice(1)},"hexadecimal")},defaultStyle:"decimal",styleAliases:{binary:[2,"bin"],octal:[8,"oct"],decimal:[10,"dec"],hexadecimal:[16,"hex"]}}),VAe=new RegExp("^(?:[-+]?(?:[0-9][0-9_]*)(?:\\.[0-9_]*)?(?:[eE][-+]?[0-9]+)?|\\.[0-9_]+(?:[eE][-+]?[0-9]+)?|[-+]?\\.(?:inf|Inf|INF)|\\.(?:nan|NaN|NAN))$");o(UAe,"resolveYamlFloat");o(HAe,"constructYamlFloat");WAe=/^[-+]?[0-9]+e/;o(YAe,"representYamlFloat");o(qAe,"isFloat");XAe=new Ba("tag:yaml.org,2002:float",{kind:"scalar",resolve:UAe,construct:HAe,predicate:qAe,represent:YAe,defaultStyle:"lowercase"}),dZ=CAe.extend({implicit:[DAe,IAe,$Ae,XAe]}),jAe=dZ,pZ=new RegExp("^([0-9][0-9][0-9][0-9])-([0-9][0-9])-([0-9][0-9])$"),mZ=new RegExp("^([0-9][0-9][0-9][0-9])-([0-9][0-9]?)-([0-9][0-9]?)(?:[Tt]|[ \\t]+)([0-9][0-9]?):([0-9][0-9]):([0-9][0-9])(?:\\.([0-9]*))?(?:[ \\t]*(Z|([-+])([0-9][0-9]?)(?::([0-9][0-9]))?))?$");o(KAe,"resolveYamlTimestamp");o(QAe,"constructYamlTimestamp");o(ZAe,"representYamlTimestamp");JAe=new Ba("tag:yaml.org,2002:timestamp",{kind:"scalar",resolve:KAe,construct:QAe,instanceOf:Date,represent:ZAe});o(e8e,"resolveYamlMerge");t8e=new Ba("tag:yaml.org,2002:merge",{kind:"scalar",resolve:e8e}),Q9=`ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/= +\r`;o(r8e,"resolveYamlBinary");o(n8e,"constructYamlBinary");o(i8e,"representYamlBinary");o(a8e,"isBinary");s8e=new Ba("tag:yaml.org,2002:binary",{kind:"scalar",resolve:r8e,construct:n8e,predicate:a8e,represent:i8e}),o8e=Object.prototype.hasOwnProperty,l8e=Object.prototype.toString;o(c8e,"resolveYamlOmap");o(u8e,"constructYamlOmap");h8e=new Ba("tag:yaml.org,2002:omap",{kind:"sequence",resolve:c8e,construct:u8e}),f8e=Object.prototype.toString;o(d8e,"resolveYamlPairs");o(p8e,"constructYamlPairs");m8e=new Ba("tag:yaml.org,2002:pairs",{kind:"sequence",resolve:d8e,construct:p8e}),g8e=Object.prototype.hasOwnProperty;o(y8e,"resolveYamlSet");o(v8e,"constructYamlSet");x8e=new Ba("tag:yaml.org,2002:set",{kind:"mapping",resolve:y8e,construct:v8e}),gZ=jAe.extend({implicit:[JAe,t8e],explicit:[s8e,h8e,m8e,x8e]}),Kh=Object.prototype.hasOwnProperty,X5=1,yZ=2,vZ=3,j5=4,W9=1,b8e=2,QQ=3,w8e=/[\x00-\x08\x0B\x0C\x0E-\x1F\x7F-\x84\x86-\x9F\uFFFE\uFFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF]/,T8e=/[\x85\u2028\u2029]/,k8e=/[,\[\]\{\}]/,xZ=/^(?:!|!!|![a-z\-]+!)$/i,bZ=/^(?:!|[^,\[\]\{\}])(?:%[0-9a-f]{2}|[0-9a-z\-#;\/\?:@&=\+\$,_\.!~\*'\(\)\[\]])*$/i;o(ZQ,"_class");o(Ac,"is_EOL");o(Fd,"is_WHITE_SPACE");o(Is,"is_WS_OR_EOL");o(wm,"is_FLOW_INDICATOR");o(E8e,"fromHexCode");o(S8e,"escapedHexLen");o(C8e,"fromDecimalCode");o(JQ,"simpleEscapeSequence");o(A8e,"charFromCodepoint");wZ=new Array(256),TZ=new Array(256);for(Bd=0;Bd<256;Bd++)wZ[Bd]=JQ(Bd)?1:0,TZ[Bd]=JQ(Bd);o(_8e,"State$1");o(kZ,"generateError");o(Qt,"throwError");o(K5,"throwWarning");eZ={YAML:o(function(e,r,n){var i,a,s;e.version!==null&&Qt(e,"duplication of %YAML directive"),n.length!==1&&Qt(e,"YAML directive accepts exactly one argument"),i=/^([0-9]+)\.([0-9]+)$/.exec(n[0]),i===null&&Qt(e,"ill-formed argument of the YAML directive"),a=parseInt(i[1],10),s=parseInt(i[2],10),a!==1&&Qt(e,"unacceptable YAML version of the document"),e.version=n[0],e.checkLineBreaks=s<2,s!==1&&s!==2&&K5(e,"unsupported YAML version of the document")},"handleYamlDirective"),TAG:o(function(e,r,n){var i,a;n.length!==2&&Qt(e,"TAG directive accepts exactly two arguments"),i=n[0],a=n[1],xZ.test(i)||Qt(e,"ill-formed tag handle (first argument) of the TAG directive"),Kh.call(e.tagMap,i)&&Qt(e,'there is a previously declared suffix for "'+i+'" tag handle'),bZ.test(a)||Qt(e,"ill-formed tag prefix (second argument) of the TAG directive");try{a=decodeURIComponent(a)}catch{Qt(e,"tag prefix is malformed: "+a)}e.tagMap[i]=a},"handleTagDirective")};o(jh,"captureSegment");o(tZ,"mergeMappings");o(Tm,"storeMappingPair");o(Z9,"readLineBreak");o(Di,"skipSeparationSpace");o(J5,"testDocumentSeparator");o(J9,"writeFoldedLines");o(L8e,"readPlainScalar");o(D8e,"readSingleQuotedScalar");o(N8e,"readDoubleQuotedScalar");o(R8e,"readFlowCollection");o(M8e,"readBlockScalar");o(rZ,"readBlockSequence");o(I8e,"readBlockMapping");o(O8e,"readTagProperty");o(P8e,"readAnchorProperty");o(B8e,"readAlias");o(km,"composeNode");o(F8e,"readDocument");o(EZ,"loadDocuments");o(z8e,"loadAll$1");o(G8e,"load$1");$8e=z8e,V8e=G8e,SZ={loadAll:$8e,load:V8e},CZ=Object.prototype.toString,AZ=Object.prototype.hasOwnProperty,eL=65279,U8e=9,Pv=10,H8e=13,W8e=32,Y8e=33,q8e=34,q9=35,X8e=37,j8e=38,K8e=39,Q8e=42,_Z=44,Z8e=45,Q5=58,J8e=61,e_e=62,t_e=63,r_e=64,LZ=91,DZ=93,n_e=96,NZ=123,i_e=124,RZ=125,Fa={};Fa[0]="\\0";Fa[7]="\\a";Fa[8]="\\b";Fa[9]="\\t";Fa[10]="\\n";Fa[11]="\\v";Fa[12]="\\f";Fa[13]="\\r";Fa[27]="\\e";Fa[34]='\\"';Fa[92]="\\\\";Fa[133]="\\N";Fa[160]="\\_";Fa[8232]="\\L";Fa[8233]="\\P";a_e=["y","Y","yes","Yes","YES","on","On","ON","n","N","no","No","NO","off","Off","OFF"],s_e=/^[-+]?[0-9_]+(?::[0-9_]+)+(?:\.[0-9_]*)?$/;o(o_e,"compileStyleMap");o(l_e,"encodeHex");c_e=1,Bv=2;o(u_e,"State");o(nZ,"indentString");o(X9,"generateNextLine");o(h_e,"testImplicitResolving");o(Z5,"isWhitespace");o(Fv,"isPrintable");o(iZ,"isNsCharOrWhitespace");o(aZ,"isPlainSafe");o(f_e,"isPlainSafeFirst");o(d_e,"isPlainSafeLast");o(Iv,"codePointAt");o(MZ,"needIndentIndicator");IZ=1,j9=2,OZ=3,PZ=4,bm=5;o(p_e,"chooseScalarStyle");o(m_e,"writeScalar");o(sZ,"blockHeader");o(oZ,"dropEndingNewline");o(g_e,"foldString");o(lZ,"foldLine");o(y_e,"escapeString");o(v_e,"writeFlowSequence");o(cZ,"writeBlockSequence");o(x_e,"writeFlowMapping");o(b_e,"writeBlockMapping");o(uZ,"detectType");o(Pu,"writeNode");o(w_e,"getDuplicateReferences");o(K9,"inspectNode");o(T_e,"dump$1");k_e=T_e,E_e={dump:k_e};o(tL,"renamed");Em=dZ,Sm=SZ.load,PDt=SZ.loadAll,BDt=E_e.dump,FDt=tL("safeLoad","load"),zDt=tL("safeLoadAll","loadAll"),GDt=tL("safeDump","dump")});function iL(t){let e=[];for(let r of t){let n=Gv.get(r);n?.styles&&(e=[...e,...n.styles??[]].map(i=>i.trim())),n?.textStyles&&(e=[...e,...n.textStyles??[]].map(i=>i.trim()))}return e}var S_e,BZ,Cm,Qh,Os,Gv,Bu,aL,sL,tw,nL,Yo,rw,nw,iw,aw,C_e,A_e,__e,L_e,D_e,N_e,R_e,oL,M_e,I_e,O_e,FZ,P_e,B_e,lL,zZ,GZ,F_e,$Z,z_e,G_e,$_e,V_e,U_e,zv,VZ,UZ,H_e,W_e,HZ,Y_e,q_e,X_e,j_e,K_e,WZ,YZ,Q_e,Z_e,J_e,e9e,t9e,r9e,sw,cL=M(()=>{"use strict";pr();hr();Vt();fr();V9();ut();ew();Ai();S_e="flowchart-",BZ=0,Cm=pe(),Qh=new Map,Os=[],Gv=new Map,Bu=[],aL=new Map,sL=new Map,tw=0,nL=!0,nw=[],iw=o(t=>qe.sanitizeText(t,Cm),"sanitizeText"),aw=o(function(t){for(let e of Qh.values())if(e.id===t)return e.domId;return t},"lookUpDomId"),C_e=o(function(t,e,r,n,i,a,s={},l){if(!t||t.trim().length===0)return;let u,h=Qh.get(t);if(h===void 0&&(h={id:t,labelType:"text",domId:S_e+t+"-"+BZ,styles:[],classes:[]},Qh.set(t,h)),BZ++,e!==void 0?(Cm=pe(),u=iw(e.text.trim()),h.labelType=e.type,u.startsWith('"')&&u.endsWith('"')&&(u=u.substring(1,u.length-1)),h.text=u):h.text===void 0&&(h.text=t),r!==void 0&&(h.type=r),n?.forEach(function(f){h.styles.push(f)}),i?.forEach(function(f){h.classes.push(f)}),a!==void 0&&(h.dir=a),h.props===void 0?h.props=s:s!==void 0&&Object.assign(h.props,s),l!==void 0){let f;l.includes(` +`)?f=l+` +`:f=`{ +`+l+` +}`;let d=Sm(f,{schema:Em});if(d.shape){if(d.shape!==d.shape.toLowerCase()||d.shape.includes("_"))throw new Error(`No such shape: ${d.shape}. Shape names should be lowercase.`);if(!jQ(d.shape))throw new Error(`No such shape: ${d.shape}.`);h.type=d?.shape}d?.label&&(h.text=d?.label),d?.icon&&(h.icon=d?.icon,!d.label?.trim()&&h.text===t&&(h.text="")),d?.form&&(h.form=d?.form),d?.pos&&(h.pos=d?.pos),d?.img&&(h.img=d?.img,!d.label?.trim()&&h.text===t&&(h.text="")),d?.constraint&&(h.constraint=d.constraint),d.w&&(h.assetWidth=Number(d.w)),d.h&&(h.assetHeight=Number(d.h))}},"addVertex"),A_e=o(function(t,e,r){let a={start:t,end:e,type:void 0,text:"",labelType:"text"};Y.info("abc78 Got edge...",a);let s=r.text;if(s!==void 0&&(a.text=iw(s.text.trim()),a.text.startsWith('"')&&a.text.endsWith('"')&&(a.text=a.text.substring(1,a.text.length-1)),a.labelType=s.type),r!==void 0&&(a.type=r.type,a.stroke=r.stroke,a.length=r.length>10?10:r.length),Os.length<(Cm.maxEdges??500))Y.info("Pushing edge..."),Os.push(a);else throw new Error(`Edge limit exceeded. ${Os.length} edges found, but the limit is ${Cm.maxEdges}. + +Initialize mermaid with maxEdges set to a higher number to allow more edges. +You cannot set this config via configuration inside the diagram as it is a secure config. +You have to call mermaid.initialize.`)},"addSingleLink"),__e=o(function(t,e,r){Y.info("addLink",t,e,r);for(let n of t)for(let i of e)A_e(n,i,r)},"addLink"),L_e=o(function(t,e){t.forEach(function(r){r==="default"?Os.defaultInterpolate=e:Os[r].interpolate=e})},"updateLinkInterpolate"),D_e=o(function(t,e){t.forEach(function(r){if(typeof r=="number"&&r>=Os.length)throw new Error(`The index ${r} for linkStyle is out of bounds. Valid indices for linkStyle are between 0 and ${Os.length-1}. (Help: Ensure that the index is within the range of existing edges.)`);r==="default"?Os.defaultStyle=e:(Os[r].style=e,(Os[r]?.style?.length??0)>0&&!Os[r]?.style?.some(n=>n?.startsWith("fill"))&&Os[r]?.style?.push("fill:none"))})},"updateLink"),N_e=o(function(t,e){t.split(",").forEach(function(r){let n=Gv.get(r);n===void 0&&(n={id:r,styles:[],textStyles:[]},Gv.set(r,n)),e?.forEach(function(i){if(/color/.exec(i)){let a=i.replace("fill","bgFill");n.textStyles.push(a)}n.styles.push(i)})})},"addClass"),R_e=o(function(t){Yo=t,/.*/.exec(Yo)&&(Yo="LR"),/.*v/.exec(Yo)&&(Yo="TB"),Yo==="TD"&&(Yo="TB")},"setDirection"),oL=o(function(t,e){for(let r of t.split(",")){let n=Qh.get(r);n&&n.classes.push(e);let i=aL.get(r);i&&i.classes.push(e)}},"setClass"),M_e=o(function(t,e){if(e!==void 0){e=iw(e);for(let r of t.split(","))sL.set(rw==="gen-1"?aw(r):r,e)}},"setTooltip"),I_e=o(function(t,e,r){let n=aw(t);if(pe().securityLevel!=="loose"||e===void 0)return;let i=[];if(typeof r=="string"){i=r.split(/,(?=(?:(?:[^"]*"){2})*[^"]*$)/);for(let s=0;s")),i.classed("hover",!0)}).on("mouseout",function(){e.transition().duration(500).style("opacity",0),Ve(this).classed("hover",!1)})},"setupToolTips");nw.push($Z);z_e=o(function(t="gen-1"){Qh=new Map,Gv=new Map,Os=[],nw=[$Z],Bu=[],aL=new Map,tw=0,sL=new Map,nL=!0,rw=t,Cm=pe(),Lr()},"clear"),G_e=o(t=>{rw=t||"gen-2"},"setGen"),$_e=o(function(){return"fill:#ffa;stroke: #f66; stroke-width: 3px; stroke-dasharray: 5, 5;fill:#ffa;stroke: #666;"},"defaultStyle"),V_e=o(function(t,e,r){let n=t.text.trim(),i=r.text;t===r&&/\s/.exec(r.text)&&(n=void 0);function a(h){let f={boolean:{},number:{},string:{}},d=[],p;return{nodeList:h.filter(function(g){let y=typeof g;return g.stmt&&g.stmt==="dir"?(p=g.value,!1):g.trim()===""?!1:y in f?f[y].hasOwnProperty(g)?!1:f[y][g]=!0:d.includes(g)?!1:d.push(g)}),dir:p}}o(a,"uniq");let{nodeList:s,dir:l}=a(e.flat());if(rw==="gen-1")for(let h=0;h2e3)return{result:!1,count:0};if(VZ[zv]=e,Bu[e].id===t)return{result:!0,count:0};let n=0,i=1;for(;n=0){let s=UZ(t,a);if(s.result)return{result:!0,count:i+s.count};i=i+s.count}n=n+1}return{result:!1,count:i}},"indexNodes2"),H_e=o(function(t){return VZ[t]},"getDepthFirstPos"),W_e=o(function(){zv=-1,Bu.length>0&&UZ("none",Bu.length-1)},"indexNodes"),HZ=o(function(){return Bu},"getSubGraphs"),Y_e=o(()=>nL?(nL=!1,!0):!1,"firstGraph"),q_e=o(t=>{let e=t.trim(),r="arrow_open";switch(e[0]){case"<":r="arrow_point",e=e.slice(1);break;case"x":r="arrow_cross",e=e.slice(1);break;case"o":r="arrow_circle",e=e.slice(1);break}let n="normal";return e.includes("=")&&(n="thick"),e.includes(".")&&(n="dotted"),{type:r,stroke:n}},"destructStartLink"),X_e=o((t,e)=>{let r=e.length,n=0;for(let i=0;i{let e=t.trim(),r=e.slice(0,-1),n="arrow_open";switch(e.slice(-1)){case"x":n="arrow_cross",e.startsWith("x")&&(n="double_"+n,r=r.slice(1));break;case">":n="arrow_point",e.startsWith("<")&&(n="double_"+n,r=r.slice(1));break;case"o":n="arrow_circle",e.startsWith("o")&&(n="double_"+n,r=r.slice(1));break}let i="normal",a=r.length-1;r.startsWith("=")&&(i="thick"),r.startsWith("~")&&(i="invisible");let s=X_e(".",r);return s&&(i="dotted",a=s),{type:n,stroke:i,length:a}},"destructEndLink"),K_e=o((t,e)=>{let r=j_e(t),n;if(e){if(n=q_e(e),n.stroke!==r.stroke)return{type:"INVALID",stroke:"INVALID"};if(n.type==="arrow_open")n.type=r.type;else{if(n.type!==r.type)return{type:"INVALID",stroke:"INVALID"};n.type="double_"+n.type}return n.type==="double_arrow"&&(n.type="double_arrow_point"),n.length=r.length,n}return r},"destructLink"),WZ=o((t,e)=>{for(let r of t)if(r.nodes.includes(e))return!0;return!1},"exists"),YZ=o((t,e)=>{let r=[];return t.nodes.forEach((n,i)=>{WZ(e,n)||r.push(t.nodes[i])}),{nodes:r}},"makeUniq"),Q_e={firstGraph:Y_e},Z_e=o(t=>{if(t.img)return"imageSquare";if(t.icon)return t.form==="circle"?"iconCircle":t.form==="square"?"iconSquare":t.form==="rounded"?"iconRounded":"icon";switch(t.type){case"square":case void 0:return"squareRect";case"round":return"roundedRect";case"ellipse":return"ellipse";default:return t.type}},"getTypeFromVertex"),J_e=o((t,e)=>t.find(r=>r.id===e),"findNode"),e9e=o(t=>{let e="none",r="arrow_point";switch(t){case"arrow_point":case"arrow_circle":case"arrow_cross":r=t;break;case"double_arrow_point":case"double_arrow_circle":case"double_arrow_cross":e=t.replace("double_",""),r=e;break}return{arrowTypeStart:e,arrowTypeEnd:r}},"destructEdgeType"),t9e=o((t,e,r,n,i,a)=>{let s=r.get(t.id),l=n.get(t.id)??!1,u=J_e(e,t.id);if(u)u.cssStyles=t.styles,u.cssCompiledStyles=iL(t.classes),u.cssClasses=t.classes.join(" ");else{let h={id:t.id,label:t.text,labelStyle:"",parentId:s,padding:i.flowchart?.padding||8,cssStyles:t.styles,cssCompiledStyles:iL(["default","node",...t.classes]),cssClasses:"default "+t.classes.join(" "),dir:t.dir,domId:t.domId,look:a,link:t.link,linkTarget:t.linkTarget,tooltip:FZ(t.id),icon:t.icon,pos:t.pos,img:t.img,assetWidth:t.assetWidth,assetHeight:t.assetHeight,constraint:t.constraint};l?e.push({...h,isGroup:!0,shape:"rect"}):e.push({...h,isGroup:!1,shape:Z_e(t)})}},"addNodeFromVertex");o(iL,"getCompiledStyles");r9e=o(()=>{let t=pe(),e=[],r=[],n=HZ(),i=new Map,a=new Map;for(let u=n.length-1;u>=0;u--){let h=n[u];h.nodes.length>0&&a.set(h.id,!0);for(let f of h.nodes)i.set(f,h.id)}for(let u=n.length-1;u>=0;u--){let h=n[u];e.push({id:h.id,label:h.title,labelStyle:"",parentId:i.get(h.id),padding:8,cssCompiledStyles:iL(h.classes),cssClasses:h.classes.join(" "),shape:"rect",dir:h.dir,isGroup:!0,look:t.look})}zZ().forEach(u=>{t9e(u,e,i,a,t,t.look||"classic")});let l=GZ();return l.forEach((u,h)=>{let{arrowTypeStart:f,arrowTypeEnd:d}=e9e(u.type),p=[...l.defaultStyle??[]];u.style&&p.push(...u.style);let m={id:C5(u.start,u.end,{counter:h,prefix:"L"}),start:u.start,end:u.end,type:u.type??"normal",label:u.text,labelpos:"c",thickness:u.stroke,minlen:u.length,classes:u?.stroke==="invisible"?"":"edge-thickness-normal edge-pattern-solid flowchart-link",arrowTypeStart:u?.stroke==="invisible"?"none":f,arrowTypeEnd:u?.stroke==="invisible"?"none":d,arrowheadStyle:"fill: #333",labelStyle:p,style:p,pattern:u.stroke,look:t.look};r.push(m)}),{nodes:e,edges:r,other:{},config:t}},"getData"),sw={defaultConfig:o(()=>B4.flowchart,"defaultConfig"),setAccTitle:Mr,getAccTitle:Br,getAccDescription:zr,getData:r9e,setAccDescription:Fr,addVertex:C_e,lookUpDomId:aw,addLink:__e,updateLinkInterpolate:L_e,updateLink:D_e,addClass:N_e,setDirection:R_e,setClass:oL,setTooltip:M_e,getTooltip:FZ,setClickEvent:P_e,setLink:O_e,bindFunctions:B_e,getDirection:lL,getVertices:zZ,getEdges:GZ,getClasses:F_e,clear:z_e,setGen:G_e,defaultStyle:$_e,addSubGraph:V_e,getDepthFirstPos:H_e,indexNodes:W_e,getSubGraphs:HZ,destructLink:K_e,lex:Q_e,exists:WZ,makeUniq:YZ,setDiagramTitle:cn,getDiagramTitle:Jr}});var Am,ow=M(()=>{"use strict";pr();Am=o((t,e)=>{let r;return e==="sandbox"&&(r=Ve("#i"+t)),(e==="sandbox"?Ve(r.nodes()[0].contentDocument.body):Ve("body")).select(`[id="${t}"]`)},"getDiagramElement")});var Fu,$v=M(()=>{"use strict";Fu=o(({flowchart:t})=>{let e=t?.subGraphTitleMargin?.top??0,r=t?.subGraphTitleMargin?.bottom??0,n=e+r;return{subGraphTitleTopMargin:e,subGraphTitleBottomMargin:r,subGraphTitleTotalMargin:n}},"getSubGraphTitleMargins")});var qZ,n9e,i9e,a9e,s9e,o9e,l9e,XZ,_m,jZ,lw=M(()=>{"use strict";Vt();fr();ut();$v();pr();jt();Pl();k9();Y5();Xh();Xt();qZ=o(async(t,e)=>{Y.info("Creating subgraph rect for ",e.id,e);let r=pe(),{themeVariables:n,handDrawnSeed:i}=r,{clusterBkg:a,clusterBorder:s}=n,{labelStyles:l,nodeStyles:u,borderStyles:h,backgroundStyles:f}=Ze(e),d=t.insert("g").attr("class","cluster "+e.cssClasses).attr("id",e.id).attr("data-look",e.look),p=xr(r.flowchart.htmlLabels),m=d.insert("g").attr("class","cluster-label "),g=await Li(m,e.label,{style:e.labelStyle,useHtmlLabels:p,isNode:!0}),y=g.getBBox();if(xr(r.flowchart.htmlLabels)){let L=g.children[0],S=Ve(g);y=L.getBoundingClientRect(),S.attr("width",y.width),S.attr("height",y.height)}let v=e.width<=y.width+e.padding?y.width+e.padding:e.width;e.width<=y.width+e.padding?e.diff=(v-e.width)/2-e.padding:e.diff=-e.padding;let x=e.height,b=e.x-v/2,w=e.y-x/2;Y.trace("Data ",e,JSON.stringify(e));let _;if(e.look==="handDrawn"){let L=Xe.svg(d),S=Ke(e,{roughness:.7,fill:a,stroke:s,fillWeight:3,seed:i}),A=L.path(Pa(b,w,v,x,0),S);_=d.insert(()=>(Y.debug("Rough node insert CXC",A),A),":first-child"),_.select("path:nth-child(2)").attr("style",h.join(";")),_.select("path").attr("style",f.join(";").replace("fill","stroke"))}else _=d.insert("rect",":first-child"),_.attr("style",u).attr("rx",e.rx).attr("ry",e.ry).attr("x",b).attr("y",w).attr("width",v).attr("height",x);let{subGraphTitleTopMargin:T}=Fu(r);if(m.attr("transform",`translate(${e.x-y.width/2}, ${e.y-e.height/2+T})`),l){let L=m.select("span");L&&L.attr("style",l)}let E=_.node().getBBox();return e.offsetX=0,e.width=E.width,e.height=E.height,e.offsetY=y.height-e.padding/2,e.intersect=function(L){return Hh(e,L)},{cluster:d,labelBBox:y}},"rect"),n9e=o((t,e)=>{let r=t.insert("g").attr("class","note-cluster").attr("id",e.id),n=r.insert("rect",":first-child"),i=0*e.padding,a=i/2;n.attr("rx",e.rx).attr("ry",e.ry).attr("x",e.x-e.width/2-a).attr("y",e.y-e.height/2-a).attr("width",e.width+i).attr("height",e.height+i).attr("fill","none");let s=n.node().getBBox();return e.width=s.width,e.height=s.height,e.intersect=function(l){return Hh(e,l)},{cluster:r,labelBBox:{width:0,height:0}}},"noteGroup"),i9e=o(async(t,e)=>{let r=pe(),{themeVariables:n,handDrawnSeed:i}=r,{altBackground:a,compositeBackground:s,compositeTitleBackground:l,nodeBorder:u}=n,h=t.insert("g").attr("class",e.cssClasses).attr("id",e.id).attr("data-id",e.id).attr("data-look",e.look),f=h.insert("g",":first-child"),d=h.insert("g").attr("class","cluster-label"),p=h.append("rect"),m=d.node().appendChild(await Cc(e.label,e.labelStyle,void 0,!0)),g=m.getBBox();if(xr(r.flowchart.htmlLabels)){let A=m.children[0],I=Ve(m);g=A.getBoundingClientRect(),I.attr("width",g.width),I.attr("height",g.height)}let y=0*e.padding,v=y/2,x=(e.width<=g.width+e.padding?g.width+e.padding:e.width)+y;e.width<=g.width+e.padding?e.diff=(x-e.width)/2-e.padding:e.diff=-e.padding;let b=e.height+y,w=e.height+y-g.height-6,_=e.x-x/2,T=e.y-b/2;e.width=x;let E=e.y-e.height/2-v+g.height+2,L;if(e.look==="handDrawn"){let A=e.cssClasses.includes("statediagram-cluster-alt"),I=Xe.svg(h),D=e.rx||e.ry?I.path(Pa(_,T,x,b,10),{roughness:.7,fill:l,fillStyle:"solid",stroke:u,seed:i}):I.rectangle(_,T,x,b,{seed:i});L=h.insert(()=>D,":first-child");let k=I.rectangle(_,E,x,w,{fill:A?a:s,fillStyle:A?"hachure":"solid",stroke:u,seed:i});L=h.insert(()=>D,":first-child"),p=h.insert(()=>k)}else L=f.insert("rect",":first-child"),L.attr("class","outer").attr("x",_).attr("y",T).attr("width",x).attr("height",b).attr("data-look",e.look),p.attr("class","inner").attr("x",_).attr("y",E).attr("width",x).attr("height",w);d.attr("transform",`translate(${e.x-g.width/2}, ${T+1-(xr(r.flowchart.htmlLabels)?0:3)})`);let S=L.node().getBBox();return e.height=S.height,e.offsetX=0,e.offsetY=g.height-e.padding/2,e.labelBBox=g,e.intersect=function(A){return Hh(e,A)},{cluster:h,labelBBox:g}},"roundedWithTitle"),a9e=o(async(t,e)=>{Y.info("Creating subgraph rect for ",e.id,e);let r=pe(),{themeVariables:n,handDrawnSeed:i}=r,{clusterBkg:a,clusterBorder:s}=n,{labelStyles:l,nodeStyles:u,borderStyles:h,backgroundStyles:f}=Ze(e),d=t.insert("g").attr("class","cluster "+e.cssClasses).attr("id",e.id).attr("data-look",e.look),p=xr(r.flowchart.htmlLabels),m=d.insert("g").attr("class","cluster-label "),g=await Li(m,e.label,{style:e.labelStyle,useHtmlLabels:p,isNode:!0,width:e.width}),y=g.getBBox();if(xr(r.flowchart.htmlLabels)){let L=g.children[0],S=Ve(g);y=L.getBoundingClientRect(),S.attr("width",y.width),S.attr("height",y.height)}let v=e.width<=y.width+e.padding?y.width+e.padding:e.width;e.width<=y.width+e.padding?e.diff=(v-e.width)/2-e.padding:e.diff=-e.padding;let x=e.height,b=e.x-v/2,w=e.y-x/2;Y.trace("Data ",e,JSON.stringify(e));let _;if(e.look==="handDrawn"){let L=Xe.svg(d),S=Ke(e,{roughness:.7,fill:a,stroke:s,fillWeight:4,seed:i}),A=L.path(Pa(b,w,v,x,e.rx),S);_=d.insert(()=>(Y.debug("Rough node insert CXC",A),A),":first-child"),_.select("path:nth-child(2)").attr("style",h.join(";")),_.select("path").attr("style",f.join(";").replace("fill","stroke"))}else _=d.insert("rect",":first-child"),_.attr("style",u).attr("rx",e.rx).attr("ry",e.ry).attr("x",b).attr("y",w).attr("width",v).attr("height",x);let{subGraphTitleTopMargin:T}=Fu(r);if(m.attr("transform",`translate(${e.x-y.width/2}, ${e.y-e.height/2+T})`),l){let L=m.select("span");L&&L.attr("style",l)}let E=_.node().getBBox();return e.offsetX=0,e.width=E.width,e.height=E.height,e.offsetY=y.height-e.padding/2,e.intersect=function(L){return Hh(e,L)},{cluster:d,labelBBox:y}},"kanbanSection"),s9e=o((t,e)=>{let r=pe(),{themeVariables:n,handDrawnSeed:i}=r,{nodeBorder:a}=n,s=t.insert("g").attr("class",e.cssClasses).attr("id",e.id).attr("data-look",e.look),l=s.insert("g",":first-child"),u=0*e.padding,h=e.width+u;e.diff=-e.padding;let f=e.height+u,d=e.x-h/2,p=e.y-f/2;e.width=h;let m;if(e.look==="handDrawn"){let v=Xe.svg(s).rectangle(d,p,h,f,{fill:"lightgrey",roughness:.5,strokeLineDash:[5],stroke:a,seed:i});m=s.insert(()=>v,":first-child")}else m=l.insert("rect",":first-child"),m.attr("class","divider").attr("x",d).attr("y",p).attr("width",h).attr("height",f).attr("data-look",e.look);let g=m.node().getBBox();return e.height=g.height,e.offsetX=0,e.offsetY=0,e.intersect=function(y){return Hh(e,y)},{cluster:s,labelBBox:{}}},"divider"),o9e=qZ,l9e={rect:qZ,squareRect:o9e,roundedWithTitle:i9e,noteGroup:n9e,divider:s9e,kanbanSection:a9e},XZ=new Map,_m=o(async(t,e)=>{let r=e.shape||"rect",n=await l9e[r](t,e);return XZ.set(e.id,n),n},"insertCluster"),jZ=o(()=>{XZ=new Map},"clear")});function cw(t,e){if(t===void 0||e===void 0)return{angle:0,deltaX:0,deltaY:0};t=Wn(t),e=Wn(e);let[r,n]=[t.x,t.y],[i,a]=[e.x,e.y],s=i-r,l=a-n;return{angle:Math.atan(l/s),deltaX:s,deltaY:l}}var qo,Wn,uw,uL=M(()=>{"use strict";qo={aggregation:18,extension:18,composition:18,dependency:6,lollipop:13.5,arrow_point:4};o(cw,"calculateDeltaAndAngle");Wn=o(t=>Array.isArray(t)?{x:t[0],y:t[1]}:t,"pointTransformer"),uw=o(t=>({x:o(function(e,r,n){let i=0,a=Wn(n[0]).x=0?1:-1)}else if(r===n.length-1&&Object.hasOwn(qo,t.arrowTypeEnd)){let{angle:m,deltaX:g}=cw(n[n.length-1],n[n.length-2]);i=qo[t.arrowTypeEnd]*Math.cos(m)*(g>=0?1:-1)}let s=Math.abs(Wn(e).x-Wn(n[n.length-1]).x),l=Math.abs(Wn(e).y-Wn(n[n.length-1]).y),u=Math.abs(Wn(e).x-Wn(n[0]).x),h=Math.abs(Wn(e).y-Wn(n[0]).y),f=qo[t.arrowTypeStart],d=qo[t.arrowTypeEnd],p=1;if(s0&&l0&&h=0?1:-1)}else if(r===n.length-1&&Object.hasOwn(qo,t.arrowTypeEnd)){let{angle:m,deltaY:g}=cw(n[n.length-1],n[n.length-2]);i=qo[t.arrowTypeEnd]*Math.abs(Math.sin(m))*(g>=0?1:-1)}let s=Math.abs(Wn(e).y-Wn(n[n.length-1]).y),l=Math.abs(Wn(e).x-Wn(n[n.length-1]).x),u=Math.abs(Wn(e).y-Wn(n[0]).y),h=Math.abs(Wn(e).x-Wn(n[0]).x),f=qo[t.arrowTypeStart],d=qo[t.arrowTypeEnd],p=1;if(s0&&l0&&h{"use strict";ut();QZ=o((t,e,r,n,i)=>{e.arrowTypeStart&&KZ(t,"start",e.arrowTypeStart,r,n,i),e.arrowTypeEnd&&KZ(t,"end",e.arrowTypeEnd,r,n,i)},"addEdgeMarkers"),c9e={arrow_cross:"cross",arrow_point:"point",arrow_barb:"barb",arrow_circle:"circle",aggregation:"aggregation",extension:"extension",composition:"composition",dependency:"dependency",lollipop:"lollipop"},KZ=o((t,e,r,n,i,a)=>{let s=c9e[r];if(!s){Y.warn(`Unknown arrow type: ${r}`);return}let l=e==="start"?"Start":"End";t.attr(`marker-${e}`,`url(${n}#${i}_${a}-${s}${l})`)},"addEdgeMarker")});function hw(t,e){pe().flowchart.htmlLabels&&t&&(t.style.width=e.length*9+"px",t.style.height="12px")}function f9e(t){let e=[],r=[];for(let n=1;n5&&Math.abs(a.y-i.y)>5||i.y===a.y&&a.x===s.x&&Math.abs(a.x-i.x)>5&&Math.abs(a.y-s.y)>5)&&(e.push(a),r.push(n))}return{cornerPoints:e,cornerPointPositions:r}}var fw,ya,tJ,Vv,dw,pw,u9e,h9e,JZ,eJ,d9e,mw,hL=M(()=>{"use strict";Vt();fr();ut();Pl();hr();uL();$v();pr();jt();Y5();ZZ();fw=new Map,ya=new Map,tJ=o(()=>{fw.clear(),ya.clear()},"clear"),Vv=o(t=>t?t.reduce((r,n)=>r+";"+n,""):"","getLabelStyles"),dw=o(async(t,e)=>{let r=xr(pe().flowchart.htmlLabels),n=await Li(t,e.label,{style:Vv(e.labelStyle),useHtmlLabels:r,addSvgBackground:!0,isNode:!1});Y.info("abc82",e,e.labelType);let i=t.insert("g").attr("class","edgeLabel"),a=i.insert("g").attr("class","label");a.node().appendChild(n);let s=n.getBBox();if(r){let u=n.children[0],h=Ve(n);s=u.getBoundingClientRect(),h.attr("width",s.width),h.attr("height",s.height)}a.attr("transform","translate("+-s.width/2+", "+-s.height/2+")"),fw.set(e.id,i),e.width=s.width,e.height=s.height;let l;if(e.startLabelLeft){let u=await Cc(e.startLabelLeft,Vv(e.labelStyle)),h=t.insert("g").attr("class","edgeTerminals"),f=h.insert("g").attr("class","inner");l=f.node().appendChild(u);let d=u.getBBox();f.attr("transform","translate("+-d.width/2+", "+-d.height/2+")"),ya.get(e.id)||ya.set(e.id,{}),ya.get(e.id).startLeft=h,hw(l,e.startLabelLeft)}if(e.startLabelRight){let u=await Cc(e.startLabelRight,Vv(e.labelStyle)),h=t.insert("g").attr("class","edgeTerminals"),f=h.insert("g").attr("class","inner");l=h.node().appendChild(u),f.node().appendChild(u);let d=u.getBBox();f.attr("transform","translate("+-d.width/2+", "+-d.height/2+")"),ya.get(e.id)||ya.set(e.id,{}),ya.get(e.id).startRight=h,hw(l,e.startLabelRight)}if(e.endLabelLeft){let u=await Cc(e.endLabelLeft,Vv(e.labelStyle)),h=t.insert("g").attr("class","edgeTerminals"),f=h.insert("g").attr("class","inner");l=f.node().appendChild(u);let d=u.getBBox();f.attr("transform","translate("+-d.width/2+", "+-d.height/2+")"),h.node().appendChild(u),ya.get(e.id)||ya.set(e.id,{}),ya.get(e.id).endLeft=h,hw(l,e.endLabelLeft)}if(e.endLabelRight){let u=await Cc(e.endLabelRight,Vv(e.labelStyle)),h=t.insert("g").attr("class","edgeTerminals"),f=h.insert("g").attr("class","inner");l=f.node().appendChild(u);let d=u.getBBox();f.attr("transform","translate("+-d.width/2+", "+-d.height/2+")"),h.node().appendChild(u),ya.get(e.id)||ya.set(e.id,{}),ya.get(e.id).endRight=h,hw(l,e.endLabelRight)}return n},"insertEdgeLabel");o(hw,"setTerminalWidth");pw=o((t,e)=>{Y.debug("Moving label abc88 ",t.id,t.label,fw.get(t.id),e);let r=e.updatedPath?e.updatedPath:e.originalPath,n=pe(),{subGraphTitleTotalMargin:i}=Fu(n);if(t.label){let a=fw.get(t.id),s=t.x,l=t.y;if(r){let u=Ut.calcLabelPosition(r);Y.debug("Moving label "+t.label+" from (",s,",",l,") to (",u.x,",",u.y,") abc88"),e.updatedPath&&(s=u.x,l=u.y)}a.attr("transform",`translate(${s}, ${l+i/2})`)}if(t.startLabelLeft){let a=ya.get(t.id).startLeft,s=t.x,l=t.y;if(r){let u=Ut.calcTerminalLabelPosition(t.arrowTypeStart?10:0,"start_left",r);s=u.x,l=u.y}a.attr("transform",`translate(${s}, ${l})`)}if(t.startLabelRight){let a=ya.get(t.id).startRight,s=t.x,l=t.y;if(r){let u=Ut.calcTerminalLabelPosition(t.arrowTypeStart?10:0,"start_right",r);s=u.x,l=u.y}a.attr("transform",`translate(${s}, ${l})`)}if(t.endLabelLeft){let a=ya.get(t.id).endLeft,s=t.x,l=t.y;if(r){let u=Ut.calcTerminalLabelPosition(t.arrowTypeEnd?10:0,"end_left",r);s=u.x,l=u.y}a.attr("transform",`translate(${s}, ${l})`)}if(t.endLabelRight){let a=ya.get(t.id).endRight,s=t.x,l=t.y;if(r){let u=Ut.calcTerminalLabelPosition(t.arrowTypeEnd?10:0,"end_right",r);s=u.x,l=u.y}a.attr("transform",`translate(${s}, ${l})`)}},"positionEdgeLabel"),u9e=o((t,e)=>{let r=t.x,n=t.y,i=Math.abs(e.x-r),a=Math.abs(e.y-n),s=t.width/2,l=t.height/2;return i>=s||a>=l},"outsideNode"),h9e=o((t,e,r)=>{Y.debug(`intersection calc abc89: + outsidePoint: ${JSON.stringify(e)} + insidePoint : ${JSON.stringify(r)} + node : x:${t.x} y:${t.y} w:${t.width} h:${t.height}`);let n=t.x,i=t.y,a=Math.abs(n-r.x),s=t.width/2,l=r.xMath.abs(n-e.x)*u){let d=r.y{Y.warn("abc88 cutPathAtIntersect",t,e);let r=[],n=t[0],i=!1;return t.forEach(a=>{if(Y.info("abc88 checking point",a,e),!u9e(e,a)&&!i){let s=h9e(e,n,a);Y.debug("abc88 inside",a,n,s),Y.debug("abc88 intersection",s,e);let l=!1;r.forEach(u=>{l=l||u.x===s.x&&u.y===s.y}),r.some(u=>u.x===s.x&&u.y===s.y)?Y.warn("abc88 no intersect",s,r):r.push(s),i=!0}else Y.warn("abc88 outside",a,n),n=a,i||r.push(a)}),Y.debug("returning points",r),r},"cutPathAtIntersect");o(f9e,"extractCornerPoints");eJ=o(function(t,e,r){let n=e.x-t.x,i=e.y-t.y,a=Math.sqrt(n*n+i*i),s=r/a;return{x:e.x-s*n,y:e.y-s*i}},"findAdjacentPoint"),d9e=o(function(t){let{cornerPointPositions:e}=f9e(t),r=[];for(let n=0;n10&&Math.abs(a.y-i.y)>=10){Y.debug("Corner point fixing",Math.abs(a.x-i.x),Math.abs(a.y-i.y));let m=5;s.x===l.x?p={x:h<0?l.x-m+d:l.x+m-d,y:f<0?l.y-d:l.y+d}:p={x:h<0?l.x-d:l.x+d,y:f<0?l.y-m+d:l.y+m-d}}else Y.debug("Corner point skipping fixing",Math.abs(a.x-i.x),Math.abs(a.y-i.y));r.push(p,u)}else r.push(t[n]);return r},"fixCorners"),mw=o(function(t,e,r,n,i,a,s){let{handDrawnSeed:l}=pe(),u=e.points,h=!1,f=i;var d=a;d.intersect&&f.intersect&&(u=u.slice(1,e.points.length-1),u.unshift(f.intersect(u[0])),Y.debug("Last point APA12",e.start,"-->",e.end,u[u.length-1],d,d.intersect(u[u.length-1])),u.push(d.intersect(u[u.length-1]))),e.toCluster&&(Y.info("to cluster abc88",r.get(e.toCluster)),u=JZ(e.points,r.get(e.toCluster).node),h=!0),e.fromCluster&&(Y.debug("from cluster abc88",r.get(e.fromCluster),JSON.stringify(u,null,2)),u=JZ(u.reverse(),r.get(e.fromCluster).node).reverse(),h=!0);let p=u.filter(L=>!Number.isNaN(L.y));p=d9e(p);let m=Po;e.curve&&(m=e.curve);let{x:g,y}=uw(e),v=ns().x(g).y(y).curve(m),x;switch(e.thickness){case"normal":x="edge-thickness-normal";break;case"thick":x="edge-thickness-thick";break;case"invisible":x="edge-thickness-invisible";break;default:x="edge-thickness-normal"}switch(e.pattern){case"solid":x+=" edge-pattern-solid";break;case"dotted":x+=" edge-pattern-dotted";break;case"dashed":x+=" edge-pattern-dashed";break;default:x+=" edge-pattern-solid"}let b,w=v(p),_=Array.isArray(e.style)?e.style:[e.style];if(e.look==="handDrawn"){let L=Xe.svg(t);Object.assign([],p);let S=L.path(w,{roughness:.3,seed:l});x+=" transition",b=Ve(S).select("path").attr("id",e.id).attr("class"," "+x+(e.classes?" "+e.classes:"")).attr("style",_?_.reduce((I,D)=>I+";"+D,""):"");let A=b.attr("d");b.attr("d",A),t.node().appendChild(b.node())}else b=t.append("path").attr("d",w).attr("id",e.id).attr("class"," "+x+(e.classes?" "+e.classes:"")).attr("style",_?_.reduce((L,S)=>L+";"+S,""):"");let T="";(pe().flowchart.arrowMarkerAbsolute||pe().state.arrowMarkerAbsolute)&&(T=window.location.protocol+"//"+window.location.host+window.location.pathname+window.location.search,T=T.replace(/\(/g,"\\(").replace(/\)/g,"\\)")),Y.info("arrowTypeStart",e.arrowTypeStart),Y.info("arrowTypeEnd",e.arrowTypeEnd),QZ(b,e,T,s,n);let E={};return h&&(E.updatedPath=u),E.originalPath=e.points,E},"insertEdge")});var p9e,m9e,g9e,y9e,v9e,x9e,b9e,w9e,T9e,k9e,E9e,gw,fL=M(()=>{"use strict";ut();p9e=o((t,e,r,n)=>{e.forEach(i=>{E9e[i](t,r,n)})},"insertMarkers"),m9e=o((t,e,r)=>{Y.trace("Making markers for ",r),t.append("defs").append("marker").attr("id",r+"_"+e+"-extensionStart").attr("class","marker extension "+e).attr("refX",18).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("path").attr("d","M 1,7 L18,13 V 1 Z"),t.append("defs").append("marker").attr("id",r+"_"+e+"-extensionEnd").attr("class","marker extension "+e).attr("refX",1).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 1,1 V 13 L18,7 Z")},"extension"),g9e=o((t,e,r)=>{t.append("defs").append("marker").attr("id",r+"_"+e+"-compositionStart").attr("class","marker composition "+e).attr("refX",18).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z"),t.append("defs").append("marker").attr("id",r+"_"+e+"-compositionEnd").attr("class","marker composition "+e).attr("refX",1).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z")},"composition"),y9e=o((t,e,r)=>{t.append("defs").append("marker").attr("id",r+"_"+e+"-aggregationStart").attr("class","marker aggregation "+e).attr("refX",18).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z"),t.append("defs").append("marker").attr("id",r+"_"+e+"-aggregationEnd").attr("class","marker aggregation "+e).attr("refX",1).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z")},"aggregation"),v9e=o((t,e,r)=>{t.append("defs").append("marker").attr("id",r+"_"+e+"-dependencyStart").attr("class","marker dependency "+e).attr("refX",6).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("path").attr("d","M 5,7 L9,13 L1,7 L9,1 Z"),t.append("defs").append("marker").attr("id",r+"_"+e+"-dependencyEnd").attr("class","marker dependency "+e).attr("refX",13).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L14,7 L9,1 Z")},"dependency"),x9e=o((t,e,r)=>{t.append("defs").append("marker").attr("id",r+"_"+e+"-lollipopStart").attr("class","marker lollipop "+e).attr("refX",13).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("circle").attr("stroke","black").attr("fill","transparent").attr("cx",7).attr("cy",7).attr("r",6),t.append("defs").append("marker").attr("id",r+"_"+e+"-lollipopEnd").attr("class","marker lollipop "+e).attr("refX",1).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("circle").attr("stroke","black").attr("fill","transparent").attr("cx",7).attr("cy",7).attr("r",6)},"lollipop"),b9e=o((t,e,r)=>{t.append("marker").attr("id",r+"_"+e+"-pointEnd").attr("class","marker "+e).attr("viewBox","0 0 10 10").attr("refX",5).attr("refY",5).attr("markerUnits","userSpaceOnUse").attr("markerWidth",8).attr("markerHeight",8).attr("orient","auto").append("path").attr("d","M 0 0 L 10 5 L 0 10 z").attr("class","arrowMarkerPath").style("stroke-width",1).style("stroke-dasharray","1,0"),t.append("marker").attr("id",r+"_"+e+"-pointStart").attr("class","marker "+e).attr("viewBox","0 0 10 10").attr("refX",4.5).attr("refY",5).attr("markerUnits","userSpaceOnUse").attr("markerWidth",8).attr("markerHeight",8).attr("orient","auto").append("path").attr("d","M 0 5 L 10 10 L 10 0 z").attr("class","arrowMarkerPath").style("stroke-width",1).style("stroke-dasharray","1,0")},"point"),w9e=o((t,e,r)=>{t.append("marker").attr("id",r+"_"+e+"-circleEnd").attr("class","marker "+e).attr("viewBox","0 0 10 10").attr("refX",11).attr("refY",5).attr("markerUnits","userSpaceOnUse").attr("markerWidth",11).attr("markerHeight",11).attr("orient","auto").append("circle").attr("cx","5").attr("cy","5").attr("r","5").attr("class","arrowMarkerPath").style("stroke-width",1).style("stroke-dasharray","1,0"),t.append("marker").attr("id",r+"_"+e+"-circleStart").attr("class","marker "+e).attr("viewBox","0 0 10 10").attr("refX",-1).attr("refY",5).attr("markerUnits","userSpaceOnUse").attr("markerWidth",11).attr("markerHeight",11).attr("orient","auto").append("circle").attr("cx","5").attr("cy","5").attr("r","5").attr("class","arrowMarkerPath").style("stroke-width",1).style("stroke-dasharray","1,0")},"circle"),T9e=o((t,e,r)=>{t.append("marker").attr("id",r+"_"+e+"-crossEnd").attr("class","marker cross "+e).attr("viewBox","0 0 11 11").attr("refX",12).attr("refY",5.2).attr("markerUnits","userSpaceOnUse").attr("markerWidth",11).attr("markerHeight",11).attr("orient","auto").append("path").attr("d","M 1,1 l 9,9 M 10,1 l -9,9").attr("class","arrowMarkerPath").style("stroke-width",2).style("stroke-dasharray","1,0"),t.append("marker").attr("id",r+"_"+e+"-crossStart").attr("class","marker cross "+e).attr("viewBox","0 0 11 11").attr("refX",-1).attr("refY",5.2).attr("markerUnits","userSpaceOnUse").attr("markerWidth",11).attr("markerHeight",11).attr("orient","auto").append("path").attr("d","M 1,1 l 9,9 M 10,1 l -9,9").attr("class","arrowMarkerPath").style("stroke-width",2).style("stroke-dasharray","1,0")},"cross"),k9e=o((t,e,r)=>{t.append("defs").append("marker").attr("id",r+"_"+e+"-barbEnd").attr("refX",19).attr("refY",7).attr("markerWidth",20).attr("markerHeight",14).attr("markerUnits","userSpaceOnUse").attr("orient","auto").append("path").attr("d","M 19,7 L9,13 L14,7 L9,1 Z")},"barb"),E9e={extension:m9e,composition:g9e,aggregation:y9e,dependency:v9e,lollipop:x9e,point:b9e,circle:w9e,cross:T9e,barb:k9e},gw=p9e});async function Lm(t,e,r){let n,i;e.shape==="rect"&&(e.rx&&e.ry?e.shape="roundedRect":e.shape="squareRect");let a=e.shape?$9[e.shape]:void 0;if(!a)throw new Error(`No such shape: ${e.shape}. Please check your syntax.`);if(e.link){let s;r.config.securityLevel==="sandbox"?s="_top":e.linkTarget&&(s=e.linkTarget||"_blank"),n=t.insert("svg:a").attr("xlink:href",e.link).attr("target",s??null),i=await a(n,e,r)}else i=await a(t,e,r),n=i;return e.tooltip&&i.attr("title",e.tooltip),yw.set(e.id,n),e.haveCallback&&n.attr("class",n.attr("class")+" clickable"),n}var yw,rJ,nJ,Uv,vw=M(()=>{"use strict";ut();V9();yw=new Map;o(Lm,"insertNode");rJ=o((t,e)=>{yw.set(e.id,t)},"setNodeElem"),nJ=o(()=>{yw.clear()},"clear"),Uv=o(t=>{let e=yw.get(t.id);Y.trace("Transforming node",t.diff,t,"translate("+(t.x-t.width/2-5)+", "+t.width/2+")");let r=8,n=t.diff||0;return t.clusterNode?e.attr("transform","translate("+(t.x+n-t.width/2)+", "+(t.y-t.height/2-r)+")"):e.attr("transform","translate("+t.x+", "+t.y+")"),n},"positionNode")});var iJ,aJ=M(()=>{"use strict";Za();fr();ut();lw();hL();fL();vw();Ot();hr();iJ={common:qe,getConfig:Cr,insertCluster:_m,insertEdge:mw,insertEdgeLabel:dw,insertMarkers:gw,insertNode:Lm,interpolateToCurve:J_,labelHelper:st,log:Y,positionEdgeLabel:pw}});function C9e(t){return typeof t=="symbol"||ei(t)&&ga(t)==S9e}var S9e,co,zd=M(()=>{"use strict";Lu();zo();S9e="[object Symbol]";o(C9e,"isSymbol");co=C9e});function A9e(t,e){for(var r=-1,n=t==null?0:t.length,i=Array(n);++r{"use strict";o(A9e,"arrayMap");Ps=A9e});function lJ(t){if(typeof t=="string")return t;if(Dt(t))return Ps(t,lJ)+"";if(co(t))return oJ?oJ.call(t):"";var e=t+"";return e=="0"&&1/t==-_9e?"-0":e}var _9e,sJ,oJ,cJ,uJ=M(()=>{"use strict";Cd();Gd();Hn();zd();_9e=1/0,sJ=ia?ia.prototype:void 0,oJ=sJ?sJ.toString:void 0;o(lJ,"baseToString");cJ=lJ});function D9e(t){for(var e=t.length;e--&&L9e.test(t.charAt(e)););return e}var L9e,hJ,fJ=M(()=>{"use strict";L9e=/\s/;o(D9e,"trimmedEndIndex");hJ=D9e});function R9e(t){return t&&t.slice(0,hJ(t)+1).replace(N9e,"")}var N9e,dJ,pJ=M(()=>{"use strict";fJ();N9e=/^\s+/;o(R9e,"baseTrim");dJ=R9e});function B9e(t){if(typeof t=="number")return t;if(co(t))return mJ;if(xn(t)){var e=typeof t.valueOf=="function"?t.valueOf():t;t=xn(e)?e+"":e}if(typeof t!="string")return t===0?t:+t;t=dJ(t);var r=I9e.test(t);return r||O9e.test(t)?P9e(t.slice(2),r?2:8):M9e.test(t)?mJ:+t}var mJ,M9e,I9e,O9e,P9e,gJ,yJ=M(()=>{"use strict";pJ();io();zd();mJ=NaN,M9e=/^[-+]0x[0-9a-f]+$/i,I9e=/^0b[01]+$/i,O9e=/^0o[0-7]+$/i,P9e=parseInt;o(B9e,"toNumber");gJ=B9e});function z9e(t){if(!t)return t===0?t:0;if(t=gJ(t),t===vJ||t===-vJ){var e=t<0?-1:1;return e*F9e}return t===t?t:0}var vJ,F9e,Dm,dL=M(()=>{"use strict";yJ();vJ=1/0,F9e=17976931348623157e292;o(z9e,"toFinite");Dm=z9e});function G9e(t){var e=Dm(t),r=e%1;return e===e?r?e-r:e:0}var _c,Nm=M(()=>{"use strict";dL();o(G9e,"toInteger");_c=G9e});var $9e,xw,xJ=M(()=>{"use strict";Oh();Bo();$9e=As(oi,"WeakMap"),xw=$9e});function V9e(){}var ti,pL=M(()=>{"use strict";o(V9e,"noop");ti=V9e});function U9e(t,e){for(var r=-1,n=t==null?0:t.length;++r{"use strict";o(U9e,"arrayEach");bw=U9e});function H9e(t,e,r,n){for(var i=t.length,a=r+(n?1:-1);n?a--:++a{"use strict";o(H9e,"baseFindIndex");ww=H9e});function W9e(t){return t!==t}var bJ,wJ=M(()=>{"use strict";o(W9e,"baseIsNaN");bJ=W9e});function Y9e(t,e,r){for(var n=r-1,i=t.length;++n{"use strict";o(Y9e,"strictIndexOf");TJ=Y9e});function q9e(t,e,r){return e===e?TJ(t,e,r):ww(t,bJ,r)}var Rm,Tw=M(()=>{"use strict";gL();wJ();kJ();o(q9e,"baseIndexOf");Rm=q9e});function X9e(t,e){var r=t==null?0:t.length;return!!r&&Rm(t,e,0)>-1}var kw,yL=M(()=>{"use strict";Tw();o(X9e,"arrayIncludes");kw=X9e});var j9e,EJ,SJ=M(()=>{"use strict";G_();j9e=m5(Object.keys,Object),EJ=j9e});function Z9e(t){if(!Tc(t))return EJ(t);var e=[];for(var r in Object(t))Q9e.call(t,r)&&r!="constructor"&&e.push(r);return e}var K9e,Q9e,Mm,Ew=M(()=>{"use strict";cm();SJ();K9e=Object.prototype,Q9e=K9e.hasOwnProperty;o(Z9e,"baseKeys");Mm=Z9e});function J9e(t){return li(t)?b5(t):Mm(t)}var Gr,Lc=M(()=>{"use strict";W_();Ew();Go();o(J9e,"keys");Gr=J9e});var eLe,tLe,rLe,va,CJ=M(()=>{"use strict";dm();Nd();j_();Go();cm();Lc();eLe=Object.prototype,tLe=eLe.hasOwnProperty,rLe=k5(function(t,e){if(Tc(e)||li(e)){Uo(e,Gr(e),t);return}for(var r in e)tLe.call(e,r)&&kc(t,r,e[r])}),va=rLe});function aLe(t,e){if(Dt(t))return!1;var r=typeof t;return r=="number"||r=="symbol"||r=="boolean"||t==null||co(t)?!0:iLe.test(t)||!nLe.test(t)||e!=null&&t in Object(e)}var nLe,iLe,Im,Sw=M(()=>{"use strict";Hn();zd();nLe=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,iLe=/^\w*$/;o(aLe,"isKey");Im=aLe});function oLe(t){var e=tm(t,function(n){return r.size===sLe&&r.clear(),n}),r=e.cache;return e}var sLe,AJ,_J=M(()=>{"use strict";M_();sLe=500;o(oLe,"memoizeCapped");AJ=oLe});var lLe,cLe,uLe,LJ,DJ=M(()=>{"use strict";_J();lLe=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,cLe=/\\(\\)?/g,uLe=AJ(function(t){var e=[];return t.charCodeAt(0)===46&&e.push(""),t.replace(lLe,function(r,n,i,a){e.push(i?a.replace(cLe,"$1"):n||r)}),e}),LJ=uLe});function hLe(t){return t==null?"":cJ(t)}var Cw,vL=M(()=>{"use strict";uJ();o(hLe,"toString");Cw=hLe});function fLe(t,e){return Dt(t)?t:Im(t,e)?[t]:LJ(Cw(t))}var Zh,Hv=M(()=>{"use strict";Hn();Sw();DJ();vL();o(fLe,"castPath");Zh=fLe});function pLe(t){if(typeof t=="string"||co(t))return t;var e=t+"";return e=="0"&&1/t==-dLe?"-0":e}var dLe,Dc,Om=M(()=>{"use strict";zd();dLe=1/0;o(pLe,"toKey");Dc=pLe});function mLe(t,e){e=Zh(e,t);for(var r=0,n=e.length;t!=null&&r{"use strict";Hv();Om();o(mLe,"baseGet");Jh=mLe});function gLe(t,e,r){var n=t==null?void 0:Jh(t,e);return n===void 0?r:n}var NJ,RJ=M(()=>{"use strict";Wv();o(gLe,"get");NJ=gLe});function yLe(t,e){for(var r=-1,n=e.length,i=t.length;++r{"use strict";o(yLe,"arrayPush");Pm=yLe});function vLe(t){return Dt(t)||Ml(t)||!!(MJ&&t&&t[MJ])}var MJ,IJ,OJ=M(()=>{"use strict";Cd();um();Hn();MJ=ia?ia.isConcatSpreadable:void 0;o(vLe,"isFlattenable");IJ=vLe});function PJ(t,e,r,n,i){var a=-1,s=t.length;for(r||(r=IJ),i||(i=[]);++a0&&r(l)?e>1?PJ(l,e-1,r,n,i):Pm(i,l):n||(i[i.length]=l)}return i}var Nc,Bm=M(()=>{"use strict";Aw();OJ();o(PJ,"baseFlatten");Nc=PJ});function xLe(t){var e=t==null?0:t.length;return e?Nc(t,1):[]}var Wr,_w=M(()=>{"use strict";Bm();o(xLe,"flatten");Wr=xLe});function bLe(t){return T5(w5(t,void 0,Wr),t+"")}var BJ,FJ=M(()=>{"use strict";_w();Y_();X_();o(bLe,"flatRest");BJ=bLe});function wLe(t,e,r){var n=-1,i=t.length;e<0&&(e=-e>i?0:i+e),r=r>i?i:r,r<0&&(r+=i),i=e>r?0:r-e>>>0,e>>>=0;for(var a=Array(i);++n{"use strict";o(wLe,"baseSlice");Lw=wLe});function DLe(t){return LLe.test(t)}var TLe,kLe,ELe,SLe,CLe,ALe,_Le,LLe,zJ,GJ=M(()=>{"use strict";TLe="\\ud800-\\udfff",kLe="\\u0300-\\u036f",ELe="\\ufe20-\\ufe2f",SLe="\\u20d0-\\u20ff",CLe=kLe+ELe+SLe,ALe="\\ufe0e\\ufe0f",_Le="\\u200d",LLe=RegExp("["+_Le+TLe+CLe+ALe+"]");o(DLe,"hasUnicode");zJ=DLe});function NLe(t,e,r,n){var i=-1,a=t==null?0:t.length;for(n&&a&&(r=t[++i]);++i{"use strict";o(NLe,"arrayReduce");$J=NLe});function RLe(t,e){return t&&Uo(e,Gr(e),t)}var UJ,HJ=M(()=>{"use strict";Nd();Lc();o(RLe,"baseAssign");UJ=RLe});function MLe(t,e){return t&&Uo(e,_s(e),t)}var WJ,YJ=M(()=>{"use strict";Nd();Vh();o(MLe,"baseAssignIn");WJ=MLe});function ILe(t,e){for(var r=-1,n=t==null?0:t.length,i=0,a=[];++r{"use strict";o(ILe,"arrayFilter");Fm=ILe});function OLe(){return[]}var Nw,bL=M(()=>{"use strict";o(OLe,"stubArray");Nw=OLe});var PLe,BLe,qJ,FLe,zm,Rw=M(()=>{"use strict";Dw();bL();PLe=Object.prototype,BLe=PLe.propertyIsEnumerable,qJ=Object.getOwnPropertySymbols,FLe=qJ?function(t){return t==null?[]:(t=Object(t),Fm(qJ(t),function(e){return BLe.call(t,e)}))}:Nw,zm=FLe});function zLe(t,e){return Uo(t,zm(t),e)}var XJ,jJ=M(()=>{"use strict";Nd();Rw();o(zLe,"copySymbols");XJ=zLe});var GLe,$Le,Mw,wL=M(()=>{"use strict";Aw();g5();Rw();bL();GLe=Object.getOwnPropertySymbols,$Le=GLe?function(t){for(var e=[];t;)Pm(e,zm(t)),t=lm(t);return e}:Nw,Mw=$Le});function VLe(t,e){return Uo(t,Mw(t),e)}var KJ,QJ=M(()=>{"use strict";Nd();wL();o(VLe,"copySymbolsIn");KJ=VLe});function ULe(t,e,r){var n=e(t);return Dt(t)?n:Pm(n,r(t))}var Iw,TL=M(()=>{"use strict";Aw();Hn();o(ULe,"baseGetAllKeys");Iw=ULe});function HLe(t){return Iw(t,Gr,zm)}var Yv,kL=M(()=>{"use strict";TL();Rw();Lc();o(HLe,"getAllKeys");Yv=HLe});function WLe(t){return Iw(t,_s,Mw)}var Ow,EL=M(()=>{"use strict";TL();wL();Vh();o(WLe,"getAllKeysIn");Ow=WLe});var YLe,Pw,ZJ=M(()=>{"use strict";Oh();Bo();YLe=As(oi,"DataView"),Pw=YLe});var qLe,Bw,JJ=M(()=>{"use strict";Oh();Bo();qLe=As(oi,"Promise"),Bw=qLe});var XLe,ef,SL=M(()=>{"use strict";Oh();Bo();XLe=As(oi,"Set"),ef=XLe});var eee,jLe,tee,ree,nee,iee,KLe,QLe,ZLe,JLe,eDe,$d,uo,Vd=M(()=>{"use strict";ZJ();l5();JJ();SL();xJ();Lu();D_();eee="[object Map]",jLe="[object Object]",tee="[object Promise]",ree="[object Set]",nee="[object WeakMap]",iee="[object DataView]",KLe=Du(Pw),QLe=Du(Fh),ZLe=Du(Bw),JLe=Du(ef),eDe=Du(xw),$d=ga;(Pw&&$d(new Pw(new ArrayBuffer(1)))!=iee||Fh&&$d(new Fh)!=eee||Bw&&$d(Bw.resolve())!=tee||ef&&$d(new ef)!=ree||xw&&$d(new xw)!=nee)&&($d=o(function(t){var e=ga(t),r=e==jLe?t.constructor:void 0,n=r?Du(r):"";if(n)switch(n){case KLe:return iee;case QLe:return eee;case ZLe:return tee;case JLe:return ree;case eDe:return nee}return e},"getTag"));uo=$d});function nDe(t){var e=t.length,r=new t.constructor(e);return e&&typeof t[0]=="string"&&rDe.call(t,"index")&&(r.index=t.index,r.input=t.input),r}var tDe,rDe,aee,see=M(()=>{"use strict";tDe=Object.prototype,rDe=tDe.hasOwnProperty;o(nDe,"initCloneArray");aee=nDe});function iDe(t,e){var r=e?om(t.buffer):t.buffer;return new t.constructor(r,t.byteOffset,t.byteLength)}var oee,lee=M(()=>{"use strict";f5();o(iDe,"cloneDataView");oee=iDe});function sDe(t){var e=new t.constructor(t.source,aDe.exec(t));return e.lastIndex=t.lastIndex,e}var aDe,cee,uee=M(()=>{"use strict";aDe=/\w*$/;o(sDe,"cloneRegExp");cee=sDe});function oDe(t){return fee?Object(fee.call(t)):{}}var hee,fee,dee,pee=M(()=>{"use strict";Cd();hee=ia?ia.prototype:void 0,fee=hee?hee.valueOf:void 0;o(oDe,"cloneSymbol");dee=oDe});function ADe(t,e,r){var n=t.constructor;switch(e){case gDe:return om(t);case lDe:case cDe:return new n(+t);case yDe:return oee(t,r);case vDe:case xDe:case bDe:case wDe:case TDe:case kDe:case EDe:case SDe:case CDe:return d5(t,r);case uDe:return new n;case hDe:case pDe:return new n(t);case fDe:return cee(t);case dDe:return new n;case mDe:return dee(t)}}var lDe,cDe,uDe,hDe,fDe,dDe,pDe,mDe,gDe,yDe,vDe,xDe,bDe,wDe,TDe,kDe,EDe,SDe,CDe,mee,gee=M(()=>{"use strict";f5();lee();uee();pee();F_();lDe="[object Boolean]",cDe="[object Date]",uDe="[object Map]",hDe="[object Number]",fDe="[object RegExp]",dDe="[object Set]",pDe="[object String]",mDe="[object Symbol]",gDe="[object ArrayBuffer]",yDe="[object DataView]",vDe="[object Float32Array]",xDe="[object Float64Array]",bDe="[object Int8Array]",wDe="[object Int16Array]",TDe="[object Int32Array]",kDe="[object Uint8Array]",EDe="[object Uint8ClampedArray]",SDe="[object Uint16Array]",CDe="[object Uint32Array]";o(ADe,"initCloneByTag");mee=ADe});function LDe(t){return ei(t)&&uo(t)==_De}var _De,yee,vee=M(()=>{"use strict";Vd();zo();_De="[object Map]";o(LDe,"baseIsMap");yee=LDe});var xee,DDe,bee,wee=M(()=>{"use strict";vee();Dd();vv();xee=Vo&&Vo.isMap,DDe=xee?$o(xee):yee,bee=DDe});function RDe(t){return ei(t)&&uo(t)==NDe}var NDe,Tee,kee=M(()=>{"use strict";Vd();zo();NDe="[object Set]";o(RDe,"baseIsSet");Tee=RDe});var Eee,MDe,See,Cee=M(()=>{"use strict";kee();Dd();vv();Eee=Vo&&Vo.isSet,MDe=Eee?$o(Eee):Tee,See=MDe});function Fw(t,e,r,n,i,a){var s,l=e&IDe,u=e&ODe,h=e&PDe;if(r&&(s=i?r(t,n,i,a):r(t)),s!==void 0)return s;if(!xn(t))return t;var f=Dt(t);if(f){if(s=aee(t),!l)return p5(t,s)}else{var d=uo(t),p=d==_ee||d==$De;if(Il(t))return h5(t,l);if(d==Lee||d==Aee||p&&!i){if(s=u||p?{}:y5(t),!l)return u?KJ(t,WJ(s,t)):XJ(t,UJ(s,t))}else{if(!An[d])return i?t:{};s=mee(t,d,l)}}a||(a=new bc);var m=a.get(t);if(m)return m;a.set(t,s),See(t)?t.forEach(function(v){s.add(Fw(v,e,r,v,t,a))}):bee(t)&&t.forEach(function(v,x){s.set(x,Fw(v,e,r,x,t,a))});var g=h?u?Ow:Yv:u?_s:Gr,y=f?void 0:g(t);return bw(y||t,function(v,x){y&&(x=v,v=t[x]),kc(s,x,Fw(v,e,r,x,t,a))}),s}var IDe,ODe,PDe,Aee,BDe,FDe,zDe,GDe,_ee,$De,VDe,UDe,Lee,HDe,WDe,YDe,qDe,XDe,jDe,KDe,QDe,ZDe,JDe,eNe,tNe,rNe,nNe,iNe,aNe,An,zw,CL=M(()=>{"use strict";mv();mL();dm();HJ();YJ();P_();z_();jJ();QJ();kL();EL();Vd();see();gee();$_();Hn();fm();wee();io();Cee();Lc();Vh();IDe=1,ODe=2,PDe=4,Aee="[object Arguments]",BDe="[object Array]",FDe="[object Boolean]",zDe="[object Date]",GDe="[object Error]",_ee="[object Function]",$De="[object GeneratorFunction]",VDe="[object Map]",UDe="[object Number]",Lee="[object Object]",HDe="[object RegExp]",WDe="[object Set]",YDe="[object String]",qDe="[object Symbol]",XDe="[object WeakMap]",jDe="[object ArrayBuffer]",KDe="[object DataView]",QDe="[object Float32Array]",ZDe="[object Float64Array]",JDe="[object Int8Array]",eNe="[object Int16Array]",tNe="[object Int32Array]",rNe="[object Uint8Array]",nNe="[object Uint8ClampedArray]",iNe="[object Uint16Array]",aNe="[object Uint32Array]",An={};An[Aee]=An[BDe]=An[jDe]=An[KDe]=An[FDe]=An[zDe]=An[QDe]=An[ZDe]=An[JDe]=An[eNe]=An[tNe]=An[VDe]=An[UDe]=An[Lee]=An[HDe]=An[WDe]=An[YDe]=An[qDe]=An[rNe]=An[nNe]=An[iNe]=An[aNe]=!0;An[GDe]=An[_ee]=An[XDe]=!1;o(Fw,"baseClone");zw=Fw});function oNe(t){return zw(t,sNe)}var sNe,rn,AL=M(()=>{"use strict";CL();sNe=4;o(oNe,"clone");rn=oNe});function uNe(t){return zw(t,lNe|cNe)}var lNe,cNe,_L,Dee=M(()=>{"use strict";CL();lNe=1,cNe=4;o(uNe,"cloneDeep");_L=uNe});function hNe(t){for(var e=-1,r=t==null?0:t.length,n=0,i=[];++e{"use strict";o(hNe,"compact");Rc=hNe});function dNe(t){return this.__data__.set(t,fNe),this}var fNe,Ree,Mee=M(()=>{"use strict";fNe="__lodash_hash_undefined__";o(dNe,"setCacheAdd");Ree=dNe});function pNe(t){return this.__data__.has(t)}var Iee,Oee=M(()=>{"use strict";o(pNe,"setCacheHas");Iee=pNe});function Gw(t){var e=-1,r=t==null?0:t.length;for(this.__data__=new _d;++e{"use strict";c5();Mee();Oee();o(Gw,"SetCache");Gw.prototype.add=Gw.prototype.push=Ree;Gw.prototype.has=Iee;Gm=Gw});function mNe(t,e){for(var r=-1,n=t==null?0:t.length;++r{"use strict";o(mNe,"arraySome");Vw=mNe});function gNe(t,e){return t.has(e)}var $m,Uw=M(()=>{"use strict";o(gNe,"cacheHas");$m=gNe});function xNe(t,e,r,n,i,a){var s=r&yNe,l=t.length,u=e.length;if(l!=u&&!(s&&u>l))return!1;var h=a.get(t),f=a.get(e);if(h&&f)return h==e&&f==t;var d=-1,p=!0,m=r&vNe?new Gm:void 0;for(a.set(t,e),a.set(e,t);++d{"use strict";$w();LL();Uw();yNe=1,vNe=2;o(xNe,"equalArrays");Hw=xNe});function bNe(t){var e=-1,r=Array(t.size);return t.forEach(function(n,i){r[++e]=[i,n]}),r}var Pee,Bee=M(()=>{"use strict";o(bNe,"mapToArray");Pee=bNe});function wNe(t){var e=-1,r=Array(t.size);return t.forEach(function(n){r[++e]=n}),r}var Vm,Ww=M(()=>{"use strict";o(wNe,"setToArray");Vm=wNe});function ONe(t,e,r,n,i,a,s){switch(r){case INe:if(t.byteLength!=e.byteLength||t.byteOffset!=e.byteOffset)return!1;t=t.buffer,e=e.buffer;case MNe:return!(t.byteLength!=e.byteLength||!a(new sm(t),new sm(e)));case ENe:case SNe:case _Ne:return Fo(+t,+e);case CNe:return t.name==e.name&&t.message==e.message;case LNe:case NNe:return t==e+"";case ANe:var l=Pee;case DNe:var u=n&TNe;if(l||(l=Vm),t.size!=e.size&&!u)return!1;var h=s.get(t);if(h)return h==e;n|=kNe,s.set(t,e);var f=Hw(l(t),l(e),n,i,a,s);return s.delete(t),f;case RNe:if(NL)return NL.call(t)==NL.call(e)}return!1}var TNe,kNe,ENe,SNe,CNe,ANe,_Ne,LNe,DNe,NNe,RNe,MNe,INe,Fee,NL,zee,Gee=M(()=>{"use strict";Cd();B_();Ad();DL();Bee();Ww();TNe=1,kNe=2,ENe="[object Boolean]",SNe="[object Date]",CNe="[object Error]",ANe="[object Map]",_Ne="[object Number]",LNe="[object RegExp]",DNe="[object Set]",NNe="[object String]",RNe="[object Symbol]",MNe="[object ArrayBuffer]",INe="[object DataView]",Fee=ia?ia.prototype:void 0,NL=Fee?Fee.valueOf:void 0;o(ONe,"equalByTag");zee=ONe});function zNe(t,e,r,n,i,a){var s=r&PNe,l=Yv(t),u=l.length,h=Yv(e),f=h.length;if(u!=f&&!s)return!1;for(var d=u;d--;){var p=l[d];if(!(s?p in e:FNe.call(e,p)))return!1}var m=a.get(t),g=a.get(e);if(m&&g)return m==e&&g==t;var y=!0;a.set(t,e),a.set(e,t);for(var v=s;++d{"use strict";kL();PNe=1,BNe=Object.prototype,FNe=BNe.hasOwnProperty;o(zNe,"equalObjects");$ee=zNe});function VNe(t,e,r,n,i,a){var s=Dt(t),l=Dt(e),u=s?Hee:uo(t),h=l?Hee:uo(e);u=u==Uee?Yw:u,h=h==Uee?Yw:h;var f=u==Yw,d=h==Yw,p=u==h;if(p&&Il(t)){if(!Il(e))return!1;s=!0,f=!1}if(p&&!f)return a||(a=new bc),s||Gh(t)?Hw(t,e,r,n,i,a):zee(t,e,u,r,n,i,a);if(!(r&GNe)){var m=f&&Wee.call(t,"__wrapped__"),g=d&&Wee.call(e,"__wrapped__");if(m||g){var y=m?t.value():t,v=g?e.value():e;return a||(a=new bc),i(y,v,r,n,a)}}return p?(a||(a=new bc),$ee(t,e,r,n,i,a)):!1}var GNe,Uee,Hee,Yw,$Ne,Wee,Yee,qee=M(()=>{"use strict";mv();DL();Gee();Vee();Vd();Hn();fm();xv();GNe=1,Uee="[object Arguments]",Hee="[object Array]",Yw="[object Object]",$Ne=Object.prototype,Wee=$Ne.hasOwnProperty;o(VNe,"baseIsEqualDeep");Yee=VNe});function Xee(t,e,r,n,i){return t===e?!0:t==null||e==null||!ei(t)&&!ei(e)?t!==t&&e!==e:Yee(t,e,r,n,Xee,i)}var qw,RL=M(()=>{"use strict";qee();zo();o(Xee,"baseIsEqual");qw=Xee});function WNe(t,e,r,n){var i=r.length,a=i,s=!n;if(t==null)return!a;for(t=Object(t);i--;){var l=r[i];if(s&&l[2]?l[1]!==t[l[0]]:!(l[0]in t))return!1}for(;++i{"use strict";mv();RL();UNe=1,HNe=2;o(WNe,"baseIsMatch");jee=WNe});function YNe(t){return t===t&&!xn(t)}var Xw,ML=M(()=>{"use strict";io();o(YNe,"isStrictComparable");Xw=YNe});function qNe(t){for(var e=Gr(t),r=e.length;r--;){var n=e[r],i=t[n];e[r]=[n,i,Xw(i)]}return e}var Qee,Zee=M(()=>{"use strict";ML();Lc();o(qNe,"getMatchData");Qee=qNe});function XNe(t,e){return function(r){return r==null?!1:r[t]===e&&(e!==void 0||t in Object(r))}}var jw,IL=M(()=>{"use strict";o(XNe,"matchesStrictComparable");jw=XNe});function jNe(t){var e=Qee(t);return e.length==1&&e[0][2]?jw(e[0][0],e[0][1]):function(r){return r===t||jee(r,t,e)}}var Jee,ete=M(()=>{"use strict";Kee();Zee();IL();o(jNe,"baseMatches");Jee=jNe});function KNe(t,e){return t!=null&&e in Object(t)}var tte,rte=M(()=>{"use strict";o(KNe,"baseHasIn");tte=KNe});function QNe(t,e,r){e=Zh(e,t);for(var n=-1,i=e.length,a=!1;++n{"use strict";Hv();um();Hn();wv();v5();Om();o(QNe,"hasPath");Kw=QNe});function ZNe(t,e){return t!=null&&Kw(t,e,tte)}var Qw,PL=M(()=>{"use strict";rte();OL();o(ZNe,"hasIn");Qw=ZNe});function tRe(t,e){return Im(t)&&Xw(e)?jw(Dc(t),e):function(r){var n=NJ(r,t);return n===void 0&&n===e?Qw(r,t):qw(e,n,JNe|eRe)}}var JNe,eRe,nte,ite=M(()=>{"use strict";RL();RJ();PL();Sw();ML();IL();Om();JNe=1,eRe=2;o(tRe,"baseMatchesProperty");nte=tRe});function rRe(t){return function(e){return e?.[t]}}var Zw,BL=M(()=>{"use strict";o(rRe,"baseProperty");Zw=rRe});function nRe(t){return function(e){return Jh(e,t)}}var ate,ste=M(()=>{"use strict";Wv();o(nRe,"basePropertyDeep");ate=nRe});function iRe(t){return Im(t)?Zw(Dc(t)):ate(t)}var ote,lte=M(()=>{"use strict";BL();ste();Sw();Om();o(iRe,"property");ote=iRe});function aRe(t){return typeof t=="function"?t:t==null?aa:typeof t=="object"?Dt(t)?nte(t[0],t[1]):Jee(t):ote(t)}var dn,is=M(()=>{"use strict";ete();ite();Ru();Hn();lte();o(aRe,"baseIteratee");dn=aRe});function sRe(t,e,r,n){for(var i=-1,a=t==null?0:t.length;++i{"use strict";o(sRe,"arrayAggregator");cte=sRe});function oRe(t,e){return t&&am(t,e,Gr)}var Um,Jw=M(()=>{"use strict";u5();Lc();o(oRe,"baseForOwn");Um=oRe});function lRe(t,e){return function(r,n){if(r==null)return r;if(!li(r))return t(r,n);for(var i=r.length,a=e?i:-1,s=Object(r);(e?a--:++a{"use strict";Go();o(lRe,"createBaseEach");hte=lRe});var cRe,Bs,tf=M(()=>{"use strict";Jw();fte();cRe=hte(Um),Bs=cRe});function uRe(t,e,r,n){return Bs(t,function(i,a,s){e(n,i,r(i),s)}),n}var dte,pte=M(()=>{"use strict";tf();o(uRe,"baseAggregator");dte=uRe});function hRe(t,e){return function(r,n){var i=Dt(r)?cte:dte,a=e?e():{};return i(r,t,dn(n,2),a)}}var mte,gte=M(()=>{"use strict";ute();pte();is();Hn();o(hRe,"createAggregator");mte=hRe});var fRe,eT,yte=M(()=>{"use strict";Bo();fRe=o(function(){return oi.Date.now()},"now"),eT=fRe});var vte,dRe,pRe,rf,xte=M(()=>{"use strict";pm();Ad();Rd();Vh();vte=Object.prototype,dRe=vte.hasOwnProperty,pRe=Ec(function(t,e){t=Object(t);var r=-1,n=e.length,i=n>2?e[2]:void 0;for(i&&ao(e[0],e[1],i)&&(n=1);++r{"use strict";o(mRe,"arrayIncludesWith");tT=mRe});function yRe(t,e,r,n){var i=-1,a=kw,s=!0,l=t.length,u=[],h=e.length;if(!l)return u;r&&(e=Ps(e,$o(r))),n?(a=tT,s=!1):e.length>=gRe&&(a=$m,s=!1,e=new Gm(e));e:for(;++i{"use strict";$w();yL();FL();Gd();Dd();Uw();gRe=200;o(yRe,"baseDifference");bte=yRe});var vRe,nf,Tte=M(()=>{"use strict";wte();Bm();pm();x5();vRe=Ec(function(t,e){return Ld(t)?bte(t,Nc(e,1,Ld,!0)):[]}),nf=vRe});function xRe(t){var e=t==null?0:t.length;return e?t[e-1]:void 0}var xa,kte=M(()=>{"use strict";o(xRe,"last");xa=xRe});function bRe(t,e,r){var n=t==null?0:t.length;return n?(e=r||e===void 0?1:_c(e),Lw(t,e<0?0:e,n)):[]}var xi,Ete=M(()=>{"use strict";xL();Nm();o(bRe,"drop");xi=bRe});function wRe(t,e,r){var n=t==null?0:t.length;return n?(e=r||e===void 0?1:_c(e),e=n-e,Lw(t,0,e<0?0:e)):[]}var zu,Ste=M(()=>{"use strict";xL();Nm();o(wRe,"dropRight");zu=wRe});function TRe(t){return typeof t=="function"?t:aa}var Hm,rT=M(()=>{"use strict";Ru();o(TRe,"castFunction");Hm=TRe});function kRe(t,e){var r=Dt(t)?bw:Bs;return r(t,Hm(e))}var Se,nT=M(()=>{"use strict";mL();tf();rT();Hn();o(kRe,"forEach");Se=kRe});var Cte=M(()=>{"use strict";nT()});function ERe(t,e){for(var r=-1,n=t==null?0:t.length;++r{"use strict";o(ERe,"arrayEvery");Ate=ERe});function SRe(t,e){var r=!0;return Bs(t,function(n,i,a){return r=!!e(n,i,a),r}),r}var Lte,Dte=M(()=>{"use strict";tf();o(SRe,"baseEvery");Lte=SRe});function CRe(t,e,r){var n=Dt(t)?Ate:Lte;return r&&ao(t,e,r)&&(e=void 0),n(t,dn(e,3))}var za,Nte=M(()=>{"use strict";_te();Dte();is();Hn();Rd();o(CRe,"every");za=CRe});function ARe(t,e){var r=[];return Bs(t,function(n,i,a){e(n,i,a)&&r.push(n)}),r}var iT,zL=M(()=>{"use strict";tf();o(ARe,"baseFilter");iT=ARe});function _Re(t,e){var r=Dt(t)?Fm:iT;return r(t,dn(e,3))}var Yr,GL=M(()=>{"use strict";Dw();zL();is();Hn();o(_Re,"filter");Yr=_Re});function LRe(t){return function(e,r,n){var i=Object(e);if(!li(e)){var a=dn(r,3);e=Gr(e),r=o(function(l){return a(i[l],l,i)},"predicate")}var s=t(e,r,n);return s>-1?i[a?e[s]:s]:void 0}}var Rte,Mte=M(()=>{"use strict";is();Go();Lc();o(LRe,"createFind");Rte=LRe});function NRe(t,e,r){var n=t==null?0:t.length;if(!n)return-1;var i=r==null?0:_c(r);return i<0&&(i=DRe(n+i,0)),ww(t,dn(e,3),i)}var DRe,Ite,Ote=M(()=>{"use strict";gL();is();Nm();DRe=Math.max;o(NRe,"findIndex");Ite=NRe});var RRe,as,Pte=M(()=>{"use strict";Mte();Ote();RRe=Rte(Ite),as=RRe});function MRe(t){return t&&t.length?t[0]:void 0}var sa,Bte=M(()=>{"use strict";o(MRe,"head");sa=MRe});var Fte=M(()=>{"use strict";Bte()});function IRe(t,e){var r=-1,n=li(t)?Array(t.length):[];return Bs(t,function(i,a,s){n[++r]=e(i,a,s)}),n}var aT,$L=M(()=>{"use strict";tf();Go();o(IRe,"baseMap");aT=IRe});function ORe(t,e){var r=Dt(t)?Ps:aT;return r(t,dn(e,3))}var Qe,Wm=M(()=>{"use strict";Gd();is();$L();Hn();o(ORe,"map");Qe=ORe});function PRe(t,e){return Nc(Qe(t,e),1)}var ba,VL=M(()=>{"use strict";Bm();Wm();o(PRe,"flatMap");ba=PRe});function BRe(t,e){return t==null?t:am(t,Hm(e),_s)}var UL,zte=M(()=>{"use strict";u5();rT();Vh();o(BRe,"forIn");UL=BRe});function FRe(t,e){return t&&Um(t,Hm(e))}var HL,Gte=M(()=>{"use strict";Jw();rT();o(FRe,"forOwn");HL=FRe});var zRe,GRe,$Re,WL,$te=M(()=>{"use strict";im();gte();zRe=Object.prototype,GRe=zRe.hasOwnProperty,$Re=mte(function(t,e,r){GRe.call(t,r)?t[r].push(e):wc(t,r,[e])}),WL=$Re});function VRe(t,e){return t>e}var Vte,Ute=M(()=>{"use strict";o(VRe,"baseGt");Vte=VRe});function WRe(t,e){return t!=null&&HRe.call(t,e)}var URe,HRe,Hte,Wte=M(()=>{"use strict";URe=Object.prototype,HRe=URe.hasOwnProperty;o(WRe,"baseHas");Hte=WRe});function YRe(t,e){return t!=null&&Kw(t,e,Hte)}var Nt,Yte=M(()=>{"use strict";Wte();OL();o(YRe,"has");Nt=YRe});function XRe(t){return typeof t=="string"||!Dt(t)&&ei(t)&&ga(t)==qRe}var qRe,bi,sT=M(()=>{"use strict";Lu();Hn();zo();qRe="[object String]";o(XRe,"isString");bi=XRe});function jRe(t,e){return Ps(e,function(r){return t[r]})}var qte,Xte=M(()=>{"use strict";Gd();o(jRe,"baseValues");qte=jRe});function KRe(t){return t==null?[]:qte(t,Gr(t))}var br,YL=M(()=>{"use strict";Xte();Lc();o(KRe,"values");br=KRe});function ZRe(t,e,r,n){t=li(t)?t:br(t),r=r&&!n?_c(r):0;var i=t.length;return r<0&&(r=QRe(i+r,0)),bi(t)?r<=i&&t.indexOf(e,r)>-1:!!i&&Rm(t,e,r)>-1}var QRe,Yn,jte=M(()=>{"use strict";Tw();Go();sT();Nm();YL();QRe=Math.max;o(ZRe,"includes");Yn=ZRe});function eMe(t,e,r){var n=t==null?0:t.length;if(!n)return-1;var i=r==null?0:_c(r);return i<0&&(i=JRe(n+i,0)),Rm(t,e,i)}var JRe,oT,Kte=M(()=>{"use strict";Tw();Nm();JRe=Math.max;o(eMe,"indexOf");oT=eMe});function aMe(t){if(t==null)return!0;if(li(t)&&(Dt(t)||typeof t=="string"||typeof t.splice=="function"||Il(t)||Gh(t)||Ml(t)))return!t.length;var e=uo(t);if(e==tMe||e==rMe)return!t.size;if(Tc(t))return!Mm(t).length;for(var r in t)if(iMe.call(t,r))return!1;return!0}var tMe,rMe,nMe,iMe,cr,lT=M(()=>{"use strict";Ew();Vd();um();Hn();Go();fm();cm();xv();tMe="[object Map]",rMe="[object Set]",nMe=Object.prototype,iMe=nMe.hasOwnProperty;o(aMe,"isEmpty");cr=aMe});function oMe(t){return ei(t)&&ga(t)==sMe}var sMe,Qte,Zte=M(()=>{"use strict";Lu();zo();sMe="[object RegExp]";o(oMe,"baseIsRegExp");Qte=oMe});var Jte,lMe,Xo,ere=M(()=>{"use strict";Zte();Dd();vv();Jte=Vo&&Vo.isRegExp,lMe=Jte?$o(Jte):Qte,Xo=lMe});function cMe(t){return t===void 0}var dr,tre=M(()=>{"use strict";o(cMe,"isUndefined");dr=cMe});function uMe(t,e){return t{"use strict";o(uMe,"baseLt");cT=uMe});function hMe(t,e){var r={};return e=dn(e,3),Um(t,function(n,i,a){wc(r,i,e(n,i,a))}),r}var Ud,rre=M(()=>{"use strict";im();Jw();is();o(hMe,"mapValues");Ud=hMe});function fMe(t,e,r){for(var n=-1,i=t.length;++n{"use strict";zd();o(fMe,"baseExtremum");Ym=fMe});function dMe(t){return t&&t.length?Ym(t,aa,Vte):void 0}var Fs,nre=M(()=>{"use strict";uT();Ute();Ru();o(dMe,"max");Fs=dMe});function pMe(t){return t&&t.length?Ym(t,aa,cT):void 0}var Bl,XL=M(()=>{"use strict";uT();qL();Ru();o(pMe,"min");Bl=pMe});function mMe(t,e){return t&&t.length?Ym(t,dn(e,2),cT):void 0}var Hd,ire=M(()=>{"use strict";uT();is();qL();o(mMe,"minBy");Hd=mMe});function yMe(t){if(typeof t!="function")throw new TypeError(gMe);return function(){var e=arguments;switch(e.length){case 0:return!t.call(this);case 1:return!t.call(this,e[0]);case 2:return!t.call(this,e[0],e[1]);case 3:return!t.call(this,e[0],e[1],e[2])}return!t.apply(this,e)}}var gMe,are,sre=M(()=>{"use strict";gMe="Expected a function";o(yMe,"negate");are=yMe});function vMe(t,e,r,n){if(!xn(t))return t;e=Zh(e,t);for(var i=-1,a=e.length,s=a-1,l=t;l!=null&&++i{"use strict";dm();Hv();wv();io();Om();o(vMe,"baseSet");ore=vMe});function xMe(t,e,r){for(var n=-1,i=e.length,a={};++n{"use strict";Wv();lre();Hv();o(xMe,"basePickBy");hT=xMe});function bMe(t,e){if(t==null)return{};var r=Ps(Ow(t),function(n){return[n]});return e=dn(e),hT(t,r,function(n,i){return e(n,i[0])})}var zs,cre=M(()=>{"use strict";Gd();is();jL();EL();o(bMe,"pickBy");zs=bMe});function wMe(t,e){var r=t.length;for(t.sort(e);r--;)t[r]=t[r].value;return t}var ure,hre=M(()=>{"use strict";o(wMe,"baseSortBy");ure=wMe});function TMe(t,e){if(t!==e){var r=t!==void 0,n=t===null,i=t===t,a=co(t),s=e!==void 0,l=e===null,u=e===e,h=co(e);if(!l&&!h&&!a&&t>e||a&&s&&u&&!l&&!h||n&&s&&u||!r&&u||!i)return 1;if(!n&&!a&&!h&&t{"use strict";zd();o(TMe,"compareAscending");fre=TMe});function kMe(t,e,r){for(var n=-1,i=t.criteria,a=e.criteria,s=i.length,l=r.length;++n=l)return u;var h=r[n];return u*(h=="desc"?-1:1)}}return t.index-e.index}var pre,mre=M(()=>{"use strict";dre();o(kMe,"compareMultiple");pre=kMe});function EMe(t,e,r){e.length?e=Ps(e,function(a){return Dt(a)?function(s){return Jh(s,a.length===1?a[0]:a)}:a}):e=[aa];var n=-1;e=Ps(e,$o(dn));var i=aT(t,function(a,s,l){var u=Ps(e,function(h){return h(a)});return{criteria:u,index:++n,value:a}});return ure(i,function(a,s){return pre(a,s,r)})}var gre,yre=M(()=>{"use strict";Gd();Wv();is();$L();hre();Dd();mre();Ru();Hn();o(EMe,"baseOrderBy");gre=EMe});var SMe,vre,xre=M(()=>{"use strict";BL();SMe=Zw("length"),vre=SMe});function BMe(t){for(var e=bre.lastIndex=0;bre.test(t);)++e;return e}var wre,CMe,AMe,_Me,LMe,DMe,NMe,KL,QL,RMe,Tre,kre,Ere,MMe,Sre,Cre,IMe,OMe,PMe,bre,Are,_re=M(()=>{"use strict";wre="\\ud800-\\udfff",CMe="\\u0300-\\u036f",AMe="\\ufe20-\\ufe2f",_Me="\\u20d0-\\u20ff",LMe=CMe+AMe+_Me,DMe="\\ufe0e\\ufe0f",NMe="["+wre+"]",KL="["+LMe+"]",QL="\\ud83c[\\udffb-\\udfff]",RMe="(?:"+KL+"|"+QL+")",Tre="[^"+wre+"]",kre="(?:\\ud83c[\\udde6-\\uddff]){2}",Ere="[\\ud800-\\udbff][\\udc00-\\udfff]",MMe="\\u200d",Sre=RMe+"?",Cre="["+DMe+"]?",IMe="(?:"+MMe+"(?:"+[Tre,kre,Ere].join("|")+")"+Cre+Sre+")*",OMe=Cre+Sre+IMe,PMe="(?:"+[Tre+KL+"?",KL,kre,Ere,NMe].join("|")+")",bre=RegExp(QL+"(?="+QL+")|"+PMe+OMe,"g");o(BMe,"unicodeSize");Are=BMe});function FMe(t){return zJ(t)?Are(t):vre(t)}var Lre,Dre=M(()=>{"use strict";xre();GJ();_re();o(FMe,"stringSize");Lre=FMe});function zMe(t,e){return hT(t,e,function(r,n){return Qw(t,n)})}var Nre,Rre=M(()=>{"use strict";jL();PL();o(zMe,"basePick");Nre=zMe});var GMe,Wd,Mre=M(()=>{"use strict";Rre();FJ();GMe=BJ(function(t,e){return t==null?{}:Nre(t,e)}),Wd=GMe});function UMe(t,e,r,n){for(var i=-1,a=VMe($Me((e-t)/(r||1)),0),s=Array(a);a--;)s[n?a:++i]=t,t+=r;return s}var $Me,VMe,Ire,Ore=M(()=>{"use strict";$Me=Math.ceil,VMe=Math.max;o(UMe,"baseRange");Ire=UMe});function HMe(t){return function(e,r,n){return n&&typeof n!="number"&&ao(e,r,n)&&(r=n=void 0),e=Dm(e),r===void 0?(r=e,e=0):r=Dm(r),n=n===void 0?e{"use strict";Ore();Rd();dL();o(HMe,"createRange");Pre=HMe});var WMe,jo,Fre=M(()=>{"use strict";Bre();WMe=Pre(),jo=WMe});function YMe(t,e,r,n,i){return i(t,function(a,s,l){r=n?(n=!1,a):e(r,a,s,l)}),r}var zre,Gre=M(()=>{"use strict";o(YMe,"baseReduce");zre=YMe});function qMe(t,e,r){var n=Dt(t)?$J:zre,i=arguments.length<3;return n(t,dn(e,4),r,i,Bs)}var qr,ZL=M(()=>{"use strict";VJ();tf();is();Gre();Hn();o(qMe,"reduce");qr=qMe});function XMe(t,e){var r=Dt(t)?Fm:iT;return r(t,are(dn(e,3)))}var af,$re=M(()=>{"use strict";Dw();zL();is();Hn();sre();o(XMe,"reject");af=XMe});function QMe(t){if(t==null)return 0;if(li(t))return bi(t)?Lre(t):t.length;var e=uo(t);return e==jMe||e==KMe?t.size:Mm(t).length}var jMe,KMe,JL,Vre=M(()=>{"use strict";Ew();Vd();Go();sT();Dre();jMe="[object Map]",KMe="[object Set]";o(QMe,"size");JL=QMe});function ZMe(t,e){var r;return Bs(t,function(n,i,a){return r=e(n,i,a),!r}),!!r}var Ure,Hre=M(()=>{"use strict";tf();o(ZMe,"baseSome");Ure=ZMe});function JMe(t,e,r){var n=Dt(t)?Vw:Ure;return r&&ao(t,e,r)&&(e=void 0),n(t,dn(e,3))}var qv,Wre=M(()=>{"use strict";LL();is();Hre();Hn();Rd();o(JMe,"some");qv=JMe});var eIe,Mc,Yre=M(()=>{"use strict";Bm();yre();pm();Rd();eIe=Ec(function(t,e){if(t==null)return[];var r=e.length;return r>1&&ao(t,e[0],e[1])?e=[]:r>2&&ao(e[0],e[1],e[2])&&(e=[e[0]]),gre(t,Nc(e,1),[])}),Mc=eIe});var tIe,rIe,qre,Xre=M(()=>{"use strict";SL();pL();Ww();tIe=1/0,rIe=ef&&1/Vm(new ef([,-0]))[1]==tIe?function(t){return new ef(t)}:ti,qre=rIe});function iIe(t,e,r){var n=-1,i=kw,a=t.length,s=!0,l=[],u=l;if(r)s=!1,i=tT;else if(a>=nIe){var h=e?null:qre(t);if(h)return Vm(h);s=!1,i=$m,u=new Gm}else u=e?[]:l;e:for(;++n{"use strict";$w();yL();FL();Uw();Xre();Ww();nIe=200;o(iIe,"baseUniq");qm=iIe});var aIe,eD,jre=M(()=>{"use strict";Bm();pm();fT();x5();aIe=Ec(function(t){return qm(Nc(t,1,Ld,!0))}),eD=aIe});function sIe(t){return t&&t.length?qm(t):[]}var Xm,Kre=M(()=>{"use strict";fT();o(sIe,"uniq");Xm=sIe});function oIe(t,e){return t&&t.length?qm(t,dn(e,2)):[]}var Qre,Zre=M(()=>{"use strict";is();fT();o(oIe,"uniqBy");Qre=oIe});function cIe(t){var e=++lIe;return Cw(t)+e}var lIe,Yd,Jre=M(()=>{"use strict";vL();lIe=0;o(cIe,"uniqueId");Yd=cIe});function uIe(t,e,r){for(var n=-1,i=t.length,a=e.length,s={};++n{"use strict";o(uIe,"baseZipObject");ene=uIe});function hIe(t,e){return ene(t||[],e||[],kc)}var dT,rne=M(()=>{"use strict";dm();tne();o(hIe,"zipObject");dT=hIe});var Ht=M(()=>{"use strict";CJ();AL();Dee();Nee();q_();xte();Tte();Ete();Ste();Cte();Nte();GL();Pte();Fte();VL();_w();nT();zte();Gte();$te();Yte();Ru();jte();Kte();Hn();lT();uv();io();ere();sT();tre();Lc();kte();Wm();rre();nre();K_();XL();ire();pL();yte();Mre();cre();Fre();ZL();$re();Vre();Wre();Yre();jre();Kre();Jre();YL();rne();});function ine(t,e){t[e]?t[e]++:t[e]=1}function ane(t,e){--t[e]||delete t[e]}function Xv(t,e,r,n){var i=""+e,a=""+r;if(!t&&i>a){var s=i;i=a,a=s}return i+nne+a+nne+(dr(n)?fIe:n)}function dIe(t,e,r,n){var i=""+e,a=""+r;if(!t&&i>a){var s=i;i=a,a=s}var l={v:i,w:a};return n&&(l.name=n),l}function tD(t,e){return Xv(t,e.v,e.w,e.name)}var fIe,qd,nne,Ir,pT=M(()=>{"use strict";Ht();fIe="\0",qd="\0",nne="",Ir=class{static{o(this,"Graph")}constructor(e={}){this._isDirected=Object.prototype.hasOwnProperty.call(e,"directed")?e.directed:!0,this._isMultigraph=Object.prototype.hasOwnProperty.call(e,"multigraph")?e.multigraph:!1,this._isCompound=Object.prototype.hasOwnProperty.call(e,"compound")?e.compound:!1,this._label=void 0,this._defaultNodeLabelFn=Ls(void 0),this._defaultEdgeLabelFn=Ls(void 0),this._nodes={},this._isCompound&&(this._parent={},this._children={},this._children[qd]={}),this._in={},this._preds={},this._out={},this._sucs={},this._edgeObjs={},this._edgeLabels={}}isDirected(){return this._isDirected}isMultigraph(){return this._isMultigraph}isCompound(){return this._isCompound}setGraph(e){return this._label=e,this}graph(){return this._label}setDefaultNodeLabel(e){return _i(e)||(e=Ls(e)),this._defaultNodeLabelFn=e,this}nodeCount(){return this._nodeCount}nodes(){return Gr(this._nodes)}sources(){var e=this;return Yr(this.nodes(),function(r){return cr(e._in[r])})}sinks(){var e=this;return Yr(this.nodes(),function(r){return cr(e._out[r])})}setNodes(e,r){var n=arguments,i=this;return Se(e,function(a){n.length>1?i.setNode(a,r):i.setNode(a)}),this}setNode(e,r){return Object.prototype.hasOwnProperty.call(this._nodes,e)?(arguments.length>1&&(this._nodes[e]=r),this):(this._nodes[e]=arguments.length>1?r:this._defaultNodeLabelFn(e),this._isCompound&&(this._parent[e]=qd,this._children[e]={},this._children[qd][e]=!0),this._in[e]={},this._preds[e]={},this._out[e]={},this._sucs[e]={},++this._nodeCount,this)}node(e){return this._nodes[e]}hasNode(e){return Object.prototype.hasOwnProperty.call(this._nodes,e)}removeNode(e){if(Object.prototype.hasOwnProperty.call(this._nodes,e)){var r=o(n=>this.removeEdge(this._edgeObjs[n]),"removeEdge");delete this._nodes[e],this._isCompound&&(this._removeFromParentsChildList(e),delete this._parent[e],Se(this.children(e),n=>{this.setParent(n)}),delete this._children[e]),Se(Gr(this._in[e]),r),delete this._in[e],delete this._preds[e],Se(Gr(this._out[e]),r),delete this._out[e],delete this._sucs[e],--this._nodeCount}return this}setParent(e,r){if(!this._isCompound)throw new Error("Cannot set parent in a non-compound graph");if(dr(r))r=qd;else{r+="";for(var n=r;!dr(n);n=this.parent(n))if(n===e)throw new Error("Setting "+r+" as parent of "+e+" would create a cycle");this.setNode(r)}return this.setNode(e),this._removeFromParentsChildList(e),this._parent[e]=r,this._children[r][e]=!0,this}_removeFromParentsChildList(e){delete this._children[this._parent[e]][e]}parent(e){if(this._isCompound){var r=this._parent[e];if(r!==qd)return r}}children(e){if(dr(e)&&(e=qd),this._isCompound){var r=this._children[e];if(r)return Gr(r)}else{if(e===qd)return this.nodes();if(this.hasNode(e))return[]}}predecessors(e){var r=this._preds[e];if(r)return Gr(r)}successors(e){var r=this._sucs[e];if(r)return Gr(r)}neighbors(e){var r=this.predecessors(e);if(r)return eD(r,this.successors(e))}isLeaf(e){var r;return this.isDirected()?r=this.successors(e):r=this.neighbors(e),r.length===0}filterNodes(e){var r=new this.constructor({directed:this._isDirected,multigraph:this._isMultigraph,compound:this._isCompound});r.setGraph(this.graph());var n=this;Se(this._nodes,function(s,l){e(l)&&r.setNode(l,s)}),Se(this._edgeObjs,function(s){r.hasNode(s.v)&&r.hasNode(s.w)&&r.setEdge(s,n.edge(s))});var i={};function a(s){var l=n.parent(s);return l===void 0||r.hasNode(l)?(i[s]=l,l):l in i?i[l]:a(l)}return o(a,"findParent"),this._isCompound&&Se(r.nodes(),function(s){r.setParent(s,a(s))}),r}setDefaultEdgeLabel(e){return _i(e)||(e=Ls(e)),this._defaultEdgeLabelFn=e,this}edgeCount(){return this._edgeCount}edges(){return br(this._edgeObjs)}setPath(e,r){var n=this,i=arguments;return qr(e,function(a,s){return i.length>1?n.setEdge(a,s,r):n.setEdge(a,s),s}),this}setEdge(){var e,r,n,i,a=!1,s=arguments[0];typeof s=="object"&&s!==null&&"v"in s?(e=s.v,r=s.w,n=s.name,arguments.length===2&&(i=arguments[1],a=!0)):(e=s,r=arguments[1],n=arguments[3],arguments.length>2&&(i=arguments[2],a=!0)),e=""+e,r=""+r,dr(n)||(n=""+n);var l=Xv(this._isDirected,e,r,n);if(Object.prototype.hasOwnProperty.call(this._edgeLabels,l))return a&&(this._edgeLabels[l]=i),this;if(!dr(n)&&!this._isMultigraph)throw new Error("Cannot set a named edge when isMultigraph = false");this.setNode(e),this.setNode(r),this._edgeLabels[l]=a?i:this._defaultEdgeLabelFn(e,r,n);var u=dIe(this._isDirected,e,r,n);return e=u.v,r=u.w,Object.freeze(u),this._edgeObjs[l]=u,ine(this._preds[r],e),ine(this._sucs[e],r),this._in[r][l]=u,this._out[e][l]=u,this._edgeCount++,this}edge(e,r,n){var i=arguments.length===1?tD(this._isDirected,arguments[0]):Xv(this._isDirected,e,r,n);return this._edgeLabels[i]}hasEdge(e,r,n){var i=arguments.length===1?tD(this._isDirected,arguments[0]):Xv(this._isDirected,e,r,n);return Object.prototype.hasOwnProperty.call(this._edgeLabels,i)}removeEdge(e,r,n){var i=arguments.length===1?tD(this._isDirected,arguments[0]):Xv(this._isDirected,e,r,n),a=this._edgeObjs[i];return a&&(e=a.v,r=a.w,delete this._edgeLabels[i],delete this._edgeObjs[i],ane(this._preds[r],e),ane(this._sucs[e],r),delete this._in[r][i],delete this._out[e][i],this._edgeCount--),this}inEdges(e,r){var n=this._in[e];if(n){var i=br(n);return r?Yr(i,function(a){return a.v===r}):i}}outEdges(e,r){var n=this._out[e];if(n){var i=br(n);return r?Yr(i,function(a){return a.w===r}):i}}nodeEdges(e,r){var n=this.inEdges(e,r);if(n)return n.concat(this.outEdges(e,r))}};Ir.prototype._nodeCount=0;Ir.prototype._edgeCount=0;o(ine,"incrementOrInitEntry");o(ane,"decrementOrRemoveEntry");o(Xv,"edgeArgsToId");o(dIe,"edgeArgsToObj");o(tD,"edgeObjToId")});var Gs=M(()=>{"use strict";pT()});function sne(t){t._prev._next=t._next,t._next._prev=t._prev,delete t._next,delete t._prev}function pIe(t,e){if(t!=="_next"&&t!=="_prev")return e}var mT,one=M(()=>{"use strict";mT=class{static{o(this,"List")}constructor(){var e={};e._next=e._prev=e,this._sentinel=e}dequeue(){var e=this._sentinel,r=e._prev;if(r!==e)return sne(r),r}enqueue(e){var r=this._sentinel;e._prev&&e._next&&sne(e),e._next=r._next,r._next._prev=e,r._next=e,e._prev=r}toString(){for(var e=[],r=this._sentinel,n=r._prev;n!==r;)e.push(JSON.stringify(n,pIe)),n=n._prev;return"["+e.join(", ")+"]"}};o(sne,"unlink");o(pIe,"filterOutLinks")});function lne(t,e){if(t.nodeCount()<=1)return[];var r=yIe(t,e||mIe),n=gIe(r.graph,r.buckets,r.zeroIdx);return Wr(Qe(n,function(i){return t.outEdges(i.v,i.w)}))}function gIe(t,e,r){for(var n=[],i=e[e.length-1],a=e[0],s;t.nodeCount();){for(;s=a.dequeue();)rD(t,e,r,s);for(;s=i.dequeue();)rD(t,e,r,s);if(t.nodeCount()){for(var l=e.length-2;l>0;--l)if(s=e[l].dequeue(),s){n=n.concat(rD(t,e,r,s,!0));break}}}return n}function rD(t,e,r,n,i){var a=i?[]:void 0;return Se(t.inEdges(n.v),function(s){var l=t.edge(s),u=t.node(s.v);i&&a.push({v:s.v,w:s.w}),u.out-=l,nD(e,r,u)}),Se(t.outEdges(n.v),function(s){var l=t.edge(s),u=s.w,h=t.node(u);h.in-=l,nD(e,r,h)}),t.removeNode(n.v),a}function yIe(t,e){var r=new Ir,n=0,i=0;Se(t.nodes(),function(l){r.setNode(l,{v:l,in:0,out:0})}),Se(t.edges(),function(l){var u=r.edge(l.v,l.w)||0,h=e(l),f=u+h;r.setEdge(l.v,l.w,f),i=Math.max(i,r.node(l.v).out+=h),n=Math.max(n,r.node(l.w).in+=h)});var a=jo(i+n+3).map(function(){return new mT}),s=n+1;return Se(r.nodes(),function(l){nD(a,s,r.node(l))}),{graph:r,buckets:a,zeroIdx:s}}function nD(t,e,r){r.out?r.in?t[r.out-r.in+e].enqueue(r):t[t.length-1].enqueue(r):t[0].enqueue(r)}var mIe,cne=M(()=>{"use strict";Ht();Gs();one();mIe=Ls(1);o(lne,"greedyFAS");o(gIe,"doGreedyFAS");o(rD,"removeNode");o(yIe,"buildState");o(nD,"assignBucket")});function une(t){var e=t.graph().acyclicer==="greedy"?lne(t,r(t)):vIe(t);Se(e,function(n){var i=t.edge(n);t.removeEdge(n),i.forwardName=n.name,i.reversed=!0,t.setEdge(n.w,n.v,i,Yd("rev"))});function r(n){return function(i){return n.edge(i).weight}}o(r,"weightFn")}function vIe(t){var e=[],r={},n={};function i(a){Object.prototype.hasOwnProperty.call(n,a)||(n[a]=!0,r[a]=!0,Se(t.outEdges(a),function(s){Object.prototype.hasOwnProperty.call(r,s.w)?e.push(s):i(s.w)}),delete r[a])}return o(i,"dfs"),Se(t.nodes(),i),e}function hne(t){Se(t.edges(),function(e){var r=t.edge(e);if(r.reversed){t.removeEdge(e);var n=r.forwardName;delete r.reversed,delete r.forwardName,t.setEdge(e.w,e.v,r,n)}})}var iD=M(()=>{"use strict";Ht();cne();o(une,"run");o(vIe,"dfsFAS");o(hne,"undo")});function Ic(t,e,r,n){var i;do i=Yd(n);while(t.hasNode(i));return r.dummy=e,t.setNode(i,r),i}function dne(t){var e=new Ir().setGraph(t.graph());return Se(t.nodes(),function(r){e.setNode(r,t.node(r))}),Se(t.edges(),function(r){var n=e.edge(r.v,r.w)||{weight:0,minlen:1},i=t.edge(r);e.setEdge(r.v,r.w,{weight:n.weight+i.weight,minlen:Math.max(n.minlen,i.minlen)})}),e}function gT(t){var e=new Ir({multigraph:t.isMultigraph()}).setGraph(t.graph());return Se(t.nodes(),function(r){t.children(r).length||e.setNode(r,t.node(r))}),Se(t.edges(),function(r){e.setEdge(r,t.edge(r))}),e}function aD(t,e){var r=t.x,n=t.y,i=e.x-r,a=e.y-n,s=t.width/2,l=t.height/2;if(!i&&!a)throw new Error("Not possible to find intersection inside of the rectangle");var u,h;return Math.abs(a)*s>Math.abs(i)*l?(a<0&&(l=-l),u=l*i/a,h=l):(i<0&&(s=-s),u=s,h=s*a/i),{x:r+u,y:n+h}}function sf(t){var e=Qe(jo(oD(t)+1),function(){return[]});return Se(t.nodes(),function(r){var n=t.node(r),i=n.rank;dr(i)||(e[i][n.order]=r)}),e}function pne(t){var e=Bl(Qe(t.nodes(),function(r){return t.node(r).rank}));Se(t.nodes(),function(r){var n=t.node(r);Nt(n,"rank")&&(n.rank-=e)})}function mne(t){var e=Bl(Qe(t.nodes(),function(a){return t.node(a).rank})),r=[];Se(t.nodes(),function(a){var s=t.node(a).rank-e;r[s]||(r[s]=[]),r[s].push(a)});var n=0,i=t.graph().nodeRankFactor;Se(r,function(a,s){dr(a)&&s%i!==0?--n:n&&Se(a,function(l){t.node(l).rank+=n})})}function sD(t,e,r,n){var i={width:0,height:0};return arguments.length>=4&&(i.rank=r,i.order=n),Ic(t,"border",i,e)}function oD(t){return Fs(Qe(t.nodes(),function(e){var r=t.node(e).rank;if(!dr(r))return r}))}function gne(t,e){var r={lhs:[],rhs:[]};return Se(t,function(n){e(n)?r.lhs.push(n):r.rhs.push(n)}),r}function yne(t,e){var r=eT();try{return e()}finally{console.log(t+" time: "+(eT()-r)+"ms")}}function vne(t,e){return e()}var Oc=M(()=>{"use strict";Ht();Gs();o(Ic,"addDummyNode");o(dne,"simplify");o(gT,"asNonCompoundGraph");o(aD,"intersectRect");o(sf,"buildLayerMatrix");o(pne,"normalizeRanks");o(mne,"removeEmptyRanks");o(sD,"addBorderNode");o(oD,"maxRank");o(gne,"partition");o(yne,"time");o(vne,"notime")});function bne(t){function e(r){var n=t.children(r),i=t.node(r);if(n.length&&Se(n,e),Object.prototype.hasOwnProperty.call(i,"minRank")){i.borderLeft=[],i.borderRight=[];for(var a=i.minRank,s=i.maxRank+1;a{"use strict";Ht();Oc();o(bne,"addBorderSegments");o(xne,"addBorderNode")});function kne(t){var e=t.graph().rankdir.toLowerCase();(e==="lr"||e==="rl")&&Sne(t)}function Ene(t){var e=t.graph().rankdir.toLowerCase();(e==="bt"||e==="rl")&&xIe(t),(e==="lr"||e==="rl")&&(bIe(t),Sne(t))}function Sne(t){Se(t.nodes(),function(e){Tne(t.node(e))}),Se(t.edges(),function(e){Tne(t.edge(e))})}function Tne(t){var e=t.width;t.width=t.height,t.height=e}function xIe(t){Se(t.nodes(),function(e){lD(t.node(e))}),Se(t.edges(),function(e){var r=t.edge(e);Se(r.points,lD),Object.prototype.hasOwnProperty.call(r,"y")&&lD(r)})}function lD(t){t.y=-t.y}function bIe(t){Se(t.nodes(),function(e){cD(t.node(e))}),Se(t.edges(),function(e){var r=t.edge(e);Se(r.points,cD),Object.prototype.hasOwnProperty.call(r,"x")&&cD(r)})}function cD(t){var e=t.x;t.x=t.y,t.y=e}var Cne=M(()=>{"use strict";Ht();o(kne,"adjust");o(Ene,"undo");o(Sne,"swapWidthHeight");o(Tne,"swapWidthHeightOne");o(xIe,"reverseY");o(lD,"reverseYOne");o(bIe,"swapXY");o(cD,"swapXYOne")});function Ane(t){t.graph().dummyChains=[],Se(t.edges(),function(e){TIe(t,e)})}function TIe(t,e){var r=e.v,n=t.node(r).rank,i=e.w,a=t.node(i).rank,s=e.name,l=t.edge(e),u=l.labelRank;if(a!==n+1){t.removeEdge(e);var h=void 0,f,d;for(d=0,++n;n{"use strict";Ht();Oc();o(Ane,"run");o(TIe,"normalizeEdge");o(_ne,"undo")});function jv(t){var e={};function r(n){var i=t.node(n);if(Object.prototype.hasOwnProperty.call(e,n))return i.rank;e[n]=!0;var a=Bl(Qe(t.outEdges(n),function(s){return r(s.w)-t.edge(s).minlen}));return(a===Number.POSITIVE_INFINITY||a===void 0||a===null)&&(a=0),i.rank=a}o(r,"dfs"),Se(t.sources(),r)}function Xd(t,e){return t.node(e.w).rank-t.node(e.v).rank-t.edge(e).minlen}var yT=M(()=>{"use strict";Ht();o(jv,"longestPath");o(Xd,"slack")});function vT(t){var e=new Ir({directed:!1}),r=t.nodes()[0],n=t.nodeCount();e.setNode(r,{});for(var i,a;kIe(e,t){"use strict";Ht();Gs();yT();o(vT,"feasibleTree");o(kIe,"tightTree");o(EIe,"findMinSlackEdge");o(SIe,"shiftRanks")});var Dne=M(()=>{"use strict"});var fD=M(()=>{"use strict"});var dYt,dD=M(()=>{"use strict";Ht();fD();dYt=Ls(1)});var Nne=M(()=>{"use strict";dD()});var pD=M(()=>{"use strict"});var Rne=M(()=>{"use strict";pD()});var EYt,Mne=M(()=>{"use strict";Ht();EYt=Ls(1)});function mD(t){var e={},r={},n=[];function i(a){if(Object.prototype.hasOwnProperty.call(r,a))throw new Kv;Object.prototype.hasOwnProperty.call(e,a)||(r[a]=!0,e[a]=!0,Se(t.predecessors(a),i),delete r[a],n.push(a))}if(o(i,"visit"),Se(t.sinks(),i),JL(e)!==t.nodeCount())throw new Kv;return n}function Kv(){}var gD=M(()=>{"use strict";Ht();mD.CycleException=Kv;o(mD,"topsort");o(Kv,"CycleException");Kv.prototype=new Error});var Ine=M(()=>{"use strict";gD()});function xT(t,e,r){Dt(e)||(e=[e]);var n=(t.isDirected()?t.successors:t.neighbors).bind(t),i=[],a={};return Se(e,function(s){if(!t.hasNode(s))throw new Error("Graph does not have node: "+s);One(t,s,r==="post",a,n,i)}),i}function One(t,e,r,n,i,a){Object.prototype.hasOwnProperty.call(n,e)||(n[e]=!0,r||a.push(e),Se(i(e),function(s){One(t,s,r,n,i,a)}),r&&a.push(e))}var yD=M(()=>{"use strict";Ht();o(xT,"dfs");o(One,"doDfs")});function vD(t,e){return xT(t,e,"post")}var Pne=M(()=>{"use strict";yD();o(vD,"postorder")});function xD(t,e){return xT(t,e,"pre")}var Bne=M(()=>{"use strict";yD();o(xD,"preorder")});var Fne=M(()=>{"use strict";fD();pT()});var zne=M(()=>{"use strict";Dne();dD();Nne();Rne();Mne();Ine();Pne();Bne();Fne();pD();gD()});function lf(t){t=dne(t),jv(t);var e=vT(t);wD(e),bD(e,t);for(var r,n;r=Une(e);)n=Hne(e,t,r),Wne(e,t,r,n)}function bD(t,e){var r=vD(t,t.nodes());r=r.slice(0,r.length-1),Se(r,function(n){DIe(t,e,n)})}function DIe(t,e,r){var n=t.node(r),i=n.parent;t.edge(r,i).cutvalue=$ne(t,e,r)}function $ne(t,e,r){var n=t.node(r),i=n.parent,a=!0,s=e.edge(r,i),l=0;return s||(a=!1,s=e.edge(i,r)),l=s.weight,Se(e.nodeEdges(r),function(u){var h=u.v===r,f=h?u.w:u.v;if(f!==i){var d=h===a,p=e.edge(u).weight;if(l+=d?p:-p,RIe(t,r,f)){var m=t.edge(r,f).cutvalue;l+=d?-m:m}}}),l}function wD(t,e){arguments.length<2&&(e=t.nodes()[0]),Vne(t,{},1,e)}function Vne(t,e,r,n,i){var a=r,s=t.node(n);return e[n]=!0,Se(t.neighbors(n),function(l){Object.prototype.hasOwnProperty.call(e,l)||(r=Vne(t,e,r,l,n))}),s.low=a,s.lim=r++,i?s.parent=i:delete s.parent,r}function Une(t){return as(t.edges(),function(e){return t.edge(e).cutvalue<0})}function Hne(t,e,r){var n=r.v,i=r.w;e.hasEdge(n,i)||(n=r.w,i=r.v);var a=t.node(n),s=t.node(i),l=a,u=!1;a.lim>s.lim&&(l=s,u=!0);var h=Yr(e.edges(),function(f){return u===Gne(t,t.node(f.v),l)&&u!==Gne(t,t.node(f.w),l)});return Hd(h,function(f){return Xd(e,f)})}function Wne(t,e,r,n){var i=r.v,a=r.w;t.removeEdge(i,a),t.setEdge(n.v,n.w,{}),wD(t),bD(t,e),NIe(t,e)}function NIe(t,e){var r=as(t.nodes(),function(i){return!e.node(i).parent}),n=xD(t,r);n=n.slice(1),Se(n,function(i){var a=t.node(i).parent,s=e.edge(i,a),l=!1;s||(s=e.edge(a,i),l=!0),e.node(i).rank=e.node(a).rank+(l?s.minlen:-s.minlen)})}function RIe(t,e,r){return t.hasEdge(e,r)}function Gne(t,e,r){return r.low<=e.lim&&e.lim<=r.lim}var Yne=M(()=>{"use strict";Ht();zne();Oc();hD();yT();lf.initLowLimValues=wD;lf.initCutValues=bD;lf.calcCutValue=$ne;lf.leaveEdge=Une;lf.enterEdge=Hne;lf.exchangeEdges=Wne;o(lf,"networkSimplex");o(bD,"initCutValues");o(DIe,"assignCutValue");o($ne,"calcCutValue");o(wD,"initLowLimValues");o(Vne,"dfsAssignLowLim");o(Une,"leaveEdge");o(Hne,"enterEdge");o(Wne,"exchangeEdges");o(NIe,"updateRanks");o(RIe,"isTreeEdge");o(Gne,"isDescendant")});function TD(t){switch(t.graph().ranker){case"network-simplex":qne(t);break;case"tight-tree":IIe(t);break;case"longest-path":MIe(t);break;default:qne(t)}}function IIe(t){jv(t),vT(t)}function qne(t){lf(t)}var MIe,kD=M(()=>{"use strict";hD();Yne();yT();o(TD,"rank");MIe=jv;o(IIe,"tightTreeRanker");o(qne,"networkSimplexRanker")});function Xne(t){var e=Ic(t,"root",{},"_root"),r=OIe(t),n=Fs(br(r))-1,i=2*n+1;t.graph().nestingRoot=e,Se(t.edges(),function(s){t.edge(s).minlen*=i});var a=PIe(t)+1;Se(t.children(),function(s){jne(t,e,i,a,n,r,s)}),t.graph().nodeRankFactor=i}function jne(t,e,r,n,i,a,s){var l=t.children(s);if(!l.length){s!==e&&t.setEdge(e,s,{weight:0,minlen:r});return}var u=sD(t,"_bt"),h=sD(t,"_bb"),f=t.node(s);t.setParent(u,s),f.borderTop=u,t.setParent(h,s),f.borderBottom=h,Se(l,function(d){jne(t,e,r,n,i,a,d);var p=t.node(d),m=p.borderTop?p.borderTop:d,g=p.borderBottom?p.borderBottom:d,y=p.borderTop?n:2*n,v=m!==g?1:i-a[s]+1;t.setEdge(u,m,{weight:y,minlen:v,nestingEdge:!0}),t.setEdge(g,h,{weight:y,minlen:v,nestingEdge:!0})}),t.parent(s)||t.setEdge(e,u,{weight:0,minlen:i+a[s]})}function OIe(t){var e={};function r(n,i){var a=t.children(n);a&&a.length&&Se(a,function(s){r(s,i+1)}),e[n]=i}return o(r,"dfs"),Se(t.children(),function(n){r(n,1)}),e}function PIe(t){return qr(t.edges(),function(e,r){return e+t.edge(r).weight},0)}function Kne(t){var e=t.graph();t.removeNode(e.nestingRoot),delete e.nestingRoot,Se(t.edges(),function(r){var n=t.edge(r);n.nestingEdge&&t.removeEdge(r)})}var Qne=M(()=>{"use strict";Ht();Oc();o(Xne,"run");o(jne,"dfs");o(OIe,"treeDepths");o(PIe,"sumWeights");o(Kne,"cleanup")});function Zne(t,e,r){var n={},i;Se(r,function(a){for(var s=t.parent(a),l,u;s;){if(l=t.parent(s),l?(u=n[l],n[l]=s):(u=i,i=s),u&&u!==s){e.setEdge(u,s);return}s=l}})}var Jne=M(()=>{"use strict";Ht();o(Zne,"addSubgraphConstraints")});function eie(t,e,r){var n=FIe(t),i=new Ir({compound:!0}).setGraph({root:n}).setDefaultNodeLabel(function(a){return t.node(a)});return Se(t.nodes(),function(a){var s=t.node(a),l=t.parent(a);(s.rank===e||s.minRank<=e&&e<=s.maxRank)&&(i.setNode(a),i.setParent(a,l||n),Se(t[r](a),function(u){var h=u.v===a?u.w:u.v,f=i.edge(h,a),d=dr(f)?0:f.weight;i.setEdge(h,a,{weight:t.edge(u).weight+d})}),Object.prototype.hasOwnProperty.call(s,"minRank")&&i.setNode(a,{borderLeft:s.borderLeft[e],borderRight:s.borderRight[e]}))}),i}function FIe(t){for(var e;t.hasNode(e=Yd("_root")););return e}var tie=M(()=>{"use strict";Ht();Gs();o(eie,"buildLayerGraph");o(FIe,"createRootNode")});function rie(t,e){for(var r=0,n=1;n0;)f%2&&(d+=l[f+1]),f=f-1>>1,l[f]+=h.weight;u+=h.weight*d})),u}var nie=M(()=>{"use strict";Ht();o(rie,"crossCount");o(zIe,"twoLayerCrossCount")});function iie(t){var e={},r=Yr(t.nodes(),function(l){return!t.children(l).length}),n=Fs(Qe(r,function(l){return t.node(l).rank})),i=Qe(jo(n+1),function(){return[]});function a(l){if(!Nt(e,l)){e[l]=!0;var u=t.node(l);i[u.rank].push(l),Se(t.successors(l),a)}}o(a,"dfs");var s=Mc(r,function(l){return t.node(l).rank});return Se(s,a),i}var aie=M(()=>{"use strict";Ht();o(iie,"initOrder")});function sie(t,e){return Qe(e,function(r){var n=t.inEdges(r);if(n.length){var i=qr(n,function(a,s){var l=t.edge(s),u=t.node(s.v);return{sum:a.sum+l.weight*u.order,weight:a.weight+l.weight}},{sum:0,weight:0});return{v:r,barycenter:i.sum/i.weight,weight:i.weight}}else return{v:r}})}var oie=M(()=>{"use strict";Ht();o(sie,"barycenter")});function lie(t,e){var r={};Se(t,function(i,a){var s=r[i.v]={indegree:0,in:[],out:[],vs:[i.v],i:a};dr(i.barycenter)||(s.barycenter=i.barycenter,s.weight=i.weight)}),Se(e.edges(),function(i){var a=r[i.v],s=r[i.w];!dr(a)&&!dr(s)&&(s.indegree++,a.out.push(r[i.w]))});var n=Yr(r,function(i){return!i.indegree});return GIe(n)}function GIe(t){var e=[];function r(a){return function(s){s.merged||(dr(s.barycenter)||dr(a.barycenter)||s.barycenter>=a.barycenter)&&$Ie(a,s)}}o(r,"handleIn");function n(a){return function(s){s.in.push(a),--s.indegree===0&&t.push(s)}}for(o(n,"handleOut");t.length;){var i=t.pop();e.push(i),Se(i.in.reverse(),r(i)),Se(i.out,n(i))}return Qe(Yr(e,function(a){return!a.merged}),function(a){return Wd(a,["vs","i","barycenter","weight"])})}function $Ie(t,e){var r=0,n=0;t.weight&&(r+=t.barycenter*t.weight,n+=t.weight),e.weight&&(r+=e.barycenter*e.weight,n+=e.weight),t.vs=e.vs.concat(t.vs),t.barycenter=r/n,t.weight=n,t.i=Math.min(e.i,t.i),e.merged=!0}var cie=M(()=>{"use strict";Ht();o(lie,"resolveConflicts");o(GIe,"doResolveConflicts");o($Ie,"mergeEntries")});function hie(t,e){var r=gne(t,function(f){return Object.prototype.hasOwnProperty.call(f,"barycenter")}),n=r.lhs,i=Mc(r.rhs,function(f){return-f.i}),a=[],s=0,l=0,u=0;n.sort(VIe(!!e)),u=uie(a,i,u),Se(n,function(f){u+=f.vs.length,a.push(f.vs),s+=f.barycenter*f.weight,l+=f.weight,u=uie(a,i,u)});var h={vs:Wr(a)};return l&&(h.barycenter=s/l,h.weight=l),h}function uie(t,e,r){for(var n;e.length&&(n=xa(e)).i<=r;)e.pop(),t.push(n.vs),r++;return r}function VIe(t){return function(e,r){return e.barycenterr.barycenter?1:t?r.i-e.i:e.i-r.i}}var fie=M(()=>{"use strict";Ht();Oc();o(hie,"sort");o(uie,"consumeUnsortable");o(VIe,"compareWithBias")});function ED(t,e,r,n){var i=t.children(e),a=t.node(e),s=a?a.borderLeft:void 0,l=a?a.borderRight:void 0,u={};s&&(i=Yr(i,function(g){return g!==s&&g!==l}));var h=sie(t,i);Se(h,function(g){if(t.children(g.v).length){var y=ED(t,g.v,r,n);u[g.v]=y,Object.prototype.hasOwnProperty.call(y,"barycenter")&&HIe(g,y)}});var f=lie(h,r);UIe(f,u);var d=hie(f,n);if(s&&(d.vs=Wr([s,d.vs,l]),t.predecessors(s).length)){var p=t.node(t.predecessors(s)[0]),m=t.node(t.predecessors(l)[0]);Object.prototype.hasOwnProperty.call(d,"barycenter")||(d.barycenter=0,d.weight=0),d.barycenter=(d.barycenter*d.weight+p.order+m.order)/(d.weight+2),d.weight+=2}return d}function UIe(t,e){Se(t,function(r){r.vs=Wr(r.vs.map(function(n){return e[n]?e[n].vs:n}))})}function HIe(t,e){dr(t.barycenter)?(t.barycenter=e.barycenter,t.weight=e.weight):(t.barycenter=(t.barycenter*t.weight+e.barycenter*e.weight)/(t.weight+e.weight),t.weight+=e.weight)}var die=M(()=>{"use strict";Ht();oie();cie();fie();o(ED,"sortSubgraph");o(UIe,"expandSubgraphs");o(HIe,"mergeBarycenters")});function gie(t){var e=oD(t),r=pie(t,jo(1,e+1),"inEdges"),n=pie(t,jo(e-1,-1,-1),"outEdges"),i=iie(t);mie(t,i);for(var a=Number.POSITIVE_INFINITY,s,l=0,u=0;u<4;++l,++u){WIe(l%2?r:n,l%4>=2),i=sf(t);var h=rie(t,i);h{"use strict";Ht();Gs();Oc();Jne();tie();nie();aie();die();o(gie,"order");o(pie,"buildLayerGraphs");o(WIe,"sweepLayerGraphs");o(mie,"assignOrder")});function vie(t){var e=qIe(t);Se(t.graph().dummyChains,function(r){for(var n=t.node(r),i=n.edgeObj,a=YIe(t,e,i.v,i.w),s=a.path,l=a.lca,u=0,h=s[u],f=!0;r!==i.w;){if(n=t.node(r),f){for(;(h=s[u])!==l&&t.node(h).maxRanks||l>e[u].lim));for(h=u,u=n;(u=t.parent(u))!==h;)a.push(u);return{path:i.concat(a.reverse()),lca:h}}function qIe(t){var e={},r=0;function n(i){var a=r;Se(t.children(i),n),e[i]={low:a,lim:r++}}return o(n,"dfs"),Se(t.children(),n),e}var xie=M(()=>{"use strict";Ht();o(vie,"parentDummyChains");o(YIe,"findPath");o(qIe,"postorder")});function XIe(t,e){var r={};function n(i,a){var s=0,l=0,u=i.length,h=xa(a);return Se(a,function(f,d){var p=KIe(t,f),m=p?t.node(p).order:u;(p||f===h)&&(Se(a.slice(l,d+1),function(g){Se(t.predecessors(g),function(y){var v=t.node(y),x=v.order;(xh)&&bie(r,p,f)})})}o(n,"scan");function i(a,s){var l=-1,u,h=0;return Se(s,function(f,d){if(t.node(f).dummy==="border"){var p=t.predecessors(f);p.length&&(u=t.node(p[0]).order,n(s,h,d,l,u),h=d,l=u)}n(s,h,s.length,u,a.length)}),s}return o(i,"visitLayer"),qr(e,i),r}function KIe(t,e){if(t.node(e).dummy)return as(t.predecessors(e),function(r){return t.node(r).dummy})}function bie(t,e,r){if(e>r){var n=e;e=r,r=n}var i=t[e];i||(t[e]=i={}),i[r]=!0}function QIe(t,e,r){if(e>r){var n=e;e=r,r=n}return!!t[e]&&Object.prototype.hasOwnProperty.call(t[e],r)}function ZIe(t,e,r,n){var i={},a={},s={};return Se(e,function(l){Se(l,function(u,h){i[u]=u,a[u]=u,s[u]=h})}),Se(e,function(l){var u=-1;Se(l,function(h){var f=n(h);if(f.length){f=Mc(f,function(y){return s[y]});for(var d=(f.length-1)/2,p=Math.floor(d),m=Math.ceil(d);p<=m;++p){var g=f[p];a[h]===h&&u{"use strict";Ht();Gs();Oc();o(XIe,"findType1Conflicts");o(jIe,"findType2Conflicts");o(KIe,"findOtherInnerSegmentNode");o(bie,"addConflict");o(QIe,"hasConflict");o(ZIe,"verticalAlignment");o(JIe,"horizontalCompaction");o(eOe,"buildBlockGraph");o(tOe,"findSmallestWidthAlignment");o(rOe,"alignCoordinates");o(nOe,"balance");o(wie,"positionX");o(iOe,"sep");o(aOe,"width")});function kie(t){t=gT(t),sOe(t),HL(wie(t),function(e,r){t.node(r).x=e})}function sOe(t){var e=sf(t),r=t.graph().ranksep,n=0;Se(e,function(i){var a=Fs(Qe(i,function(s){return t.node(s).height}));Se(i,function(s){t.node(s).y=n+a/2}),n+=a+r})}var Eie=M(()=>{"use strict";Ht();Oc();Tie();o(kie,"position");o(sOe,"positionY")});function Gu(t,e){var r=e&&e.debugTiming?yne:vne;r("layout",()=>{var n=r(" buildLayoutGraph",()=>yOe(t));r(" runLayout",()=>oOe(n,r)),r(" updateInputGraph",()=>lOe(t,n))})}function oOe(t,e){e(" makeSpaceForEdgeLabels",()=>vOe(t)),e(" removeSelfEdges",()=>AOe(t)),e(" acyclic",()=>une(t)),e(" nestingGraph.run",()=>Xne(t)),e(" rank",()=>TD(gT(t))),e(" injectEdgeLabelProxies",()=>xOe(t)),e(" removeEmptyRanks",()=>mne(t)),e(" nestingGraph.cleanup",()=>Kne(t)),e(" normalizeRanks",()=>pne(t)),e(" assignRankMinMax",()=>bOe(t)),e(" removeEdgeLabelProxies",()=>wOe(t)),e(" normalize.run",()=>Ane(t)),e(" parentDummyChains",()=>vie(t)),e(" addBorderSegments",()=>bne(t)),e(" order",()=>gie(t)),e(" insertSelfEdges",()=>_Oe(t)),e(" adjustCoordinateSystem",()=>kne(t)),e(" position",()=>kie(t)),e(" positionSelfEdges",()=>LOe(t)),e(" removeBorderNodes",()=>COe(t)),e(" normalize.undo",()=>_ne(t)),e(" fixupEdgeLabelCoords",()=>EOe(t)),e(" undoCoordinateSystem",()=>Ene(t)),e(" translateGraph",()=>TOe(t)),e(" assignNodeIntersects",()=>kOe(t)),e(" reversePoints",()=>SOe(t)),e(" acyclic.undo",()=>hne(t))}function lOe(t,e){Se(t.nodes(),function(r){var n=t.node(r),i=e.node(r);n&&(n.x=i.x,n.y=i.y,e.children(r).length&&(n.width=i.width,n.height=i.height))}),Se(t.edges(),function(r){var n=t.edge(r),i=e.edge(r);n.points=i.points,Object.prototype.hasOwnProperty.call(i,"x")&&(n.x=i.x,n.y=i.y)}),t.graph().width=e.graph().width,t.graph().height=e.graph().height}function yOe(t){var e=new Ir({multigraph:!0,compound:!0}),r=CD(t.graph());return e.setGraph(Uh({},uOe,SD(r,cOe),Wd(r,hOe))),Se(t.nodes(),function(n){var i=CD(t.node(n));e.setNode(n,rf(SD(i,fOe),dOe)),e.setParent(n,t.parent(n))}),Se(t.edges(),function(n){var i=CD(t.edge(n));e.setEdge(n,Uh({},mOe,SD(i,pOe),Wd(i,gOe)))}),e}function vOe(t){var e=t.graph();e.ranksep/=2,Se(t.edges(),function(r){var n=t.edge(r);n.minlen*=2,n.labelpos.toLowerCase()!=="c"&&(e.rankdir==="TB"||e.rankdir==="BT"?n.width+=n.labeloffset:n.height+=n.labeloffset)})}function xOe(t){Se(t.edges(),function(e){var r=t.edge(e);if(r.width&&r.height){var n=t.node(e.v),i=t.node(e.w),a={rank:(i.rank-n.rank)/2+n.rank,e};Ic(t,"edge-proxy",a,"_ep")}})}function bOe(t){var e=0;Se(t.nodes(),function(r){var n=t.node(r);n.borderTop&&(n.minRank=t.node(n.borderTop).rank,n.maxRank=t.node(n.borderBottom).rank,e=Fs(e,n.maxRank))}),t.graph().maxRank=e}function wOe(t){Se(t.nodes(),function(e){var r=t.node(e);r.dummy==="edge-proxy"&&(t.edge(r.e).labelRank=r.rank,t.removeNode(e))})}function TOe(t){var e=Number.POSITIVE_INFINITY,r=0,n=Number.POSITIVE_INFINITY,i=0,a=t.graph(),s=a.marginx||0,l=a.marginy||0;function u(h){var f=h.x,d=h.y,p=h.width,m=h.height;e=Math.min(e,f-p/2),r=Math.max(r,f+p/2),n=Math.min(n,d-m/2),i=Math.max(i,d+m/2)}o(u,"getExtremes"),Se(t.nodes(),function(h){u(t.node(h))}),Se(t.edges(),function(h){var f=t.edge(h);Object.prototype.hasOwnProperty.call(f,"x")&&u(f)}),e-=s,n-=l,Se(t.nodes(),function(h){var f=t.node(h);f.x-=e,f.y-=n}),Se(t.edges(),function(h){var f=t.edge(h);Se(f.points,function(d){d.x-=e,d.y-=n}),Object.prototype.hasOwnProperty.call(f,"x")&&(f.x-=e),Object.prototype.hasOwnProperty.call(f,"y")&&(f.y-=n)}),a.width=r-e+s,a.height=i-n+l}function kOe(t){Se(t.edges(),function(e){var r=t.edge(e),n=t.node(e.v),i=t.node(e.w),a,s;r.points?(a=r.points[0],s=r.points[r.points.length-1]):(r.points=[],a=i,s=n),r.points.unshift(aD(n,a)),r.points.push(aD(i,s))})}function EOe(t){Se(t.edges(),function(e){var r=t.edge(e);if(Object.prototype.hasOwnProperty.call(r,"x"))switch((r.labelpos==="l"||r.labelpos==="r")&&(r.width-=r.labeloffset),r.labelpos){case"l":r.x-=r.width/2+r.labeloffset;break;case"r":r.x+=r.width/2+r.labeloffset;break}})}function SOe(t){Se(t.edges(),function(e){var r=t.edge(e);r.reversed&&r.points.reverse()})}function COe(t){Se(t.nodes(),function(e){if(t.children(e).length){var r=t.node(e),n=t.node(r.borderTop),i=t.node(r.borderBottom),a=t.node(xa(r.borderLeft)),s=t.node(xa(r.borderRight));r.width=Math.abs(s.x-a.x),r.height=Math.abs(i.y-n.y),r.x=a.x+r.width/2,r.y=n.y+r.height/2}}),Se(t.nodes(),function(e){t.node(e).dummy==="border"&&t.removeNode(e)})}function AOe(t){Se(t.edges(),function(e){if(e.v===e.w){var r=t.node(e.v);r.selfEdges||(r.selfEdges=[]),r.selfEdges.push({e,label:t.edge(e)}),t.removeEdge(e)}})}function _Oe(t){var e=sf(t);Se(e,function(r){var n=0;Se(r,function(i,a){var s=t.node(i);s.order=a+n,Se(s.selfEdges,function(l){Ic(t,"selfedge",{width:l.label.width,height:l.label.height,rank:s.rank,order:a+ ++n,e:l.e,label:l.label},"_se")}),delete s.selfEdges})})}function LOe(t){Se(t.nodes(),function(e){var r=t.node(e);if(r.dummy==="selfedge"){var n=t.node(r.e.v),i=n.x+n.width/2,a=n.y,s=r.x-i,l=n.height/2;t.setEdge(r.e,r.label),t.removeNode(e),r.label.points=[{x:i+2*s/3,y:a-l},{x:i+5*s/6,y:a-l},{x:i+s,y:a},{x:i+5*s/6,y:a+l},{x:i+2*s/3,y:a+l}],r.label.x=r.x,r.label.y=r.y}})}function SD(t,e){return Ud(Wd(t,e),Number)}function CD(t){var e={};return Se(t,function(r,n){e[n.toLowerCase()]=r}),e}var cOe,uOe,hOe,fOe,dOe,pOe,mOe,gOe,Sie=M(()=>{"use strict";Ht();Gs();wne();Cne();iD();uD();kD();Qne();yie();xie();Eie();Oc();o(Gu,"layout");o(oOe,"runLayout");o(lOe,"updateInputGraph");cOe=["nodesep","edgesep","ranksep","marginx","marginy"],uOe={ranksep:50,edgesep:20,nodesep:50,rankdir:"tb"},hOe=["acyclicer","ranker","rankdir","align"],fOe=["width","height"],dOe={width:0,height:0},pOe=["minlen","weight","width","height","labeloffset"],mOe={minlen:1,weight:1,width:0,height:0,labeloffset:10,labelpos:"r"},gOe=["labelpos"];o(yOe,"buildLayoutGraph");o(vOe,"makeSpaceForEdgeLabels");o(xOe,"injectEdgeLabelProxies");o(bOe,"assignRankMinMax");o(wOe,"removeEdgeLabelProxies");o(TOe,"translateGraph");o(kOe,"assignNodeIntersects");o(EOe,"fixupEdgeLabelCoords");o(SOe,"reversePointsForReversedEdges");o(COe,"removeBorderNodes");o(AOe,"removeSelfEdges");o(_Oe,"insertSelfEdges");o(LOe,"positionSelfEdges");o(SD,"selectNumberAttrs");o(CD,"canonicalize")});var Qv=M(()=>{"use strict";iD();Sie();uD();kD()});function Ko(t){var e={options:{directed:t.isDirected(),multigraph:t.isMultigraph(),compound:t.isCompound()},nodes:DOe(t),edges:NOe(t)};return dr(t.graph())||(e.value=rn(t.graph())),e}function DOe(t){return Qe(t.nodes(),function(e){var r=t.node(e),n=t.parent(e),i={v:e};return dr(r)||(i.value=r),dr(n)||(i.parent=n),i})}function NOe(t){return Qe(t.edges(),function(e){var r=t.edge(e),n={v:e.v,w:e.w};return dr(e.name)||(n.name=e.name),dr(r)||(n.value=r),n})}var AD=M(()=>{"use strict";Ht();pT();o(Ko,"write");o(DOe,"writeNodes");o(NOe,"writeEdges")});var wr,jd,_ie,Lie,bT,ROe,Die,Nie,MOe,Km,Aie,Rie,Mie,Iie,Oie,Pie=M(()=>{"use strict";ut();Gs();AD();wr=new Map,jd=new Map,_ie=new Map,Lie=o(()=>{jd.clear(),_ie.clear(),wr.clear()},"clear"),bT=o((t,e)=>{let r=jd.get(e)||[];return Y.trace("In isDescendant",e," ",t," = ",r.includes(t)),r.includes(t)},"isDescendant"),ROe=o((t,e)=>{let r=jd.get(e)||[];return Y.info("Descendants of ",e," is ",r),Y.info("Edge is ",t),t.v===e||t.w===e?!1:r?r.includes(t.v)||bT(t.v,e)||bT(t.w,e)||r.includes(t.w):(Y.debug("Tilt, ",e,",not in descendants"),!1)},"edgeInCluster"),Die=o((t,e,r,n)=>{Y.warn("Copying children of ",t,"root",n,"data",e.node(t),n);let i=e.children(t)||[];t!==n&&i.push(t),Y.warn("Copying (nodes) clusterId",t,"nodes",i),i.forEach(a=>{if(e.children(a).length>0)Die(a,e,r,n);else{let s=e.node(a);Y.info("cp ",a," to ",n," with parent ",t),r.setNode(a,s),n!==e.parent(a)&&(Y.warn("Setting parent",a,e.parent(a)),r.setParent(a,e.parent(a))),t!==n&&a!==t?(Y.debug("Setting parent",a,t),r.setParent(a,t)):(Y.info("In copy ",t,"root",n,"data",e.node(t),n),Y.debug("Not Setting parent for node=",a,"cluster!==rootId",t!==n,"node!==clusterId",a!==t));let l=e.edges(a);Y.debug("Copying Edges",l),l.forEach(u=>{Y.info("Edge",u);let h=e.edge(u.v,u.w,u.name);Y.info("Edge data",h,n);try{ROe(u,n)?(Y.info("Copying as ",u.v,u.w,h,u.name),r.setEdge(u.v,u.w,h,u.name),Y.info("newGraph edges ",r.edges(),r.edge(r.edges()[0]))):Y.info("Skipping copy of edge ",u.v,"-->",u.w," rootId: ",n," clusterId:",t)}catch(f){Y.error(f)}})}Y.debug("Removing node",a),e.removeNode(a)})},"copy"),Nie=o((t,e)=>{let r=e.children(t),n=[...r];for(let i of r)_ie.set(i,t),n=[...n,...Nie(i,e)];return n},"extractDescendants"),MOe=o((t,e,r)=>{let n=t.edges().filter(u=>u.v===e||u.w===e),i=t.edges().filter(u=>u.v===r||u.w===r),a=n.map(u=>({v:u.v===e?r:u.v,w:u.w===e?e:u.w})),s=i.map(u=>({v:u.v,w:u.w}));return a.filter(u=>s.some(h=>u.v===h.v&&u.w===h.w))},"findCommonEdges"),Km=o((t,e,r)=>{let n=e.children(t);if(Y.trace("Searching children of id ",t,n),n.length<1)return t;let i;for(let a of n){let s=Km(a,e,r),l=MOe(e,r,s);if(s)if(l.length>0)i=s;else return s}return i},"findNonClusterChild"),Aie=o(t=>!wr.has(t)||!wr.get(t).externalConnections?t:wr.has(t)?wr.get(t).id:t,"getAnchorId"),Rie=o((t,e)=>{if(!t||e>10){Y.debug("Opting out, no graph ");return}else Y.debug("Opting in, graph ");t.nodes().forEach(function(r){t.children(r).length>0&&(Y.warn("Cluster identified",r," Replacement id in edges: ",Km(r,t,r)),jd.set(r,Nie(r,t)),wr.set(r,{id:Km(r,t,r),clusterData:t.node(r)}))}),t.nodes().forEach(function(r){let n=t.children(r),i=t.edges();n.length>0?(Y.debug("Cluster identified",r,jd),i.forEach(a=>{let s=bT(a.v,r),l=bT(a.w,r);s^l&&(Y.warn("Edge: ",a," leaves cluster ",r),Y.warn("Descendants of XXX ",r,": ",jd.get(r)),wr.get(r).externalConnections=!0)})):Y.debug("Not a cluster ",r,jd)});for(let r of wr.keys()){let n=wr.get(r).id,i=t.parent(n);i!==r&&wr.has(i)&&!wr.get(i).externalConnections&&(wr.get(r).id=i)}t.edges().forEach(function(r){let n=t.edge(r);Y.warn("Edge "+r.v+" -> "+r.w+": "+JSON.stringify(r)),Y.warn("Edge "+r.v+" -> "+r.w+": "+JSON.stringify(t.edge(r)));let i=r.v,a=r.w;if(Y.warn("Fix XXX",wr,"ids:",r.v,r.w,"Translating: ",wr.get(r.v)," --- ",wr.get(r.w)),wr.get(r.v)||wr.get(r.w)){if(Y.warn("Fixing and trying - removing XXX",r.v,r.w,r.name),i=Aie(r.v),a=Aie(r.w),t.removeEdge(r.v,r.w,r.name),i!==r.v){let s=t.parent(i);wr.get(s).externalConnections=!0,n.fromCluster=r.v}if(a!==r.w){let s=t.parent(a);wr.get(s).externalConnections=!0,n.toCluster=r.w}Y.warn("Fix Replacing with XXX",i,a,r.name),t.setEdge(i,a,n,r.name)}}),Y.warn("Adjusted Graph",Ko(t)),Mie(t,0),Y.trace(wr)},"adjustClustersAndEdges"),Mie=o((t,e)=>{if(Y.warn("extractor - ",e,Ko(t),t.children("D")),e>10){Y.error("Bailing out");return}let r=t.nodes(),n=!1;for(let i of r){let a=t.children(i);n=n||a.length>0}if(!n){Y.debug("Done, no node has children",t.nodes());return}Y.debug("Nodes = ",r,e);for(let i of r)if(Y.debug("Extracting node",i,wr,wr.has(i)&&!wr.get(i).externalConnections,!t.parent(i),t.node(i),t.children("D")," Depth ",e),!wr.has(i))Y.debug("Not a cluster",i,e);else if(!wr.get(i).externalConnections&&t.children(i)&&t.children(i).length>0){Y.warn("Cluster without external connections, without a parent and with children",i,e);let s=t.graph().rankdir==="TB"?"LR":"TB";wr.get(i)?.clusterData?.dir&&(s=wr.get(i).clusterData.dir,Y.warn("Fixing dir",wr.get(i).clusterData.dir,s));let l=new Ir({multigraph:!0,compound:!0}).setGraph({rankdir:s,nodesep:50,ranksep:50,marginx:8,marginy:8}).setDefaultEdgeLabel(function(){return{}});Y.warn("Old graph before copy",Ko(t)),Die(i,t,l,i),t.setNode(i,{clusterNode:!0,id:i,clusterData:wr.get(i).clusterData,label:wr.get(i).label,graph:l}),Y.warn("New graph after copy node: (",i,")",Ko(l)),Y.debug("Old graph after copy",Ko(t))}else Y.warn("Cluster ** ",i," **not meeting the criteria !externalConnections:",!wr.get(i).externalConnections," no parent: ",!t.parent(i)," children ",t.children(i)&&t.children(i).length>0,t.children("D"),e),Y.debug(wr);r=t.nodes(),Y.warn("New list of nodes",r);for(let i of r){let a=t.node(i);Y.warn(" Now next level",i,a),a?.clusterNode&&Mie(a.graph,e+1)}},"extractor"),Iie=o((t,e)=>{if(e.length===0)return[];let r=Object.assign([],e);return e.forEach(n=>{let i=t.children(n),a=Iie(t,i);r=[...r,...a]}),r},"sorter"),Oie=o(t=>Iie(t,t.children()),"sortNodesByHierarchy")});var Fie={};vr(Fie,{render:()=>IOe});var Bie,IOe,zie=M(()=>{"use strict";Qv();AD();Gs();fL();Ot();Pie();vw();lw();hL();ut();$v();Vt();Bie=o(async(t,e,r,n,i,a)=>{Y.warn("Graph in recursive render:XAX",Ko(e),i);let s=e.graph().rankdir;Y.trace("Dir in recursive render - dir:",s);let l=t.insert("g").attr("class","root");e.nodes()?Y.info("Recursive render XXX",e.nodes()):Y.info("No nodes found for",e),e.edges().length>0&&Y.info("Recursive edges",e.edge(e.edges()[0]));let u=l.insert("g").attr("class","clusters"),h=l.insert("g").attr("class","edgePaths"),f=l.insert("g").attr("class","edgeLabels"),d=l.insert("g").attr("class","nodes");await Promise.all(e.nodes().map(async function(y){let v=e.node(y);if(i!==void 0){let x=JSON.parse(JSON.stringify(i.clusterData));Y.trace(`Setting data for parent cluster XXX + Node.id = `,y,` + data=`,x.height,` +Parent cluster`,i.height),e.setNode(i.id,x),e.parent(y)||(Y.trace("Setting parent",y,i.id),e.setParent(y,i.id,x))}if(Y.info("(Insert) Node XXX"+y+": "+JSON.stringify(e.node(y))),v?.clusterNode){Y.info("Cluster identified XBX",y,v.width,e.node(y));let{ranksep:x,nodesep:b}=e.graph();v.graph.setGraph({...v.graph.graph(),ranksep:x+25,nodesep:b});let w=await Bie(d,v.graph,r,n,e.node(y),a),_=w.elem;je(v,_),v.diff=w.diff||0,Y.info("New compound node after recursive render XAX",y,"width",v.width,"height",v.height),rJ(_,v)}else e.children(y).length>0?(Y.trace("Cluster - the non recursive path XBX",y,v.id,v,v.width,"Graph:",e),Y.trace(Km(v.id,e)),wr.set(v.id,{id:Km(v.id,e),node:v})):(Y.trace("Node - the non recursive path XAX",y,d,e.node(y),s),await Lm(d,e.node(y),{config:a,dir:s}))})),await o(async()=>{let y=e.edges().map(async function(v){let x=e.edge(v.v,v.w,v.name);Y.info("Edge "+v.v+" -> "+v.w+": "+JSON.stringify(v)),Y.info("Edge "+v.v+" -> "+v.w+": ",v," ",JSON.stringify(e.edge(v))),Y.info("Fix",wr,"ids:",v.v,v.w,"Translating: ",wr.get(v.v),wr.get(v.w)),await dw(f,x)});await Promise.all(y)},"processEdges")(),Y.info("Graph before layout:",JSON.stringify(Ko(e))),Y.info("############################################# XXX"),Y.info("### Layout ### XXX"),Y.info("############################################# XXX"),Gu(e),Y.info("Graph after layout:",JSON.stringify(Ko(e)));let m=0,{subGraphTitleTotalMargin:g}=Fu(a);return await Promise.all(Oie(e).map(async function(y){let v=e.node(y);if(Y.info("Position XBX => "+y+": ("+v.x,","+v.y,") width: ",v.width," height: ",v.height),v?.clusterNode)v.y+=g,Y.info("A tainted cluster node XBX1",y,v.id,v.width,v.height,v.x,v.y,e.parent(y)),wr.get(v.id).node=v,Uv(v);else if(e.children(y).length>0){Y.info("A pure cluster node XBX1",y,v.id,v.x,v.y,v.width,v.height,e.parent(y)),v.height+=g,e.node(v.parentId);let x=v?.padding/2||0,b=v?.labelBBox?.height||0,w=b-x||0;Y.debug("OffsetY",w,"labelHeight",b,"halfPadding",x),await _m(u,v),wr.get(v.id).node=v}else{let x=e.node(v.parentId);v.y+=g/2,Y.info("A regular node XBX1 - using the padding",v.id,"parent",v.parentId,v.width,v.height,v.x,v.y,"offsetY",v.offsetY,"parent",x,x?.offsetY,v),Uv(v)}})),e.edges().forEach(function(y){let v=e.edge(y);Y.info("Edge "+y.v+" -> "+y.w+": "+JSON.stringify(v),v),v.points.forEach(_=>_.y+=g/2);let x=e.node(y.v);var b=e.node(y.w);let w=mw(h,v,wr,r,x,b,n);pw(v,w)}),e.nodes().forEach(function(y){let v=e.node(y);Y.info(y,v.type,v.diff),v.isGroup&&(m=v.diff)}),Y.warn("Returning from recursive render XAX",l,m),{elem:l,diff:m}},"recursiveRender"),IOe=o(async(t,e)=>{let r=new Ir({multigraph:!0,compound:!0}).setGraph({rankdir:t.direction,nodesep:t.config?.nodeSpacing||t.config?.flowchart?.nodeSpacing||t.nodeSpacing,ranksep:t.config?.rankSpacing||t.config?.flowchart?.rankSpacing||t.rankSpacing,marginx:8,marginy:8}).setDefaultEdgeLabel(function(){return{}}),n=e.select("g");gw(n,t.markers,t.type,t.diagramId),nJ(),tJ(),jZ(),Lie(),t.nodes.forEach(a=>{r.setNode(a.id,{...a}),a.parentId&&r.setParent(a.id,a.parentId)}),Y.debug("Edges:",t.edges),t.edges.forEach(a=>{if(a.start===a.end){let s=a.start,l=s+"---"+s+"---1",u=s+"---"+s+"---2",h=r.node(s);r.setNode(l,{domId:l,id:l,parentId:h.parentId,labelStyle:"",label:"",padding:0,shape:"labelRect",style:"",width:10,height:10}),r.setParent(l,h.parentId),r.setNode(u,{domId:u,id:u,parentId:h.parentId,labelStyle:"",padding:0,shape:"labelRect",label:"",style:"",width:10,height:10}),r.setParent(u,h.parentId);let f=structuredClone(a),d=structuredClone(a),p=structuredClone(a);f.label="",f.arrowTypeEnd="none",f.id=s+"-cyclic-special-1",d.arrowTypeEnd="none",d.id=s+"-cyclic-special-mid",p.label="",h.isGroup&&(f.fromCluster=s,p.toCluster=s),p.id=s+"-cyclic-special-2",r.setEdge(s,l,f,s+"-cyclic-special-0"),r.setEdge(l,u,d,s+"-cyclic-special-1"),r.setEdge(u,s,p,s+"-cyc{"use strict";aJ();ut();Zv={},_D=o(t=>{for(let e of t)Zv[e.name]=e},"registerLayoutLoaders"),OOe=o(()=>{_D([{name:"dagre",loader:o(async()=>await Promise.resolve().then(()=>(zie(),Fie)),"loader")}])},"registerDefaultLayoutLoaders");OOe();Qm=o(async(t,e)=>{if(!(t.layoutAlgorithm in Zv))throw new Error(`Unknown layout algorithm: ${t.layoutAlgorithm}`);let r=Zv[t.layoutAlgorithm];return(await r.loader()).render(t,e,iJ,{algorithm:r.algorithm})},"render"),wT=o((t="",{fallback:e="dagre"}={})=>{if(t in Zv)return t;if(e in Zv)return Y.warn(`Layout algorithm ${t} is not registered. Using ${e} as fallback.`),e;throw new Error(`Both layout algorithms ${t} and ${e} are not registered.`)},"getRegisteredLayoutAlgorithm")});var Zm,POe,BOe,TT=M(()=>{"use strict";ai();ut();Zm=o((t,e,r,n)=>{t.attr("class",r);let{width:i,height:a,x:s,y:l}=POe(t,e);Zr(t,a,i,n);let u=BOe(s,l,i,a,e);t.attr("viewBox",u),Y.debug(`viewBox configured: ${u} with padding: ${e}`)},"setupViewPortForSVG"),POe=o((t,e)=>{let r=t.node()?.getBBox()||{width:0,height:0,x:0,y:0};return{width:r.width+e*2,height:r.height+e*2,x:r.x,y:r.y}},"calculateDimensionsWithPadding"),BOe=o((t,e,r,n,i)=>`${t-i} ${e-i} ${r} ${n}`,"createViewBox")});var FOe,zOe,Gie,$ie=M(()=>{"use strict";pr();Vt();ut();ow();Jv();TT();hr();cL();FOe=o(function(t,e){return e.db.getClasses()},"getClasses"),zOe=o(async function(t,e,r,n){Y.info("REF0:"),Y.info("Drawing state diagram (v2)",e);let{securityLevel:i,flowchart:a,layout:s}=pe(),l;i==="sandbox"&&(l=Ve("#i"+e));let u=i==="sandbox"?l.nodes()[0].contentDocument:document;Y.debug("Before getData: ");let h=n.db.getData();Y.debug("Data: ",h);let f=Am(e,i),d=lL();h.type=n.type,h.layoutAlgorithm=wT(s),h.layoutAlgorithm==="dagre"&&s==="elk"&&Y.warn("flowchart-elk was moved to an external package in Mermaid v11. Please refer [release notes](https://github.com/mermaid-js/mermaid/releases/tag/v11.0.0) for more details. This diagram will be rendered using `dagre` layout as a fallback."),h.direction=d,h.nodeSpacing=a?.nodeSpacing||50,h.rankSpacing=a?.rankSpacing||50,h.markers=["point","circle","cross"],h.diagramId=e,Y.debug("REF1:",h),await Qm(h,f);let p=h.config.flowchart?.diagramPadding??8;Ut.insertTitle(f,"flowchartTitleText",a?.titleTopMargin||0,n.db.getDiagramTitle()),Zm(f,p,"flowchart",a?.useMaxWidth||!1);for(let m of h.nodes){let g=Ve(`#${e} [id="${m.id}"]`);if(!g||!m.link)continue;let y=u.createElementNS("http://www.w3.org/2000/svg","a");y.setAttributeNS("http://www.w3.org/2000/svg","class",m.cssClasses),y.setAttributeNS("http://www.w3.org/2000/svg","rel","noopener"),i==="sandbox"?y.setAttributeNS("http://www.w3.org/2000/svg","target","_top"):m.linkTarget&&y.setAttributeNS("http://www.w3.org/2000/svg","target",m.linkTarget);let v=g.insert(function(){return y},":first-child"),x=g.select(".label-container");x&&v.append(function(){return x.node()});let b=g.select(".label");b&&v.append(function(){return b.node()})}},"draw"),Gie={getClasses:FOe,draw:zOe}});var LD,Vie,Uie=M(()=>{"use strict";LD=function(){var t=o(function(ki,At,Pt,wt){for(Pt=Pt||{},wt=ki.length;wt--;Pt[ki[wt]]=At);return Pt},"o"),e=[1,4],r=[1,3],n=[1,5],i=[1,8,9,10,11,27,34,36,38,44,60,83,84,85,86,87,88,101,104,105,108,110,113,114,115,120,121,122,123],a=[2,2],s=[1,13],l=[1,14],u=[1,15],h=[1,16],f=[1,23],d=[1,25],p=[1,26],m=[1,27],g=[1,49],y=[1,48],v=[1,29],x=[1,30],b=[1,31],w=[1,32],_=[1,33],T=[1,44],E=[1,46],L=[1,42],S=[1,47],A=[1,43],I=[1,50],D=[1,45],k=[1,51],R=[1,52],C=[1,34],O=[1,35],N=[1,36],P=[1,37],F=[1,57],B=[1,8,9,10,11,27,32,34,36,38,44,60,83,84,85,86,87,88,101,104,105,108,110,113,114,115,120,121,122,123],G=[1,61],z=[1,60],W=[1,62],Z=[8,9,11,75,77],j=[1,77],oe=[1,90],K=[1,95],ee=[1,94],J=[1,91],H=[1,87],q=[1,93],Q=[1,89],ae=[1,96],ue=[1,92],ce=[1,97],te=[1,88],Ne=[8,9,10,11,40,75,77],se=[8,9,10,11,40,46,75,77],ke=[8,9,10,11,29,40,44,46,48,50,52,54,56,58,60,63,65,67,68,70,75,77,88,101,104,105,108,110,113,114,115],Re=[8,9,11,44,60,75,77,88,101,104,105,108,110,113,114,115],Ce=[44,60,88,101,104,105,108,110,113,114,115],Pe=[1,123],Ie=[1,122],$e=[1,130],ye=[1,144],X=[1,145],fe=[1,146],he=[1,147],ge=[1,132],ne=[1,134],ve=[1,138],U=[1,139],Te=[1,140],ie=[1,141],Ee=[1,142],Ae=[1,143],Ge=[1,148],Be=[1,149],me=[1,128],He=[1,129],Oe=[1,136],et=[1,131],bt=[1,135],kt=[1,133],vt=[8,9,10,11,27,32,34,36,38,44,60,83,84,85,86,87,88,101,104,105,108,110,113,114,115,120,121,122,123],rt=[1,151],yt=[1,153],Ue=[8,9,11],tt=[8,9,10,11,14,44,60,88,104,105,108,110,113,114,115],ht=[1,173],Et=[1,169],er=[1,170],dt=[1,174],Je=[1,171],ct=[1,172],Ct=[77,115,118],pt=[8,9,10,11,12,14,27,29,32,44,60,75,83,84,85,86,87,88,89,104,108,110,113,114,115],Bt=[10,105],Tr=[31,49,51,53,55,57,62,64,66,67,69,71,115,116,117],yr=[1,242],or=[1,240],ln=[1,244],Or=[1,238],ii=[1,239],mn=[1,241],On=[1,243],_r=[1,245],mi=[1,263],vs=[8,9,11,105],Pn=[8,9,10,11,60,83,104,105,108,109,110,111],So={trace:o(function(){},"trace"),yy:{},symbols_:{error:2,start:3,graphConfig:4,document:5,line:6,statement:7,SEMI:8,NEWLINE:9,SPACE:10,EOF:11,GRAPH:12,NODIR:13,DIR:14,FirstStmtSeparator:15,ending:16,endToken:17,spaceList:18,spaceListNewline:19,vertexStatement:20,separator:21,styleStatement:22,linkStyleStatement:23,classDefStatement:24,classStatement:25,clickStatement:26,subgraph:27,textNoTags:28,SQS:29,text:30,SQE:31,end:32,direction:33,acc_title:34,acc_title_value:35,acc_descr:36,acc_descr_value:37,acc_descr_multiline_value:38,shapeData:39,SHAPE_DATA:40,link:41,node:42,styledVertex:43,AMP:44,vertex:45,STYLE_SEPARATOR:46,idString:47,DOUBLECIRCLESTART:48,DOUBLECIRCLEEND:49,PS:50,PE:51,"(-":52,"-)":53,STADIUMSTART:54,STADIUMEND:55,SUBROUTINESTART:56,SUBROUTINEEND:57,VERTEX_WITH_PROPS_START:58,"NODE_STRING[field]":59,COLON:60,"NODE_STRING[value]":61,PIPE:62,CYLINDERSTART:63,CYLINDEREND:64,DIAMOND_START:65,DIAMOND_STOP:66,TAGEND:67,TRAPSTART:68,TRAPEND:69,INVTRAPSTART:70,INVTRAPEND:71,linkStatement:72,arrowText:73,TESTSTR:74,START_LINK:75,edgeText:76,LINK:77,edgeTextToken:78,STR:79,MD_STR:80,textToken:81,keywords:82,STYLE:83,LINKSTYLE:84,CLASSDEF:85,CLASS:86,CLICK:87,DOWN:88,UP:89,textNoTagsToken:90,stylesOpt:91,"idString[vertex]":92,"idString[class]":93,CALLBACKNAME:94,CALLBACKARGS:95,HREF:96,LINK_TARGET:97,"STR[link]":98,"STR[tooltip]":99,alphaNum:100,DEFAULT:101,numList:102,INTERPOLATE:103,NUM:104,COMMA:105,style:106,styleComponent:107,NODE_STRING:108,UNIT:109,BRKT:110,PCT:111,idStringToken:112,MINUS:113,MULT:114,UNICODE_TEXT:115,TEXT:116,TAGSTART:117,EDGE_TEXT:118,alphaNumToken:119,direction_tb:120,direction_bt:121,direction_rl:122,direction_lr:123,$accept:0,$end:1},terminals_:{2:"error",8:"SEMI",9:"NEWLINE",10:"SPACE",11:"EOF",12:"GRAPH",13:"NODIR",14:"DIR",27:"subgraph",29:"SQS",31:"SQE",32:"end",34:"acc_title",35:"acc_title_value",36:"acc_descr",37:"acc_descr_value",38:"acc_descr_multiline_value",40:"SHAPE_DATA",44:"AMP",46:"STYLE_SEPARATOR",48:"DOUBLECIRCLESTART",49:"DOUBLECIRCLEEND",50:"PS",51:"PE",52:"(-",53:"-)",54:"STADIUMSTART",55:"STADIUMEND",56:"SUBROUTINESTART",57:"SUBROUTINEEND",58:"VERTEX_WITH_PROPS_START",59:"NODE_STRING[field]",60:"COLON",61:"NODE_STRING[value]",62:"PIPE",63:"CYLINDERSTART",64:"CYLINDEREND",65:"DIAMOND_START",66:"DIAMOND_STOP",67:"TAGEND",68:"TRAPSTART",69:"TRAPEND",70:"INVTRAPSTART",71:"INVTRAPEND",74:"TESTSTR",75:"START_LINK",77:"LINK",79:"STR",80:"MD_STR",83:"STYLE",84:"LINKSTYLE",85:"CLASSDEF",86:"CLASS",87:"CLICK",88:"DOWN",89:"UP",92:"idString[vertex]",93:"idString[class]",94:"CALLBACKNAME",95:"CALLBACKARGS",96:"HREF",97:"LINK_TARGET",98:"STR[link]",99:"STR[tooltip]",101:"DEFAULT",103:"INTERPOLATE",104:"NUM",105:"COMMA",108:"NODE_STRING",109:"UNIT",110:"BRKT",111:"PCT",113:"MINUS",114:"MULT",115:"UNICODE_TEXT",116:"TEXT",117:"TAGSTART",118:"EDGE_TEXT",120:"direction_tb",121:"direction_bt",122:"direction_rl",123:"direction_lr"},productions_:[0,[3,2],[5,0],[5,2],[6,1],[6,1],[6,1],[6,1],[6,1],[4,2],[4,2],[4,2],[4,3],[16,2],[16,1],[17,1],[17,1],[17,1],[15,1],[15,1],[15,2],[19,2],[19,2],[19,1],[19,1],[18,2],[18,1],[7,2],[7,2],[7,2],[7,2],[7,2],[7,2],[7,9],[7,6],[7,4],[7,1],[7,2],[7,2],[7,1],[21,1],[21,1],[21,1],[39,2],[39,1],[20,4],[20,3],[20,4],[20,2],[20,2],[20,1],[42,1],[42,6],[42,5],[43,1],[43,3],[45,4],[45,4],[45,6],[45,4],[45,4],[45,4],[45,8],[45,4],[45,4],[45,4],[45,6],[45,4],[45,4],[45,4],[45,4],[45,4],[45,1],[41,2],[41,3],[41,3],[41,1],[41,3],[76,1],[76,2],[76,1],[76,1],[72,1],[73,3],[30,1],[30,2],[30,1],[30,1],[82,1],[82,1],[82,1],[82,1],[82,1],[82,1],[82,1],[82,1],[82,1],[82,1],[82,1],[28,1],[28,2],[28,1],[28,1],[24,5],[25,5],[26,2],[26,4],[26,3],[26,5],[26,3],[26,5],[26,5],[26,7],[26,2],[26,4],[26,2],[26,4],[26,4],[26,6],[22,5],[23,5],[23,5],[23,9],[23,9],[23,7],[23,7],[102,1],[102,3],[91,1],[91,3],[106,1],[106,2],[107,1],[107,1],[107,1],[107,1],[107,1],[107,1],[107,1],[107,1],[112,1],[112,1],[112,1],[112,1],[112,1],[112,1],[112,1],[112,1],[112,1],[112,1],[112,1],[81,1],[81,1],[81,1],[81,1],[90,1],[90,1],[90,1],[90,1],[90,1],[90,1],[90,1],[90,1],[90,1],[90,1],[90,1],[78,1],[78,1],[119,1],[119,1],[119,1],[119,1],[119,1],[119,1],[119,1],[119,1],[119,1],[119,1],[119,1],[47,1],[47,2],[100,1],[100,2],[33,1],[33,1],[33,1],[33,1]],performAction:o(function(At,Pt,wt,We,Ft,de,gn){var xe=de.length-1;switch(Ft){case 2:this.$=[];break;case 3:(!Array.isArray(de[xe])||de[xe].length>0)&&de[xe-1].push(de[xe]),this.$=de[xe-1];break;case 4:case 181:this.$=de[xe];break;case 11:We.setDirection("TB"),this.$="TB";break;case 12:We.setDirection(de[xe-1]),this.$=de[xe-1];break;case 27:this.$=de[xe-1].nodes;break;case 28:case 29:case 30:case 31:case 32:this.$=[];break;case 33:this.$=We.addSubGraph(de[xe-6],de[xe-1],de[xe-4]);break;case 34:this.$=We.addSubGraph(de[xe-3],de[xe-1],de[xe-3]);break;case 35:this.$=We.addSubGraph(void 0,de[xe-1],void 0);break;case 37:this.$=de[xe].trim(),We.setAccTitle(this.$);break;case 38:case 39:this.$=de[xe].trim(),We.setAccDescription(this.$);break;case 43:this.$=de[xe-1]+de[xe];break;case 44:this.$=de[xe];break;case 45:We.addVertex(de[xe-1][0],void 0,void 0,void 0,void 0,void 0,void 0,de[xe]),We.addLink(de[xe-3].stmt,de[xe-1],de[xe-2]),this.$={stmt:de[xe-1],nodes:de[xe-1].concat(de[xe-3].nodes)};break;case 46:We.addLink(de[xe-2].stmt,de[xe],de[xe-1]),this.$={stmt:de[xe],nodes:de[xe].concat(de[xe-2].nodes)};break;case 47:We.addLink(de[xe-3].stmt,de[xe-1],de[xe-2]),this.$={stmt:de[xe-1],nodes:de[xe-1].concat(de[xe-3].nodes)};break;case 48:this.$={stmt:de[xe-1],nodes:de[xe-1]};break;case 49:We.addVertex(de[xe-1][0],void 0,void 0,void 0,void 0,void 0,void 0,de[xe]),this.$={stmt:de[xe-1],nodes:de[xe-1],shapeData:de[xe]};break;case 50:this.$={stmt:de[xe],nodes:de[xe]};break;case 51:this.$=[de[xe]];break;case 52:We.addVertex(de[xe-5][0],void 0,void 0,void 0,void 0,void 0,void 0,de[xe-4]),this.$=de[xe-5].concat(de[xe]);break;case 53:this.$=de[xe-4].concat(de[xe]);break;case 54:this.$=de[xe];break;case 55:this.$=de[xe-2],We.setClass(de[xe-2],de[xe]);break;case 56:this.$=de[xe-3],We.addVertex(de[xe-3],de[xe-1],"square");break;case 57:this.$=de[xe-3],We.addVertex(de[xe-3],de[xe-1],"doublecircle");break;case 58:this.$=de[xe-5],We.addVertex(de[xe-5],de[xe-2],"circle");break;case 59:this.$=de[xe-3],We.addVertex(de[xe-3],de[xe-1],"ellipse");break;case 60:this.$=de[xe-3],We.addVertex(de[xe-3],de[xe-1],"stadium");break;case 61:this.$=de[xe-3],We.addVertex(de[xe-3],de[xe-1],"subroutine");break;case 62:this.$=de[xe-7],We.addVertex(de[xe-7],de[xe-1],"rect",void 0,void 0,void 0,Object.fromEntries([[de[xe-5],de[xe-3]]]));break;case 63:this.$=de[xe-3],We.addVertex(de[xe-3],de[xe-1],"cylinder");break;case 64:this.$=de[xe-3],We.addVertex(de[xe-3],de[xe-1],"round");break;case 65:this.$=de[xe-3],We.addVertex(de[xe-3],de[xe-1],"diamond");break;case 66:this.$=de[xe-5],We.addVertex(de[xe-5],de[xe-2],"hexagon");break;case 67:this.$=de[xe-3],We.addVertex(de[xe-3],de[xe-1],"odd");break;case 68:this.$=de[xe-3],We.addVertex(de[xe-3],de[xe-1],"trapezoid");break;case 69:this.$=de[xe-3],We.addVertex(de[xe-3],de[xe-1],"inv_trapezoid");break;case 70:this.$=de[xe-3],We.addVertex(de[xe-3],de[xe-1],"lean_right");break;case 71:this.$=de[xe-3],We.addVertex(de[xe-3],de[xe-1],"lean_left");break;case 72:this.$=de[xe],We.addVertex(de[xe]);break;case 73:de[xe-1].text=de[xe],this.$=de[xe-1];break;case 74:case 75:de[xe-2].text=de[xe-1],this.$=de[xe-2];break;case 76:this.$=de[xe];break;case 77:var ja=We.destructLink(de[xe],de[xe-2]);this.$={type:ja.type,stroke:ja.stroke,length:ja.length,text:de[xe-1]};break;case 78:this.$={text:de[xe],type:"text"};break;case 79:this.$={text:de[xe-1].text+""+de[xe],type:de[xe-1].type};break;case 80:this.$={text:de[xe],type:"string"};break;case 81:this.$={text:de[xe],type:"markdown"};break;case 82:var ja=We.destructLink(de[xe]);this.$={type:ja.type,stroke:ja.stroke,length:ja.length};break;case 83:this.$=de[xe-1];break;case 84:this.$={text:de[xe],type:"text"};break;case 85:this.$={text:de[xe-1].text+""+de[xe],type:de[xe-1].type};break;case 86:this.$={text:de[xe],type:"string"};break;case 87:case 102:this.$={text:de[xe],type:"markdown"};break;case 99:this.$={text:de[xe],type:"text"};break;case 100:this.$={text:de[xe-1].text+""+de[xe],type:de[xe-1].type};break;case 101:this.$={text:de[xe],type:"text"};break;case 103:this.$=de[xe-4],We.addClass(de[xe-2],de[xe]);break;case 104:this.$=de[xe-4],We.setClass(de[xe-2],de[xe]);break;case 105:case 113:this.$=de[xe-1],We.setClickEvent(de[xe-1],de[xe]);break;case 106:case 114:this.$=de[xe-3],We.setClickEvent(de[xe-3],de[xe-2]),We.setTooltip(de[xe-3],de[xe]);break;case 107:this.$=de[xe-2],We.setClickEvent(de[xe-2],de[xe-1],de[xe]);break;case 108:this.$=de[xe-4],We.setClickEvent(de[xe-4],de[xe-3],de[xe-2]),We.setTooltip(de[xe-4],de[xe]);break;case 109:this.$=de[xe-2],We.setLink(de[xe-2],de[xe]);break;case 110:this.$=de[xe-4],We.setLink(de[xe-4],de[xe-2]),We.setTooltip(de[xe-4],de[xe]);break;case 111:this.$=de[xe-4],We.setLink(de[xe-4],de[xe-2],de[xe]);break;case 112:this.$=de[xe-6],We.setLink(de[xe-6],de[xe-4],de[xe]),We.setTooltip(de[xe-6],de[xe-2]);break;case 115:this.$=de[xe-1],We.setLink(de[xe-1],de[xe]);break;case 116:this.$=de[xe-3],We.setLink(de[xe-3],de[xe-2]),We.setTooltip(de[xe-3],de[xe]);break;case 117:this.$=de[xe-3],We.setLink(de[xe-3],de[xe-2],de[xe]);break;case 118:this.$=de[xe-5],We.setLink(de[xe-5],de[xe-4],de[xe]),We.setTooltip(de[xe-5],de[xe-2]);break;case 119:this.$=de[xe-4],We.addVertex(de[xe-2],void 0,void 0,de[xe]);break;case 120:this.$=de[xe-4],We.updateLink([de[xe-2]],de[xe]);break;case 121:this.$=de[xe-4],We.updateLink(de[xe-2],de[xe]);break;case 122:this.$=de[xe-8],We.updateLinkInterpolate([de[xe-6]],de[xe-2]),We.updateLink([de[xe-6]],de[xe]);break;case 123:this.$=de[xe-8],We.updateLinkInterpolate(de[xe-6],de[xe-2]),We.updateLink(de[xe-6],de[xe]);break;case 124:this.$=de[xe-6],We.updateLinkInterpolate([de[xe-4]],de[xe]);break;case 125:this.$=de[xe-6],We.updateLinkInterpolate(de[xe-4],de[xe]);break;case 126:case 128:this.$=[de[xe]];break;case 127:case 129:de[xe-2].push(de[xe]),this.$=de[xe-2];break;case 131:this.$=de[xe-1]+de[xe];break;case 179:this.$=de[xe];break;case 180:this.$=de[xe-1]+""+de[xe];break;case 182:this.$=de[xe-1]+""+de[xe];break;case 183:this.$={stmt:"dir",value:"TB"};break;case 184:this.$={stmt:"dir",value:"BT"};break;case 185:this.$={stmt:"dir",value:"RL"};break;case 186:this.$={stmt:"dir",value:"LR"};break}},"anonymous"),table:[{3:1,4:2,9:e,10:r,12:n},{1:[3]},t(i,a,{5:6}),{4:7,9:e,10:r,12:n},{4:8,9:e,10:r,12:n},{13:[1,9],14:[1,10]},{1:[2,1],6:11,7:12,8:s,9:l,10:u,11:h,20:17,22:18,23:19,24:20,25:21,26:22,27:f,33:24,34:d,36:p,38:m,42:28,43:38,44:g,45:39,47:40,60:y,83:v,84:x,85:b,86:w,87:_,88:T,101:E,104:L,105:S,108:A,110:I,112:41,113:D,114:k,115:R,120:C,121:O,122:N,123:P},t(i,[2,9]),t(i,[2,10]),t(i,[2,11]),{8:[1,54],9:[1,55],10:F,15:53,18:56},t(B,[2,3]),t(B,[2,4]),t(B,[2,5]),t(B,[2,6]),t(B,[2,7]),t(B,[2,8]),{8:G,9:z,11:W,21:58,41:59,72:63,75:[1,64],77:[1,65]},{8:G,9:z,11:W,21:66},{8:G,9:z,11:W,21:67},{8:G,9:z,11:W,21:68},{8:G,9:z,11:W,21:69},{8:G,9:z,11:W,21:70},{8:G,9:z,10:[1,71],11:W,21:72},t(B,[2,36]),{35:[1,73]},{37:[1,74]},t(B,[2,39]),t(Z,[2,50],{18:75,39:76,10:F,40:j}),{10:[1,78]},{10:[1,79]},{10:[1,80]},{10:[1,81]},{14:oe,44:K,60:ee,79:[1,85],88:J,94:[1,82],96:[1,83],100:84,104:H,105:q,108:Q,110:ae,113:ue,114:ce,115:te,119:86},t(B,[2,183]),t(B,[2,184]),t(B,[2,185]),t(B,[2,186]),t(Ne,[2,51]),t(Ne,[2,54],{46:[1,98]}),t(se,[2,72],{112:111,29:[1,99],44:g,48:[1,100],50:[1,101],52:[1,102],54:[1,103],56:[1,104],58:[1,105],60:y,63:[1,106],65:[1,107],67:[1,108],68:[1,109],70:[1,110],88:T,101:E,104:L,105:S,108:A,110:I,113:D,114:k,115:R}),t(ke,[2,179]),t(ke,[2,140]),t(ke,[2,141]),t(ke,[2,142]),t(ke,[2,143]),t(ke,[2,144]),t(ke,[2,145]),t(ke,[2,146]),t(ke,[2,147]),t(ke,[2,148]),t(ke,[2,149]),t(ke,[2,150]),t(i,[2,12]),t(i,[2,18]),t(i,[2,19]),{9:[1,112]},t(Re,[2,26],{18:113,10:F}),t(B,[2,27]),{42:114,43:38,44:g,45:39,47:40,60:y,88:T,101:E,104:L,105:S,108:A,110:I,112:41,113:D,114:k,115:R},t(B,[2,40]),t(B,[2,41]),t(B,[2,42]),t(Ce,[2,76],{73:115,62:[1,117],74:[1,116]}),{76:118,78:119,79:[1,120],80:[1,121],115:Pe,118:Ie},t([44,60,62,74,88,101,104,105,108,110,113,114,115],[2,82]),t(B,[2,28]),t(B,[2,29]),t(B,[2,30]),t(B,[2,31]),t(B,[2,32]),{10:$e,12:ye,14:X,27:fe,28:124,32:he,44:ge,60:ne,75:ve,79:[1,126],80:[1,127],82:137,83:U,84:Te,85:ie,86:Ee,87:Ae,88:Ge,89:Be,90:125,104:me,108:He,110:Oe,113:et,114:bt,115:kt},t(vt,a,{5:150}),t(B,[2,37]),t(B,[2,38]),t(Z,[2,48],{44:rt}),t(Z,[2,49],{18:152,10:F,40:yt}),t(Ne,[2,44]),{44:g,47:154,60:y,88:T,101:E,104:L,105:S,108:A,110:I,112:41,113:D,114:k,115:R},{101:[1,155],102:156,104:[1,157]},{44:g,47:158,60:y,88:T,101:E,104:L,105:S,108:A,110:I,112:41,113:D,114:k,115:R},{44:g,47:159,60:y,88:T,101:E,104:L,105:S,108:A,110:I,112:41,113:D,114:k,115:R},t(Ue,[2,105],{10:[1,160],95:[1,161]}),{79:[1,162]},t(Ue,[2,113],{119:164,10:[1,163],14:oe,44:K,60:ee,88:J,104:H,105:q,108:Q,110:ae,113:ue,114:ce,115:te}),t(Ue,[2,115],{10:[1,165]}),t(tt,[2,181]),t(tt,[2,168]),t(tt,[2,169]),t(tt,[2,170]),t(tt,[2,171]),t(tt,[2,172]),t(tt,[2,173]),t(tt,[2,174]),t(tt,[2,175]),t(tt,[2,176]),t(tt,[2,177]),t(tt,[2,178]),{44:g,47:166,60:y,88:T,101:E,104:L,105:S,108:A,110:I,112:41,113:D,114:k,115:R},{30:167,67:ht,79:Et,80:er,81:168,115:dt,116:Je,117:ct},{30:175,67:ht,79:Et,80:er,81:168,115:dt,116:Je,117:ct},{30:177,50:[1,176],67:ht,79:Et,80:er,81:168,115:dt,116:Je,117:ct},{30:178,67:ht,79:Et,80:er,81:168,115:dt,116:Je,117:ct},{30:179,67:ht,79:Et,80:er,81:168,115:dt,116:Je,117:ct},{30:180,67:ht,79:Et,80:er,81:168,115:dt,116:Je,117:ct},{108:[1,181]},{30:182,67:ht,79:Et,80:er,81:168,115:dt,116:Je,117:ct},{30:183,65:[1,184],67:ht,79:Et,80:er,81:168,115:dt,116:Je,117:ct},{30:185,67:ht,79:Et,80:er,81:168,115:dt,116:Je,117:ct},{30:186,67:ht,79:Et,80:er,81:168,115:dt,116:Je,117:ct},{30:187,67:ht,79:Et,80:er,81:168,115:dt,116:Je,117:ct},t(ke,[2,180]),t(i,[2,20]),t(Re,[2,25]),t(Z,[2,46],{39:188,18:189,10:F,40:j}),t(Ce,[2,73],{10:[1,190]}),{10:[1,191]},{30:192,67:ht,79:Et,80:er,81:168,115:dt,116:Je,117:ct},{77:[1,193],78:194,115:Pe,118:Ie},t(Ct,[2,78]),t(Ct,[2,80]),t(Ct,[2,81]),t(Ct,[2,166]),t(Ct,[2,167]),{8:G,9:z,10:$e,11:W,12:ye,14:X,21:196,27:fe,29:[1,195],32:he,44:ge,60:ne,75:ve,82:137,83:U,84:Te,85:ie,86:Ee,87:Ae,88:Ge,89:Be,90:197,104:me,108:He,110:Oe,113:et,114:bt,115:kt},t(pt,[2,99]),t(pt,[2,101]),t(pt,[2,102]),t(pt,[2,155]),t(pt,[2,156]),t(pt,[2,157]),t(pt,[2,158]),t(pt,[2,159]),t(pt,[2,160]),t(pt,[2,161]),t(pt,[2,162]),t(pt,[2,163]),t(pt,[2,164]),t(pt,[2,165]),t(pt,[2,88]),t(pt,[2,89]),t(pt,[2,90]),t(pt,[2,91]),t(pt,[2,92]),t(pt,[2,93]),t(pt,[2,94]),t(pt,[2,95]),t(pt,[2,96]),t(pt,[2,97]),t(pt,[2,98]),{6:11,7:12,8:s,9:l,10:u,11:h,20:17,22:18,23:19,24:20,25:21,26:22,27:f,32:[1,198],33:24,34:d,36:p,38:m,42:28,43:38,44:g,45:39,47:40,60:y,83:v,84:x,85:b,86:w,87:_,88:T,101:E,104:L,105:S,108:A,110:I,112:41,113:D,114:k,115:R,120:C,121:O,122:N,123:P},{10:F,18:199},{44:[1,200]},t(Ne,[2,43]),{10:[1,201],44:g,60:y,88:T,101:E,104:L,105:S,108:A,110:I,112:111,113:D,114:k,115:R},{10:[1,202]},{10:[1,203],105:[1,204]},t(Bt,[2,126]),{10:[1,205],44:g,60:y,88:T,101:E,104:L,105:S,108:A,110:I,112:111,113:D,114:k,115:R},{10:[1,206],44:g,60:y,88:T,101:E,104:L,105:S,108:A,110:I,112:111,113:D,114:k,115:R},{79:[1,207]},t(Ue,[2,107],{10:[1,208]}),t(Ue,[2,109],{10:[1,209]}),{79:[1,210]},t(tt,[2,182]),{79:[1,211],97:[1,212]},t(Ne,[2,55],{112:111,44:g,60:y,88:T,101:E,104:L,105:S,108:A,110:I,113:D,114:k,115:R}),{31:[1,213],67:ht,81:214,115:dt,116:Je,117:ct},t(Tr,[2,84]),t(Tr,[2,86]),t(Tr,[2,87]),t(Tr,[2,151]),t(Tr,[2,152]),t(Tr,[2,153]),t(Tr,[2,154]),{49:[1,215],67:ht,81:214,115:dt,116:Je,117:ct},{30:216,67:ht,79:Et,80:er,81:168,115:dt,116:Je,117:ct},{51:[1,217],67:ht,81:214,115:dt,116:Je,117:ct},{53:[1,218],67:ht,81:214,115:dt,116:Je,117:ct},{55:[1,219],67:ht,81:214,115:dt,116:Je,117:ct},{57:[1,220],67:ht,81:214,115:dt,116:Je,117:ct},{60:[1,221]},{64:[1,222],67:ht,81:214,115:dt,116:Je,117:ct},{66:[1,223],67:ht,81:214,115:dt,116:Je,117:ct},{30:224,67:ht,79:Et,80:er,81:168,115:dt,116:Je,117:ct},{31:[1,225],67:ht,81:214,115:dt,116:Je,117:ct},{67:ht,69:[1,226],71:[1,227],81:214,115:dt,116:Je,117:ct},{67:ht,69:[1,229],71:[1,228],81:214,115:dt,116:Je,117:ct},t(Z,[2,45],{18:152,10:F,40:yt}),t(Z,[2,47],{44:rt}),t(Ce,[2,75]),t(Ce,[2,74]),{62:[1,230],67:ht,81:214,115:dt,116:Je,117:ct},t(Ce,[2,77]),t(Ct,[2,79]),{30:231,67:ht,79:Et,80:er,81:168,115:dt,116:Je,117:ct},t(vt,a,{5:232}),t(pt,[2,100]),t(B,[2,35]),{43:233,44:g,45:39,47:40,60:y,88:T,101:E,104:L,105:S,108:A,110:I,112:41,113:D,114:k,115:R},{10:F,18:234},{10:yr,60:or,83:ln,91:235,104:Or,106:236,107:237,108:ii,109:mn,110:On,111:_r},{10:yr,60:or,83:ln,91:246,103:[1,247],104:Or,106:236,107:237,108:ii,109:mn,110:On,111:_r},{10:yr,60:or,83:ln,91:248,103:[1,249],104:Or,106:236,107:237,108:ii,109:mn,110:On,111:_r},{104:[1,250]},{10:yr,60:or,83:ln,91:251,104:Or,106:236,107:237,108:ii,109:mn,110:On,111:_r},{44:g,47:252,60:y,88:T,101:E,104:L,105:S,108:A,110:I,112:41,113:D,114:k,115:R},t(Ue,[2,106]),{79:[1,253]},{79:[1,254],97:[1,255]},t(Ue,[2,114]),t(Ue,[2,116],{10:[1,256]}),t(Ue,[2,117]),t(se,[2,56]),t(Tr,[2,85]),t(se,[2,57]),{51:[1,257],67:ht,81:214,115:dt,116:Je,117:ct},t(se,[2,64]),t(se,[2,59]),t(se,[2,60]),t(se,[2,61]),{108:[1,258]},t(se,[2,63]),t(se,[2,65]),{66:[1,259],67:ht,81:214,115:dt,116:Je,117:ct},t(se,[2,67]),t(se,[2,68]),t(se,[2,70]),t(se,[2,69]),t(se,[2,71]),t([10,44,60,88,101,104,105,108,110,113,114,115],[2,83]),{31:[1,260],67:ht,81:214,115:dt,116:Je,117:ct},{6:11,7:12,8:s,9:l,10:u,11:h,20:17,22:18,23:19,24:20,25:21,26:22,27:f,32:[1,261],33:24,34:d,36:p,38:m,42:28,43:38,44:g,45:39,47:40,60:y,83:v,84:x,85:b,86:w,87:_,88:T,101:E,104:L,105:S,108:A,110:I,112:41,113:D,114:k,115:R,120:C,121:O,122:N,123:P},t(Ne,[2,53]),{43:262,44:g,45:39,47:40,60:y,88:T,101:E,104:L,105:S,108:A,110:I,112:41,113:D,114:k,115:R},t(Ue,[2,119],{105:mi}),t(vs,[2,128],{107:264,10:yr,60:or,83:ln,104:Or,108:ii,109:mn,110:On,111:_r}),t(Pn,[2,130]),t(Pn,[2,132]),t(Pn,[2,133]),t(Pn,[2,134]),t(Pn,[2,135]),t(Pn,[2,136]),t(Pn,[2,137]),t(Pn,[2,138]),t(Pn,[2,139]),t(Ue,[2,120],{105:mi}),{10:[1,265]},t(Ue,[2,121],{105:mi}),{10:[1,266]},t(Bt,[2,127]),t(Ue,[2,103],{105:mi}),t(Ue,[2,104],{112:111,44:g,60:y,88:T,101:E,104:L,105:S,108:A,110:I,113:D,114:k,115:R}),t(Ue,[2,108]),t(Ue,[2,110],{10:[1,267]}),t(Ue,[2,111]),{97:[1,268]},{51:[1,269]},{62:[1,270]},{66:[1,271]},{8:G,9:z,11:W,21:272},t(B,[2,34]),t(Ne,[2,52]),{10:yr,60:or,83:ln,104:Or,106:273,107:237,108:ii,109:mn,110:On,111:_r},t(Pn,[2,131]),{14:oe,44:K,60:ee,88:J,100:274,104:H,105:q,108:Q,110:ae,113:ue,114:ce,115:te,119:86},{14:oe,44:K,60:ee,88:J,100:275,104:H,105:q,108:Q,110:ae,113:ue,114:ce,115:te,119:86},{97:[1,276]},t(Ue,[2,118]),t(se,[2,58]),{30:277,67:ht,79:Et,80:er,81:168,115:dt,116:Je,117:ct},t(se,[2,66]),t(vt,a,{5:278}),t(vs,[2,129],{107:264,10:yr,60:or,83:ln,104:Or,108:ii,109:mn,110:On,111:_r}),t(Ue,[2,124],{119:164,10:[1,279],14:oe,44:K,60:ee,88:J,104:H,105:q,108:Q,110:ae,113:ue,114:ce,115:te}),t(Ue,[2,125],{119:164,10:[1,280],14:oe,44:K,60:ee,88:J,104:H,105:q,108:Q,110:ae,113:ue,114:ce,115:te}),t(Ue,[2,112]),{31:[1,281],67:ht,81:214,115:dt,116:Je,117:ct},{6:11,7:12,8:s,9:l,10:u,11:h,20:17,22:18,23:19,24:20,25:21,26:22,27:f,32:[1,282],33:24,34:d,36:p,38:m,42:28,43:38,44:g,45:39,47:40,60:y,83:v,84:x,85:b,86:w,87:_,88:T,101:E,104:L,105:S,108:A,110:I,112:41,113:D,114:k,115:R,120:C,121:O,122:N,123:P},{10:yr,60:or,83:ln,91:283,104:Or,106:236,107:237,108:ii,109:mn,110:On,111:_r},{10:yr,60:or,83:ln,91:284,104:Or,106:236,107:237,108:ii,109:mn,110:On,111:_r},t(se,[2,62]),t(B,[2,33]),t(Ue,[2,122],{105:mi}),t(Ue,[2,123],{105:mi})],defaultActions:{},parseError:o(function(At,Pt){if(Pt.recoverable)this.trace(At);else{var wt=new Error(At);throw wt.hash=Pt,wt}},"parseError"),parse:o(function(At){var Pt=this,wt=[0],We=[],Ft=[null],de=[],gn=this.table,xe="",ja=0,W1=0,Y1=0,q1=2,X1=1,op=de.slice.call(arguments,1),Kn=Object.create(this.lexer),ca={yy:{}};for(var tc in this.yy)Object.prototype.hasOwnProperty.call(this.yy,tc)&&(ca.yy[tc]=this.yy[tc]);Kn.setInput(At,ca.yy),ca.yy.lexer=Kn,ca.yy.parser=this,typeof Kn.yylloc>"u"&&(Kn.yylloc={});var Wf=Kn.yylloc;de.push(Wf);var j1=Kn.options&&Kn.options.ranges;typeof ca.yy.parseError=="function"?this.parseError=ca.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function TF(Ka){wt.length=wt.length-2*Ka,Ft.length=Ft.length-Ka,de.length=de.length-Ka}o(TF,"popStack");function Yf(){var Ka;return Ka=We.pop()||Kn.lex()||X1,typeof Ka!="number"&&(Ka instanceof Array&&(We=Ka,Ka=We.pop()),Ka=Pt.symbols_[Ka]||Ka),Ka}o(Yf,"lex");for(var ua,K1,En,Oi,kF,lp,rc={},qf,Co,zb,Xf;;){if(En=wt[wt.length-1],this.defaultActions[En]?Oi=this.defaultActions[En]:((ua===null||typeof ua>"u")&&(ua=Yf()),Oi=gn[En]&&gn[En][ua]),typeof Oi>"u"||!Oi.length||!Oi[0]){var cp="";Xf=[];for(qf in gn[En])this.terminals_[qf]&&qf>q1&&Xf.push("'"+this.terminals_[qf]+"'");Kn.showPosition?cp="Parse error on line "+(ja+1)+`: +`+Kn.showPosition()+` +Expecting `+Xf.join(", ")+", got '"+(this.terminals_[ua]||ua)+"'":cp="Parse error on line "+(ja+1)+": Unexpected "+(ua==X1?"end of input":"'"+(this.terminals_[ua]||ua)+"'"),this.parseError(cp,{text:Kn.match,token:this.terminals_[ua]||ua,line:Kn.yylineno,loc:Wf,expected:Xf})}if(Oi[0]instanceof Array&&Oi.length>1)throw new Error("Parse Error: multiple actions possible at state: "+En+", token: "+ua);switch(Oi[0]){case 1:wt.push(ua),Ft.push(Kn.yytext),de.push(Kn.yylloc),wt.push(Oi[1]),ua=null,K1?(ua=K1,K1=null):(W1=Kn.yyleng,xe=Kn.yytext,ja=Kn.yylineno,Wf=Kn.yylloc,Y1>0&&Y1--);break;case 2:if(Co=this.productions_[Oi[1]][1],rc.$=Ft[Ft.length-Co],rc._$={first_line:de[de.length-(Co||1)].first_line,last_line:de[de.length-1].last_line,first_column:de[de.length-(Co||1)].first_column,last_column:de[de.length-1].last_column},j1&&(rc._$.range=[de[de.length-(Co||1)].range[0],de[de.length-1].range[1]]),lp=this.performAction.apply(rc,[xe,W1,ja,ca.yy,Oi[1],Ft,de].concat(op)),typeof lp<"u")return lp;Co&&(wt=wt.slice(0,-1*Co*2),Ft=Ft.slice(0,-1*Co),de=de.slice(0,-1*Co)),wt.push(this.productions_[Oi[1]][0]),Ft.push(rc.$),de.push(rc._$),zb=gn[wt[wt.length-2]][wt[wt.length-1]],wt.push(zb);break;case 3:return!0}}return!0},"parse")},gl=function(){var ki={EOF:1,parseError:o(function(Pt,wt){if(this.yy.parser)this.yy.parser.parseError(Pt,wt);else throw new Error(Pt)},"parseError"),setInput:o(function(At,Pt){return this.yy=Pt||this.yy||{},this._input=At,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},"setInput"),input:o(function(){var At=this._input[0];this.yytext+=At,this.yyleng++,this.offset++,this.match+=At,this.matched+=At;var Pt=At.match(/(?:\r\n?|\n).*/g);return Pt?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),At},"input"),unput:o(function(At){var Pt=At.length,wt=At.split(/(?:\r\n?|\n)/g);this._input=At+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-Pt),this.offset-=Pt;var We=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),wt.length-1&&(this.yylineno-=wt.length-1);var Ft=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:wt?(wt.length===We.length?this.yylloc.first_column:0)+We[We.length-wt.length].length-wt[0].length:this.yylloc.first_column-Pt},this.options.ranges&&(this.yylloc.range=[Ft[0],Ft[0]+this.yyleng-Pt]),this.yyleng=this.yytext.length,this},"unput"),more:o(function(){return this._more=!0,this},"more"),reject:o(function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true). +`+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},"reject"),less:o(function(At){this.unput(this.match.slice(At))},"less"),pastInput:o(function(){var At=this.matched.substr(0,this.matched.length-this.match.length);return(At.length>20?"...":"")+At.substr(-20).replace(/\n/g,"")},"pastInput"),upcomingInput:o(function(){var At=this.match;return At.length<20&&(At+=this._input.substr(0,20-At.length)),(At.substr(0,20)+(At.length>20?"...":"")).replace(/\n/g,"")},"upcomingInput"),showPosition:o(function(){var At=this.pastInput(),Pt=new Array(At.length+1).join("-");return At+this.upcomingInput()+` +`+Pt+"^"},"showPosition"),test_match:o(function(At,Pt){var wt,We,Ft;if(this.options.backtrack_lexer&&(Ft={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(Ft.yylloc.range=this.yylloc.range.slice(0))),We=At[0].match(/(?:\r\n?|\n).*/g),We&&(this.yylineno+=We.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:We?We[We.length-1].length-We[We.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+At[0].length},this.yytext+=At[0],this.match+=At[0],this.matches=At,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(At[0].length),this.matched+=At[0],wt=this.performAction.call(this,this.yy,this,Pt,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),wt)return wt;if(this._backtrack){for(var de in Ft)this[de]=Ft[de];return!1}return!1},"test_match"),next:o(function(){if(this.done)return this.EOF;this._input||(this.done=!0);var At,Pt,wt,We;this._more||(this.yytext="",this.match="");for(var Ft=this._currentRules(),de=0;dePt[0].length)){if(Pt=wt,We=de,this.options.backtrack_lexer){if(At=this.test_match(wt,Ft[de]),At!==!1)return At;if(this._backtrack){Pt=!1;continue}else return!1}else if(!this.options.flex)break}return Pt?(At=this.test_match(Pt,Ft[We]),At!==!1?At:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text. +`+this.showPosition(),{text:"",token:null,line:this.yylineno})},"next"),lex:o(function(){var Pt=this.next();return Pt||this.lex()},"lex"),begin:o(function(Pt){this.conditionStack.push(Pt)},"begin"),popState:o(function(){var Pt=this.conditionStack.length-1;return Pt>0?this.conditionStack.pop():this.conditionStack[0]},"popState"),_currentRules:o(function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},"_currentRules"),topState:o(function(Pt){return Pt=this.conditionStack.length-1-Math.abs(Pt||0),Pt>=0?this.conditionStack[Pt]:"INITIAL"},"topState"),pushState:o(function(Pt){this.begin(Pt)},"pushState"),stateStackSize:o(function(){return this.conditionStack.length},"stateStackSize"),options:{},performAction:o(function(Pt,wt,We,Ft){var de=Ft;switch(We){case 0:return this.begin("acc_title"),34;break;case 1:return this.popState(),"acc_title_value";break;case 2:return this.begin("acc_descr"),36;break;case 3:return this.popState(),"acc_descr_value";break;case 4:this.begin("acc_descr_multiline");break;case 5:this.popState();break;case 6:return"acc_descr_multiline_value";case 7:return this.pushState("shapeData"),wt.yytext="",40;break;case 8:return this.pushState("shapeDataStr"),40;break;case 9:return this.popState(),40;break;case 10:let gn=/\n\s*/g;return wt.yytext=wt.yytext.replace(gn,"
    "),40;break;case 11:return 40;case 12:this.popState();break;case 13:this.begin("callbackname");break;case 14:this.popState();break;case 15:this.popState(),this.begin("callbackargs");break;case 16:return 94;case 17:this.popState();break;case 18:return 95;case 19:return"MD_STR";case 20:this.popState();break;case 21:this.begin("md_string");break;case 22:return"STR";case 23:this.popState();break;case 24:this.pushState("string");break;case 25:return 83;case 26:return 101;case 27:return 84;case 28:return 103;case 29:return 85;case 30:return 86;case 31:return 96;case 32:this.begin("click");break;case 33:this.popState();break;case 34:return 87;case 35:return Pt.lex.firstGraph()&&this.begin("dir"),12;break;case 36:return Pt.lex.firstGraph()&&this.begin("dir"),12;break;case 37:return Pt.lex.firstGraph()&&this.begin("dir"),12;break;case 38:return 27;case 39:return 32;case 40:return 97;case 41:return 97;case 42:return 97;case 43:return 97;case 44:return this.popState(),13;break;case 45:return this.popState(),14;break;case 46:return this.popState(),14;break;case 47:return this.popState(),14;break;case 48:return this.popState(),14;break;case 49:return this.popState(),14;break;case 50:return this.popState(),14;break;case 51:return this.popState(),14;break;case 52:return this.popState(),14;break;case 53:return this.popState(),14;break;case 54:return this.popState(),14;break;case 55:return 120;case 56:return 121;case 57:return 122;case 58:return 123;case 59:return 104;case 60:return 110;case 61:return 46;case 62:return 60;case 63:return 44;case 64:return 8;case 65:return 105;case 66:return 114;case 67:return this.popState(),77;break;case 68:return this.pushState("edgeText"),75;break;case 69:return 118;case 70:return this.popState(),77;break;case 71:return this.pushState("thickEdgeText"),75;break;case 72:return 118;case 73:return this.popState(),77;break;case 74:return this.pushState("dottedEdgeText"),75;break;case 75:return 118;case 76:return 77;case 77:return this.popState(),53;break;case 78:return"TEXT";case 79:return this.pushState("ellipseText"),52;break;case 80:return this.popState(),55;break;case 81:return this.pushState("text"),54;break;case 82:return this.popState(),57;break;case 83:return this.pushState("text"),56;break;case 84:return 58;case 85:return this.pushState("text"),67;break;case 86:return this.popState(),64;break;case 87:return this.pushState("text"),63;break;case 88:return this.popState(),49;break;case 89:return this.pushState("text"),48;break;case 90:return this.popState(),69;break;case 91:return this.popState(),71;break;case 92:return 116;case 93:return this.pushState("trapText"),68;break;case 94:return this.pushState("trapText"),70;break;case 95:return 117;case 96:return 67;case 97:return 89;case 98:return"SEP";case 99:return 88;case 100:return 114;case 101:return 110;case 102:return 44;case 103:return 108;case 104:return 113;case 105:return 115;case 106:return this.popState(),62;break;case 107:return this.pushState("text"),62;break;case 108:return this.popState(),51;break;case 109:return this.pushState("text"),50;break;case 110:return this.popState(),31;break;case 111:return this.pushState("text"),29;break;case 112:return this.popState(),66;break;case 113:return this.pushState("text"),65;break;case 114:return"TEXT";case 115:return"QUOTE";case 116:return 9;case 117:return 10;case 118:return 11}},"anonymous"),rules:[/^(?:accTitle\s*:\s*)/,/^(?:(?!\n||)*[^\n]*)/,/^(?:accDescr\s*:\s*)/,/^(?:(?!\n||)*[^\n]*)/,/^(?:accDescr\s*\{\s*)/,/^(?:[\}])/,/^(?:[^\}]*)/,/^(?:@\{)/,/^(?:["])/,/^(?:["])/,/^(?:[^\"]+)/,/^(?:[^}^"]+)/,/^(?:\})/,/^(?:call[\s]+)/,/^(?:\([\s]*\))/,/^(?:\()/,/^(?:[^(]*)/,/^(?:\))/,/^(?:[^)]*)/,/^(?:[^`"]+)/,/^(?:[`]["])/,/^(?:["][`])/,/^(?:[^"]+)/,/^(?:["])/,/^(?:["])/,/^(?:style\b)/,/^(?:default\b)/,/^(?:linkStyle\b)/,/^(?:interpolate\b)/,/^(?:classDef\b)/,/^(?:class\b)/,/^(?:href[\s])/,/^(?:click[\s]+)/,/^(?:[\s\n])/,/^(?:[^\s\n]*)/,/^(?:flowchart-elk\b)/,/^(?:graph\b)/,/^(?:flowchart\b)/,/^(?:subgraph\b)/,/^(?:end\b\s*)/,/^(?:_self\b)/,/^(?:_blank\b)/,/^(?:_parent\b)/,/^(?:_top\b)/,/^(?:(\r?\n)*\s*\n)/,/^(?:\s*LR\b)/,/^(?:\s*RL\b)/,/^(?:\s*TB\b)/,/^(?:\s*BT\b)/,/^(?:\s*TD\b)/,/^(?:\s*BR\b)/,/^(?:\s*<)/,/^(?:\s*>)/,/^(?:\s*\^)/,/^(?:\s*v\b)/,/^(?:.*direction\s+TB[^\n]*)/,/^(?:.*direction\s+BT[^\n]*)/,/^(?:.*direction\s+RL[^\n]*)/,/^(?:.*direction\s+LR[^\n]*)/,/^(?:[0-9]+)/,/^(?:#)/,/^(?::::)/,/^(?::)/,/^(?:&)/,/^(?:;)/,/^(?:,)/,/^(?:\*)/,/^(?:\s*[xo<]?--+[-xo>]\s*)/,/^(?:\s*[xo<]?--\s*)/,/^(?:[^-]|-(?!-)+)/,/^(?:\s*[xo<]?==+[=xo>]\s*)/,/^(?:\s*[xo<]?==\s*)/,/^(?:[^=]|=(?!))/,/^(?:\s*[xo<]?-?\.+-[xo>]?\s*)/,/^(?:\s*[xo<]?-\.\s*)/,/^(?:[^\.]|\.(?!))/,/^(?:\s*~~[\~]+\s*)/,/^(?:[-/\)][\)])/,/^(?:[^\(\)\[\]\{\}]|!\)+)/,/^(?:\(-)/,/^(?:\]\))/,/^(?:\(\[)/,/^(?:\]\])/,/^(?:\[\[)/,/^(?:\[\|)/,/^(?:>)/,/^(?:\)\])/,/^(?:\[\()/,/^(?:\)\)\))/,/^(?:\(\(\()/,/^(?:[\\(?=\])][\]])/,/^(?:\/(?=\])\])/,/^(?:\/(?!\])|\\(?!\])|[^\\\[\]\(\)\{\}\/]+)/,/^(?:\[\/)/,/^(?:\[\\)/,/^(?:<)/,/^(?:>)/,/^(?:\^)/,/^(?:\\\|)/,/^(?:v\b)/,/^(?:\*)/,/^(?:#)/,/^(?:&)/,/^(?:([A-Za-z0-9!"\#$%&'*+\.`?\\_\/]|-(?=[^\>\-\.])|(?!))+)/,/^(?:-)/,/^(?:[\u00AA\u00B5\u00BA\u00C0-\u00D6\u00D8-\u00F6]|[\u00F8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377]|[\u037A-\u037D\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5]|[\u03F7-\u0481\u048A-\u0527\u0531-\u0556\u0559\u0561-\u0587\u05D0-\u05EA]|[\u05F0-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE]|[\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA]|[\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u08A0]|[\u08A2-\u08AC\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0977]|[\u0979-\u097F\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2]|[\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u0A05-\u0A0A]|[\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39]|[\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8]|[\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0B05-\u0B0C]|[\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C]|[\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99]|[\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0]|[\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C33\u0C35-\u0C39\u0C3D]|[\u0C58\u0C59\u0C60\u0C61\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3]|[\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D05-\u0D0C\u0D0E-\u0D10]|[\u0D12-\u0D3A\u0D3D\u0D4E\u0D60\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1]|[\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81]|[\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3]|[\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6]|[\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A]|[\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081]|[\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D]|[\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0]|[\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310]|[\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F4\u1401-\u166C]|[\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u1700-\u170C\u170E-\u1711]|[\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7]|[\u17DC\u1820-\u1877\u1880-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191C]|[\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19C1-\u19C7\u1A00-\u1A16]|[\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4B\u1B83-\u1BA0\u1BAE\u1BAF]|[\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1CE9-\u1CEC]|[\u1CEE-\u1CF1\u1CF5\u1CF6\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D]|[\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D]|[\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3]|[\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F]|[\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128]|[\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2183\u2184]|[\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3]|[\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6]|[\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE]|[\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005\u3006\u3031-\u3035\u303B\u303C]|[\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D]|[\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FCC]|[\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B]|[\uA640-\uA66E\uA67F-\uA697\uA6A0-\uA6E5\uA717-\uA71F\uA722-\uA788]|[\uA78B-\uA78E\uA790-\uA793\uA7A0-\uA7AA\uA7F8-\uA801\uA803-\uA805]|[\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB]|[\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uAA00-\uAA28]|[\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA80-\uAAAF\uAAB1\uAAB5]|[\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4]|[\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E]|[\uABC0-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D]|[\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36]|[\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D]|[\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC]|[\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF]|[\uFFD2-\uFFD7\uFFDA-\uFFDC])/,/^(?:\|)/,/^(?:\|)/,/^(?:\))/,/^(?:\()/,/^(?:\])/,/^(?:\[)/,/^(?:(\}))/,/^(?:\{)/,/^(?:[^\[\]\(\)\{\}\|\"]+)/,/^(?:")/,/^(?:(\r?\n)+)/,/^(?:\s)/,/^(?:$)/],conditions:{shapeDataEndBracket:{rules:[21,24,76,79,81,83,87,89,93,94,107,109,111,113],inclusive:!1},shapeDataStr:{rules:[9,10,21,24,76,79,81,83,87,89,93,94,107,109,111,113],inclusive:!1},shapeData:{rules:[8,11,12,21,24,76,79,81,83,87,89,93,94,107,109,111,113],inclusive:!1},callbackargs:{rules:[17,18,21,24,76,79,81,83,87,89,93,94,107,109,111,113],inclusive:!1},callbackname:{rules:[14,15,16,21,24,76,79,81,83,87,89,93,94,107,109,111,113],inclusive:!1},href:{rules:[21,24,76,79,81,83,87,89,93,94,107,109,111,113],inclusive:!1},click:{rules:[21,24,33,34,76,79,81,83,87,89,93,94,107,109,111,113],inclusive:!1},dottedEdgeText:{rules:[21,24,73,75,76,79,81,83,87,89,93,94,107,109,111,113],inclusive:!1},thickEdgeText:{rules:[21,24,70,72,76,79,81,83,87,89,93,94,107,109,111,113],inclusive:!1},edgeText:{rules:[21,24,67,69,76,79,81,83,87,89,93,94,107,109,111,113],inclusive:!1},trapText:{rules:[21,24,76,79,81,83,87,89,90,91,92,93,94,107,109,111,113],inclusive:!1},ellipseText:{rules:[21,24,76,77,78,79,81,83,87,89,93,94,107,109,111,113],inclusive:!1},text:{rules:[21,24,76,79,80,81,82,83,86,87,88,89,93,94,106,107,108,109,110,111,112,113,114],inclusive:!1},vertex:{rules:[21,24,76,79,81,83,87,89,93,94,107,109,111,113],inclusive:!1},dir:{rules:[21,24,44,45,46,47,48,49,50,51,52,53,54,76,79,81,83,87,89,93,94,107,109,111,113],inclusive:!1},acc_descr_multiline:{rules:[5,6,21,24,76,79,81,83,87,89,93,94,107,109,111,113],inclusive:!1},acc_descr:{rules:[3,21,24,76,79,81,83,87,89,93,94,107,109,111,113],inclusive:!1},acc_title:{rules:[1,21,24,76,79,81,83,87,89,93,94,107,109,111,113],inclusive:!1},md_string:{rules:[19,20,21,24,76,79,81,83,87,89,93,94,107,109,111,113],inclusive:!1},string:{rules:[21,22,23,24,76,79,81,83,87,89,93,94,107,109,111,113],inclusive:!1},INITIAL:{rules:[0,2,4,7,13,21,24,25,26,27,28,29,30,31,32,35,36,37,38,39,40,41,42,43,55,56,57,58,59,60,61,62,63,64,65,66,67,68,70,71,73,74,76,79,81,83,84,85,87,89,93,94,95,96,97,98,99,100,101,102,103,104,105,107,109,111,113,115,116,117,118],inclusive:!0}}};return ki}();So.lexer=gl;function Bn(){this.yy={}}return o(Bn,"Parser"),Bn.prototype=So,So.Parser=Bn,new Bn}();LD.parser=LD;Vie=LD});var GOe,$Oe,Hie,Wie=M(()=>{"use strict";Lo();GOe=o((t,e)=>{let r=ay,n=r(t,"r"),i=r(t,"g"),a=r(t,"b");return Zs(n,i,a,e)},"fade"),$Oe=o(t=>`.label { + font-family: ${t.fontFamily}; + color: ${t.nodeTextColor||t.textColor}; + } + .cluster-label text { + fill: ${t.titleColor}; + } + .cluster-label span { + color: ${t.titleColor}; + } + .cluster-label span p { + background-color: transparent; + } + + .label text,span { + fill: ${t.nodeTextColor||t.textColor}; + color: ${t.nodeTextColor||t.textColor}; + } + + .node rect, + .node circle, + .node ellipse, + .node polygon, + .node path { + fill: ${t.mainBkg}; + stroke: ${t.nodeBorder}; + stroke-width: 1px; + } + .rough-node .label text , .node .label text, .image-shape .label, .icon-shape .label { + text-anchor: middle; + } + // .flowchart-label .text-outer-tspan { + // text-anchor: middle; + // } + // .flowchart-label .text-inner-tspan { + // text-anchor: start; + // } + + .node .katex path { + fill: #000; + stroke: #000; + stroke-width: 1px; + } + + .rough-node .label,.node .label, .image-shape .label, .icon-shape .label { + text-align: center; + } + .node.clickable { + cursor: pointer; + } + + + .root .anchor path { + fill: ${t.lineColor} !important; + stroke-width: 0; + stroke: ${t.lineColor}; + } + + .arrowheadPath { + fill: ${t.arrowheadColor}; + } + + .edgePath .path { + stroke: ${t.lineColor}; + stroke-width: 2.0px; + } + + .flowchart-link { + stroke: ${t.lineColor}; + fill: none; + } + + .edgeLabel { + background-color: ${t.edgeLabelBackground}; + p { + background-color: ${t.edgeLabelBackground}; + } + rect { + opacity: 0.5; + background-color: ${t.edgeLabelBackground}; + fill: ${t.edgeLabelBackground}; + } + text-align: center; + } + + /* For html labels only */ + .labelBkg { + background-color: ${GOe(t.edgeLabelBackground,.5)}; + // background-color: + } + + .cluster rect { + fill: ${t.clusterBkg}; + stroke: ${t.clusterBorder}; + stroke-width: 1px; + } + + .cluster text { + fill: ${t.titleColor}; + } + + .cluster span { + color: ${t.titleColor}; + } + /* .cluster div { + color: ${t.titleColor}; + } */ + + div.mermaidTooltip { + position: absolute; + text-align: center; + max-width: 200px; + padding: 2px; + font-family: ${t.fontFamily}; + font-size: 12px; + background: ${t.tertiaryColor}; + border: 1px solid ${t.border2}; + border-radius: 2px; + pointer-events: none; + z-index: 100; + } + + .flowchartTitleText { + text-anchor: middle; + font-size: 18px; + fill: ${t.textColor}; + } + + rect.text { + fill: none; + stroke-width: 0; + } + + .icon-shape, .image-shape { + background-color: ${t.edgeLabelBackground}; + p { + background-color: ${t.edgeLabelBackground}; + padding: 2px; + } + rect { + opacity: 0.5; + background-color: ${t.edgeLabelBackground}; + fill: ${t.edgeLabelBackground}; + } + text-align: center; + } +`,"getStyles"),Hie=$Oe});var kT={};vr(kT,{diagram:()=>VOe});var VOe,ET=M(()=>{"use strict";Vt();cL();$ie();Uie();Wie();VOe={parser:Vie,db:sw,renderer:Gie,styles:Hie,init:o(t=>{t.flowchart||(t.flowchart={}),t.layout&&a7({layout:t.layout}),t.flowchart.arrowMarkerAbsolute=t.arrowMarkerAbsolute,a7({flowchart:{arrowMarkerAbsolute:t.arrowMarkerAbsolute}}),sw.clear(),sw.setGen("gen-2")},"init")}});var DD,Kie,Qie=M(()=>{"use strict";DD=function(){var t=o(function(S,A,I,D){for(I=I||{},D=S.length;D--;I[S[D]]=A);return I},"o"),e=[6,8,10,20,22,24,26,27,28],r=[1,10],n=[1,11],i=[1,12],a=[1,13],s=[1,14],l=[1,15],u=[1,21],h=[1,22],f=[1,23],d=[1,24],p=[1,25],m=[6,8,10,13,15,18,19,20,22,24,26,27,28,41,42,43,44,45],g=[1,34],y=[27,28,46,47],v=[41,42,43,44,45],x=[17,34],b=[1,54],w=[1,53],_=[17,34,36,38],T={trace:o(function(){},"trace"),yy:{},symbols_:{error:2,start:3,ER_DIAGRAM:4,document:5,EOF:6,line:7,SPACE:8,statement:9,NEWLINE:10,entityName:11,relSpec:12,":":13,role:14,BLOCK_START:15,attributes:16,BLOCK_STOP:17,SQS:18,SQE:19,title:20,title_value:21,acc_title:22,acc_title_value:23,acc_descr:24,acc_descr_value:25,acc_descr_multiline_value:26,ALPHANUM:27,ENTITY_NAME:28,attribute:29,attributeType:30,attributeName:31,attributeKeyTypeList:32,attributeComment:33,ATTRIBUTE_WORD:34,attributeKeyType:35,COMMA:36,ATTRIBUTE_KEY:37,COMMENT:38,cardinality:39,relType:40,ZERO_OR_ONE:41,ZERO_OR_MORE:42,ONE_OR_MORE:43,ONLY_ONE:44,MD_PARENT:45,NON_IDENTIFYING:46,IDENTIFYING:47,WORD:48,$accept:0,$end:1},terminals_:{2:"error",4:"ER_DIAGRAM",6:"EOF",8:"SPACE",10:"NEWLINE",13:":",15:"BLOCK_START",17:"BLOCK_STOP",18:"SQS",19:"SQE",20:"title",21:"title_value",22:"acc_title",23:"acc_title_value",24:"acc_descr",25:"acc_descr_value",26:"acc_descr_multiline_value",27:"ALPHANUM",28:"ENTITY_NAME",34:"ATTRIBUTE_WORD",36:"COMMA",37:"ATTRIBUTE_KEY",38:"COMMENT",41:"ZERO_OR_ONE",42:"ZERO_OR_MORE",43:"ONE_OR_MORE",44:"ONLY_ONE",45:"MD_PARENT",46:"NON_IDENTIFYING",47:"IDENTIFYING",48:"WORD"},productions_:[0,[3,3],[5,0],[5,2],[7,2],[7,1],[7,1],[7,1],[9,5],[9,4],[9,3],[9,1],[9,7],[9,6],[9,4],[9,2],[9,2],[9,2],[9,1],[11,1],[11,1],[16,1],[16,2],[29,2],[29,3],[29,3],[29,4],[30,1],[31,1],[32,1],[32,3],[35,1],[33,1],[12,3],[39,1],[39,1],[39,1],[39,1],[39,1],[40,1],[40,1],[14,1],[14,1],[14,1]],performAction:o(function(A,I,D,k,R,C,O){var N=C.length-1;switch(R){case 1:break;case 2:this.$=[];break;case 3:C[N-1].push(C[N]),this.$=C[N-1];break;case 4:case 5:this.$=C[N];break;case 6:case 7:this.$=[];break;case 8:k.addEntity(C[N-4]),k.addEntity(C[N-2]),k.addRelationship(C[N-4],C[N],C[N-2],C[N-3]);break;case 9:k.addEntity(C[N-3]),k.addAttributes(C[N-3],C[N-1]);break;case 10:k.addEntity(C[N-2]);break;case 11:k.addEntity(C[N]);break;case 12:k.addEntity(C[N-6],C[N-4]),k.addAttributes(C[N-6],C[N-1]);break;case 13:k.addEntity(C[N-5],C[N-3]);break;case 14:k.addEntity(C[N-3],C[N-1]);break;case 15:case 16:this.$=C[N].trim(),k.setAccTitle(this.$);break;case 17:case 18:this.$=C[N].trim(),k.setAccDescription(this.$);break;case 19:case 43:this.$=C[N];break;case 20:case 41:case 42:this.$=C[N].replace(/"/g,"");break;case 21:case 29:this.$=[C[N]];break;case 22:C[N].push(C[N-1]),this.$=C[N];break;case 23:this.$={attributeType:C[N-1],attributeName:C[N]};break;case 24:this.$={attributeType:C[N-2],attributeName:C[N-1],attributeKeyTypeList:C[N]};break;case 25:this.$={attributeType:C[N-2],attributeName:C[N-1],attributeComment:C[N]};break;case 26:this.$={attributeType:C[N-3],attributeName:C[N-2],attributeKeyTypeList:C[N-1],attributeComment:C[N]};break;case 27:case 28:case 31:this.$=C[N];break;case 30:C[N-2].push(C[N]),this.$=C[N-2];break;case 32:this.$=C[N].replace(/"/g,"");break;case 33:this.$={cardA:C[N],relType:C[N-1],cardB:C[N-2]};break;case 34:this.$=k.Cardinality.ZERO_OR_ONE;break;case 35:this.$=k.Cardinality.ZERO_OR_MORE;break;case 36:this.$=k.Cardinality.ONE_OR_MORE;break;case 37:this.$=k.Cardinality.ONLY_ONE;break;case 38:this.$=k.Cardinality.MD_PARENT;break;case 39:this.$=k.Identification.NON_IDENTIFYING;break;case 40:this.$=k.Identification.IDENTIFYING;break}},"anonymous"),table:[{3:1,4:[1,2]},{1:[3]},t(e,[2,2],{5:3}),{6:[1,4],7:5,8:[1,6],9:7,10:[1,8],11:9,20:r,22:n,24:i,26:a,27:s,28:l},t(e,[2,7],{1:[2,1]}),t(e,[2,3]),{9:16,11:9,20:r,22:n,24:i,26:a,27:s,28:l},t(e,[2,5]),t(e,[2,6]),t(e,[2,11],{12:17,39:20,15:[1,18],18:[1,19],41:u,42:h,43:f,44:d,45:p}),{21:[1,26]},{23:[1,27]},{25:[1,28]},t(e,[2,18]),t(m,[2,19]),t(m,[2,20]),t(e,[2,4]),{11:29,27:s,28:l},{16:30,17:[1,31],29:32,30:33,34:g},{11:35,27:s,28:l},{40:36,46:[1,37],47:[1,38]},t(y,[2,34]),t(y,[2,35]),t(y,[2,36]),t(y,[2,37]),t(y,[2,38]),t(e,[2,15]),t(e,[2,16]),t(e,[2,17]),{13:[1,39]},{17:[1,40]},t(e,[2,10]),{16:41,17:[2,21],29:32,30:33,34:g},{31:42,34:[1,43]},{34:[2,27]},{19:[1,44]},{39:45,41:u,42:h,43:f,44:d,45:p},t(v,[2,39]),t(v,[2,40]),{14:46,27:[1,49],28:[1,48],48:[1,47]},t(e,[2,9]),{17:[2,22]},t(x,[2,23],{32:50,33:51,35:52,37:b,38:w}),t([17,34,37,38],[2,28]),t(e,[2,14],{15:[1,55]}),t([27,28],[2,33]),t(e,[2,8]),t(e,[2,41]),t(e,[2,42]),t(e,[2,43]),t(x,[2,24],{33:56,36:[1,57],38:w}),t(x,[2,25]),t(_,[2,29]),t(x,[2,32]),t(_,[2,31]),{16:58,17:[1,59],29:32,30:33,34:g},t(x,[2,26]),{35:60,37:b},{17:[1,61]},t(e,[2,13]),t(_,[2,30]),t(e,[2,12])],defaultActions:{34:[2,27],41:[2,22]},parseError:o(function(A,I){if(I.recoverable)this.trace(A);else{var D=new Error(A);throw D.hash=I,D}},"parseError"),parse:o(function(A){var I=this,D=[0],k=[],R=[null],C=[],O=this.table,N="",P=0,F=0,B=0,G=2,z=1,W=C.slice.call(arguments,1),Z=Object.create(this.lexer),j={yy:{}};for(var oe in this.yy)Object.prototype.hasOwnProperty.call(this.yy,oe)&&(j.yy[oe]=this.yy[oe]);Z.setInput(A,j.yy),j.yy.lexer=Z,j.yy.parser=this,typeof Z.yylloc>"u"&&(Z.yylloc={});var K=Z.yylloc;C.push(K);var ee=Z.options&&Z.options.ranges;typeof j.yy.parseError=="function"?this.parseError=j.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function J(Ie){D.length=D.length-2*Ie,R.length=R.length-Ie,C.length=C.length-Ie}o(J,"popStack");function H(){var Ie;return Ie=k.pop()||Z.lex()||z,typeof Ie!="number"&&(Ie instanceof Array&&(k=Ie,Ie=k.pop()),Ie=I.symbols_[Ie]||Ie),Ie}o(H,"lex");for(var q,Q,ae,ue,ce,te,Ne={},se,ke,Re,Ce;;){if(ae=D[D.length-1],this.defaultActions[ae]?ue=this.defaultActions[ae]:((q===null||typeof q>"u")&&(q=H()),ue=O[ae]&&O[ae][q]),typeof ue>"u"||!ue.length||!ue[0]){var Pe="";Ce=[];for(se in O[ae])this.terminals_[se]&&se>G&&Ce.push("'"+this.terminals_[se]+"'");Z.showPosition?Pe="Parse error on line "+(P+1)+`: +`+Z.showPosition()+` +Expecting `+Ce.join(", ")+", got '"+(this.terminals_[q]||q)+"'":Pe="Parse error on line "+(P+1)+": Unexpected "+(q==z?"end of input":"'"+(this.terminals_[q]||q)+"'"),this.parseError(Pe,{text:Z.match,token:this.terminals_[q]||q,line:Z.yylineno,loc:K,expected:Ce})}if(ue[0]instanceof Array&&ue.length>1)throw new Error("Parse Error: multiple actions possible at state: "+ae+", token: "+q);switch(ue[0]){case 1:D.push(q),R.push(Z.yytext),C.push(Z.yylloc),D.push(ue[1]),q=null,Q?(q=Q,Q=null):(F=Z.yyleng,N=Z.yytext,P=Z.yylineno,K=Z.yylloc,B>0&&B--);break;case 2:if(ke=this.productions_[ue[1]][1],Ne.$=R[R.length-ke],Ne._$={first_line:C[C.length-(ke||1)].first_line,last_line:C[C.length-1].last_line,first_column:C[C.length-(ke||1)].first_column,last_column:C[C.length-1].last_column},ee&&(Ne._$.range=[C[C.length-(ke||1)].range[0],C[C.length-1].range[1]]),te=this.performAction.apply(Ne,[N,F,P,j.yy,ue[1],R,C].concat(W)),typeof te<"u")return te;ke&&(D=D.slice(0,-1*ke*2),R=R.slice(0,-1*ke),C=C.slice(0,-1*ke)),D.push(this.productions_[ue[1]][0]),R.push(Ne.$),C.push(Ne._$),Re=O[D[D.length-2]][D[D.length-1]],D.push(Re);break;case 3:return!0}}return!0},"parse")},E=function(){var S={EOF:1,parseError:o(function(I,D){if(this.yy.parser)this.yy.parser.parseError(I,D);else throw new Error(I)},"parseError"),setInput:o(function(A,I){return this.yy=I||this.yy||{},this._input=A,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},"setInput"),input:o(function(){var A=this._input[0];this.yytext+=A,this.yyleng++,this.offset++,this.match+=A,this.matched+=A;var I=A.match(/(?:\r\n?|\n).*/g);return I?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),A},"input"),unput:o(function(A){var I=A.length,D=A.split(/(?:\r\n?|\n)/g);this._input=A+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-I),this.offset-=I;var k=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),D.length-1&&(this.yylineno-=D.length-1);var R=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:D?(D.length===k.length?this.yylloc.first_column:0)+k[k.length-D.length].length-D[0].length:this.yylloc.first_column-I},this.options.ranges&&(this.yylloc.range=[R[0],R[0]+this.yyleng-I]),this.yyleng=this.yytext.length,this},"unput"),more:o(function(){return this._more=!0,this},"more"),reject:o(function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true). +`+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},"reject"),less:o(function(A){this.unput(this.match.slice(A))},"less"),pastInput:o(function(){var A=this.matched.substr(0,this.matched.length-this.match.length);return(A.length>20?"...":"")+A.substr(-20).replace(/\n/g,"")},"pastInput"),upcomingInput:o(function(){var A=this.match;return A.length<20&&(A+=this._input.substr(0,20-A.length)),(A.substr(0,20)+(A.length>20?"...":"")).replace(/\n/g,"")},"upcomingInput"),showPosition:o(function(){var A=this.pastInput(),I=new Array(A.length+1).join("-");return A+this.upcomingInput()+` +`+I+"^"},"showPosition"),test_match:o(function(A,I){var D,k,R;if(this.options.backtrack_lexer&&(R={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(R.yylloc.range=this.yylloc.range.slice(0))),k=A[0].match(/(?:\r\n?|\n).*/g),k&&(this.yylineno+=k.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:k?k[k.length-1].length-k[k.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+A[0].length},this.yytext+=A[0],this.match+=A[0],this.matches=A,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(A[0].length),this.matched+=A[0],D=this.performAction.call(this,this.yy,this,I,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),D)return D;if(this._backtrack){for(var C in R)this[C]=R[C];return!1}return!1},"test_match"),next:o(function(){if(this.done)return this.EOF;this._input||(this.done=!0);var A,I,D,k;this._more||(this.yytext="",this.match="");for(var R=this._currentRules(),C=0;CI[0].length)){if(I=D,k=C,this.options.backtrack_lexer){if(A=this.test_match(D,R[C]),A!==!1)return A;if(this._backtrack){I=!1;continue}else return!1}else if(!this.options.flex)break}return I?(A=this.test_match(I,R[k]),A!==!1?A:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text. +`+this.showPosition(),{text:"",token:null,line:this.yylineno})},"next"),lex:o(function(){var I=this.next();return I||this.lex()},"lex"),begin:o(function(I){this.conditionStack.push(I)},"begin"),popState:o(function(){var I=this.conditionStack.length-1;return I>0?this.conditionStack.pop():this.conditionStack[0]},"popState"),_currentRules:o(function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},"_currentRules"),topState:o(function(I){return I=this.conditionStack.length-1-Math.abs(I||0),I>=0?this.conditionStack[I]:"INITIAL"},"topState"),pushState:o(function(I){this.begin(I)},"pushState"),stateStackSize:o(function(){return this.conditionStack.length},"stateStackSize"),options:{"case-insensitive":!0},performAction:o(function(I,D,k,R){var C=R;switch(k){case 0:return this.begin("acc_title"),22;break;case 1:return this.popState(),"acc_title_value";break;case 2:return this.begin("acc_descr"),24;break;case 3:return this.popState(),"acc_descr_value";break;case 4:this.begin("acc_descr_multiline");break;case 5:this.popState();break;case 6:return"acc_descr_multiline_value";case 7:return 10;case 8:break;case 9:return 8;case 10:return 28;case 11:return 48;case 12:return 4;case 13:return this.begin("block"),15;break;case 14:return 36;case 15:break;case 16:return 37;case 17:return 34;case 18:return 34;case 19:return 38;case 20:break;case 21:return this.popState(),17;break;case 22:return D.yytext[0];case 23:return 18;case 24:return 19;case 25:return 41;case 26:return 43;case 27:return 43;case 28:return 43;case 29:return 41;case 30:return 41;case 31:return 42;case 32:return 42;case 33:return 42;case 34:return 42;case 35:return 42;case 36:return 43;case 37:return 42;case 38:return 43;case 39:return 44;case 40:return 44;case 41:return 44;case 42:return 44;case 43:return 41;case 44:return 42;case 45:return 43;case 46:return 45;case 47:return 46;case 48:return 47;case 49:return 47;case 50:return 46;case 51:return 46;case 52:return 46;case 53:return 27;case 54:return D.yytext[0];case 55:return 6}},"anonymous"),rules:[/^(?:accTitle\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*\{\s*)/i,/^(?:[\}])/i,/^(?:[^\}]*)/i,/^(?:[\n]+)/i,/^(?:\s+)/i,/^(?:[\s]+)/i,/^(?:"[^"%\r\n\v\b\\]+")/i,/^(?:"[^"]*")/i,/^(?:erDiagram\b)/i,/^(?:\{)/i,/^(?:,)/i,/^(?:\s+)/i,/^(?:\b((?:PK)|(?:FK)|(?:UK))\b)/i,/^(?:(.*?)[~](.*?)*[~])/i,/^(?:[\*A-Za-z_][A-Za-z0-9\-_\[\]\(\)]*)/i,/^(?:"[^"]*")/i,/^(?:[\n]+)/i,/^(?:\})/i,/^(?:.)/i,/^(?:\[)/i,/^(?:\])/i,/^(?:one or zero\b)/i,/^(?:one or more\b)/i,/^(?:one or many\b)/i,/^(?:1\+)/i,/^(?:\|o\b)/i,/^(?:zero or one\b)/i,/^(?:zero or more\b)/i,/^(?:zero or many\b)/i,/^(?:0\+)/i,/^(?:\}o\b)/i,/^(?:many\(0\))/i,/^(?:many\(1\))/i,/^(?:many\b)/i,/^(?:\}\|)/i,/^(?:one\b)/i,/^(?:only one\b)/i,/^(?:1\b)/i,/^(?:\|\|)/i,/^(?:o\|)/i,/^(?:o\{)/i,/^(?:\|\{)/i,/^(?:\s*u\b)/i,/^(?:\.\.)/i,/^(?:--)/i,/^(?:to\b)/i,/^(?:optionally to\b)/i,/^(?:\.-)/i,/^(?:-\.)/i,/^(?:[A-Za-z_][A-Za-z0-9\-_]*)/i,/^(?:.)/i,/^(?:$)/i],conditions:{acc_descr_multiline:{rules:[5,6],inclusive:!1},acc_descr:{rules:[3],inclusive:!1},acc_title:{rules:[1],inclusive:!1},block:{rules:[14,15,16,17,18,19,20,21,22],inclusive:!1},INITIAL:{rules:[0,2,4,7,8,9,10,11,12,13,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55],inclusive:!0}}};return S}();T.lexer=E;function L(){this.yy={}}return o(L,"Parser"),L.prototype=T,T.Parser=L,new L}();DD.parser=DD;Kie=DD});var Kd,ND,jOe,KOe,Zie,QOe,ZOe,JOe,ePe,tPe,Jie,eae=M(()=>{"use strict";ut();Vt();Ai();Kd=new Map,ND=[],jOe={ZERO_OR_ONE:"ZERO_OR_ONE",ZERO_OR_MORE:"ZERO_OR_MORE",ONE_OR_MORE:"ONE_OR_MORE",ONLY_ONE:"ONLY_ONE",MD_PARENT:"MD_PARENT"},KOe={NON_IDENTIFYING:"NON_IDENTIFYING",IDENTIFYING:"IDENTIFYING"},Zie=o(function(t,e=void 0){return Kd.has(t)?!Kd.get(t).alias&&e&&(Kd.get(t).alias=e,Y.info(`Add alias '${e}' to entity '${t}'`)):(Kd.set(t,{attributes:[],alias:e}),Y.info("Added new entity :",t)),Kd.get(t)},"addEntity"),QOe=o(()=>Kd,"getEntities"),ZOe=o(function(t,e){let r=Zie(t),n;for(n=e.length-1;n>=0;n--)r.attributes.push(e[n]),Y.debug("Added attribute ",e[n].attributeName)},"addAttributes"),JOe=o(function(t,e,r,n){let i={entityA:t,roleA:e,entityB:r,relSpec:n};ND.push(i),Y.debug("Added new relationship :",i)},"addRelationship"),ePe=o(()=>ND,"getRelationships"),tPe=o(function(){Kd=new Map,ND=[],Lr()},"clear"),Jie={Cardinality:jOe,Identification:KOe,getConfig:o(()=>pe().er,"getConfig"),addEntity:Zie,addAttributes:ZOe,getEntities:QOe,addRelationship:JOe,getRelationships:ePe,clear:tPe,setAccTitle:Mr,getAccTitle:Br,setAccDescription:Fr,getAccDescription:zr,setDiagramTitle:cn,getDiagramTitle:Jr}});var Fl,rPe,Qo,tae=M(()=>{"use strict";Fl={ONLY_ONE_START:"ONLY_ONE_START",ONLY_ONE_END:"ONLY_ONE_END",ZERO_OR_ONE_START:"ZERO_OR_ONE_START",ZERO_OR_ONE_END:"ZERO_OR_ONE_END",ONE_OR_MORE_START:"ONE_OR_MORE_START",ONE_OR_MORE_END:"ONE_OR_MORE_END",ZERO_OR_MORE_START:"ZERO_OR_MORE_START",ZERO_OR_MORE_END:"ZERO_OR_MORE_END",MD_PARENT_END:"MD_PARENT_END",MD_PARENT_START:"MD_PARENT_START"},rPe=o(function(t,e){let r;t.append("defs").append("marker").attr("id",Fl.MD_PARENT_START).attr("refX",0).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z"),t.append("defs").append("marker").attr("id",Fl.MD_PARENT_END).attr("refX",19).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z"),t.append("defs").append("marker").attr("id",Fl.ONLY_ONE_START).attr("refX",0).attr("refY",9).attr("markerWidth",18).attr("markerHeight",18).attr("orient","auto").append("path").attr("stroke",e.stroke).attr("fill","none").attr("d","M9,0 L9,18 M15,0 L15,18"),t.append("defs").append("marker").attr("id",Fl.ONLY_ONE_END).attr("refX",18).attr("refY",9).attr("markerWidth",18).attr("markerHeight",18).attr("orient","auto").append("path").attr("stroke",e.stroke).attr("fill","none").attr("d","M3,0 L3,18 M9,0 L9,18"),r=t.append("defs").append("marker").attr("id",Fl.ZERO_OR_ONE_START).attr("refX",0).attr("refY",9).attr("markerWidth",30).attr("markerHeight",18).attr("orient","auto"),r.append("circle").attr("stroke",e.stroke).attr("fill","white").attr("cx",21).attr("cy",9).attr("r",6),r.append("path").attr("stroke",e.stroke).attr("fill","none").attr("d","M9,0 L9,18"),r=t.append("defs").append("marker").attr("id",Fl.ZERO_OR_ONE_END).attr("refX",30).attr("refY",9).attr("markerWidth",30).attr("markerHeight",18).attr("orient","auto"),r.append("circle").attr("stroke",e.stroke).attr("fill","white").attr("cx",9).attr("cy",9).attr("r",6),r.append("path").attr("stroke",e.stroke).attr("fill","none").attr("d","M21,0 L21,18"),t.append("defs").append("marker").attr("id",Fl.ONE_OR_MORE_START).attr("refX",18).attr("refY",18).attr("markerWidth",45).attr("markerHeight",36).attr("orient","auto").append("path").attr("stroke",e.stroke).attr("fill","none").attr("d","M0,18 Q 18,0 36,18 Q 18,36 0,18 M42,9 L42,27"),t.append("defs").append("marker").attr("id",Fl.ONE_OR_MORE_END).attr("refX",27).attr("refY",18).attr("markerWidth",45).attr("markerHeight",36).attr("orient","auto").append("path").attr("stroke",e.stroke).attr("fill","none").attr("d","M3,9 L3,27 M9,18 Q27,0 45,18 Q27,36 9,18"),r=t.append("defs").append("marker").attr("id",Fl.ZERO_OR_MORE_START).attr("refX",18).attr("refY",18).attr("markerWidth",57).attr("markerHeight",36).attr("orient","auto"),r.append("circle").attr("stroke",e.stroke).attr("fill","white").attr("cx",48).attr("cy",18).attr("r",6),r.append("path").attr("stroke",e.stroke).attr("fill","none").attr("d","M0,18 Q18,0 36,18 Q18,36 0,18"),r=t.append("defs").append("marker").attr("id",Fl.ZERO_OR_MORE_END).attr("refX",39).attr("refY",18).attr("markerWidth",57).attr("markerHeight",36).attr("orient","auto"),r.append("circle").attr("stroke",e.stroke).attr("fill","white").attr("cx",9).attr("cy",18).attr("r",6),r.append("path").attr("stroke",e.stroke).attr("fill","none").attr("d","M21,18 Q39,0 57,18 Q39,36 21,18")},"insertMarkers"),Qo={ERMarkers:Fl,insertMarkers:rPe}});var rae,nae=M(()=>{"use strict";rae=/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i});function nPe(t){return typeof t=="string"&&rae.test(t)}var iae,aae=M(()=>{"use strict";nae();o(nPe,"validate");iae=nPe});function sae(t,e=0){return wa[t[e+0]]+wa[t[e+1]]+wa[t[e+2]]+wa[t[e+3]]+"-"+wa[t[e+4]]+wa[t[e+5]]+"-"+wa[t[e+6]]+wa[t[e+7]]+"-"+wa[t[e+8]]+wa[t[e+9]]+"-"+wa[t[e+10]]+wa[t[e+11]]+wa[t[e+12]]+wa[t[e+13]]+wa[t[e+14]]+wa[t[e+15]]}var wa,oae=M(()=>{"use strict";wa=[];for(let t=0;t<256;++t)wa.push((t+256).toString(16).slice(1));o(sae,"unsafeStringify")});function iPe(t){if(!iae(t))throw TypeError("Invalid UUID");let e,r=new Uint8Array(16);return r[0]=(e=parseInt(t.slice(0,8),16))>>>24,r[1]=e>>>16&255,r[2]=e>>>8&255,r[3]=e&255,r[4]=(e=parseInt(t.slice(9,13),16))>>>8,r[5]=e&255,r[6]=(e=parseInt(t.slice(14,18),16))>>>8,r[7]=e&255,r[8]=(e=parseInt(t.slice(19,23),16))>>>8,r[9]=e&255,r[10]=(e=parseInt(t.slice(24,36),16))/1099511627776&255,r[11]=e/4294967296&255,r[12]=e>>>24&255,r[13]=e>>>16&255,r[14]=e>>>8&255,r[15]=e&255,r}var lae,cae=M(()=>{"use strict";aae();o(iPe,"parse");lae=iPe});function aPe(t){t=unescape(encodeURIComponent(t));let e=[];for(let r=0;r{"use strict";oae();cae();o(aPe,"stringToBytes");sPe="6ba7b810-9dad-11d1-80b4-00c04fd430c8",oPe="6ba7b811-9dad-11d1-80b4-00c04fd430c8";o(RD,"v35")});function lPe(t,e,r,n){switch(t){case 0:return e&r^~e&n;case 1:return e^r^n;case 2:return e&r^e&n^r&n;case 3:return e^r^n}}function MD(t,e){return t<>>32-e}function cPe(t){let e=[1518500249,1859775393,2400959708,3395469782],r=[1732584193,4023233417,2562383102,271733878,3285377520];if(typeof t=="string"){let s=unescape(encodeURIComponent(t));t=[];for(let l=0;l>>0;p=d,d=f,f=MD(h,30)>>>0,h=u,u=y}r[0]=r[0]+u>>>0,r[1]=r[1]+h>>>0,r[2]=r[2]+f>>>0,r[3]=r[3]+d>>>0,r[4]=r[4]+p>>>0}return[r[0]>>24&255,r[0]>>16&255,r[0]>>8&255,r[0]&255,r[1]>>24&255,r[1]>>16&255,r[1]>>8&255,r[1]&255,r[2]>>24&255,r[2]>>16&255,r[2]>>8&255,r[2]&255,r[3]>>24&255,r[3]>>16&255,r[3]>>8&255,r[3]&255,r[4]>>24&255,r[4]>>16&255,r[4]>>8&255,r[4]&255]}var hae,fae=M(()=>{"use strict";o(lPe,"f");o(MD,"ROTL");o(cPe,"sha1");hae=cPe});var uPe,ID,dae=M(()=>{"use strict";uae();fae();uPe=RD("v5",80,hae),ID=uPe});var pae=M(()=>{"use strict";dae()});function bPe(t="",e=""){let r=t.replace(hPe,"");return`${gae(e)}${gae(r)}${ID(t,xPe)}`}function gae(t=""){return t.length>0?`${t}-`:""}var hPe,$i,e2,fPe,dPe,pPe,mPe,yae,gPe,mae,yPe,vPe,xPe,vae,xae=M(()=>{"use strict";Gs();pr();Qv();Vt();ut();hr();tae();ai();fr();pae();hPe=/[^\dA-Za-z](\W)*/g,$i={},e2=new Map,fPe=o(function(t){let e=Object.keys(t);for(let r of e)$i[r]=t[r]},"setConf"),dPe=o((t,e,r)=>{let n=$i.entityPadding/3,i=$i.entityPadding/3,a=$i.fontSize*.85,s=e.node().getBBox(),l=[],u=!1,h=!1,f=0,d=0,p=0,m=0,g=s.height+n*2,y=1;r.forEach(w=>{w.attributeKeyTypeList!==void 0&&w.attributeKeyTypeList.length>0&&(u=!0),w.attributeComment!==void 0&&(h=!0)}),r.forEach(w=>{let _=`${e.node().id}-attr-${y}`,T=0,E=yu(w.attributeType),L=t.append("text").classed("er entityLabel",!0).attr("id",`${_}-type`).attr("x",0).attr("y",0).style("dominant-baseline","middle").style("text-anchor","left").style("font-family",pe().fontFamily).style("font-size",a+"px").text(E),S=t.append("text").classed("er entityLabel",!0).attr("id",`${_}-name`).attr("x",0).attr("y",0).style("dominant-baseline","middle").style("text-anchor","left").style("font-family",pe().fontFamily).style("font-size",a+"px").text(w.attributeName),A={};A.tn=L,A.nn=S;let I=L.node().getBBox(),D=S.node().getBBox();if(f=Math.max(f,I.width),d=Math.max(d,D.width),T=Math.max(I.height,D.height),u){let k=w.attributeKeyTypeList!==void 0?w.attributeKeyTypeList.join(","):"",R=t.append("text").classed("er entityLabel",!0).attr("id",`${_}-key`).attr("x",0).attr("y",0).style("dominant-baseline","middle").style("text-anchor","left").style("font-family",pe().fontFamily).style("font-size",a+"px").text(k);A.kn=R;let C=R.node().getBBox();p=Math.max(p,C.width),T=Math.max(T,C.height)}if(h){let k=t.append("text").classed("er entityLabel",!0).attr("id",`${_}-comment`).attr("x",0).attr("y",0).style("dominant-baseline","middle").style("text-anchor","left").style("font-family",pe().fontFamily).style("font-size",a+"px").text(w.attributeComment||"");A.cn=k;let R=k.node().getBBox();m=Math.max(m,R.width),T=Math.max(T,R.height)}A.height=T,l.push(A),g+=T+n*2,y+=1});let v=4;u&&(v+=2),h&&(v+=2);let x=f+d+p+m,b={width:Math.max($i.minEntityWidth,Math.max(s.width+$i.entityPadding*2,x+i*v)),height:r.length>0?g:Math.max($i.minEntityHeight,s.height+$i.entityPadding*2)};if(r.length>0){let w=Math.max(0,(b.width-x-i*v)/(v/2));e.attr("transform","translate("+b.width/2+","+(n+s.height/2)+")");let _=s.height+n*2,T="attributeBoxOdd";l.forEach(E=>{let L=_+n+E.height/2;E.tn.attr("transform","translate("+i+","+L+")");let S=t.insert("rect","#"+E.tn.node().id).classed(`er ${T}`,!0).attr("x",0).attr("y",_).attr("width",f+i*2+w).attr("height",E.height+n*2),A=parseFloat(S.attr("x"))+parseFloat(S.attr("width"));E.nn.attr("transform","translate("+(A+i)+","+L+")");let I=t.insert("rect","#"+E.nn.node().id).classed(`er ${T}`,!0).attr("x",A).attr("y",_).attr("width",d+i*2+w).attr("height",E.height+n*2),D=parseFloat(I.attr("x"))+parseFloat(I.attr("width"));if(u){E.kn.attr("transform","translate("+(D+i)+","+L+")");let k=t.insert("rect","#"+E.kn.node().id).classed(`er ${T}`,!0).attr("x",D).attr("y",_).attr("width",p+i*2+w).attr("height",E.height+n*2);D=parseFloat(k.attr("x"))+parseFloat(k.attr("width"))}h&&(E.cn.attr("transform","translate("+(D+i)+","+L+")"),t.insert("rect","#"+E.cn.node().id).classed(`er ${T}`,"true").attr("x",D).attr("y",_).attr("width",m+i*2+w).attr("height",E.height+n*2)),_+=E.height+n*2,T=T==="attributeBoxOdd"?"attributeBoxEven":"attributeBoxOdd"})}else b.height=Math.max($i.minEntityHeight,g),e.attr("transform","translate("+b.width/2+","+b.height/2+")");return b},"drawAttributes"),pPe=o(function(t,e,r){let n=[...e.keys()],i;return n.forEach(function(a){let s=bPe(a,"entity");e2.set(a,s);let l=t.append("g").attr("id",s);i=i===void 0?s:i;let u="text-"+s,h=l.append("text").classed("er entityLabel",!0).attr("id",u).attr("x",0).attr("y",0).style("dominant-baseline","middle").style("text-anchor","middle").style("font-family",pe().fontFamily).style("font-size",$i.fontSize+"px").text(e.get(a).alias??a),{width:f,height:d}=dPe(l,h,e.get(a).attributes),m=l.insert("rect","#"+u).classed("er entityBox",!0).attr("x",0).attr("y",0).attr("width",f).attr("height",d).node().getBBox();r.setNode(s,{width:m.width,height:m.height,shape:"rect",id:s})}),i},"drawEntities"),mPe=o(function(t,e){e.nodes().forEach(function(r){r!==void 0&&e.node(r)!==void 0&&t.select("#"+r).attr("transform","translate("+(e.node(r).x-e.node(r).width/2)+","+(e.node(r).y-e.node(r).height/2)+" )")})},"adjustEntities"),yae=o(function(t){return(t.entityA+t.roleA+t.entityB).replace(/\s/g,"")},"getEdgeName"),gPe=o(function(t,e){return t.forEach(function(r){e.setEdge(e2.get(r.entityA),e2.get(r.entityB),{relationship:r},yae(r))}),t},"addRelationships"),mae=0,yPe=o(function(t,e,r,n,i){mae++;let a=r.edge(e2.get(e.entityA),e2.get(e.entityB),yae(e)),s=ns().x(function(y){return y.x}).y(function(y){return y.y}).curve(Po),l=t.insert("path","#"+n).classed("er relationshipLine",!0).attr("d",s(a.points)).style("stroke",$i.stroke).style("fill","none");e.relSpec.relType===i.db.Identification.NON_IDENTIFYING&&l.attr("stroke-dasharray","8,8");let u="";switch($i.arrowMarkerAbsolute&&(u=window.location.protocol+"//"+window.location.host+window.location.pathname+window.location.search,u=u.replace(/\(/g,"\\("),u=u.replace(/\)/g,"\\)")),e.relSpec.cardA){case i.db.Cardinality.ZERO_OR_ONE:l.attr("marker-end","url("+u+"#"+Qo.ERMarkers.ZERO_OR_ONE_END+")");break;case i.db.Cardinality.ZERO_OR_MORE:l.attr("marker-end","url("+u+"#"+Qo.ERMarkers.ZERO_OR_MORE_END+")");break;case i.db.Cardinality.ONE_OR_MORE:l.attr("marker-end","url("+u+"#"+Qo.ERMarkers.ONE_OR_MORE_END+")");break;case i.db.Cardinality.ONLY_ONE:l.attr("marker-end","url("+u+"#"+Qo.ERMarkers.ONLY_ONE_END+")");break;case i.db.Cardinality.MD_PARENT:l.attr("marker-end","url("+u+"#"+Qo.ERMarkers.MD_PARENT_END+")");break}switch(e.relSpec.cardB){case i.db.Cardinality.ZERO_OR_ONE:l.attr("marker-start","url("+u+"#"+Qo.ERMarkers.ZERO_OR_ONE_START+")");break;case i.db.Cardinality.ZERO_OR_MORE:l.attr("marker-start","url("+u+"#"+Qo.ERMarkers.ZERO_OR_MORE_START+")");break;case i.db.Cardinality.ONE_OR_MORE:l.attr("marker-start","url("+u+"#"+Qo.ERMarkers.ONE_OR_MORE_START+")");break;case i.db.Cardinality.ONLY_ONE:l.attr("marker-start","url("+u+"#"+Qo.ERMarkers.ONLY_ONE_START+")");break;case i.db.Cardinality.MD_PARENT:l.attr("marker-start","url("+u+"#"+Qo.ERMarkers.MD_PARENT_START+")");break}let h=l.node().getTotalLength(),f=l.node().getPointAtLength(h*.5),d="rel"+mae,p=e.roleA.split(/
    /g),m=t.append("text").classed("er relationshipLabel",!0).attr("id",d).attr("x",f.x).attr("y",f.y).style("text-anchor","middle").style("dominant-baseline","middle").style("font-family",pe().fontFamily).style("font-size",$i.fontSize+"px");if(p.length==1)m.text(e.roleA);else{let y=-(p.length-1)*.5;p.forEach((v,x)=>{m.append("tspan").attr("x",f.x).attr("dy",`${x===0?y:1}em`).text(v)})}let g=m.node().getBBox();t.insert("rect","#"+d).classed("er relationshipLabelBox",!0).attr("x",f.x-g.width/2).attr("y",f.y-g.height/2).attr("width",g.width).attr("height",g.height)},"drawRelationshipFromLayout"),vPe=o(function(t,e,r,n){$i=pe().er,Y.info("Drawing ER diagram");let i=pe().securityLevel,a;i==="sandbox"&&(a=Ve("#i"+e));let l=(i==="sandbox"?Ve(a.nodes()[0].contentDocument.body):Ve("body")).select(`[id='${e}']`);Qo.insertMarkers(l,$i);let u;u=new Ir({multigraph:!0,directed:!0,compound:!1}).setGraph({rankdir:$i.layoutDirection,marginx:20,marginy:20,nodesep:100,edgesep:100,ranksep:100}).setDefaultEdgeLabel(function(){return{}});let h=pPe(l,n.db.getEntities(),u),f=gPe(n.db.getRelationships(),u);Gu(u),mPe(l,u),f.forEach(function(y){yPe(l,y,u,h,n)});let d=$i.diagramPadding;Ut.insertTitle(l,"entityTitleText",$i.titleTopMargin,n.db.getDiagramTitle());let p=l.node().getBBox(),m=p.width+d*2,g=p.height+d*2;Zr(l,g,m,$i.useMaxWidth),l.attr("viewBox",`${p.x-d} ${p.y-d} ${m} ${g}`)},"draw"),xPe="28e9f9db-3c8d-5aa5-9faf-44286ae5937c";o(bPe,"generateId");o(gae,"strWithHyphen");vae={setConf:fPe,draw:vPe}});var wPe,bae,wae=M(()=>{"use strict";wPe=o(t=>` + .entityBox { + fill: ${t.mainBkg}; + stroke: ${t.nodeBorder}; + } + + .attributeBoxOdd { + fill: ${t.attributeBackgroundColorOdd}; + stroke: ${t.nodeBorder}; + } + + .attributeBoxEven { + fill: ${t.attributeBackgroundColorEven}; + stroke: ${t.nodeBorder}; + } + + .relationshipLabelBox { + fill: ${t.tertiaryColor}; + opacity: 0.7; + background-color: ${t.tertiaryColor}; + rect { + opacity: 0.5; + } + } + + .relationshipLine { + stroke: ${t.lineColor}; + } + + .entityTitleText { + text-anchor: middle; + font-size: 18px; + fill: ${t.textColor}; + } + #MD_PARENT_START { + fill: #f5f5f5 !important; + stroke: ${t.lineColor} !important; + stroke-width: 1; + } + #MD_PARENT_END { + fill: #f5f5f5 !important; + stroke: ${t.lineColor} !important; + stroke-width: 1; + } + +`,"getStyles"),bae=wPe});var Tae={};vr(Tae,{diagram:()=>TPe});var TPe,kae=M(()=>{"use strict";Qie();eae();xae();wae();TPe={parser:Kie,db:Jie,renderer:vae,styles:bae}});function ri(t){return typeof t=="object"&&t!==null&&typeof t.$type=="string"}function Ta(t){return typeof t=="object"&&t!==null&&typeof t.$refText=="string"}function OD(t){return typeof t=="object"&&t!==null&&typeof t.name=="string"&&typeof t.type=="string"&&typeof t.path=="string"}function Zd(t){return typeof t=="object"&&t!==null&&ri(t.container)&&Ta(t.reference)&&typeof t.message=="string"}function ho(t){return typeof t=="object"&&t!==null&&Array.isArray(t.content)}function cf(t){return typeof t=="object"&&t!==null&&typeof t.tokenType=="object"}function t2(t){return ho(t)&&typeof t.fullText=="string"}var Qd,Zo=M(()=>{"use strict";o(ri,"isAstNode");o(Ta,"isReference");o(OD,"isAstNodeDescription");o(Zd,"isLinkingError");Qd=class{static{o(this,"AbstractAstReflection")}constructor(){this.subtypes={},this.allSubtypes={}}isInstance(e,r){return ri(e)&&this.isSubtype(e.$type,r)}isSubtype(e,r){if(e===r)return!0;let n=this.subtypes[e];n||(n=this.subtypes[e]={});let i=n[r];if(i!==void 0)return i;{let a=this.computeIsSubtype(e,r);return n[r]=a,a}}getAllSubTypes(e){let r=this.allSubtypes[e];if(r)return r;{let n=this.getAllTypes(),i=[];for(let a of n)this.isSubtype(a,e)&&i.push(a);return this.allSubtypes[e]=i,i}}};o(ho,"isCompositeCstNode");o(cf,"isLeafCstNode");o(t2,"isRootCstNode")});function CPe(t){return typeof t=="string"?t:typeof t>"u"?"undefined":typeof t.toString=="function"?t.toString():Object.prototype.toString.call(t)}function ST(t){return!!t&&typeof t[Symbol.iterator]=="function"}function tn(...t){if(t.length===1){let e=t[0];if(e instanceof fo)return e;if(ST(e))return new fo(()=>e[Symbol.iterator](),r=>r.next());if(typeof e.length=="number")return new fo(()=>({index:0}),r=>r.index1?new fo(()=>({collIndex:0,arrIndex:0}),e=>{do{if(e.iterator){let r=e.iterator.next();if(!r.done)return r;e.iterator=void 0}if(e.array){if(e.arrIndex{"use strict";fo=class t{static{o(this,"StreamImpl")}constructor(e,r){this.startFn=e,this.nextFn=r}iterator(){let e={state:this.startFn(),next:o(()=>this.nextFn(e.state),"next"),[Symbol.iterator]:()=>e};return e}[Symbol.iterator](){return this.iterator()}isEmpty(){return!!this.iterator().next().done}count(){let e=this.iterator(),r=0,n=e.next();for(;!n.done;)r++,n=e.next();return r}toArray(){let e=[],r=this.iterator(),n;do n=r.next(),n.value!==void 0&&e.push(n.value);while(!n.done);return e}toSet(){return new Set(this)}toMap(e,r){let n=this.map(i=>[e?e(i):i,r?r(i):i]);return new Map(n)}toString(){return this.join()}concat(e){let r=e[Symbol.iterator]();return new t(()=>({first:this.startFn(),firstDone:!1}),n=>{let i;if(!n.firstDone){do if(i=this.nextFn(n.first),!i.done)return i;while(!i.done);n.firstDone=!0}do if(i=r.next(),!i.done)return i;while(!i.done);return ss})}join(e=","){let r=this.iterator(),n="",i,a=!1;do i=r.next(),i.done||(a&&(n+=e),n+=CPe(i.value)),a=!0;while(!i.done);return n}indexOf(e,r=0){let n=this.iterator(),i=0,a=n.next();for(;!a.done;){if(i>=r&&a.value===e)return i;a=n.next(),i++}return-1}every(e){let r=this.iterator(),n=r.next();for(;!n.done;){if(!e(n.value))return!1;n=r.next()}return!0}some(e){let r=this.iterator(),n=r.next();for(;!n.done;){if(e(n.value))return!0;n=r.next()}return!1}forEach(e){let r=this.iterator(),n=0,i=r.next();for(;!i.done;)e(i.value,n),i=r.next(),n++}map(e){return new t(this.startFn,r=>{let{done:n,value:i}=this.nextFn(r);return n?ss:{done:!1,value:e(i)}})}filter(e){return new t(this.startFn,r=>{let n;do if(n=this.nextFn(r),!n.done&&e(n.value))return n;while(!n.done);return ss})}nonNullable(){return this.filter(e=>e!=null)}reduce(e,r){let n=this.iterator(),i=r,a=n.next();for(;!a.done;)i===void 0?i=a.value:i=e(i,a.value),a=n.next();return i}reduceRight(e,r){return this.recursiveReduce(this.iterator(),e,r)}recursiveReduce(e,r,n){let i=e.next();if(i.done)return n;let a=this.recursiveReduce(e,r,n);return a===void 0?i.value:r(a,i.value)}find(e){let r=this.iterator(),n=r.next();for(;!n.done;){if(e(n.value))return n.value;n=r.next()}}findIndex(e){let r=this.iterator(),n=0,i=r.next();for(;!i.done;){if(e(i.value))return n;i=r.next(),n++}return-1}includes(e){let r=this.iterator(),n=r.next();for(;!n.done;){if(n.value===e)return!0;n=r.next()}return!1}flatMap(e){return new t(()=>({this:this.startFn()}),r=>{do{if(r.iterator){let a=r.iterator.next();if(a.done)r.iterator=void 0;else return a}let{done:n,value:i}=this.nextFn(r.this);if(!n){let a=e(i);if(ST(a))r.iterator=a[Symbol.iterator]();else return{done:!1,value:a}}}while(r.iterator);return ss})}flat(e){if(e===void 0&&(e=1),e<=0)return this;let r=e>1?this.flat(e-1):this;return new t(()=>({this:r.startFn()}),n=>{do{if(n.iterator){let s=n.iterator.next();if(s.done)n.iterator=void 0;else return s}let{done:i,value:a}=r.nextFn(n.this);if(!i)if(ST(a))n.iterator=a[Symbol.iterator]();else return{done:!1,value:a}}while(n.iterator);return ss})}head(){let r=this.iterator().next();if(!r.done)return r.value}tail(e=1){return new t(()=>{let r=this.startFn();for(let n=0;n({size:0,state:this.startFn()}),r=>(r.size++,r.size>e?ss:this.nextFn(r.state)))}distinct(e){let r=new Set;return this.filter(n=>{let i=e?e(n):n;return r.has(i)?!1:(r.add(i),!0)})}exclude(e,r){let n=new Set;for(let i of e){let a=r?r(i):i;n.add(a)}return this.filter(i=>{let a=r?r(i):i;return!n.has(a)})}};o(CPe,"toString");o(ST,"isIterable");r2=new fo(()=>{},()=>ss),ss=Object.freeze({done:!0,value:void 0});o(tn,"stream");Pc=class extends fo{static{o(this,"TreeStreamImpl")}constructor(e,r,n){super(()=>({iterators:n?.includeRoot?[[e][Symbol.iterator]()]:[r(e)[Symbol.iterator]()],pruned:!1}),i=>{for(i.pruned&&(i.iterators.pop(),i.pruned=!1);i.iterators.length>0;){let s=i.iterators[i.iterators.length-1].next();if(s.done)i.iterators.pop();else return i.iterators.push(r(s.value)[Symbol.iterator]()),s}return ss})}iterator(){let e={state:this.startFn(),next:o(()=>this.nextFn(e.state),"next"),prune:o(()=>{e.state.pruned=!0},"prune"),[Symbol.iterator]:()=>e};return e}};(function(t){function e(a){return a.reduce((s,l)=>s+l,0)}o(e,"sum"),t.sum=e;function r(a){return a.reduce((s,l)=>s*l,0)}o(r,"product"),t.product=r;function n(a){return a.reduce((s,l)=>Math.min(s,l))}o(n,"min"),t.min=n;function i(a){return a.reduce((s,l)=>Math.max(s,l))}o(i,"max"),t.max=i})(Jm||(Jm={}))});var AT={};vr(AT,{DefaultNameRegexp:()=>CT,RangeComparison:()=>$u,compareRange:()=>Aae,findCommentNode:()=>zD,findDeclarationNodeAtOffset:()=>_Pe,findLeafNodeAtOffset:()=>GD,findLeafNodeBeforeOffset:()=>_ae,flattenCst:()=>APe,getInteriorNodes:()=>NPe,getNextNode:()=>LPe,getPreviousNode:()=>Dae,getStartlineNode:()=>DPe,inRange:()=>FD,isChildNode:()=>BD,isCommentNode:()=>PD,streamCst:()=>Jd,toDocumentSegment:()=>e0,tokenToRange:()=>eg});function Jd(t){return new Pc(t,e=>ho(e)?e.content:[],{includeRoot:!0})}function APe(t){return Jd(t).filter(cf)}function BD(t,e){for(;t.container;)if(t=t.container,t===e)return!0;return!1}function eg(t){return{start:{character:t.startColumn-1,line:t.startLine-1},end:{character:t.endColumn,line:t.endLine-1}}}function e0(t){if(!t)return;let{offset:e,end:r,range:n}=t;return{range:n,offset:e,end:r,length:r-e}}function Aae(t,e){if(t.end.linee.end.line||t.start.line===e.end.line&&t.start.character>e.end.character)return $u.After;let r=t.start.line>e.start.line||t.start.line===e.start.line&&t.start.character>=e.start.character,n=t.end.line$u.After}function _Pe(t,e,r=CT){if(t){if(e>0){let n=e-t.offset,i=t.text.charAt(n);r.test(i)||e--}return GD(t,e)}}function zD(t,e){if(t){let r=Dae(t,!0);if(r&&PD(r,e))return r;if(t2(t)){let n=t.content.findIndex(i=>!i.hidden);for(let i=n-1;i>=0;i--){let a=t.content[i];if(PD(a,e))return a}}}}function PD(t,e){return cf(t)&&e.includes(t.tokenType.name)}function GD(t,e){if(cf(t))return t;if(ho(t)){let r=Lae(t,e,!1);if(r)return GD(r,e)}}function _ae(t,e){if(cf(t))return t;if(ho(t)){let r=Lae(t,e,!0);if(r)return _ae(r,e)}}function Lae(t,e,r){let n=0,i=t.content.length-1,a;for(;n<=i;){let s=Math.floor((n+i)/2),l=t.content[s];if(l.offset<=e&&l.end>e)return l;l.end<=e?(a=r?l:void 0,n=s+1):i=s-1}return a}function Dae(t,e=!0){for(;t.container;){let r=t.container,n=r.content.indexOf(t);for(;n>0;){n--;let i=r.content[n];if(e||!i.hidden)return i}t=r}}function LPe(t,e=!0){for(;t.container;){let r=t.container,n=r.content.indexOf(t),i=r.content.length-1;for(;n{"use strict";Zo();$s();o(Jd,"streamCst");o(APe,"flattenCst");o(BD,"isChildNode");o(eg,"tokenToRange");o(e0,"toDocumentSegment");(function(t){t[t.Before=0]="Before",t[t.After=1]="After",t[t.OverlapFront=2]="OverlapFront",t[t.OverlapBack=3]="OverlapBack",t[t.Inside=4]="Inside"})($u||($u={}));o(Aae,"compareRange");o(FD,"inRange");CT=/^[\w\p{L}]$/u;o(_Pe,"findDeclarationNodeAtOffset");o(zD,"findCommentNode");o(PD,"isCommentNode");o(GD,"findLeafNodeAtOffset");o(_ae,"findLeafNodeBeforeOffset");o(Lae,"binarySearch");o(Dae,"getPreviousNode");o(LPe,"getNextNode");o(DPe,"getStartlineNode");o(NPe,"getInteriorNodes");o(RPe,"getCommonParent");o(Cae,"getParentChain")});function uf(t){throw new Error("Error! The input value was not handled.")}var t0,_T=M(()=>{"use strict";t0=class extends Error{static{o(this,"ErrorWithLocation")}constructor(e,r){super(e?`${r} at ${e.range.start.line}:${e.range.start.character}`:r)}};o(uf,"assertUnreachable")});var o2={};vr(o2,{AbstractElement:()=>VD,AbstractRule:()=>n2,AbstractType:()=>i2,Action:()=>gN,Alternatives:()=>yN,ArrayLiteral:()=>UD,ArrayType:()=>HD,Assignment:()=>vN,BooleanLiteral:()=>YD,CharacterRange:()=>xN,Condition:()=>LT,Conjunction:()=>XD,CrossReference:()=>wN,Disjunction:()=>KD,EndOfFile:()=>TN,Grammar:()=>ZD,GrammarImport:()=>Rae,Group:()=>EN,InferredType:()=>JD,Interface:()=>eN,Keyword:()=>SN,LangiumGrammarAstReflection:()=>tg,LangiumGrammarTerminals:()=>MPe,NamedArgument:()=>Mae,NegatedToken:()=>CN,Negation:()=>tN,NumberLiteral:()=>nN,Parameter:()=>iN,ParameterReference:()=>aN,ParserRule:()=>oN,ReferenceType:()=>lN,RegexToken:()=>_N,ReturnType:()=>Iae,RuleCall:()=>DN,SimpleType:()=>hN,StringLiteral:()=>fN,TerminalAlternatives:()=>NN,TerminalGroup:()=>MN,TerminalRule:()=>NT,TerminalRuleCall:()=>ON,Type:()=>dN,TypeAttribute:()=>Oae,TypeDefinition:()=>$D,UnionType:()=>pN,UnorderedGroup:()=>PN,UntilToken:()=>BN,ValueLiteral:()=>DT,Wildcard:()=>zN,isAbstractElement:()=>a2,isAbstractRule:()=>IPe,isAbstractType:()=>OPe,isAction:()=>Vu,isAlternatives:()=>OT,isArrayLiteral:()=>GPe,isArrayType:()=>WD,isAssignment:()=>Gl,isBooleanLiteral:()=>qD,isCharacterRange:()=>bN,isCondition:()=>PPe,isConjunction:()=>jD,isCrossReference:()=>r0,isDisjunction:()=>QD,isEndOfFile:()=>kN,isFeatureName:()=>BPe,isGrammar:()=>$Pe,isGrammarImport:()=>VPe,isGroup:()=>hf,isInferredType:()=>RT,isInterface:()=>MT,isKeyword:()=>el,isNamedArgument:()=>UPe,isNegatedToken:()=>AN,isNegation:()=>rN,isNumberLiteral:()=>HPe,isParameter:()=>WPe,isParameterReference:()=>sN,isParserRule:()=>Ga,isPrimitiveType:()=>Nae,isReferenceType:()=>cN,isRegexToken:()=>LN,isReturnType:()=>uN,isRuleCall:()=>$l,isSimpleType:()=>IT,isStringLiteral:()=>YPe,isTerminalAlternatives:()=>RN,isTerminalGroup:()=>IN,isTerminalRule:()=>Jo,isTerminalRuleCall:()=>PT,isType:()=>s2,isTypeAttribute:()=>qPe,isTypeDefinition:()=>FPe,isUnionType:()=>mN,isUnorderedGroup:()=>BT,isUntilToken:()=>FN,isValueLiteral:()=>zPe,isWildcard:()=>GN,reflection:()=>lr});function IPe(t){return lr.isInstance(t,n2)}function OPe(t){return lr.isInstance(t,i2)}function PPe(t){return lr.isInstance(t,LT)}function BPe(t){return Nae(t)||t==="current"||t==="entry"||t==="extends"||t==="false"||t==="fragment"||t==="grammar"||t==="hidden"||t==="import"||t==="interface"||t==="returns"||t==="terminal"||t==="true"||t==="type"||t==="infer"||t==="infers"||t==="with"||typeof t=="string"&&/\^?[_a-zA-Z][\w_]*/.test(t)}function Nae(t){return t==="string"||t==="number"||t==="boolean"||t==="Date"||t==="bigint"}function FPe(t){return lr.isInstance(t,$D)}function zPe(t){return lr.isInstance(t,DT)}function a2(t){return lr.isInstance(t,VD)}function GPe(t){return lr.isInstance(t,UD)}function WD(t){return lr.isInstance(t,HD)}function qD(t){return lr.isInstance(t,YD)}function jD(t){return lr.isInstance(t,XD)}function QD(t){return lr.isInstance(t,KD)}function $Pe(t){return lr.isInstance(t,ZD)}function VPe(t){return lr.isInstance(t,Rae)}function RT(t){return lr.isInstance(t,JD)}function MT(t){return lr.isInstance(t,eN)}function UPe(t){return lr.isInstance(t,Mae)}function rN(t){return lr.isInstance(t,tN)}function HPe(t){return lr.isInstance(t,nN)}function WPe(t){return lr.isInstance(t,iN)}function sN(t){return lr.isInstance(t,aN)}function Ga(t){return lr.isInstance(t,oN)}function cN(t){return lr.isInstance(t,lN)}function uN(t){return lr.isInstance(t,Iae)}function IT(t){return lr.isInstance(t,hN)}function YPe(t){return lr.isInstance(t,fN)}function Jo(t){return lr.isInstance(t,NT)}function s2(t){return lr.isInstance(t,dN)}function qPe(t){return lr.isInstance(t,Oae)}function mN(t){return lr.isInstance(t,pN)}function Vu(t){return lr.isInstance(t,gN)}function OT(t){return lr.isInstance(t,yN)}function Gl(t){return lr.isInstance(t,vN)}function bN(t){return lr.isInstance(t,xN)}function r0(t){return lr.isInstance(t,wN)}function kN(t){return lr.isInstance(t,TN)}function hf(t){return lr.isInstance(t,EN)}function el(t){return lr.isInstance(t,SN)}function AN(t){return lr.isInstance(t,CN)}function LN(t){return lr.isInstance(t,_N)}function $l(t){return lr.isInstance(t,DN)}function RN(t){return lr.isInstance(t,NN)}function IN(t){return lr.isInstance(t,MN)}function PT(t){return lr.isInstance(t,ON)}function BT(t){return lr.isInstance(t,PN)}function FN(t){return lr.isInstance(t,BN)}function GN(t){return lr.isInstance(t,zN)}var MPe,n2,i2,LT,$D,DT,VD,UD,HD,YD,XD,KD,ZD,Rae,JD,eN,Mae,tN,nN,iN,aN,oN,lN,Iae,hN,fN,NT,dN,Oae,pN,gN,yN,vN,xN,wN,TN,EN,SN,CN,_N,DN,NN,MN,ON,PN,BN,zN,tg,lr,Bc=M(()=>{"use strict";Zo();MPe={ID:/\^?[_a-zA-Z][\w_]*/,STRING:/"(\\.|[^"\\])*"|'(\\.|[^'\\])*'/,NUMBER:/NaN|-?((\d*\.\d+|\d+)([Ee][+-]?\d+)?|Infinity)/,RegexLiteral:/\/(?![*+?])(?:[^\r\n\[/\\]|\\.|\[(?:[^\r\n\]\\]|\\.)*\])+\/[a-z]*/,WS:/\s+/,ML_COMMENT:/\/\*[\s\S]*?\*\//,SL_COMMENT:/\/\/[^\n\r]*/},n2="AbstractRule";o(IPe,"isAbstractRule");i2="AbstractType";o(OPe,"isAbstractType");LT="Condition";o(PPe,"isCondition");o(BPe,"isFeatureName");o(Nae,"isPrimitiveType");$D="TypeDefinition";o(FPe,"isTypeDefinition");DT="ValueLiteral";o(zPe,"isValueLiteral");VD="AbstractElement";o(a2,"isAbstractElement");UD="ArrayLiteral";o(GPe,"isArrayLiteral");HD="ArrayType";o(WD,"isArrayType");YD="BooleanLiteral";o(qD,"isBooleanLiteral");XD="Conjunction";o(jD,"isConjunction");KD="Disjunction";o(QD,"isDisjunction");ZD="Grammar";o($Pe,"isGrammar");Rae="GrammarImport";o(VPe,"isGrammarImport");JD="InferredType";o(RT,"isInferredType");eN="Interface";o(MT,"isInterface");Mae="NamedArgument";o(UPe,"isNamedArgument");tN="Negation";o(rN,"isNegation");nN="NumberLiteral";o(HPe,"isNumberLiteral");iN="Parameter";o(WPe,"isParameter");aN="ParameterReference";o(sN,"isParameterReference");oN="ParserRule";o(Ga,"isParserRule");lN="ReferenceType";o(cN,"isReferenceType");Iae="ReturnType";o(uN,"isReturnType");hN="SimpleType";o(IT,"isSimpleType");fN="StringLiteral";o(YPe,"isStringLiteral");NT="TerminalRule";o(Jo,"isTerminalRule");dN="Type";o(s2,"isType");Oae="TypeAttribute";o(qPe,"isTypeAttribute");pN="UnionType";o(mN,"isUnionType");gN="Action";o(Vu,"isAction");yN="Alternatives";o(OT,"isAlternatives");vN="Assignment";o(Gl,"isAssignment");xN="CharacterRange";o(bN,"isCharacterRange");wN="CrossReference";o(r0,"isCrossReference");TN="EndOfFile";o(kN,"isEndOfFile");EN="Group";o(hf,"isGroup");SN="Keyword";o(el,"isKeyword");CN="NegatedToken";o(AN,"isNegatedToken");_N="RegexToken";o(LN,"isRegexToken");DN="RuleCall";o($l,"isRuleCall");NN="TerminalAlternatives";o(RN,"isTerminalAlternatives");MN="TerminalGroup";o(IN,"isTerminalGroup");ON="TerminalRuleCall";o(PT,"isTerminalRuleCall");PN="UnorderedGroup";o(BT,"isUnorderedGroup");BN="UntilToken";o(FN,"isUntilToken");zN="Wildcard";o(GN,"isWildcard");tg=class extends Qd{static{o(this,"LangiumGrammarAstReflection")}getAllTypes(){return["AbstractElement","AbstractRule","AbstractType","Action","Alternatives","ArrayLiteral","ArrayType","Assignment","BooleanLiteral","CharacterRange","Condition","Conjunction","CrossReference","Disjunction","EndOfFile","Grammar","GrammarImport","Group","InferredType","Interface","Keyword","NamedArgument","NegatedToken","Negation","NumberLiteral","Parameter","ParameterReference","ParserRule","ReferenceType","RegexToken","ReturnType","RuleCall","SimpleType","StringLiteral","TerminalAlternatives","TerminalGroup","TerminalRule","TerminalRuleCall","Type","TypeAttribute","TypeDefinition","UnionType","UnorderedGroup","UntilToken","ValueLiteral","Wildcard"]}computeIsSubtype(e,r){switch(e){case gN:case yN:case vN:case xN:case wN:case TN:case EN:case SN:case CN:case _N:case DN:case NN:case MN:case ON:case PN:case BN:case zN:return this.isSubtype(VD,r);case UD:case nN:case fN:return this.isSubtype(DT,r);case HD:case lN:case hN:case pN:return this.isSubtype($D,r);case YD:return this.isSubtype(LT,r)||this.isSubtype(DT,r);case XD:case KD:case tN:case aN:return this.isSubtype(LT,r);case JD:case eN:case dN:return this.isSubtype(i2,r);case oN:return this.isSubtype(n2,r)||this.isSubtype(i2,r);case NT:return this.isSubtype(n2,r);default:return!1}}getReferenceType(e){let r=`${e.container.$type}:${e.property}`;switch(r){case"Action:type":case"CrossReference:type":case"Interface:superTypes":case"ParserRule:returnType":case"SimpleType:typeRef":return i2;case"Grammar:hiddenTokens":case"ParserRule:hiddenTokens":case"RuleCall:rule":return n2;case"Grammar:usedGrammars":return ZD;case"NamedArgument:parameter":case"ParameterReference:parameter":return iN;case"TerminalRuleCall:rule":return NT;default:throw new Error(`${r} is not a valid reference id.`)}}getTypeMetaData(e){switch(e){case"AbstractElement":return{name:"AbstractElement",properties:[{name:"cardinality"},{name:"lookahead"}]};case"ArrayLiteral":return{name:"ArrayLiteral",properties:[{name:"elements",defaultValue:[]}]};case"ArrayType":return{name:"ArrayType",properties:[{name:"elementType"}]};case"BooleanLiteral":return{name:"BooleanLiteral",properties:[{name:"true",defaultValue:!1}]};case"Conjunction":return{name:"Conjunction",properties:[{name:"left"},{name:"right"}]};case"Disjunction":return{name:"Disjunction",properties:[{name:"left"},{name:"right"}]};case"Grammar":return{name:"Grammar",properties:[{name:"definesHiddenTokens",defaultValue:!1},{name:"hiddenTokens",defaultValue:[]},{name:"imports",defaultValue:[]},{name:"interfaces",defaultValue:[]},{name:"isDeclared",defaultValue:!1},{name:"name"},{name:"rules",defaultValue:[]},{name:"types",defaultValue:[]},{name:"usedGrammars",defaultValue:[]}]};case"GrammarImport":return{name:"GrammarImport",properties:[{name:"path"}]};case"InferredType":return{name:"InferredType",properties:[{name:"name"}]};case"Interface":return{name:"Interface",properties:[{name:"attributes",defaultValue:[]},{name:"name"},{name:"superTypes",defaultValue:[]}]};case"NamedArgument":return{name:"NamedArgument",properties:[{name:"calledByName",defaultValue:!1},{name:"parameter"},{name:"value"}]};case"Negation":return{name:"Negation",properties:[{name:"value"}]};case"NumberLiteral":return{name:"NumberLiteral",properties:[{name:"value"}]};case"Parameter":return{name:"Parameter",properties:[{name:"name"}]};case"ParameterReference":return{name:"ParameterReference",properties:[{name:"parameter"}]};case"ParserRule":return{name:"ParserRule",properties:[{name:"dataType"},{name:"definesHiddenTokens",defaultValue:!1},{name:"definition"},{name:"entry",defaultValue:!1},{name:"fragment",defaultValue:!1},{name:"hiddenTokens",defaultValue:[]},{name:"inferredType"},{name:"name"},{name:"parameters",defaultValue:[]},{name:"returnType"},{name:"wildcard",defaultValue:!1}]};case"ReferenceType":return{name:"ReferenceType",properties:[{name:"referenceType"}]};case"ReturnType":return{name:"ReturnType",properties:[{name:"name"}]};case"SimpleType":return{name:"SimpleType",properties:[{name:"primitiveType"},{name:"stringType"},{name:"typeRef"}]};case"StringLiteral":return{name:"StringLiteral",properties:[{name:"value"}]};case"TerminalRule":return{name:"TerminalRule",properties:[{name:"definition"},{name:"fragment",defaultValue:!1},{name:"hidden",defaultValue:!1},{name:"name"},{name:"type"}]};case"Type":return{name:"Type",properties:[{name:"name"},{name:"type"}]};case"TypeAttribute":return{name:"TypeAttribute",properties:[{name:"defaultValue"},{name:"isOptional",defaultValue:!1},{name:"name"},{name:"type"}]};case"UnionType":return{name:"UnionType",properties:[{name:"types",defaultValue:[]}]};case"Action":return{name:"Action",properties:[{name:"cardinality"},{name:"feature"},{name:"inferredType"},{name:"lookahead"},{name:"operator"},{name:"type"}]};case"Alternatives":return{name:"Alternatives",properties:[{name:"cardinality"},{name:"elements",defaultValue:[]},{name:"lookahead"}]};case"Assignment":return{name:"Assignment",properties:[{name:"cardinality"},{name:"feature"},{name:"lookahead"},{name:"operator"},{name:"terminal"}]};case"CharacterRange":return{name:"CharacterRange",properties:[{name:"cardinality"},{name:"left"},{name:"lookahead"},{name:"right"}]};case"CrossReference":return{name:"CrossReference",properties:[{name:"cardinality"},{name:"deprecatedSyntax",defaultValue:!1},{name:"lookahead"},{name:"terminal"},{name:"type"}]};case"EndOfFile":return{name:"EndOfFile",properties:[{name:"cardinality"},{name:"lookahead"}]};case"Group":return{name:"Group",properties:[{name:"cardinality"},{name:"elements",defaultValue:[]},{name:"guardCondition"},{name:"lookahead"}]};case"Keyword":return{name:"Keyword",properties:[{name:"cardinality"},{name:"lookahead"},{name:"value"}]};case"NegatedToken":return{name:"NegatedToken",properties:[{name:"cardinality"},{name:"lookahead"},{name:"terminal"}]};case"RegexToken":return{name:"RegexToken",properties:[{name:"cardinality"},{name:"lookahead"},{name:"regex"}]};case"RuleCall":return{name:"RuleCall",properties:[{name:"arguments",defaultValue:[]},{name:"cardinality"},{name:"lookahead"},{name:"rule"}]};case"TerminalAlternatives":return{name:"TerminalAlternatives",properties:[{name:"cardinality"},{name:"elements",defaultValue:[]},{name:"lookahead"}]};case"TerminalGroup":return{name:"TerminalGroup",properties:[{name:"cardinality"},{name:"elements",defaultValue:[]},{name:"lookahead"}]};case"TerminalRuleCall":return{name:"TerminalRuleCall",properties:[{name:"cardinality"},{name:"lookahead"},{name:"rule"}]};case"UnorderedGroup":return{name:"UnorderedGroup",properties:[{name:"cardinality"},{name:"elements",defaultValue:[]},{name:"lookahead"}]};case"UntilToken":return{name:"UntilToken",properties:[{name:"cardinality"},{name:"lookahead"},{name:"terminal"}]};case"Wildcard":return{name:"Wildcard",properties:[{name:"cardinality"},{name:"lookahead"}]};default:return{name:e,properties:[]}}}},lr=new tg});var zT={};vr(zT,{assignMandatoryProperties:()=>UN,copyAstNode:()=>VN,findLocalReferences:()=>jPe,findRootNode:()=>Pae,getContainerOfType:()=>n0,getDocument:()=>Vi,hasContainerOfType:()=>XPe,linkContentToContainer:()=>FT,streamAllContents:()=>Fc,streamAst:()=>tl,streamContents:()=>l2,streamReferences:()=>rg});function FT(t){for(let[e,r]of Object.entries(t))e.startsWith("$")||(Array.isArray(r)?r.forEach((n,i)=>{ri(n)&&(n.$container=t,n.$containerProperty=e,n.$containerIndex=i)}):ri(r)&&(r.$container=t,r.$containerProperty=e))}function n0(t,e){let r=t;for(;r;){if(e(r))return r;r=r.$container}}function XPe(t,e){let r=t;for(;r;){if(e(r))return!0;r=r.$container}return!1}function Vi(t){let r=Pae(t).$document;if(!r)throw new Error("AST node has no document.");return r}function Pae(t){for(;t.$container;)t=t.$container;return t}function l2(t,e){if(!t)throw new Error("Node must be an AstNode.");let r=e?.range;return new fo(()=>({keys:Object.keys(t),keyIndex:0,arrayIndex:0}),n=>{for(;n.keyIndexl2(r,e))}function tl(t,e){if(t){if(e?.range&&!$N(t,e.range))return new Pc(t,()=>[])}else throw new Error("Root node must be an AstNode.");return new Pc(t,r=>l2(r,e),{includeRoot:!0})}function $N(t,e){var r;if(!e)return!0;let n=(r=t.$cstNode)===null||r===void 0?void 0:r.range;return n?FD(n,e):!1}function rg(t){return new fo(()=>({keys:Object.keys(t),keyIndex:0,arrayIndex:0}),e=>{for(;e.keyIndex{rg(n).forEach(i=>{i.reference.ref===t&&r.push(i.reference)})}),tn(r)}function UN(t,e){let r=t.getTypeMetaData(e.$type),n=e;for(let i of r.properties)i.defaultValue!==void 0&&n[i.name]===void 0&&(n[i.name]=Bae(i.defaultValue))}function Bae(t){return Array.isArray(t)?[...t.map(Bae)]:t}function VN(t,e){let r={$type:t.$type};for(let[n,i]of Object.entries(t))if(!n.startsWith("$"))if(ri(i))r[n]=VN(i,e);else if(Ta(i))r[n]=e(r,n,i.$refNode,i.$refText);else if(Array.isArray(i)){let a=[];for(let s of i)ri(s)?a.push(VN(s,e)):Ta(s)?a.push(e(r,n,s.$refNode,s.$refText)):a.push(s);r[n]=a}else r[n]=i;return FT(r),r}var os=M(()=>{"use strict";Zo();$s();zl();o(FT,"linkContentToContainer");o(n0,"getContainerOfType");o(XPe,"hasContainerOfType");o(Vi,"getDocument");o(Pae,"findRootNode");o(l2,"streamContents");o(Fc,"streamAllContents");o(tl,"streamAst");o($N,"isAstNodeInRange");o(rg,"streamReferences");o(jPe,"findLocalReferences");o(UN,"assignMandatoryProperties");o(Bae,"copyDefaultValue");o(VN,"copyAstNode")});function ar(t){return t.charCodeAt(0)}function GT(t,e){Array.isArray(t)?t.forEach(function(r){e.push(r)}):e.push(t)}function ng(t,e){if(t[e]===!0)throw"duplicate flag "+e;let r=t[e];t[e]=!0}function i0(t){if(t===void 0)throw Error("Internal Error - Should never get here!");return!0}function c2(){throw Error("Internal Error - Should never get here!")}function HN(t){return t.type==="Character"}var WN=M(()=>{"use strict";o(ar,"cc");o(GT,"insertToSet");o(ng,"addFlag");o(i0,"ASSERT_EXISTS");o(c2,"ASSERT_NEVER_REACH_HERE");o(HN,"isCharacter")});var u2,h2,YN,Fae=M(()=>{"use strict";WN();u2=[];for(let t=ar("0");t<=ar("9");t++)u2.push(t);h2=[ar("_")].concat(u2);for(let t=ar("a");t<=ar("z");t++)h2.push(t);for(let t=ar("A");t<=ar("Z");t++)h2.push(t);YN=[ar(" "),ar("\f"),ar(` +`),ar("\r"),ar(" "),ar("\v"),ar(" "),ar("\xA0"),ar("\u1680"),ar("\u2000"),ar("\u2001"),ar("\u2002"),ar("\u2003"),ar("\u2004"),ar("\u2005"),ar("\u2006"),ar("\u2007"),ar("\u2008"),ar("\u2009"),ar("\u200A"),ar("\u2028"),ar("\u2029"),ar("\u202F"),ar("\u205F"),ar("\u3000"),ar("\uFEFF")]});var KPe,$T,QPe,a0,zae=M(()=>{"use strict";WN();Fae();KPe=/[0-9a-fA-F]/,$T=/[0-9]/,QPe=/[1-9]/,a0=class{static{o(this,"RegExpParser")}constructor(){this.idx=0,this.input="",this.groupIdx=0}saveState(){return{idx:this.idx,input:this.input,groupIdx:this.groupIdx}}restoreState(e){this.idx=e.idx,this.input=e.input,this.groupIdx=e.groupIdx}pattern(e){this.idx=0,this.input=e,this.groupIdx=0,this.consumeChar("/");let r=this.disjunction();this.consumeChar("/");let n={type:"Flags",loc:{begin:this.idx,end:e.length},global:!1,ignoreCase:!1,multiLine:!1,unicode:!1,sticky:!1};for(;this.isRegExpFlag();)switch(this.popChar()){case"g":ng(n,"global");break;case"i":ng(n,"ignoreCase");break;case"m":ng(n,"multiLine");break;case"u":ng(n,"unicode");break;case"y":ng(n,"sticky");break}if(this.idx!==this.input.length)throw Error("Redundant input: "+this.input.substring(this.idx));return{type:"Pattern",flags:n,value:r,loc:this.loc(0)}}disjunction(){let e=[],r=this.idx;for(e.push(this.alternative());this.peekChar()==="|";)this.consumeChar("|"),e.push(this.alternative());return{type:"Disjunction",value:e,loc:this.loc(r)}}alternative(){let e=[],r=this.idx;for(;this.isTerm();)e.push(this.term());return{type:"Alternative",value:e,loc:this.loc(r)}}term(){return this.isAssertion()?this.assertion():this.atom()}assertion(){let e=this.idx;switch(this.popChar()){case"^":return{type:"StartAnchor",loc:this.loc(e)};case"$":return{type:"EndAnchor",loc:this.loc(e)};case"\\":switch(this.popChar()){case"b":return{type:"WordBoundary",loc:this.loc(e)};case"B":return{type:"NonWordBoundary",loc:this.loc(e)}}throw Error("Invalid Assertion Escape");case"(":this.consumeChar("?");let r;switch(this.popChar()){case"=":r="Lookahead";break;case"!":r="NegativeLookahead";break}i0(r);let n=this.disjunction();return this.consumeChar(")"),{type:r,value:n,loc:this.loc(e)}}return c2()}quantifier(e=!1){let r,n=this.idx;switch(this.popChar()){case"*":r={atLeast:0,atMost:1/0};break;case"+":r={atLeast:1,atMost:1/0};break;case"?":r={atLeast:0,atMost:1};break;case"{":let i=this.integerIncludingZero();switch(this.popChar()){case"}":r={atLeast:i,atMost:i};break;case",":let a;this.isDigit()?(a=this.integerIncludingZero(),r={atLeast:i,atMost:a}):r={atLeast:i,atMost:1/0},this.consumeChar("}");break}if(e===!0&&r===void 0)return;i0(r);break}if(!(e===!0&&r===void 0)&&i0(r))return this.peekChar(0)==="?"?(this.consumeChar("?"),r.greedy=!1):r.greedy=!0,r.type="Quantifier",r.loc=this.loc(n),r}atom(){let e,r=this.idx;switch(this.peekChar()){case".":e=this.dotAll();break;case"\\":e=this.atomEscape();break;case"[":e=this.characterClass();break;case"(":e=this.group();break}return e===void 0&&this.isPatternCharacter()&&(e=this.patternCharacter()),i0(e)?(e.loc=this.loc(r),this.isQuantifier()&&(e.quantifier=this.quantifier()),e):c2()}dotAll(){return this.consumeChar("."),{type:"Set",complement:!0,value:[ar(` +`),ar("\r"),ar("\u2028"),ar("\u2029")]}}atomEscape(){switch(this.consumeChar("\\"),this.peekChar()){case"1":case"2":case"3":case"4":case"5":case"6":case"7":case"8":case"9":return this.decimalEscapeAtom();case"d":case"D":case"s":case"S":case"w":case"W":return this.characterClassEscape();case"f":case"n":case"r":case"t":case"v":return this.controlEscapeAtom();case"c":return this.controlLetterEscapeAtom();case"0":return this.nulCharacterAtom();case"x":return this.hexEscapeSequenceAtom();case"u":return this.regExpUnicodeEscapeSequenceAtom();default:return this.identityEscapeAtom()}}decimalEscapeAtom(){return{type:"GroupBackReference",value:this.positiveInteger()}}characterClassEscape(){let e,r=!1;switch(this.popChar()){case"d":e=u2;break;case"D":e=u2,r=!0;break;case"s":e=YN;break;case"S":e=YN,r=!0;break;case"w":e=h2;break;case"W":e=h2,r=!0;break}return i0(e)?{type:"Set",value:e,complement:r}:c2()}controlEscapeAtom(){let e;switch(this.popChar()){case"f":e=ar("\f");break;case"n":e=ar(` +`);break;case"r":e=ar("\r");break;case"t":e=ar(" ");break;case"v":e=ar("\v");break}return i0(e)?{type:"Character",value:e}:c2()}controlLetterEscapeAtom(){this.consumeChar("c");let e=this.popChar();if(/[a-zA-Z]/.test(e)===!1)throw Error("Invalid ");return{type:"Character",value:e.toUpperCase().charCodeAt(0)-64}}nulCharacterAtom(){return this.consumeChar("0"),{type:"Character",value:ar("\0")}}hexEscapeSequenceAtom(){return this.consumeChar("x"),this.parseHexDigits(2)}regExpUnicodeEscapeSequenceAtom(){return this.consumeChar("u"),this.parseHexDigits(4)}identityEscapeAtom(){let e=this.popChar();return{type:"Character",value:ar(e)}}classPatternCharacterAtom(){switch(this.peekChar()){case` +`:case"\r":case"\u2028":case"\u2029":case"\\":case"]":throw Error("TBD");default:let e=this.popChar();return{type:"Character",value:ar(e)}}}characterClass(){let e=[],r=!1;for(this.consumeChar("["),this.peekChar(0)==="^"&&(this.consumeChar("^"),r=!0);this.isClassAtom();){let n=this.classAtom(),i=n.type==="Character";if(HN(n)&&this.isRangeDash()){this.consumeChar("-");let a=this.classAtom(),s=a.type==="Character";if(HN(a)){if(a.value=this.input.length)throw Error("Unexpected end of input");this.idx++}loc(e){return{begin:e,end:this.idx}}}});var zc,Gae=M(()=>{"use strict";zc=class{static{o(this,"BaseRegExpVisitor")}visitChildren(e){for(let r in e){let n=e[r];e.hasOwnProperty(r)&&(n.type!==void 0?this.visit(n):Array.isArray(n)&&n.forEach(i=>{this.visit(i)},this))}}visit(e){switch(e.type){case"Pattern":this.visitPattern(e);break;case"Flags":this.visitFlags(e);break;case"Disjunction":this.visitDisjunction(e);break;case"Alternative":this.visitAlternative(e);break;case"StartAnchor":this.visitStartAnchor(e);break;case"EndAnchor":this.visitEndAnchor(e);break;case"WordBoundary":this.visitWordBoundary(e);break;case"NonWordBoundary":this.visitNonWordBoundary(e);break;case"Lookahead":this.visitLookahead(e);break;case"NegativeLookahead":this.visitNegativeLookahead(e);break;case"Character":this.visitCharacter(e);break;case"Set":this.visitSet(e);break;case"Group":this.visitGroup(e);break;case"GroupBackReference":this.visitGroupBackReference(e);break;case"Quantifier":this.visitQuantifier(e);break}this.visitChildren(e)}visitPattern(e){}visitFlags(e){}visitDisjunction(e){}visitAlternative(e){}visitStartAnchor(e){}visitEndAnchor(e){}visitWordBoundary(e){}visitNonWordBoundary(e){}visitLookahead(e){}visitNegativeLookahead(e){}visitCharacter(e){}visitSet(e){}visitGroup(e){}visitGroupBackReference(e){}visitQuantifier(e){}}});var f2=M(()=>{"use strict";zae();Gae()});var UT={};vr(UT,{NEWLINE_REGEXP:()=>XN,escapeRegExp:()=>o0,getCaseInsensitivePattern:()=>KN,getTerminalParts:()=>ZPe,isMultilineComment:()=>jN,isWhitespace:()=>VT,partialMatches:()=>QN,partialRegExp:()=>Vae});function ZPe(t){try{typeof t!="string"&&(t=t.source),t=`/${t}/`;let e=$ae.pattern(t),r=[];for(let n of e.value.value)s0.reset(t),s0.visit(n),r.push({start:s0.startRegexp,end:s0.endRegex});return r}catch{return[]}}function jN(t){try{return typeof t=="string"&&(t=new RegExp(t)),t=t.toString(),s0.reset(t),s0.visit($ae.pattern(t)),s0.multiline}catch{return!1}}function VT(t){return(typeof t=="string"?new RegExp(t):t).test(" ")}function o0(t){return t.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function KN(t){return Array.prototype.map.call(t,e=>/\w/.test(e)?`[${e.toLowerCase()}${e.toUpperCase()}]`:o0(e)).join("")}function QN(t,e){let r=Vae(t),n=e.match(r);return!!n&&n[0].length>0}function Vae(t){typeof t=="string"&&(t=new RegExp(t));let e=t,r=t.source,n=0;function i(){let a="",s;function l(h){a+=r.substr(n,h),n+=h}o(l,"appendRaw");function u(h){a+="(?:"+r.substr(n,h)+"|$)",n+=h}for(o(u,"appendOptional");n",n)-n+1);break;default:u(2);break}break;case"[":s=/\[(?:\\.|.)*?\]/g,s.lastIndex=n,s=s.exec(r)||[],u(s[0].length);break;case"|":case"^":case"$":case"*":case"+":case"?":l(1);break;case"{":s=/\{\d+,?\d*\}/g,s.lastIndex=n,s=s.exec(r),s?l(s[0].length):u(1);break;case"(":if(r[n+1]==="?")switch(r[n+2]){case":":a+="(?:",n+=3,a+=i()+"|$)";break;case"=":a+="(?=",n+=3,a+=i()+")";break;case"!":s=n,n+=3,i(),a+=r.substr(s,n-s);break;case"<":switch(r[n+3]){case"=":case"!":s=n,n+=4,i(),a+=r.substr(s,n-s);break;default:l(r.indexOf(">",n)-n+1),a+=i()+"|$)";break}break}else l(1),a+=i()+"|$)";break;case")":return++n,a;default:u(1);break}return a}return o(i,"process"),new RegExp(i(),t.flags)}var XN,$ae,qN,s0,ig=M(()=>{"use strict";f2();XN=/\r?\n/gm,$ae=new a0,qN=class extends zc{static{o(this,"TerminalRegExpVisitor")}constructor(){super(...arguments),this.isStarting=!0,this.endRegexpStack=[],this.multiline=!1}get endRegex(){return this.endRegexpStack.join("")}reset(e){this.multiline=!1,this.regex=e,this.startRegexp="",this.isStarting=!0,this.endRegexpStack=[]}visitGroup(e){e.quantifier&&(this.isStarting=!1,this.endRegexpStack=[])}visitCharacter(e){let r=String.fromCharCode(e.value);if(!this.multiline&&r===` +`&&(this.multiline=!0),e.quantifier)this.isStarting=!1,this.endRegexpStack=[];else{let n=o0(r);this.endRegexpStack.push(n),this.isStarting&&(this.startRegexp+=n)}}visitSet(e){if(!this.multiline){let r=this.regex.substring(e.loc.begin,e.loc.end),n=new RegExp(r);this.multiline=!!` +`.match(n)}if(e.quantifier)this.isStarting=!1,this.endRegexpStack=[];else{let r=this.regex.substring(e.loc.begin,e.loc.end);this.endRegexpStack.push(r),this.isStarting&&(this.startRegexp+=r)}}visitChildren(e){e.type==="Group"&&e.quantifier||super.visitChildren(e)}},s0=new qN;o(ZPe,"getTerminalParts");o(jN,"isMultilineComment");o(VT,"isWhitespace");o(o0,"escapeRegExp");o(KN,"getCaseInsensitivePattern");o(QN,"partialMatches");o(Vae,"partialRegExp")});var WT={};vr(WT,{findAssignment:()=>sR,findNameAssignment:()=>HT,findNodeForKeyword:()=>iR,findNodeForProperty:()=>p2,findNodesForKeyword:()=>JPe,findNodesForKeywordInternal:()=>aR,findNodesForProperty:()=>rR,getActionAtElement:()=>qae,getActionType:()=>jae,getAllReachableRules:()=>d2,getCrossReferenceTerminal:()=>eR,getEntryRule:()=>Uae,getExplicitRuleType:()=>oR,getHiddenRules:()=>Hae,getRuleType:()=>lR,getTypeName:()=>l0,isArrayCardinality:()=>tBe,isArrayOperator:()=>rBe,isCommentTerminal:()=>tR,isDataType:()=>nBe,isDataTypeRule:()=>m2,isOptionalCardinality:()=>eBe,terminalRegex:()=>ag});function Uae(t){return t.rules.find(e=>Ga(e)&&e.entry)}function Hae(t){return t.rules.filter(e=>Jo(e)&&e.hidden)}function d2(t,e){let r=new Set,n=Uae(t);if(!n)return new Set(t.rules);let i=[n].concat(Hae(t));for(let s of i)Wae(s,r,e);let a=new Set;for(let s of t.rules)(r.has(s.name)||Jo(s)&&s.hidden)&&a.add(s);return a}function Wae(t,e,r){e.add(t.name),Fc(t).forEach(n=>{if($l(n)||r&&PT(n)){let i=n.rule.ref;i&&!e.has(i.name)&&Wae(i,e,r)}})}function eR(t){if(t.terminal)return t.terminal;if(t.type.ref){let e=HT(t.type.ref);return e?.terminal}}function tR(t){return t.hidden&&!ag(t).test(" ")}function rR(t,e){return!t||!e?[]:nR(t,e,t.astNode,!0)}function p2(t,e,r){if(!t||!e)return;let n=nR(t,e,t.astNode,!0);if(n.length!==0)return r!==void 0?r=Math.max(0,Math.min(r,n.length-1)):r=0,n[r]}function nR(t,e,r,n){if(!n){let i=n0(t.grammarSource,Gl);if(i&&i.feature===e)return[t]}return ho(t)&&t.astNode===r?t.content.flatMap(i=>nR(i,e,r,!1)):[]}function JPe(t,e){return t?aR(t,e,t?.astNode):[]}function iR(t,e,r){if(!t)return;let n=aR(t,e,t?.astNode);if(n.length!==0)return r!==void 0?r=Math.max(0,Math.min(r,n.length-1)):r=0,n[r]}function aR(t,e,r){if(t.astNode!==r)return[];if(el(t.grammarSource)&&t.grammarSource.value===e)return[t];let n=Jd(t).iterator(),i,a=[];do if(i=n.next(),!i.done){let s=i.value;s.astNode===r?el(s.grammarSource)&&s.grammarSource.value===e&&a.push(s):n.prune()}while(!i.done);return a}function sR(t){var e;let r=t.astNode;for(;r===((e=t.container)===null||e===void 0?void 0:e.astNode);){let n=n0(t.grammarSource,Gl);if(n)return n;t=t.container}}function HT(t){let e=t;return RT(e)&&(Vu(e.$container)?e=e.$container.$container:Ga(e.$container)?e=e.$container:uf(e.$container)),Yae(t,e,new Map)}function Yae(t,e,r){var n;function i(a,s){let l;return n0(a,Gl)||(l=Yae(s,s,r)),r.set(t,l),l}if(o(i,"go"),r.has(t))return r.get(t);r.set(t,void 0);for(let a of Fc(e)){if(Gl(a)&&a.feature.toLowerCase()==="name")return r.set(t,a),a;if($l(a)&&Ga(a.rule.ref))return i(a,a.rule.ref);if(IT(a)&&(!((n=a.typeRef)===null||n===void 0)&&n.ref))return i(a,a.typeRef.ref)}}function qae(t){let e=t.$container;if(hf(e)){let r=e.elements,n=r.indexOf(t);for(let i=n-1;i>=0;i--){let a=r[i];if(Vu(a))return a;{let s=Fc(r[i]).find(Vu);if(s)return s}}}if(a2(e))return qae(e)}function eBe(t,e){return t==="?"||t==="*"||hf(e)&&!!e.guardCondition}function tBe(t){return t==="*"||t==="+"}function rBe(t){return t==="+="}function m2(t){return Xae(t,new Set)}function Xae(t,e){if(e.has(t))return!0;e.add(t);for(let r of Fc(t))if($l(r)){if(!r.rule.ref||Ga(r.rule.ref)&&!Xae(r.rule.ref,e))return!1}else{if(Gl(r))return!1;if(Vu(r))return!1}return!!t.definition}function nBe(t){return JN(t.type,new Set)}function JN(t,e){if(e.has(t))return!0;if(e.add(t),WD(t))return!1;if(cN(t))return!1;if(mN(t))return t.types.every(r=>JN(r,e));if(IT(t)){if(t.primitiveType!==void 0)return!0;if(t.stringType!==void 0)return!0;if(t.typeRef!==void 0){let r=t.typeRef.ref;return s2(r)?JN(r.type,e):!1}else return!1}else return!1}function oR(t){if(t.inferredType)return t.inferredType.name;if(t.dataType)return t.dataType;if(t.returnType){let e=t.returnType.ref;if(e){if(Ga(e))return e.name;if(MT(e)||s2(e))return e.name}}}function l0(t){var e;if(Ga(t))return m2(t)?t.name:(e=oR(t))!==null&&e!==void 0?e:t.name;if(MT(t)||s2(t)||uN(t))return t.name;if(Vu(t)){let r=jae(t);if(r)return r}else if(RT(t))return t.name;throw new Error("Cannot get name of Unknown Type")}function jae(t){var e;if(t.inferredType)return t.inferredType.name;if(!((e=t.type)===null||e===void 0)&&e.ref)return l0(t.type.ref)}function lR(t){var e,r,n;return Jo(t)?(r=(e=t.type)===null||e===void 0?void 0:e.name)!==null&&r!==void 0?r:"string":m2(t)?t.name:(n=oR(t))!==null&&n!==void 0?n:t.name}function ag(t){let e={s:!1,i:!1,u:!1},r=sg(t.definition,e),n=Object.entries(e).filter(([,i])=>i).map(([i])=>i).join("");return new RegExp(r,n)}function sg(t,e){if(RN(t))return iBe(t);if(IN(t))return aBe(t);if(bN(t))return lBe(t);if(PT(t)){let r=t.rule.ref;if(!r)throw new Error("Missing rule reference.");return Uu(sg(r.definition),{cardinality:t.cardinality,lookahead:t.lookahead})}else{if(AN(t))return oBe(t);if(FN(t))return sBe(t);if(LN(t)){let r=t.regex.lastIndexOf("/"),n=t.regex.substring(1,r),i=t.regex.substring(r+1);return e&&(e.i=i.includes("i"),e.s=i.includes("s"),e.u=i.includes("u")),Uu(n,{cardinality:t.cardinality,lookahead:t.lookahead,wrap:!1})}else{if(GN(t))return Uu(cR,{cardinality:t.cardinality,lookahead:t.lookahead});throw new Error(`Invalid terminal element: ${t?.$type}`)}}}function iBe(t){return Uu(t.elements.map(e=>sg(e)).join("|"),{cardinality:t.cardinality,lookahead:t.lookahead})}function aBe(t){return Uu(t.elements.map(e=>sg(e)).join(""),{cardinality:t.cardinality,lookahead:t.lookahead})}function sBe(t){return Uu(`${cR}*?${sg(t.terminal)}`,{cardinality:t.cardinality,lookahead:t.lookahead})}function oBe(t){return Uu(`(?!${sg(t.terminal)})${cR}*?`,{cardinality:t.cardinality,lookahead:t.lookahead})}function lBe(t){return t.right?Uu(`[${ZN(t.left)}-${ZN(t.right)}]`,{cardinality:t.cardinality,lookahead:t.lookahead,wrap:!1}):Uu(ZN(t.left),{cardinality:t.cardinality,lookahead:t.lookahead,wrap:!1})}function ZN(t){return o0(t.value)}function Uu(t,e){var r;return(e.wrap!==!1||e.lookahead)&&(t=`(${(r=e.lookahead)!==null&&r!==void 0?r:""}${t})`),e.cardinality?`${t}${e.cardinality}`:t}var cR,Vl=M(()=>{"use strict";_T();Bc();Zo();os();zl();ig();o(Uae,"getEntryRule");o(Hae,"getHiddenRules");o(d2,"getAllReachableRules");o(Wae,"ruleDfs");o(eR,"getCrossReferenceTerminal");o(tR,"isCommentTerminal");o(rR,"findNodesForProperty");o(p2,"findNodeForProperty");o(nR,"findNodesForPropertyInternal");o(JPe,"findNodesForKeyword");o(iR,"findNodeForKeyword");o(aR,"findNodesForKeywordInternal");o(sR,"findAssignment");o(HT,"findNameAssignment");o(Yae,"findNameAssignmentInternal");o(qae,"getActionAtElement");o(eBe,"isOptionalCardinality");o(tBe,"isArrayCardinality");o(rBe,"isArrayOperator");o(m2,"isDataTypeRule");o(Xae,"isDataTypeRuleInternal");o(nBe,"isDataType");o(JN,"isDataTypeInternal");o(oR,"getExplicitRuleType");o(l0,"getTypeName");o(jae,"getActionType");o(lR,"getRuleType");o(ag,"terminalRegex");cR=/[\s\S]/.source;o(sg,"abstractElementToRegex");o(iBe,"terminalAlternativesToRegex");o(aBe,"terminalGroupToRegex");o(sBe,"untilTokenToRegex");o(oBe,"negateTokenToRegex");o(lBe,"characterRangeToRegex");o(ZN,"keywordToRegex");o(Uu,"withCardinality")});function uR(t){let e=[],r=t.Grammar;for(let n of r.rules)Jo(n)&&tR(n)&&jN(ag(n))&&e.push(n.name);return{multilineCommentRules:e,nameRegexp:CT}}var hR=M(()=>{"use strict";zl();Vl();ig();Bc();o(uR,"createGrammarConfig")});var fR=M(()=>{"use strict"});function og(t){console&&console.error&&console.error(`Error: ${t}`)}function g2(t){console&&console.warn&&console.warn(`Warning: ${t}`)}var Kae=M(()=>{"use strict";o(og,"PRINT_ERROR");o(g2,"PRINT_WARNING")});function y2(t){let e=new Date().getTime(),r=t();return{time:new Date().getTime()-e,value:r}}var Qae=M(()=>{"use strict";o(y2,"timer")});function v2(t){function e(){}o(e,"FakeConstructor"),e.prototype=t;let r=new e;function n(){return typeof r.bar}return o(n,"fakeAccess"),n(),n(),t;(0,eval)(t)}var Zae=M(()=>{"use strict";o(v2,"toFastProperties")});var lg=M(()=>{"use strict";Kae();Qae();Zae()});function cBe(t){return uBe(t)?t.LABEL:t.name}function uBe(t){return bi(t.LABEL)&&t.LABEL!==""}function YT(t){return Qe(t,cg)}function cg(t){function e(r){return Qe(r,cg)}if(o(e,"convertDefinition"),t instanceof nn){let r={type:"NonTerminal",name:t.nonTerminalName,idx:t.idx};return bi(t.label)&&(r.label=t.label),r}else{if(t instanceof _n)return{type:"Alternative",definition:e(t.definition)};if(t instanceof an)return{type:"Option",idx:t.idx,definition:e(t.definition)};if(t instanceof Ln)return{type:"RepetitionMandatory",idx:t.idx,definition:e(t.definition)};if(t instanceof Dn)return{type:"RepetitionMandatoryWithSeparator",idx:t.idx,separator:cg(new Er({terminalType:t.separator})),definition:e(t.definition)};if(t instanceof bn)return{type:"RepetitionWithSeparator",idx:t.idx,separator:cg(new Er({terminalType:t.separator})),definition:e(t.definition)};if(t instanceof Dr)return{type:"Repetition",idx:t.idx,definition:e(t.definition)};if(t instanceof wn)return{type:"Alternation",idx:t.idx,definition:e(t.definition)};if(t instanceof Er){let r={type:"Terminal",name:t.terminalType.name,label:cBe(t.terminalType),idx:t.idx};bi(t.label)&&(r.terminalLabel=t.label);let n=t.terminalType.PATTERN;return t.terminalType.PATTERN&&(r.pattern=Xo(n)?n.source:n),r}else{if(t instanceof ls)return{type:"Rule",name:t.name,orgText:t.orgText,definition:e(t.definition)};throw Error("non exhaustive match")}}}var po,nn,ls,_n,an,Ln,Dn,Dr,bn,wn,Er,qT=M(()=>{"use strict";Ht();o(cBe,"tokenLabel");o(uBe,"hasTokenLabel");po=class{static{o(this,"AbstractProduction")}get definition(){return this._definition}set definition(e){this._definition=e}constructor(e){this._definition=e}accept(e){e.visit(this),Se(this.definition,r=>{r.accept(e)})}},nn=class extends po{static{o(this,"NonTerminal")}constructor(e){super([]),this.idx=1,va(this,zs(e,r=>r!==void 0))}set definition(e){}get definition(){return this.referencedRule!==void 0?this.referencedRule.definition:[]}accept(e){e.visit(this)}},ls=class extends po{static{o(this,"Rule")}constructor(e){super(e.definition),this.orgText="",va(this,zs(e,r=>r!==void 0))}},_n=class extends po{static{o(this,"Alternative")}constructor(e){super(e.definition),this.ignoreAmbiguities=!1,va(this,zs(e,r=>r!==void 0))}},an=class extends po{static{o(this,"Option")}constructor(e){super(e.definition),this.idx=1,va(this,zs(e,r=>r!==void 0))}},Ln=class extends po{static{o(this,"RepetitionMandatory")}constructor(e){super(e.definition),this.idx=1,va(this,zs(e,r=>r!==void 0))}},Dn=class extends po{static{o(this,"RepetitionMandatoryWithSeparator")}constructor(e){super(e.definition),this.idx=1,va(this,zs(e,r=>r!==void 0))}},Dr=class extends po{static{o(this,"Repetition")}constructor(e){super(e.definition),this.idx=1,va(this,zs(e,r=>r!==void 0))}},bn=class extends po{static{o(this,"RepetitionWithSeparator")}constructor(e){super(e.definition),this.idx=1,va(this,zs(e,r=>r!==void 0))}},wn=class extends po{static{o(this,"Alternation")}get definition(){return this._definition}set definition(e){this._definition=e}constructor(e){super(e.definition),this.idx=1,this.ignoreAmbiguities=!1,this.hasPredicates=!1,va(this,zs(e,r=>r!==void 0))}},Er=class{static{o(this,"Terminal")}constructor(e){this.idx=1,va(this,zs(e,r=>r!==void 0))}accept(e){e.visit(this)}};o(YT,"serializeGrammar");o(cg,"serializeProduction")});var cs,Jae=M(()=>{"use strict";qT();cs=class{static{o(this,"GAstVisitor")}visit(e){let r=e;switch(r.constructor){case nn:return this.visitNonTerminal(r);case _n:return this.visitAlternative(r);case an:return this.visitOption(r);case Ln:return this.visitRepetitionMandatory(r);case Dn:return this.visitRepetitionMandatoryWithSeparator(r);case bn:return this.visitRepetitionWithSeparator(r);case Dr:return this.visitRepetition(r);case wn:return this.visitAlternation(r);case Er:return this.visitTerminal(r);case ls:return this.visitRule(r);default:throw Error("non exhaustive match")}}visitNonTerminal(e){}visitAlternative(e){}visitOption(e){}visitRepetition(e){}visitRepetitionMandatory(e){}visitRepetitionMandatoryWithSeparator(e){}visitRepetitionWithSeparator(e){}visitAlternation(e){}visitTerminal(e){}visitRule(e){}}});function dR(t){return t instanceof _n||t instanceof an||t instanceof Dr||t instanceof Ln||t instanceof Dn||t instanceof bn||t instanceof Er||t instanceof ls}function c0(t,e=[]){return t instanceof an||t instanceof Dr||t instanceof bn?!0:t instanceof wn?qv(t.definition,n=>c0(n,e)):t instanceof nn&&Yn(e,t)?!1:t instanceof po?(t instanceof nn&&e.push(t),za(t.definition,n=>c0(n,e))):!1}function pR(t){return t instanceof wn}function Vs(t){if(t instanceof nn)return"SUBRULE";if(t instanceof an)return"OPTION";if(t instanceof wn)return"OR";if(t instanceof Ln)return"AT_LEAST_ONE";if(t instanceof Dn)return"AT_LEAST_ONE_SEP";if(t instanceof bn)return"MANY_SEP";if(t instanceof Dr)return"MANY";if(t instanceof Er)return"CONSUME";throw Error("non exhaustive match")}var ese=M(()=>{"use strict";Ht();qT();o(dR,"isSequenceProd");o(c0,"isOptionalProd");o(pR,"isBranchingProd");o(Vs,"getProductionDslName")});var us=M(()=>{"use strict";qT();Jae();ese()});function tse(t,e,r){return[new an({definition:[new Er({terminalType:t.separator})].concat(t.definition)})].concat(e,r)}var Hu,XT=M(()=>{"use strict";Ht();us();Hu=class{static{o(this,"RestWalker")}walk(e,r=[]){Se(e.definition,(n,i)=>{let a=xi(e.definition,i+1);if(n instanceof nn)this.walkProdRef(n,a,r);else if(n instanceof Er)this.walkTerminal(n,a,r);else if(n instanceof _n)this.walkFlat(n,a,r);else if(n instanceof an)this.walkOption(n,a,r);else if(n instanceof Ln)this.walkAtLeastOne(n,a,r);else if(n instanceof Dn)this.walkAtLeastOneSep(n,a,r);else if(n instanceof bn)this.walkManySep(n,a,r);else if(n instanceof Dr)this.walkMany(n,a,r);else if(n instanceof wn)this.walkOr(n,a,r);else throw Error("non exhaustive match")})}walkTerminal(e,r,n){}walkProdRef(e,r,n){}walkFlat(e,r,n){let i=r.concat(n);this.walk(e,i)}walkOption(e,r,n){let i=r.concat(n);this.walk(e,i)}walkAtLeastOne(e,r,n){let i=[new an({definition:e.definition})].concat(r,n);this.walk(e,i)}walkAtLeastOneSep(e,r,n){let i=tse(e,r,n);this.walk(e,i)}walkMany(e,r,n){let i=[new an({definition:e.definition})].concat(r,n);this.walk(e,i)}walkManySep(e,r,n){let i=tse(e,r,n);this.walk(e,i)}walkOr(e,r,n){let i=r.concat(n);Se(e.definition,a=>{let s=new _n({definition:[a]});this.walk(s,i)})}};o(tse,"restForRepetitionWithSeparator")});function u0(t){if(t instanceof nn)return u0(t.referencedRule);if(t instanceof Er)return dBe(t);if(dR(t))return hBe(t);if(pR(t))return fBe(t);throw Error("non exhaustive match")}function hBe(t){let e=[],r=t.definition,n=0,i=r.length>n,a,s=!0;for(;i&&s;)a=r[n],s=c0(a),e=e.concat(u0(a)),n=n+1,i=r.length>n;return Xm(e)}function fBe(t){let e=Qe(t.definition,r=>u0(r));return Xm(Wr(e))}function dBe(t){return[t.terminalType]}var mR=M(()=>{"use strict";Ht();us();o(u0,"first");o(hBe,"firstForSequence");o(fBe,"firstForBranching");o(dBe,"firstForTerminal")});var jT,gR=M(()=>{"use strict";jT="_~IN~_"});function rse(t){let e={};return Se(t,r=>{let n=new yR(r).startWalking();va(e,n)}),e}function pBe(t,e){return t.name+e+jT}var yR,nse=M(()=>{"use strict";XT();mR();Ht();gR();us();yR=class extends Hu{static{o(this,"ResyncFollowsWalker")}constructor(e){super(),this.topProd=e,this.follows={}}startWalking(){return this.walk(this.topProd),this.follows}walkTerminal(e,r,n){}walkProdRef(e,r,n){let i=pBe(e.referencedRule,e.idx)+this.topProd.name,a=r.concat(n),s=new _n({definition:a}),l=u0(s);this.follows[i]=l}};o(rse,"computeAllProdsFollows");o(pBe,"buildBetweenProdsFollowPrefix")});function ug(t){let e=t.toString();if(KT.hasOwnProperty(e))return KT[e];{let r=mBe.pattern(e);return KT[e]=r,r}}function ise(){KT={}}var KT,mBe,QT=M(()=>{"use strict";f2();KT={},mBe=new a0;o(ug,"getRegExpAst");o(ise,"clearRegExpParserCache")});function ose(t,e=!1){try{let r=ug(t);return vR(r.value,{},r.flags.ignoreCase)}catch(r){if(r.message===sse)e&&g2(`${x2} Unable to optimize: < ${t.toString()} > + Complement Sets cannot be automatically optimized. + This will disable the lexer's first char optimizations. + See: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#COMPLEMENT for details.`);else{let n="";e&&(n=` + This will disable the lexer's first char optimizations. + See: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#REGEXP_PARSING for details.`),og(`${x2} + Failed parsing: < ${t.toString()} > + Using the @chevrotain/regexp-to-ast library + Please open an issue at: https://github.com/chevrotain/chevrotain/issues`+n)}}return[]}function vR(t,e,r){switch(t.type){case"Disjunction":for(let i=0;i{if(typeof u=="number")ZT(u,e,r);else{let h=u;if(r===!0)for(let f=h.from;f<=h.to;f++)ZT(f,e,r);else{for(let f=h.from;f<=h.to&&f=hg){let f=h.from>=hg?h.from:hg,d=h.to,p=Gc(f),m=Gc(d);for(let g=p;g<=m;g++)e[g]=g}}}});break;case"Group":vR(s.value,e,r);break;default:throw Error("Non Exhaustive Match")}let l=s.quantifier!==void 0&&s.quantifier.atLeast===0;if(s.type==="Group"&&xR(s)===!1||s.type!=="Group"&&l===!1)break}break;default:throw Error("non exhaustive match!")}return br(e)}function ZT(t,e,r){let n=Gc(t);e[n]=n,r===!0&&gBe(t,e)}function gBe(t,e){let r=String.fromCharCode(t),n=r.toUpperCase();if(n!==r){let i=Gc(n.charCodeAt(0));e[i]=i}else{let i=r.toLowerCase();if(i!==r){let a=Gc(i.charCodeAt(0));e[a]=a}}}function ase(t,e){return as(t.value,r=>{if(typeof r=="number")return Yn(e,r);{let n=r;return as(e,i=>n.from<=i&&i<=n.to)!==void 0}})}function xR(t){let e=t.quantifier;return e&&e.atLeast===0?!0:t.value?Dt(t.value)?za(t.value,xR):xR(t.value):!1}function JT(t,e){if(e instanceof RegExp){let r=ug(e),n=new bR(t);return n.visit(r),n.found}else return as(e,r=>Yn(t,r.charCodeAt(0)))!==void 0}var sse,x2,bR,lse=M(()=>{"use strict";f2();Ht();lg();QT();wR();sse="Complement Sets are not supported for first char optimization",x2=`Unable to use "first char" lexer optimizations: +`;o(ose,"getOptimizedStartCodesIndices");o(vR,"firstCharOptimizedIndices");o(ZT,"addOptimizedIdxToResult");o(gBe,"handleIgnoreCase");o(ase,"findCode");o(xR,"isWholeOptional");bR=class extends zc{static{o(this,"CharCodeFinder")}constructor(e){super(),this.targetCharCodes=e,this.found=!1}visitChildren(e){if(this.found!==!0){switch(e.type){case"Lookahead":this.visitLookahead(e);return;case"NegativeLookahead":this.visitNegativeLookahead(e);return}super.visitChildren(e)}}visitCharacter(e){Yn(this.targetCharCodes,e.value)&&(this.found=!0)}visitSet(e){e.complement?ase(e,this.targetCharCodes)===void 0&&(this.found=!0):ase(e,this.targetCharCodes)!==void 0&&(this.found=!0)}};o(JT,"canMatchCharCode")});function hse(t,e){e=rf(e,{useSticky:kR,debug:!1,safeMode:!1,positionTracking:"full",lineTerminatorCharacters:["\r",` +`],tracer:o((b,w)=>w(),"tracer")});let r=e.tracer;r("initCharCodeToOptimizedIndexMap",()=>{IBe()});let n;r("Reject Lexer.NA",()=>{n=af(t,b=>b[h0]===ci.NA)});let i=!1,a;r("Transform Patterns",()=>{i=!1,a=Qe(n,b=>{let w=b[h0];if(Xo(w)){let _=w.source;return _.length===1&&_!=="^"&&_!=="$"&&_!=="."&&!w.ignoreCase?_:_.length===2&&_[0]==="\\"&&!Yn(["d","D","s","S","t","r","n","t","0","c","b","B","f","v","w","W"],_[1])?_[1]:e.useSticky?use(w):cse(w)}else{if(_i(w))return i=!0,{exec:w};if(typeof w=="object")return i=!0,w;if(typeof w=="string"){if(w.length===1)return w;{let _=w.replace(/[\\^$.*+?()[\]{}|]/g,"\\$&"),T=new RegExp(_);return e.useSticky?use(T):cse(T)}}else throw Error("non exhaustive match")}})});let s,l,u,h,f;r("misc mapping",()=>{s=Qe(n,b=>b.tokenTypeIdx),l=Qe(n,b=>{let w=b.GROUP;if(w!==ci.SKIPPED){if(bi(w))return w;if(dr(w))return!1;throw Error("non exhaustive match")}}),u=Qe(n,b=>{let w=b.LONGER_ALT;if(w)return Dt(w)?Qe(w,T=>oT(n,T)):[oT(n,w)]}),h=Qe(n,b=>b.PUSH_MODE),f=Qe(n,b=>Nt(b,"POP_MODE"))});let d;r("Line Terminator Handling",()=>{let b=xse(e.lineTerminatorCharacters);d=Qe(n,w=>!1),e.positionTracking!=="onlyOffset"&&(d=Qe(n,w=>Nt(w,"LINE_BREAKS")?!!w.LINE_BREAKS:vse(w,b)===!1&&JT(b,w.PATTERN)))});let p,m,g,y;r("Misc Mapping #2",()=>{p=Qe(n,gse),m=Qe(a,RBe),g=qr(n,(b,w)=>{let _=w.GROUP;return bi(_)&&_!==ci.SKIPPED&&(b[_]=[]),b},{}),y=Qe(a,(b,w)=>({pattern:a[w],longerAlt:u[w],canLineTerminator:d[w],isCustom:p[w],short:m[w],group:l[w],push:h[w],pop:f[w],tokenTypeIdx:s[w],tokenType:n[w]}))});let v=!0,x=[];return e.safeMode||r("First Char Optimization",()=>{x=qr(n,(b,w,_)=>{if(typeof w.PATTERN=="string"){let T=w.PATTERN.charCodeAt(0),E=Gc(T);TR(b,E,y[_])}else if(Dt(w.START_CHARS_HINT)){let T;Se(w.START_CHARS_HINT,E=>{let L=typeof E=="string"?E.charCodeAt(0):E,S=Gc(L);T!==S&&(T=S,TR(b,S,y[_]))})}else if(Xo(w.PATTERN))if(w.PATTERN.unicode)v=!1,e.ensureOptimizations&&og(`${x2} Unable to analyze < ${w.PATTERN.toString()} > pattern. + The regexp unicode flag is not currently supported by the regexp-to-ast library. + This will disable the lexer's first char optimizations. + For details See: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#UNICODE_OPTIMIZE`);else{let T=ose(w.PATTERN,e.ensureOptimizations);cr(T)&&(v=!1),Se(T,E=>{TR(b,E,y[_])})}else e.ensureOptimizations&&og(`${x2} TokenType: <${w.name}> is using a custom token pattern without providing parameter. + This will disable the lexer's first char optimizations. + For details See: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#CUSTOM_OPTIMIZE`),v=!1;return b},[])}),{emptyGroups:g,patternIdxToConfig:y,charCodeToPatternIdxToConfig:x,hasCustom:i,canBeOptimized:v}}function fse(t,e){let r=[],n=vBe(t);r=r.concat(n.errors);let i=xBe(n.valid),a=i.valid;return r=r.concat(i.errors),r=r.concat(yBe(a)),r=r.concat(ABe(a)),r=r.concat(_Be(a,e)),r=r.concat(LBe(a)),r}function yBe(t){let e=[],r=Yr(t,n=>Xo(n[h0]));return e=e.concat(wBe(r)),e=e.concat(EBe(r)),e=e.concat(SBe(r)),e=e.concat(CBe(r)),e=e.concat(TBe(r)),e}function vBe(t){let e=Yr(t,i=>!Nt(i,h0)),r=Qe(e,i=>({message:"Token Type: ->"+i.name+"<- missing static 'PATTERN' property",type:qn.MISSING_PATTERN,tokenTypes:[i]})),n=nf(t,e);return{errors:r,valid:n}}function xBe(t){let e=Yr(t,i=>{let a=i[h0];return!Xo(a)&&!_i(a)&&!Nt(a,"exec")&&!bi(a)}),r=Qe(e,i=>({message:"Token Type: ->"+i.name+"<- static 'PATTERN' can only be a RegExp, a Function matching the {CustomPatternMatcherFunc} type or an Object matching the {ICustomPattern} interface.",type:qn.INVALID_PATTERN,tokenTypes:[i]})),n=nf(t,e);return{errors:r,valid:n}}function wBe(t){class e extends zc{static{o(this,"EndAnchorFinder")}constructor(){super(...arguments),this.found=!1}visitEndAnchor(a){this.found=!0}}let r=Yr(t,i=>{let a=i.PATTERN;try{let s=ug(a),l=new e;return l.visit(s),l.found}catch{return bBe.test(a.source)}});return Qe(r,i=>({message:`Unexpected RegExp Anchor Error: + Token Type: ->`+i.name+`<- static 'PATTERN' cannot contain end of input anchor '$' + See chevrotain.io/docs/guide/resolving_lexer_errors.html#ANCHORS for details.`,type:qn.EOI_ANCHOR_FOUND,tokenTypes:[i]}))}function TBe(t){let e=Yr(t,n=>n.PATTERN.test(""));return Qe(e,n=>({message:"Token Type: ->"+n.name+"<- static 'PATTERN' must not match an empty string",type:qn.EMPTY_MATCH_PATTERN,tokenTypes:[n]}))}function EBe(t){class e extends zc{static{o(this,"StartAnchorFinder")}constructor(){super(...arguments),this.found=!1}visitStartAnchor(a){this.found=!0}}let r=Yr(t,i=>{let a=i.PATTERN;try{let s=ug(a),l=new e;return l.visit(s),l.found}catch{return kBe.test(a.source)}});return Qe(r,i=>({message:`Unexpected RegExp Anchor Error: + Token Type: ->`+i.name+`<- static 'PATTERN' cannot contain start of input anchor '^' + See https://chevrotain.io/docs/guide/resolving_lexer_errors.html#ANCHORS for details.`,type:qn.SOI_ANCHOR_FOUND,tokenTypes:[i]}))}function SBe(t){let e=Yr(t,n=>{let i=n[h0];return i instanceof RegExp&&(i.multiline||i.global)});return Qe(e,n=>({message:"Token Type: ->"+n.name+"<- static 'PATTERN' may NOT contain global('g') or multiline('m')",type:qn.UNSUPPORTED_FLAGS_FOUND,tokenTypes:[n]}))}function CBe(t){let e=[],r=Qe(t,a=>qr(t,(s,l)=>(a.PATTERN.source===l.PATTERN.source&&!Yn(e,l)&&l.PATTERN!==ci.NA&&(e.push(l),s.push(l)),s),[]));r=Rc(r);let n=Yr(r,a=>a.length>1);return Qe(n,a=>{let s=Qe(a,u=>u.name);return{message:`The same RegExp pattern ->${sa(a).PATTERN}<-has been used in all of the following Token Types: ${s.join(", ")} <-`,type:qn.DUPLICATE_PATTERNS_FOUND,tokenTypes:a}})}function ABe(t){let e=Yr(t,n=>{if(!Nt(n,"GROUP"))return!1;let i=n.GROUP;return i!==ci.SKIPPED&&i!==ci.NA&&!bi(i)});return Qe(e,n=>({message:"Token Type: ->"+n.name+"<- static 'GROUP' can only be Lexer.SKIPPED/Lexer.NA/A String",type:qn.INVALID_GROUP_TYPE_FOUND,tokenTypes:[n]}))}function _Be(t,e){let r=Yr(t,i=>i.PUSH_MODE!==void 0&&!Yn(e,i.PUSH_MODE));return Qe(r,i=>({message:`Token Type: ->${i.name}<- static 'PUSH_MODE' value cannot refer to a Lexer Mode ->${i.PUSH_MODE}<-which does not exist`,type:qn.PUSH_MODE_DOES_NOT_EXIST,tokenTypes:[i]}))}function LBe(t){let e=[],r=qr(t,(n,i,a)=>{let s=i.PATTERN;return s===ci.NA||(bi(s)?n.push({str:s,idx:a,tokenType:i}):Xo(s)&&NBe(s)&&n.push({str:s.source,idx:a,tokenType:i})),n},[]);return Se(t,(n,i)=>{Se(r,({str:a,idx:s,tokenType:l})=>{if(i${l.name}<- can never be matched. +Because it appears AFTER the Token Type ->${n.name}<-in the lexer's definition. +See https://chevrotain.io/docs/guide/resolving_lexer_errors.html#UNREACHABLE`;e.push({message:u,type:qn.UNREACHABLE_PATTERN,tokenTypes:[n,l]})}})}),e}function DBe(t,e){if(Xo(e)){let r=e.exec(t);return r!==null&&r.index===0}else{if(_i(e))return e(t,0,[],{});if(Nt(e,"exec"))return e.exec(t,0,[],{});if(typeof e=="string")return e===t;throw Error("non exhaustive match")}}function NBe(t){return as([".","\\","[","]","|","^","$","(",")","?","*","+","{"],r=>t.source.indexOf(r)!==-1)===void 0}function cse(t){let e=t.ignoreCase?"i":"";return new RegExp(`^(?:${t.source})`,e)}function use(t){let e=t.ignoreCase?"iy":"y";return new RegExp(`${t.source}`,e)}function dse(t,e,r){let n=[];return Nt(t,fg)||n.push({message:"A MultiMode Lexer cannot be initialized without a <"+fg+`> property in its definition +`,type:qn.MULTI_MODE_LEXER_WITHOUT_DEFAULT_MODE}),Nt(t,ek)||n.push({message:"A MultiMode Lexer cannot be initialized without a <"+ek+`> property in its definition +`,type:qn.MULTI_MODE_LEXER_WITHOUT_MODES_PROPERTY}),Nt(t,ek)&&Nt(t,fg)&&!Nt(t.modes,t.defaultMode)&&n.push({message:`A MultiMode Lexer cannot be initialized with a ${fg}: <${t.defaultMode}>which does not exist +`,type:qn.MULTI_MODE_LEXER_DEFAULT_MODE_VALUE_DOES_NOT_EXIST}),Nt(t,ek)&&Se(t.modes,(i,a)=>{Se(i,(s,l)=>{if(dr(s))n.push({message:`A Lexer cannot be initialized using an undefined Token Type. Mode:<${a}> at index: <${l}> +`,type:qn.LEXER_DEFINITION_CANNOT_CONTAIN_UNDEFINED});else if(Nt(s,"LONGER_ALT")){let u=Dt(s.LONGER_ALT)?s.LONGER_ALT:[s.LONGER_ALT];Se(u,h=>{!dr(h)&&!Yn(i,h)&&n.push({message:`A MultiMode Lexer cannot be initialized with a longer_alt <${h.name}> on token <${s.name}> outside of mode <${a}> +`,type:qn.MULTI_MODE_LEXER_LONGER_ALT_NOT_IN_CURRENT_MODE})})}})}),n}function pse(t,e,r){let n=[],i=!1,a=Rc(Wr(br(t.modes))),s=af(a,u=>u[h0]===ci.NA),l=xse(r);return e&&Se(s,u=>{let h=vse(u,l);if(h!==!1){let d={message:MBe(u,h),type:h.issue,tokenType:u};n.push(d)}else Nt(u,"LINE_BREAKS")?u.LINE_BREAKS===!0&&(i=!0):JT(l,u.PATTERN)&&(i=!0)}),e&&!i&&n.push({message:`Warning: No LINE_BREAKS Found. + This Lexer has been defined to track line and column information, + But none of the Token Types can be identified as matching a line terminator. + See https://chevrotain.io/docs/guide/resolving_lexer_errors.html#LINE_BREAKS + for details.`,type:qn.NO_LINE_BREAKS_FLAGS}),n}function mse(t){let e={},r=Gr(t);return Se(r,n=>{let i=t[n];if(Dt(i))e[n]=[];else throw Error("non exhaustive match")}),e}function gse(t){let e=t.PATTERN;if(Xo(e))return!1;if(_i(e))return!0;if(Nt(e,"exec"))return!0;if(bi(e))return!1;throw Error("non exhaustive match")}function RBe(t){return bi(t)&&t.length===1?t.charCodeAt(0):!1}function vse(t,e){if(Nt(t,"LINE_BREAKS"))return!1;if(Xo(t.PATTERN)){try{JT(e,t.PATTERN)}catch(r){return{issue:qn.IDENTIFY_TERMINATOR,errMsg:r.message}}return!1}else{if(bi(t.PATTERN))return!1;if(gse(t))return{issue:qn.CUSTOM_LINE_BREAK};throw Error("non exhaustive match")}}function MBe(t,e){if(e.issue===qn.IDENTIFY_TERMINATOR)return`Warning: unable to identify line terminator usage in pattern. + The problem is in the <${t.name}> Token Type + Root cause: ${e.errMsg}. + For details See: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#IDENTIFY_TERMINATOR`;if(e.issue===qn.CUSTOM_LINE_BREAK)return`Warning: A Custom Token Pattern should specify the option. + The problem is in the <${t.name}> Token Type + For details See: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#CUSTOM_LINE_BREAK`;throw Error("non exhaustive match")}function xse(t){return Qe(t,r=>bi(r)?r.charCodeAt(0):r)}function TR(t,e,r){t[e]===void 0?t[e]=[r]:t[e].push(r)}function Gc(t){return t255?255+~~(t/255):t}}var h0,fg,ek,kR,bBe,kBe,yse,hg,tk,wR=M(()=>{"use strict";f2();b2();Ht();lg();lse();QT();h0="PATTERN",fg="defaultMode",ek="modes",kR=typeof new RegExp("(?:)").sticky=="boolean";o(hse,"analyzeTokenTypes");o(fse,"validatePatterns");o(yBe,"validateRegExpPattern");o(vBe,"findMissingPatterns");o(xBe,"findInvalidPatterns");bBe=/[^\\][$]/;o(wBe,"findEndOfInputAnchor");o(TBe,"findEmptyMatchRegExps");kBe=/[^\\[][\^]|^\^/;o(EBe,"findStartOfInputAnchor");o(SBe,"findUnsupportedFlags");o(CBe,"findDuplicatePatterns");o(ABe,"findInvalidGroupType");o(_Be,"findModesThatDoNotExist");o(LBe,"findUnreachablePatterns");o(DBe,"testTokenType");o(NBe,"noMetaChar");o(cse,"addStartOfInput");o(use,"addStickyFlag");o(dse,"performRuntimeChecks");o(pse,"performWarningRuntimeChecks");o(mse,"cloneEmptyGroups");o(gse,"isCustomPattern");o(RBe,"isShortPattern");yse={test:o(function(t){let e=t.length;for(let r=this.lastIndex;r{r.isParent=r.categoryMatches.length>0})}function OBe(t){let e=rn(t),r=t,n=!0;for(;n;){r=Rc(Wr(Qe(r,a=>a.CATEGORIES)));let i=nf(r,e);e=e.concat(i),cr(i)?n=!1:r=i}return e}function PBe(t){Se(t,e=>{ER(e)||(Tse[bse]=e,e.tokenTypeIdx=bse++),wse(e)&&!Dt(e.CATEGORIES)&&(e.CATEGORIES=[e.CATEGORIES]),wse(e)||(e.CATEGORIES=[]),zBe(e)||(e.categoryMatches=[]),GBe(e)||(e.categoryMatchesMap={})})}function BBe(t){Se(t,e=>{e.categoryMatches=[],Se(e.categoryMatchesMap,(r,n)=>{e.categoryMatches.push(Tse[n].tokenTypeIdx)})})}function FBe(t){Se(t,e=>{kse([],e)})}function kse(t,e){Se(t,r=>{e.categoryMatchesMap[r.tokenTypeIdx]=!0}),Se(e.CATEGORIES,r=>{let n=t.concat(e);Yn(n,r)||kse(n,r)})}function ER(t){return Nt(t,"tokenTypeIdx")}function wse(t){return Nt(t,"CATEGORIES")}function zBe(t){return Nt(t,"categoryMatches")}function GBe(t){return Nt(t,"categoryMatchesMap")}function Ese(t){return Nt(t,"tokenTypeIdx")}var bse,Tse,f0=M(()=>{"use strict";Ht();o(Wu,"tokenStructuredMatcher");o(dg,"tokenStructuredMatcherNoCategories");bse=1,Tse={};o(Yu,"augmentTokenTypes");o(OBe,"expandCategories");o(PBe,"assignTokenDefaultProps");o(BBe,"assignCategoriesTokensProp");o(FBe,"assignCategoriesMapProp");o(kse,"singleAssignCategoriesToksMap");o(ER,"hasShortKeyProperty");o(wse,"hasCategoriesProperty");o(zBe,"hasExtendingTokensTypesProperty");o(GBe,"hasExtendingTokensTypesMapProperty");o(Ese,"isTokenType")});var SR,CR=M(()=>{"use strict";SR={buildUnableToPopLexerModeMessage(t){return`Unable to pop Lexer Mode after encountering Token ->${t.image}<- The Mode Stack is empty`},buildUnexpectedCharactersMessage(t,e,r,n,i){return`unexpected character: ->${t.charAt(e)}<- at offset: ${e}, skipped ${r} characters.`}}});var qn,w2,ci,b2=M(()=>{"use strict";wR();Ht();lg();f0();CR();QT();(function(t){t[t.MISSING_PATTERN=0]="MISSING_PATTERN",t[t.INVALID_PATTERN=1]="INVALID_PATTERN",t[t.EOI_ANCHOR_FOUND=2]="EOI_ANCHOR_FOUND",t[t.UNSUPPORTED_FLAGS_FOUND=3]="UNSUPPORTED_FLAGS_FOUND",t[t.DUPLICATE_PATTERNS_FOUND=4]="DUPLICATE_PATTERNS_FOUND",t[t.INVALID_GROUP_TYPE_FOUND=5]="INVALID_GROUP_TYPE_FOUND",t[t.PUSH_MODE_DOES_NOT_EXIST=6]="PUSH_MODE_DOES_NOT_EXIST",t[t.MULTI_MODE_LEXER_WITHOUT_DEFAULT_MODE=7]="MULTI_MODE_LEXER_WITHOUT_DEFAULT_MODE",t[t.MULTI_MODE_LEXER_WITHOUT_MODES_PROPERTY=8]="MULTI_MODE_LEXER_WITHOUT_MODES_PROPERTY",t[t.MULTI_MODE_LEXER_DEFAULT_MODE_VALUE_DOES_NOT_EXIST=9]="MULTI_MODE_LEXER_DEFAULT_MODE_VALUE_DOES_NOT_EXIST",t[t.LEXER_DEFINITION_CANNOT_CONTAIN_UNDEFINED=10]="LEXER_DEFINITION_CANNOT_CONTAIN_UNDEFINED",t[t.SOI_ANCHOR_FOUND=11]="SOI_ANCHOR_FOUND",t[t.EMPTY_MATCH_PATTERN=12]="EMPTY_MATCH_PATTERN",t[t.NO_LINE_BREAKS_FLAGS=13]="NO_LINE_BREAKS_FLAGS",t[t.UNREACHABLE_PATTERN=14]="UNREACHABLE_PATTERN",t[t.IDENTIFY_TERMINATOR=15]="IDENTIFY_TERMINATOR",t[t.CUSTOM_LINE_BREAK=16]="CUSTOM_LINE_BREAK",t[t.MULTI_MODE_LEXER_LONGER_ALT_NOT_IN_CURRENT_MODE=17]="MULTI_MODE_LEXER_LONGER_ALT_NOT_IN_CURRENT_MODE"})(qn||(qn={}));w2={deferDefinitionErrorsHandling:!1,positionTracking:"full",lineTerminatorsPattern:/\n|\r\n?/g,lineTerminatorCharacters:[` +`,"\r"],ensureOptimizations:!1,safeMode:!1,errorMessageProvider:SR,traceInitPerf:!1,skipValidations:!1,recoveryEnabled:!0};Object.freeze(w2);ci=class{static{o(this,"Lexer")}constructor(e,r=w2){if(this.lexerDefinition=e,this.lexerDefinitionErrors=[],this.lexerDefinitionWarning=[],this.patternIdxToConfig={},this.charCodeToPatternIdxToConfig={},this.modes=[],this.emptyGroups={},this.trackStartLines=!0,this.trackEndLines=!0,this.hasCustom=!1,this.canModeBeOptimized={},this.TRACE_INIT=(i,a)=>{if(this.traceInitPerf===!0){this.traceInitIndent++;let s=new Array(this.traceInitIndent+1).join(" ");this.traceInitIndent <${i}>`);let{time:l,value:u}=y2(a),h=l>10?console.warn:console.log;return this.traceInitIndent time: ${l}ms`),this.traceInitIndent--,u}else return a()},typeof r=="boolean")throw Error(`The second argument to the Lexer constructor is now an ILexerConfig Object. +a boolean 2nd argument is no longer supported`);this.config=va({},w2,r);let n=this.config.traceInitPerf;n===!0?(this.traceInitMaxIdent=1/0,this.traceInitPerf=!0):typeof n=="number"&&(this.traceInitMaxIdent=n,this.traceInitPerf=!0),this.traceInitIndent=-1,this.TRACE_INIT("Lexer Constructor",()=>{let i,a=!0;this.TRACE_INIT("Lexer Config handling",()=>{if(this.config.lineTerminatorsPattern===w2.lineTerminatorsPattern)this.config.lineTerminatorsPattern=yse;else if(this.config.lineTerminatorCharacters===w2.lineTerminatorCharacters)throw Error(`Error: Missing property on the Lexer config. + For details See: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#MISSING_LINE_TERM_CHARS`);if(r.safeMode&&r.ensureOptimizations)throw Error('"safeMode" and "ensureOptimizations" flags are mutually exclusive.');this.trackStartLines=/full|onlyStart/i.test(this.config.positionTracking),this.trackEndLines=/full/i.test(this.config.positionTracking),Dt(e)?i={modes:{defaultMode:rn(e)},defaultMode:fg}:(a=!1,i=rn(e))}),this.config.skipValidations===!1&&(this.TRACE_INIT("performRuntimeChecks",()=>{this.lexerDefinitionErrors=this.lexerDefinitionErrors.concat(dse(i,this.trackStartLines,this.config.lineTerminatorCharacters))}),this.TRACE_INIT("performWarningRuntimeChecks",()=>{this.lexerDefinitionWarning=this.lexerDefinitionWarning.concat(pse(i,this.trackStartLines,this.config.lineTerminatorCharacters))})),i.modes=i.modes?i.modes:{},Se(i.modes,(l,u)=>{i.modes[u]=af(l,h=>dr(h))});let s=Gr(i.modes);if(Se(i.modes,(l,u)=>{this.TRACE_INIT(`Mode: <${u}> processing`,()=>{if(this.modes.push(u),this.config.skipValidations===!1&&this.TRACE_INIT("validatePatterns",()=>{this.lexerDefinitionErrors=this.lexerDefinitionErrors.concat(fse(l,s))}),cr(this.lexerDefinitionErrors)){Yu(l);let h;this.TRACE_INIT("analyzeTokenTypes",()=>{h=hse(l,{lineTerminatorCharacters:this.config.lineTerminatorCharacters,positionTracking:r.positionTracking,ensureOptimizations:r.ensureOptimizations,safeMode:r.safeMode,tracer:this.TRACE_INIT})}),this.patternIdxToConfig[u]=h.patternIdxToConfig,this.charCodeToPatternIdxToConfig[u]=h.charCodeToPatternIdxToConfig,this.emptyGroups=va({},this.emptyGroups,h.emptyGroups),this.hasCustom=h.hasCustom||this.hasCustom,this.canModeBeOptimized[u]=h.canBeOptimized}})}),this.defaultMode=i.defaultMode,!cr(this.lexerDefinitionErrors)&&!this.config.deferDefinitionErrorsHandling){let u=Qe(this.lexerDefinitionErrors,h=>h.message).join(`----------------------- +`);throw new Error(`Errors detected in definition of Lexer: +`+u)}Se(this.lexerDefinitionWarning,l=>{g2(l.message)}),this.TRACE_INIT("Choosing sub-methods implementations",()=>{if(kR?(this.chopInput=aa,this.match=this.matchWithTest):(this.updateLastIndex=ti,this.match=this.matchWithExec),a&&(this.handleModes=ti),this.trackStartLines===!1&&(this.computeNewColumn=aa),this.trackEndLines===!1&&(this.updateTokenEndLineColumnLocation=ti),/full/i.test(this.config.positionTracking))this.createTokenInstance=this.createFullToken;else if(/onlyStart/i.test(this.config.positionTracking))this.createTokenInstance=this.createStartOnlyToken;else if(/onlyOffset/i.test(this.config.positionTracking))this.createTokenInstance=this.createOffsetOnlyToken;else throw Error(`Invalid config option: "${this.config.positionTracking}"`);this.hasCustom?(this.addToken=this.addTokenUsingPush,this.handlePayload=this.handlePayloadWithCustom):(this.addToken=this.addTokenUsingMemberAccess,this.handlePayload=this.handlePayloadNoCustom)}),this.TRACE_INIT("Failed Optimization Warnings",()=>{let l=qr(this.canModeBeOptimized,(u,h,f)=>(h===!1&&u.push(f),u),[]);if(r.ensureOptimizations&&!cr(l))throw Error(`Lexer Modes: < ${l.join(", ")} > cannot be optimized. + Disable the "ensureOptimizations" lexer config flag to silently ignore this and run the lexer in an un-optimized mode. + Or inspect the console log for details on how to resolve these issues.`)}),this.TRACE_INIT("clearRegExpParserCache",()=>{ise()}),this.TRACE_INIT("toFastProperties",()=>{v2(this)})})}tokenize(e,r=this.defaultMode){if(!cr(this.lexerDefinitionErrors)){let i=Qe(this.lexerDefinitionErrors,a=>a.message).join(`----------------------- +`);throw new Error(`Unable to Tokenize because Errors detected in definition of Lexer: +`+i)}return this.tokenizeInternal(e,r)}tokenizeInternal(e,r){let n,i,a,s,l,u,h,f,d,p,m,g,y,v,x,b,w=e,_=w.length,T=0,E=0,L=this.hasCustom?0:Math.floor(e.length/10),S=new Array(L),A=[],I=this.trackStartLines?1:void 0,D=this.trackStartLines?1:void 0,k=mse(this.emptyGroups),R=this.trackStartLines,C=this.config.lineTerminatorsPattern,O=0,N=[],P=[],F=[],B=[];Object.freeze(B);let G;function z(){return N}o(z,"getPossiblePatternsSlow");function W(ee){let J=Gc(ee),H=P[J];return H===void 0?B:H}o(W,"getPossiblePatternsOptimized");let Z=o(ee=>{if(F.length===1&&ee.tokenType.PUSH_MODE===void 0){let J=this.config.errorMessageProvider.buildUnableToPopLexerModeMessage(ee);A.push({offset:ee.startOffset,line:ee.startLine,column:ee.startColumn,length:ee.image.length,message:J})}else{F.pop();let J=xa(F);N=this.patternIdxToConfig[J],P=this.charCodeToPatternIdxToConfig[J],O=N.length;let H=this.canModeBeOptimized[J]&&this.config.safeMode===!1;P&&H?G=W:G=z}},"pop_mode");function j(ee){F.push(ee),P=this.charCodeToPatternIdxToConfig[ee],N=this.patternIdxToConfig[ee],O=N.length,O=N.length;let J=this.canModeBeOptimized[ee]&&this.config.safeMode===!1;P&&J?G=W:G=z}o(j,"push_mode"),j.call(this,r);let oe,K=this.config.recoveryEnabled;for(;T<_;){u=null;let ee=w.charCodeAt(T),J=G(ee),H=J.length;for(n=0;nu.length){u=s,h=f,oe=ue;break}}}break}}if(u!==null){if(d=u.length,p=oe.group,p!==void 0&&(m=oe.tokenTypeIdx,g=this.createTokenInstance(u,T,m,oe.tokenType,I,D,d),this.handlePayload(g,h),p===!1?E=this.addToken(S,E,g):k[p].push(g)),e=this.chopInput(e,d),T=T+d,D=this.computeNewColumn(D,d),R===!0&&oe.canLineTerminator===!0){let q=0,Q,ae;C.lastIndex=0;do Q=C.test(u),Q===!0&&(ae=C.lastIndex-1,q++);while(Q===!0);q!==0&&(I=I+q,D=d-ae,this.updateTokenEndLineColumnLocation(g,p,ae,q,I,D,d))}this.handleModes(oe,Z,j,g)}else{let q=T,Q=I,ae=D,ue=K===!1;for(;ue===!1&&T<_;)for(e=this.chopInput(e,1),T++,i=0;i{"use strict";Ht();b2();f0();o(qu,"tokenLabel");o(AR,"hasTokenLabel");$Be="parent",Sse="categories",Cse="label",Ase="group",_se="push_mode",Lse="pop_mode",Dse="longer_alt",Nse="line_breaks",Rse="start_chars_hint";o(rk,"createToken");o(VBe,"createTokenInternal");mo=rk({name:"EOF",pattern:ci.NA});Yu([mo]);o(d0,"createTokenInstance");o(T2,"tokenMatcher")});var Xu,Mse,Ul,pg=M(()=>{"use strict";p0();Ht();us();Xu={buildMismatchTokenMessage({expected:t,actual:e,previous:r,ruleName:n}){return`Expecting ${AR(t)?`--> ${qu(t)} <--`:`token of type --> ${t.name} <--`} but found --> '${e.image}' <--`},buildNotAllInputParsedMessage({firstRedundant:t,ruleName:e}){return"Redundant input, expecting EOF but found: "+t.image},buildNoViableAltMessage({expectedPathsPerAlt:t,actual:e,previous:r,customUserDescription:n,ruleName:i}){let a="Expecting: ",l=` +but found: '`+sa(e).image+"'";if(n)return a+n+l;{let u=qr(t,(p,m)=>p.concat(m),[]),h=Qe(u,p=>`[${Qe(p,m=>qu(m)).join(", ")}]`),d=`one of these possible Token sequences: +${Qe(h,(p,m)=>` ${m+1}. ${p}`).join(` +`)}`;return a+d+l}},buildEarlyExitMessage({expectedIterationPaths:t,actual:e,customUserDescription:r,ruleName:n}){let i="Expecting: ",s=` +but found: '`+sa(e).image+"'";if(r)return i+r+s;{let u=`expecting at least one iteration which starts with one of these possible Token sequences:: + <${Qe(t,h=>`[${Qe(h,f=>qu(f)).join(",")}]`).join(" ,")}>`;return i+u+s}}};Object.freeze(Xu);Mse={buildRuleNotFoundError(t,e){return"Invalid grammar, reference to a rule which is not defined: ->"+e.nonTerminalName+`<- +inside top level rule: ->`+t.name+"<-"}},Ul={buildDuplicateFoundError(t,e){function r(f){return f instanceof Er?f.terminalType.name:f instanceof nn?f.nonTerminalName:""}o(r,"getExtraProductionArgument");let n=t.name,i=sa(e),a=i.idx,s=Vs(i),l=r(i),u=a>0,h=`->${s}${u?a:""}<- ${l?`with argument: ->${l}<-`:""} + appears more than once (${e.length} times) in the top level rule: ->${n}<-. + For further details see: https://chevrotain.io/docs/FAQ.html#NUMERICAL_SUFFIXES + `;return h=h.replace(/[ \t]+/g," "),h=h.replace(/\s\s+/g,` +`),h},buildNamespaceConflictError(t){return`Namespace conflict found in grammar. +The grammar has both a Terminal(Token) and a Non-Terminal(Rule) named: <${t.name}>. +To resolve this make sure each Terminal and Non-Terminal names are unique +This is easy to accomplish by using the convention that Terminal names start with an uppercase letter +and Non-Terminal names start with a lower case letter.`},buildAlternationPrefixAmbiguityError(t){let e=Qe(t.prefixPath,i=>qu(i)).join(", "),r=t.alternation.idx===0?"":t.alternation.idx;return`Ambiguous alternatives: <${t.ambiguityIndices.join(" ,")}> due to common lookahead prefix +in inside <${t.topLevelRule.name}> Rule, +<${e}> may appears as a prefix path in all these alternatives. +See: https://chevrotain.io/docs/guide/resolving_grammar_errors.html#COMMON_PREFIX +For Further details.`},buildAlternationAmbiguityError(t){let e=Qe(t.prefixPath,i=>qu(i)).join(", "),r=t.alternation.idx===0?"":t.alternation.idx,n=`Ambiguous Alternatives Detected: <${t.ambiguityIndices.join(" ,")}> in inside <${t.topLevelRule.name}> Rule, +<${e}> may appears as a prefix path in all these alternatives. +`;return n=n+`See: https://chevrotain.io/docs/guide/resolving_grammar_errors.html#AMBIGUOUS_ALTERNATIVES +For Further details.`,n},buildEmptyRepetitionError(t){let e=Vs(t.repetition);return t.repetition.idx!==0&&(e+=t.repetition.idx),`The repetition <${e}> within Rule <${t.topLevelRule.name}> can never consume any tokens. +This could lead to an infinite loop.`},buildTokenNameError(t){return"deprecated"},buildEmptyAlternationError(t){return`Ambiguous empty alternative: <${t.emptyChoiceIdx+1}> in inside <${t.topLevelRule.name}> Rule. +Only the last alternative may be an empty alternative.`},buildTooManyAlternativesError(t){return`An Alternation cannot have more than 256 alternatives: + inside <${t.topLevelRule.name}> Rule. + has ${t.alternation.definition.length+1} alternatives.`},buildLeftRecursionError(t){let e=t.topLevelRule.name,r=Qe(t.leftRecursionPath,a=>a.name),n=`${e} --> ${r.concat([e]).join(" --> ")}`;return`Left Recursion found in grammar. +rule: <${e}> can be invoked from itself (directly or indirectly) +without consuming any Tokens. The grammar path that causes this is: + ${n} + To fix this refactor your grammar to remove the left recursion. +see: https://en.wikipedia.org/wiki/LL_parser#Left_factoring.`},buildInvalidRuleNameError(t){return"deprecated"},buildDuplicateRuleNameError(t){let e;return t.topLevelRule instanceof ls?e=t.topLevelRule.name:e=t.topLevelRule,`Duplicate definition, rule: ->${e}<- is already defined in the grammar: ->${t.grammarName}<-`}}});function Ise(t,e){let r=new _R(t,e);return r.resolveRefs(),r.errors}var _R,Ose=M(()=>{"use strict";Us();Ht();us();o(Ise,"resolveGrammar");_R=class extends cs{static{o(this,"GastRefResolverVisitor")}constructor(e,r){super(),this.nameToTopRule=e,this.errMsgProvider=r,this.errors=[]}resolveRefs(){Se(br(this.nameToTopRule),e=>{this.currTopLevel=e,e.accept(this)})}visitNonTerminal(e){let r=this.nameToTopRule[e.nonTerminalName];if(r)e.referencedRule=r;else{let n=this.errMsgProvider.buildRuleNotFoundError(this.currTopLevel,e);this.errors.push({message:n,type:Ui.UNRESOLVED_SUBRULE_REF,ruleName:this.currTopLevel.name,unresolvedRefName:e.nonTerminalName})}}}});function sk(t,e,r=[]){r=rn(r);let n=[],i=0;function a(l){return l.concat(xi(t,i+1))}o(a,"remainingPathWith");function s(l){let u=sk(a(l),e,r);return n.concat(u)}for(o(s,"getAlternativesForProd");r.length{cr(u.definition)===!1&&(n=s(u.definition))}),n;if(l instanceof Er)r.push(l.terminalType);else throw Error("non exhaustive match")}i++}return n.push({partialPath:r,suffixDef:xi(t,i)}),n}function ok(t,e,r,n){let i="EXIT_NONE_TERMINAL",a=[i],s="EXIT_ALTERNATIVE",l=!1,u=e.length,h=u-n-1,f=[],d=[];for(d.push({idx:-1,def:t,ruleStack:[],occurrenceStack:[]});!cr(d);){let p=d.pop();if(p===s){l&&xa(d).idx<=h&&d.pop();continue}let m=p.def,g=p.idx,y=p.ruleStack,v=p.occurrenceStack;if(cr(m))continue;let x=m[0];if(x===i){let b={idx:g,def:xi(m),ruleStack:zu(y),occurrenceStack:zu(v)};d.push(b)}else if(x instanceof Er)if(g=0;b--){let w=x.definition[b],_={idx:g,def:w.definition.concat(xi(m)),ruleStack:y,occurrenceStack:v};d.push(_),d.push(s)}else if(x instanceof _n)d.push({idx:g,def:x.definition.concat(xi(m)),ruleStack:y,occurrenceStack:v});else if(x instanceof ls)d.push(UBe(x,g,y,v));else throw Error("non exhaustive match")}return f}function UBe(t,e,r,n){let i=rn(r);i.push(t.name);let a=rn(n);return a.push(1),{idx:e,def:t.definition,ruleStack:i,occurrenceStack:a}}var LR,nk,mg,ik,k2,ak,E2,S2=M(()=>{"use strict";Ht();mR();XT();us();LR=class extends Hu{static{o(this,"AbstractNextPossibleTokensWalker")}constructor(e,r){super(),this.topProd=e,this.path=r,this.possibleTokTypes=[],this.nextProductionName="",this.nextProductionOccurrence=0,this.found=!1,this.isAtEndOfPath=!1}startWalking(){if(this.found=!1,this.path.ruleStack[0]!==this.topProd.name)throw Error("The path does not start with the walker's top Rule!");return this.ruleStack=rn(this.path.ruleStack).reverse(),this.occurrenceStack=rn(this.path.occurrenceStack).reverse(),this.ruleStack.pop(),this.occurrenceStack.pop(),this.updateExpectedNext(),this.walk(this.topProd),this.possibleTokTypes}walk(e,r=[]){this.found||super.walk(e,r)}walkProdRef(e,r,n){if(e.referencedRule.name===this.nextProductionName&&e.idx===this.nextProductionOccurrence){let i=r.concat(n);this.updateExpectedNext(),this.walk(e.referencedRule,i)}}updateExpectedNext(){cr(this.ruleStack)?(this.nextProductionName="",this.nextProductionOccurrence=0,this.isAtEndOfPath=!0):(this.nextProductionName=this.ruleStack.pop(),this.nextProductionOccurrence=this.occurrenceStack.pop())}},nk=class extends LR{static{o(this,"NextAfterTokenWalker")}constructor(e,r){super(e,r),this.path=r,this.nextTerminalName="",this.nextTerminalOccurrence=0,this.nextTerminalName=this.path.lastTok.name,this.nextTerminalOccurrence=this.path.lastTokOccurrence}walkTerminal(e,r,n){if(this.isAtEndOfPath&&e.terminalType.name===this.nextTerminalName&&e.idx===this.nextTerminalOccurrence&&!this.found){let i=r.concat(n),a=new _n({definition:i});this.possibleTokTypes=u0(a),this.found=!0}}},mg=class extends Hu{static{o(this,"AbstractNextTerminalAfterProductionWalker")}constructor(e,r){super(),this.topRule=e,this.occurrence=r,this.result={token:void 0,occurrence:void 0,isEndOfRule:void 0}}startWalking(){return this.walk(this.topRule),this.result}},ik=class extends mg{static{o(this,"NextTerminalAfterManyWalker")}walkMany(e,r,n){if(e.idx===this.occurrence){let i=sa(r.concat(n));this.result.isEndOfRule=i===void 0,i instanceof Er&&(this.result.token=i.terminalType,this.result.occurrence=i.idx)}else super.walkMany(e,r,n)}},k2=class extends mg{static{o(this,"NextTerminalAfterManySepWalker")}walkManySep(e,r,n){if(e.idx===this.occurrence){let i=sa(r.concat(n));this.result.isEndOfRule=i===void 0,i instanceof Er&&(this.result.token=i.terminalType,this.result.occurrence=i.idx)}else super.walkManySep(e,r,n)}},ak=class extends mg{static{o(this,"NextTerminalAfterAtLeastOneWalker")}walkAtLeastOne(e,r,n){if(e.idx===this.occurrence){let i=sa(r.concat(n));this.result.isEndOfRule=i===void 0,i instanceof Er&&(this.result.token=i.terminalType,this.result.occurrence=i.idx)}else super.walkAtLeastOne(e,r,n)}},E2=class extends mg{static{o(this,"NextTerminalAfterAtLeastOneSepWalker")}walkAtLeastOneSep(e,r,n){if(e.idx===this.occurrence){let i=sa(r.concat(n));this.result.isEndOfRule=i===void 0,i instanceof Er&&(this.result.token=i.terminalType,this.result.occurrence=i.idx)}else super.walkAtLeastOneSep(e,r,n)}};o(sk,"possiblePathsFrom");o(ok,"nextPossibleTokensAfter");o(UBe,"expandTopLevelRule")});function C2(t){if(t instanceof an||t==="Option")return Xn.OPTION;if(t instanceof Dr||t==="Repetition")return Xn.REPETITION;if(t instanceof Ln||t==="RepetitionMandatory")return Xn.REPETITION_MANDATORY;if(t instanceof Dn||t==="RepetitionMandatoryWithSeparator")return Xn.REPETITION_MANDATORY_WITH_SEPARATOR;if(t instanceof bn||t==="RepetitionWithSeparator")return Xn.REPETITION_WITH_SEPARATOR;if(t instanceof wn||t==="Alternation")return Xn.ALTERNATION;throw Error("non exhaustive match")}function ck(t){let{occurrence:e,rule:r,prodType:n,maxLookahead:i}=t,a=C2(n);return a===Xn.ALTERNATION?gg(e,r,i):yg(e,r,a,i)}function Bse(t,e,r,n,i,a){let s=gg(t,e,r),l=Use(s)?dg:Wu;return a(s,n,l,i)}function Fse(t,e,r,n,i,a){let s=yg(t,e,i,r),l=Use(s)?dg:Wu;return a(s[0],l,n)}function zse(t,e,r,n){let i=t.length,a=za(t,s=>za(s,l=>l.length===1));if(e)return function(s){let l=Qe(s,u=>u.GATE);for(let u=0;uWr(u)),l=qr(s,(u,h,f)=>(Se(h,d=>{Nt(u,d.tokenTypeIdx)||(u[d.tokenTypeIdx]=f),Se(d.categoryMatches,p=>{Nt(u,p)||(u[p]=f)})}),u),{});return function(){let u=this.LA(1);return l[u.tokenTypeIdx]}}else return function(){for(let s=0;sa.length===1),i=t.length;if(n&&!r){let a=Wr(t);if(a.length===1&&cr(a[0].categoryMatches)){let l=a[0].tokenTypeIdx;return function(){return this.LA(1).tokenTypeIdx===l}}else{let s=qr(a,(l,u,h)=>(l[u.tokenTypeIdx]=!0,Se(u.categoryMatches,f=>{l[f]=!0}),l),[]);return function(){let l=this.LA(1);return s[l.tokenTypeIdx]===!0}}}else return function(){e:for(let a=0;ask([s],1)),n=Pse(r.length),i=Qe(r,s=>{let l={};return Se(s,u=>{let h=DR(u.partialPath);Se(h,f=>{l[f]=!0})}),l}),a=r;for(let s=1;s<=e;s++){let l=a;a=Pse(l.length);for(let u=0;u{let x=DR(v.partialPath);Se(x,b=>{i[u][b]=!0})})}}}}return n}function gg(t,e,r,n){let i=new lk(t,Xn.ALTERNATION,n);return e.accept(i),$se(i.result,r)}function yg(t,e,r,n){let i=new lk(t,r);e.accept(i);let a=i.result,l=new NR(e,t,r).startWalking(),u=new _n({definition:a}),h=new _n({definition:l});return $se([u,h],n)}function uk(t,e){e:for(let r=0;r{let i=e[n];return r===i||i.categoryMatchesMap[r.tokenTypeIdx]})}function Use(t){return za(t,e=>za(e,r=>za(r,n=>cr(n.categoryMatches))))}var Xn,NR,lk,vg=M(()=>{"use strict";Ht();S2();XT();f0();us();(function(t){t[t.OPTION=0]="OPTION",t[t.REPETITION=1]="REPETITION",t[t.REPETITION_MANDATORY=2]="REPETITION_MANDATORY",t[t.REPETITION_MANDATORY_WITH_SEPARATOR=3]="REPETITION_MANDATORY_WITH_SEPARATOR",t[t.REPETITION_WITH_SEPARATOR=4]="REPETITION_WITH_SEPARATOR",t[t.ALTERNATION=5]="ALTERNATION"})(Xn||(Xn={}));o(C2,"getProdType");o(ck,"getLookaheadPaths");o(Bse,"buildLookaheadFuncForOr");o(Fse,"buildLookaheadFuncForOptionalProd");o(zse,"buildAlternativesLookAheadFunc");o(Gse,"buildSingleAlternativeLookaheadFunction");NR=class extends Hu{static{o(this,"RestDefinitionFinderWalker")}constructor(e,r,n){super(),this.topProd=e,this.targetOccurrence=r,this.targetProdType=n}startWalking(){return this.walk(this.topProd),this.restDef}checkIsTarget(e,r,n,i){return e.idx===this.targetOccurrence&&this.targetProdType===r?(this.restDef=n.concat(i),!0):!1}walkOption(e,r,n){this.checkIsTarget(e,Xn.OPTION,r,n)||super.walkOption(e,r,n)}walkAtLeastOne(e,r,n){this.checkIsTarget(e,Xn.REPETITION_MANDATORY,r,n)||super.walkOption(e,r,n)}walkAtLeastOneSep(e,r,n){this.checkIsTarget(e,Xn.REPETITION_MANDATORY_WITH_SEPARATOR,r,n)||super.walkOption(e,r,n)}walkMany(e,r,n){this.checkIsTarget(e,Xn.REPETITION,r,n)||super.walkOption(e,r,n)}walkManySep(e,r,n){this.checkIsTarget(e,Xn.REPETITION_WITH_SEPARATOR,r,n)||super.walkOption(e,r,n)}},lk=class extends cs{static{o(this,"InsideDefinitionFinderVisitor")}constructor(e,r,n){super(),this.targetOccurrence=e,this.targetProdType=r,this.targetRef=n,this.result=[]}checkIsTarget(e,r){e.idx===this.targetOccurrence&&this.targetProdType===r&&(this.targetRef===void 0||e===this.targetRef)&&(this.result=e.definition)}visitOption(e){this.checkIsTarget(e,Xn.OPTION)}visitRepetition(e){this.checkIsTarget(e,Xn.REPETITION)}visitRepetitionMandatory(e){this.checkIsTarget(e,Xn.REPETITION_MANDATORY)}visitRepetitionMandatoryWithSeparator(e){this.checkIsTarget(e,Xn.REPETITION_MANDATORY_WITH_SEPARATOR)}visitRepetitionWithSeparator(e){this.checkIsTarget(e,Xn.REPETITION_WITH_SEPARATOR)}visitAlternation(e){this.checkIsTarget(e,Xn.ALTERNATION)}};o(Pse,"initializeArrayOfArrays");o(DR,"pathToHashKeys");o(HBe,"isUniquePrefixHash");o($se,"lookAheadSequenceFromAlternatives");o(gg,"getLookaheadPathsForOr");o(yg,"getLookaheadPathsForOptionalProd");o(uk,"containsPath");o(Vse,"isStrictPrefixOfPath");o(Use,"areTokenCategoriesNotUsed")});function Hse(t){let e=t.lookaheadStrategy.validate({rules:t.rules,tokenTypes:t.tokenTypes,grammarName:t.grammarName});return Qe(e,r=>Object.assign({type:Ui.CUSTOM_LOOKAHEAD_VALIDATION},r))}function Wse(t,e,r,n){let i=ba(t,u=>WBe(u,r)),a=QBe(t,e,r),s=ba(t,u=>XBe(u,r)),l=ba(t,u=>qBe(u,t,n,r));return i.concat(a,s,l)}function WBe(t,e){let r=new RR;t.accept(r);let n=r.allProductions,i=WL(n,YBe),a=zs(i,l=>l.length>1);return Qe(br(a),l=>{let u=sa(l),h=e.buildDuplicateFoundError(t,l),f=Vs(u),d={message:h,type:Ui.DUPLICATE_PRODUCTIONS,ruleName:t.name,dslName:f,occurrence:u.idx},p=Yse(u);return p&&(d.parameter=p),d})}function YBe(t){return`${Vs(t)}_#_${t.idx}_#_${Yse(t)}`}function Yse(t){return t instanceof Er?t.terminalType.name:t instanceof nn?t.nonTerminalName:""}function qBe(t,e,r,n){let i=[];if(qr(e,(s,l)=>l.name===t.name?s+1:s,0)>1){let s=n.buildDuplicateRuleNameError({topLevelRule:t,grammarName:r});i.push({message:s,type:Ui.DUPLICATE_RULE_NAME,ruleName:t.name})}return i}function qse(t,e,r){let n=[],i;return Yn(e,t)||(i=`Invalid rule override, rule: ->${t}<- cannot be overridden in the grammar: ->${r}<-as it is not defined in any of the super grammars `,n.push({message:i,type:Ui.INVALID_RULE_OVERRIDE,ruleName:t})),n}function IR(t,e,r,n=[]){let i=[],a=hk(e.definition);if(cr(a))return[];{let s=t.name;Yn(a,t)&&i.push({message:r.buildLeftRecursionError({topLevelRule:t,leftRecursionPath:n}),type:Ui.LEFT_RECURSION,ruleName:s});let u=nf(a,n.concat([t])),h=ba(u,f=>{let d=rn(n);return d.push(f),IR(t,f,r,d)});return i.concat(h)}}function hk(t){let e=[];if(cr(t))return e;let r=sa(t);if(r instanceof nn)e.push(r.referencedRule);else if(r instanceof _n||r instanceof an||r instanceof Ln||r instanceof Dn||r instanceof bn||r instanceof Dr)e=e.concat(hk(r.definition));else if(r instanceof wn)e=Wr(Qe(r.definition,a=>hk(a.definition)));else if(!(r instanceof Er))throw Error("non exhaustive match");let n=c0(r),i=t.length>1;if(n&&i){let a=xi(t);return e.concat(hk(a))}else return e}function Xse(t,e){let r=new A2;t.accept(r);let n=r.alternations;return ba(n,a=>{let s=zu(a.definition);return ba(s,(l,u)=>{let h=ok([l],[],Wu,1);return cr(h)?[{message:e.buildEmptyAlternationError({topLevelRule:t,alternation:a,emptyChoiceIdx:u}),type:Ui.NONE_LAST_EMPTY_ALT,ruleName:t.name,occurrence:a.idx,alternative:u+1}]:[]})})}function jse(t,e,r){let n=new A2;t.accept(n);let i=n.alternations;return i=af(i,s=>s.ignoreAmbiguities===!0),ba(i,s=>{let l=s.idx,u=s.maxLookahead||e,h=gg(l,t,u,s),f=jBe(h,s,t,r),d=KBe(h,s,t,r);return f.concat(d)})}function XBe(t,e){let r=new A2;t.accept(r);let n=r.alternations;return ba(n,a=>a.definition.length>255?[{message:e.buildTooManyAlternativesError({topLevelRule:t,alternation:a}),type:Ui.TOO_MANY_ALTS,ruleName:t.name,occurrence:a.idx}]:[])}function Kse(t,e,r){let n=[];return Se(t,i=>{let a=new MR;i.accept(a);let s=a.allProductions;Se(s,l=>{let u=C2(l),h=l.maxLookahead||e,f=l.idx,p=yg(f,i,u,h)[0];if(cr(Wr(p))){let m=r.buildEmptyRepetitionError({topLevelRule:i,repetition:l});n.push({message:m,type:Ui.NO_NON_EMPTY_LOOKAHEAD,ruleName:i.name})}})}),n}function jBe(t,e,r,n){let i=[],a=qr(t,(l,u,h)=>(e.definition[h].ignoreAmbiguities===!0||Se(u,f=>{let d=[h];Se(t,(p,m)=>{h!==m&&uk(p,f)&&e.definition[m].ignoreAmbiguities!==!0&&d.push(m)}),d.length>1&&!uk(i,f)&&(i.push(f),l.push({alts:d,path:f}))}),l),[]);return Qe(a,l=>{let u=Qe(l.alts,f=>f+1);return{message:n.buildAlternationAmbiguityError({topLevelRule:r,alternation:e,ambiguityIndices:u,prefixPath:l.path}),type:Ui.AMBIGUOUS_ALTS,ruleName:r.name,occurrence:e.idx,alternatives:l.alts}})}function KBe(t,e,r,n){let i=qr(t,(s,l,u)=>{let h=Qe(l,f=>({idx:u,path:f}));return s.concat(h)},[]);return Rc(ba(i,s=>{if(e.definition[s.idx].ignoreAmbiguities===!0)return[];let u=s.idx,h=s.path,f=Yr(i,p=>e.definition[p.idx].ignoreAmbiguities!==!0&&p.idx{let m=[p.idx+1,u+1],g=e.idx===0?"":e.idx;return{message:n.buildAlternationPrefixAmbiguityError({topLevelRule:r,alternation:e,ambiguityIndices:m,prefixPath:p.path}),type:Ui.AMBIGUOUS_PREFIX_ALTS,ruleName:r.name,occurrence:g,alternatives:m}})}))}function QBe(t,e,r){let n=[],i=Qe(e,a=>a.name);return Se(t,a=>{let s=a.name;if(Yn(i,s)){let l=r.buildNamespaceConflictError(a);n.push({message:l,type:Ui.CONFLICT_TOKENS_RULES_NAMESPACE,ruleName:s})}}),n}var RR,A2,MR,_2=M(()=>{"use strict";Ht();Us();us();vg();S2();f0();o(Hse,"validateLookahead");o(Wse,"validateGrammar");o(WBe,"validateDuplicateProductions");o(YBe,"identifyProductionForDuplicates");o(Yse,"getExtraProductionArgument");RR=class extends cs{static{o(this,"OccurrenceValidationCollector")}constructor(){super(...arguments),this.allProductions=[]}visitNonTerminal(e){this.allProductions.push(e)}visitOption(e){this.allProductions.push(e)}visitRepetitionWithSeparator(e){this.allProductions.push(e)}visitRepetitionMandatory(e){this.allProductions.push(e)}visitRepetitionMandatoryWithSeparator(e){this.allProductions.push(e)}visitRepetition(e){this.allProductions.push(e)}visitAlternation(e){this.allProductions.push(e)}visitTerminal(e){this.allProductions.push(e)}};o(qBe,"validateRuleDoesNotAlreadyExist");o(qse,"validateRuleIsOverridden");o(IR,"validateNoLeftRecursion");o(hk,"getFirstNoneTerminal");A2=class extends cs{static{o(this,"OrCollector")}constructor(){super(...arguments),this.alternations=[]}visitAlternation(e){this.alternations.push(e)}};o(Xse,"validateEmptyOrAlternative");o(jse,"validateAmbiguousAlternationAlternatives");MR=class extends cs{static{o(this,"RepetitionCollector")}constructor(){super(...arguments),this.allProductions=[]}visitRepetitionWithSeparator(e){this.allProductions.push(e)}visitRepetitionMandatory(e){this.allProductions.push(e)}visitRepetitionMandatoryWithSeparator(e){this.allProductions.push(e)}visitRepetition(e){this.allProductions.push(e)}};o(XBe,"validateTooManyAlts");o(Kse,"validateSomeNonEmptyLookaheadPath");o(jBe,"checkAlternativesAmbiguities");o(KBe,"checkPrefixAlternativesAmbiguities");o(QBe,"checkTerminalAndNoneTerminalsNameSpace")});function Qse(t){let e=rf(t,{errMsgProvider:Mse}),r={};return Se(t.rules,n=>{r[n.name]=n}),Ise(r,e.errMsgProvider)}function Zse(t){return t=rf(t,{errMsgProvider:Ul}),Wse(t.rules,t.tokenTypes,t.errMsgProvider,t.grammarName)}var Jse=M(()=>{"use strict";Ht();Ose();_2();pg();o(Qse,"resolveGrammar");o(Zse,"validateGrammar")});function ff(t){return Yn(ioe,t.name)}var eoe,toe,roe,noe,ioe,xg,m0,L2,D2,N2,bg=M(()=>{"use strict";Ht();eoe="MismatchedTokenException",toe="NoViableAltException",roe="EarlyExitException",noe="NotAllInputParsedException",ioe=[eoe,toe,roe,noe];Object.freeze(ioe);o(ff,"isRecognitionException");xg=class extends Error{static{o(this,"RecognitionException")}constructor(e,r){super(e),this.token=r,this.resyncedTokens=[],Object.setPrototypeOf(this,new.target.prototype),Error.captureStackTrace&&Error.captureStackTrace(this,this.constructor)}},m0=class extends xg{static{o(this,"MismatchedTokenException")}constructor(e,r,n){super(e,r),this.previousToken=n,this.name=eoe}},L2=class extends xg{static{o(this,"NoViableAltException")}constructor(e,r,n){super(e,r),this.previousToken=n,this.name=toe}},D2=class extends xg{static{o(this,"NotAllInputParsedException")}constructor(e,r){super(e,r),this.name=noe}},N2=class extends xg{static{o(this,"EarlyExitException")}constructor(e,r,n){super(e,r),this.previousToken=n,this.name=roe}}});function ZBe(t,e,r,n,i,a,s){let l=this.getKeyForAutomaticLookahead(n,i),u=this.firstAfterRepMap[l];if(u===void 0){let p=this.getCurrRuleFullName(),m=this.getGAstProductions()[p];u=new a(m,i).startWalking(),this.firstAfterRepMap[l]=u}let h=u.token,f=u.occurrence,d=u.isEndOfRule;this.RULE_STACK.length===1&&d&&h===void 0&&(h=mo,f=1),!(h===void 0||f===void 0)&&this.shouldInRepetitionRecoveryBeTried(h,f,s)&&this.tryInRepetitionRecovery(t,e,r,h)}var OR,BR,PR,fk,FR=M(()=>{"use strict";p0();Ht();bg();gR();Us();OR={},BR="InRuleRecoveryException",PR=class extends Error{static{o(this,"InRuleRecoveryException")}constructor(e){super(e),this.name=BR}},fk=class{static{o(this,"Recoverable")}initRecoverable(e){this.firstAfterRepMap={},this.resyncFollows={},this.recoveryEnabled=Nt(e,"recoveryEnabled")?e.recoveryEnabled:hs.recoveryEnabled,this.recoveryEnabled&&(this.attemptInRepetitionRecovery=ZBe)}getTokenToInsert(e){let r=d0(e,"",NaN,NaN,NaN,NaN,NaN,NaN);return r.isInsertedInRecovery=!0,r}canTokenTypeBeInsertedInRecovery(e){return!0}canTokenTypeBeDeletedInRecovery(e){return!0}tryInRepetitionRecovery(e,r,n,i){let a=this.findReSyncTokenType(),s=this.exportLexerState(),l=[],u=!1,h=this.LA(1),f=this.LA(1),d=o(()=>{let p=this.LA(0),m=this.errorMessageProvider.buildMismatchTokenMessage({expected:i,actual:h,previous:p,ruleName:this.getCurrRuleFullName()}),g=new m0(m,h,this.LA(0));g.resyncedTokens=zu(l),this.SAVE_ERROR(g)},"generateErrorMessage");for(;!u;)if(this.tokenMatcher(f,i)){d();return}else if(n.call(this)){d(),e.apply(this,r);return}else this.tokenMatcher(f,a)?u=!0:(f=this.SKIP_TOKEN(),this.addToResyncTokens(f,l));this.importLexerState(s)}shouldInRepetitionRecoveryBeTried(e,r,n){return!(n===!1||this.tokenMatcher(this.LA(1),e)||this.isBackTracking()||this.canPerformInRuleRecovery(e,this.getFollowsForInRuleRecovery(e,r)))}getFollowsForInRuleRecovery(e,r){let n=this.getCurrentGrammarPath(e,r);return this.getNextPossibleTokenTypes(n)}tryInRuleRecovery(e,r){if(this.canRecoverWithSingleTokenInsertion(e,r))return this.getTokenToInsert(e);if(this.canRecoverWithSingleTokenDeletion(e)){let n=this.SKIP_TOKEN();return this.consumeToken(),n}throw new PR("sad sad panda")}canPerformInRuleRecovery(e,r){return this.canRecoverWithSingleTokenInsertion(e,r)||this.canRecoverWithSingleTokenDeletion(e)}canRecoverWithSingleTokenInsertion(e,r){if(!this.canTokenTypeBeInsertedInRecovery(e)||cr(r))return!1;let n=this.LA(1);return as(r,a=>this.tokenMatcher(n,a))!==void 0}canRecoverWithSingleTokenDeletion(e){return this.canTokenTypeBeDeletedInRecovery(e)?this.tokenMatcher(this.LA(2),e):!1}isInCurrentRuleReSyncSet(e){let r=this.getCurrFollowKey(),n=this.getFollowSetFromFollowKey(r);return Yn(n,e)}findReSyncTokenType(){let e=this.flattenFollowSet(),r=this.LA(1),n=2;for(;;){let i=as(e,a=>T2(r,a));if(i!==void 0)return i;r=this.LA(n),n++}}getCurrFollowKey(){if(this.RULE_STACK.length===1)return OR;let e=this.getLastExplicitRuleShortName(),r=this.getLastExplicitRuleOccurrenceIndex(),n=this.getPreviousExplicitRuleShortName();return{ruleName:this.shortRuleNameToFullName(e),idxInCallingRule:r,inRule:this.shortRuleNameToFullName(n)}}buildFullFollowKeyStack(){let e=this.RULE_STACK,r=this.RULE_OCCURRENCE_STACK;return Qe(e,(n,i)=>i===0?OR:{ruleName:this.shortRuleNameToFullName(n),idxInCallingRule:r[i],inRule:this.shortRuleNameToFullName(e[i-1])})}flattenFollowSet(){let e=Qe(this.buildFullFollowKeyStack(),r=>this.getFollowSetFromFollowKey(r));return Wr(e)}getFollowSetFromFollowKey(e){if(e===OR)return[mo];let r=e.ruleName+e.idxInCallingRule+jT+e.inRule;return this.resyncFollows[r]}addToResyncTokens(e,r){return this.tokenMatcher(e,mo)||r.push(e),r}reSyncTo(e){let r=[],n=this.LA(1);for(;this.tokenMatcher(n,e)===!1;)n=this.SKIP_TOKEN(),this.addToResyncTokens(n,r);return zu(r)}attemptInRepetitionRecovery(e,r,n,i,a,s,l){}getCurrentGrammarPath(e,r){let n=this.getHumanReadableRuleStack(),i=rn(this.RULE_OCCURRENCE_STACK);return{ruleStack:n,occurrenceStack:i,lastTok:e,lastTokOccurrence:r}}getHumanReadableRuleStack(){return Qe(this.RULE_STACK,e=>this.shortRuleNameToFullName(e))}};o(ZBe,"attemptInRepetitionRecovery")});function dk(t,e,r){return r|e|t}var pk=M(()=>{"use strict";o(dk,"getKeyForAutomaticLookahead")});var ju,zR=M(()=>{"use strict";Ht();pg();Us();_2();vg();ju=class{static{o(this,"LLkLookaheadStrategy")}constructor(e){var r;this.maxLookahead=(r=e?.maxLookahead)!==null&&r!==void 0?r:hs.maxLookahead}validate(e){let r=this.validateNoLeftRecursion(e.rules);if(cr(r)){let n=this.validateEmptyOrAlternatives(e.rules),i=this.validateAmbiguousAlternationAlternatives(e.rules,this.maxLookahead),a=this.validateSomeNonEmptyLookaheadPath(e.rules,this.maxLookahead);return[...r,...n,...i,...a]}return r}validateNoLeftRecursion(e){return ba(e,r=>IR(r,r,Ul))}validateEmptyOrAlternatives(e){return ba(e,r=>Xse(r,Ul))}validateAmbiguousAlternationAlternatives(e,r){return ba(e,n=>jse(n,r,Ul))}validateSomeNonEmptyLookaheadPath(e,r){return Kse(e,r,Ul)}buildLookaheadForAlternation(e){return Bse(e.prodOccurrence,e.rule,e.maxLookahead,e.hasPredicates,e.dynamicTokensEnabled,zse)}buildLookaheadForOptional(e){return Fse(e.prodOccurrence,e.rule,e.maxLookahead,e.dynamicTokensEnabled,C2(e.prodType),Gse)}}});function JBe(t){mk.reset(),t.accept(mk);let e=mk.dslMethods;return mk.reset(),e}var gk,GR,mk,aoe=M(()=>{"use strict";Ht();Us();pk();us();zR();gk=class{static{o(this,"LooksAhead")}initLooksAhead(e){this.dynamicTokensEnabled=Nt(e,"dynamicTokensEnabled")?e.dynamicTokensEnabled:hs.dynamicTokensEnabled,this.maxLookahead=Nt(e,"maxLookahead")?e.maxLookahead:hs.maxLookahead,this.lookaheadStrategy=Nt(e,"lookaheadStrategy")?e.lookaheadStrategy:new ju({maxLookahead:this.maxLookahead}),this.lookAheadFuncsCache=new Map}preComputeLookaheadFunctions(e){Se(e,r=>{this.TRACE_INIT(`${r.name} Rule Lookahead`,()=>{let{alternation:n,repetition:i,option:a,repetitionMandatory:s,repetitionMandatoryWithSeparator:l,repetitionWithSeparator:u}=JBe(r);Se(n,h=>{let f=h.idx===0?"":h.idx;this.TRACE_INIT(`${Vs(h)}${f}`,()=>{let d=this.lookaheadStrategy.buildLookaheadForAlternation({prodOccurrence:h.idx,rule:r,maxLookahead:h.maxLookahead||this.maxLookahead,hasPredicates:h.hasPredicates,dynamicTokensEnabled:this.dynamicTokensEnabled}),p=dk(this.fullRuleNameToShort[r.name],256,h.idx);this.setLaFuncCache(p,d)})}),Se(i,h=>{this.computeLookaheadFunc(r,h.idx,768,"Repetition",h.maxLookahead,Vs(h))}),Se(a,h=>{this.computeLookaheadFunc(r,h.idx,512,"Option",h.maxLookahead,Vs(h))}),Se(s,h=>{this.computeLookaheadFunc(r,h.idx,1024,"RepetitionMandatory",h.maxLookahead,Vs(h))}),Se(l,h=>{this.computeLookaheadFunc(r,h.idx,1536,"RepetitionMandatoryWithSeparator",h.maxLookahead,Vs(h))}),Se(u,h=>{this.computeLookaheadFunc(r,h.idx,1280,"RepetitionWithSeparator",h.maxLookahead,Vs(h))})})})}computeLookaheadFunc(e,r,n,i,a,s){this.TRACE_INIT(`${s}${r===0?"":r}`,()=>{let l=this.lookaheadStrategy.buildLookaheadForOptional({prodOccurrence:r,rule:e,maxLookahead:a||this.maxLookahead,dynamicTokensEnabled:this.dynamicTokensEnabled,prodType:i}),u=dk(this.fullRuleNameToShort[e.name],n,r);this.setLaFuncCache(u,l)})}getKeyForAutomaticLookahead(e,r){let n=this.getLastExplicitRuleShortName();return dk(n,e,r)}getLaFuncFromCache(e){return this.lookAheadFuncsCache.get(e)}setLaFuncCache(e,r){this.lookAheadFuncsCache.set(e,r)}},GR=class extends cs{static{o(this,"DslMethodsCollectorVisitor")}constructor(){super(...arguments),this.dslMethods={option:[],alternation:[],repetition:[],repetitionWithSeparator:[],repetitionMandatory:[],repetitionMandatoryWithSeparator:[]}}reset(){this.dslMethods={option:[],alternation:[],repetition:[],repetitionWithSeparator:[],repetitionMandatory:[],repetitionMandatoryWithSeparator:[]}}visitOption(e){this.dslMethods.option.push(e)}visitRepetitionWithSeparator(e){this.dslMethods.repetitionWithSeparator.push(e)}visitRepetitionMandatory(e){this.dslMethods.repetitionMandatory.push(e)}visitRepetitionMandatoryWithSeparator(e){this.dslMethods.repetitionMandatoryWithSeparator.push(e)}visitRepetition(e){this.dslMethods.repetition.push(e)}visitAlternation(e){this.dslMethods.alternation.push(e)}},mk=new GR;o(JBe,"collectMethods")});function UR(t,e){isNaN(t.startOffset)===!0?(t.startOffset=e.startOffset,t.endOffset=e.endOffset):t.endOffset{"use strict";o(UR,"setNodeLocationOnlyOffset");o(HR,"setNodeLocationFull");o(soe,"addTerminalToCst");o(ooe,"addNoneTerminalToCst")});function WR(t,e){Object.defineProperty(t,eFe,{enumerable:!1,configurable:!0,writable:!1,value:e})}var eFe,coe=M(()=>{"use strict";eFe="name";o(WR,"defineNameProp")});function tFe(t,e){let r=Gr(t),n=r.length;for(let i=0;is.msg);throw Error(`Errors Detected in CST Visitor <${this.constructor.name}>: + ${a.join(` + +`).replace(/\n/g,` + `)}`)}},"validateVisitor")};return r.prototype=n,r.prototype.constructor=r,r._RULE_NAMES=e,r}function hoe(t,e,r){let n=o(function(){},"derivedConstructor");WR(n,t+"BaseSemanticsWithDefaults");let i=Object.create(r.prototype);return Se(e,a=>{i[a]=tFe}),n.prototype=i,n.prototype.constructor=n,n}function rFe(t,e){return nFe(t,e)}function nFe(t,e){let r=Yr(e,i=>_i(t[i])===!1),n=Qe(r,i=>({msg:`Missing visitor method: <${i}> on ${t.constructor.name} CST Visitor.`,type:YR.MISSING_METHOD,methodName:i}));return Rc(n)}var YR,foe=M(()=>{"use strict";Ht();coe();o(tFe,"defaultVisit");o(uoe,"createBaseSemanticVisitorConstructor");o(hoe,"createBaseVisitorConstructorWithDefaults");(function(t){t[t.REDUNDANT_METHOD=0]="REDUNDANT_METHOD",t[t.MISSING_METHOD=1]="MISSING_METHOD"})(YR||(YR={}));o(rFe,"validateVisitor");o(nFe,"validateMissingCstMethods")});var bk,doe=M(()=>{"use strict";loe();Ht();foe();Us();bk=class{static{o(this,"TreeBuilder")}initTreeBuilder(e){if(this.CST_STACK=[],this.outputCst=e.outputCst,this.nodeLocationTracking=Nt(e,"nodeLocationTracking")?e.nodeLocationTracking:hs.nodeLocationTracking,!this.outputCst)this.cstInvocationStateUpdate=ti,this.cstFinallyStateUpdate=ti,this.cstPostTerminal=ti,this.cstPostNonTerminal=ti,this.cstPostRule=ti;else if(/full/i.test(this.nodeLocationTracking))this.recoveryEnabled?(this.setNodeLocationFromToken=HR,this.setNodeLocationFromNode=HR,this.cstPostRule=ti,this.setInitialNodeLocation=this.setInitialNodeLocationFullRecovery):(this.setNodeLocationFromToken=ti,this.setNodeLocationFromNode=ti,this.cstPostRule=this.cstPostRuleFull,this.setInitialNodeLocation=this.setInitialNodeLocationFullRegular);else if(/onlyOffset/i.test(this.nodeLocationTracking))this.recoveryEnabled?(this.setNodeLocationFromToken=UR,this.setNodeLocationFromNode=UR,this.cstPostRule=ti,this.setInitialNodeLocation=this.setInitialNodeLocationOnlyOffsetRecovery):(this.setNodeLocationFromToken=ti,this.setNodeLocationFromNode=ti,this.cstPostRule=this.cstPostRuleOnlyOffset,this.setInitialNodeLocation=this.setInitialNodeLocationOnlyOffsetRegular);else if(/none/i.test(this.nodeLocationTracking))this.setNodeLocationFromToken=ti,this.setNodeLocationFromNode=ti,this.cstPostRule=ti,this.setInitialNodeLocation=ti;else throw Error(`Invalid config option: "${e.nodeLocationTracking}"`)}setInitialNodeLocationOnlyOffsetRecovery(e){e.location={startOffset:NaN,endOffset:NaN}}setInitialNodeLocationOnlyOffsetRegular(e){e.location={startOffset:this.LA(1).startOffset,endOffset:NaN}}setInitialNodeLocationFullRecovery(e){e.location={startOffset:NaN,startLine:NaN,startColumn:NaN,endOffset:NaN,endLine:NaN,endColumn:NaN}}setInitialNodeLocationFullRegular(e){let r=this.LA(1);e.location={startOffset:r.startOffset,startLine:r.startLine,startColumn:r.startColumn,endOffset:NaN,endLine:NaN,endColumn:NaN}}cstInvocationStateUpdate(e){let r={name:e,children:Object.create(null)};this.setInitialNodeLocation(r),this.CST_STACK.push(r)}cstFinallyStateUpdate(){this.CST_STACK.pop()}cstPostRuleFull(e){let r=this.LA(0),n=e.location;n.startOffset<=r.startOffset?(n.endOffset=r.endOffset,n.endLine=r.endLine,n.endColumn=r.endColumn):(n.startOffset=NaN,n.startLine=NaN,n.startColumn=NaN)}cstPostRuleOnlyOffset(e){let r=this.LA(0),n=e.location;n.startOffset<=r.startOffset?n.endOffset=r.endOffset:n.startOffset=NaN}cstPostTerminal(e,r){let n=this.CST_STACK[this.CST_STACK.length-1];soe(n,r,e),this.setNodeLocationFromToken(n.location,r)}cstPostNonTerminal(e,r){let n=this.CST_STACK[this.CST_STACK.length-1];ooe(n,r,e),this.setNodeLocationFromNode(n.location,e.location)}getBaseCstVisitorConstructor(){if(dr(this.baseCstVisitorConstructor)){let e=uoe(this.className,Gr(this.gastProductionsCache));return this.baseCstVisitorConstructor=e,e}return this.baseCstVisitorConstructor}getBaseCstVisitorConstructorWithDefaults(){if(dr(this.baseCstVisitorWithDefaultsConstructor)){let e=hoe(this.className,Gr(this.gastProductionsCache),this.getBaseCstVisitorConstructor());return this.baseCstVisitorWithDefaultsConstructor=e,e}return this.baseCstVisitorWithDefaultsConstructor}getLastExplicitRuleShortName(){let e=this.RULE_STACK;return e[e.length-1]}getPreviousExplicitRuleShortName(){let e=this.RULE_STACK;return e[e.length-2]}getLastExplicitRuleOccurrenceIndex(){let e=this.RULE_OCCURRENCE_STACK;return e[e.length-1]}}});var wk,poe=M(()=>{"use strict";Us();wk=class{static{o(this,"LexerAdapter")}initLexerAdapter(){this.tokVector=[],this.tokVectorLength=0,this.currIdx=-1}set input(e){if(this.selfAnalysisDone!==!0)throw Error("Missing invocation at the end of the Parser's constructor.");this.reset(),this.tokVector=e,this.tokVectorLength=e.length}get input(){return this.tokVector}SKIP_TOKEN(){return this.currIdx<=this.tokVector.length-2?(this.consumeToken(),this.LA(1)):wg}LA(e){let r=this.currIdx+e;return r<0||this.tokVectorLength<=r?wg:this.tokVector[r]}consumeToken(){this.currIdx++}exportLexerState(){return this.currIdx}importLexerState(e){this.currIdx=e}resetLexerState(){this.currIdx=-1}moveToTerminatedState(){this.currIdx=this.tokVector.length-1}getLexerPosition(){return this.exportLexerState()}}});var Tk,moe=M(()=>{"use strict";Ht();bg();Us();pg();_2();us();Tk=class{static{o(this,"RecognizerApi")}ACTION(e){return e.call(this)}consume(e,r,n){return this.consumeInternal(r,e,n)}subrule(e,r,n){return this.subruleInternal(r,e,n)}option(e,r){return this.optionInternal(r,e)}or(e,r){return this.orInternal(r,e)}many(e,r){return this.manyInternal(e,r)}atLeastOne(e,r){return this.atLeastOneInternal(e,r)}CONSUME(e,r){return this.consumeInternal(e,0,r)}CONSUME1(e,r){return this.consumeInternal(e,1,r)}CONSUME2(e,r){return this.consumeInternal(e,2,r)}CONSUME3(e,r){return this.consumeInternal(e,3,r)}CONSUME4(e,r){return this.consumeInternal(e,4,r)}CONSUME5(e,r){return this.consumeInternal(e,5,r)}CONSUME6(e,r){return this.consumeInternal(e,6,r)}CONSUME7(e,r){return this.consumeInternal(e,7,r)}CONSUME8(e,r){return this.consumeInternal(e,8,r)}CONSUME9(e,r){return this.consumeInternal(e,9,r)}SUBRULE(e,r){return this.subruleInternal(e,0,r)}SUBRULE1(e,r){return this.subruleInternal(e,1,r)}SUBRULE2(e,r){return this.subruleInternal(e,2,r)}SUBRULE3(e,r){return this.subruleInternal(e,3,r)}SUBRULE4(e,r){return this.subruleInternal(e,4,r)}SUBRULE5(e,r){return this.subruleInternal(e,5,r)}SUBRULE6(e,r){return this.subruleInternal(e,6,r)}SUBRULE7(e,r){return this.subruleInternal(e,7,r)}SUBRULE8(e,r){return this.subruleInternal(e,8,r)}SUBRULE9(e,r){return this.subruleInternal(e,9,r)}OPTION(e){return this.optionInternal(e,0)}OPTION1(e){return this.optionInternal(e,1)}OPTION2(e){return this.optionInternal(e,2)}OPTION3(e){return this.optionInternal(e,3)}OPTION4(e){return this.optionInternal(e,4)}OPTION5(e){return this.optionInternal(e,5)}OPTION6(e){return this.optionInternal(e,6)}OPTION7(e){return this.optionInternal(e,7)}OPTION8(e){return this.optionInternal(e,8)}OPTION9(e){return this.optionInternal(e,9)}OR(e){return this.orInternal(e,0)}OR1(e){return this.orInternal(e,1)}OR2(e){return this.orInternal(e,2)}OR3(e){return this.orInternal(e,3)}OR4(e){return this.orInternal(e,4)}OR5(e){return this.orInternal(e,5)}OR6(e){return this.orInternal(e,6)}OR7(e){return this.orInternal(e,7)}OR8(e){return this.orInternal(e,8)}OR9(e){return this.orInternal(e,9)}MANY(e){this.manyInternal(0,e)}MANY1(e){this.manyInternal(1,e)}MANY2(e){this.manyInternal(2,e)}MANY3(e){this.manyInternal(3,e)}MANY4(e){this.manyInternal(4,e)}MANY5(e){this.manyInternal(5,e)}MANY6(e){this.manyInternal(6,e)}MANY7(e){this.manyInternal(7,e)}MANY8(e){this.manyInternal(8,e)}MANY9(e){this.manyInternal(9,e)}MANY_SEP(e){this.manySepFirstInternal(0,e)}MANY_SEP1(e){this.manySepFirstInternal(1,e)}MANY_SEP2(e){this.manySepFirstInternal(2,e)}MANY_SEP3(e){this.manySepFirstInternal(3,e)}MANY_SEP4(e){this.manySepFirstInternal(4,e)}MANY_SEP5(e){this.manySepFirstInternal(5,e)}MANY_SEP6(e){this.manySepFirstInternal(6,e)}MANY_SEP7(e){this.manySepFirstInternal(7,e)}MANY_SEP8(e){this.manySepFirstInternal(8,e)}MANY_SEP9(e){this.manySepFirstInternal(9,e)}AT_LEAST_ONE(e){this.atLeastOneInternal(0,e)}AT_LEAST_ONE1(e){return this.atLeastOneInternal(1,e)}AT_LEAST_ONE2(e){this.atLeastOneInternal(2,e)}AT_LEAST_ONE3(e){this.atLeastOneInternal(3,e)}AT_LEAST_ONE4(e){this.atLeastOneInternal(4,e)}AT_LEAST_ONE5(e){this.atLeastOneInternal(5,e)}AT_LEAST_ONE6(e){this.atLeastOneInternal(6,e)}AT_LEAST_ONE7(e){this.atLeastOneInternal(7,e)}AT_LEAST_ONE8(e){this.atLeastOneInternal(8,e)}AT_LEAST_ONE9(e){this.atLeastOneInternal(9,e)}AT_LEAST_ONE_SEP(e){this.atLeastOneSepFirstInternal(0,e)}AT_LEAST_ONE_SEP1(e){this.atLeastOneSepFirstInternal(1,e)}AT_LEAST_ONE_SEP2(e){this.atLeastOneSepFirstInternal(2,e)}AT_LEAST_ONE_SEP3(e){this.atLeastOneSepFirstInternal(3,e)}AT_LEAST_ONE_SEP4(e){this.atLeastOneSepFirstInternal(4,e)}AT_LEAST_ONE_SEP5(e){this.atLeastOneSepFirstInternal(5,e)}AT_LEAST_ONE_SEP6(e){this.atLeastOneSepFirstInternal(6,e)}AT_LEAST_ONE_SEP7(e){this.atLeastOneSepFirstInternal(7,e)}AT_LEAST_ONE_SEP8(e){this.atLeastOneSepFirstInternal(8,e)}AT_LEAST_ONE_SEP9(e){this.atLeastOneSepFirstInternal(9,e)}RULE(e,r,n=Tg){if(Yn(this.definedRulesNames,e)){let s={message:Ul.buildDuplicateRuleNameError({topLevelRule:e,grammarName:this.className}),type:Ui.DUPLICATE_RULE_NAME,ruleName:e};this.definitionErrors.push(s)}this.definedRulesNames.push(e);let i=this.defineRule(e,r,n);return this[e]=i,i}OVERRIDE_RULE(e,r,n=Tg){let i=qse(e,this.definedRulesNames,this.className);this.definitionErrors=this.definitionErrors.concat(i);let a=this.defineRule(e,r,n);return this[e]=a,a}BACKTRACK(e,r){return function(){this.isBackTrackingStack.push(1);let n=this.saveRecogState();try{return e.apply(this,r),!0}catch(i){if(ff(i))return!1;throw i}finally{this.reloadRecogState(n),this.isBackTrackingStack.pop()}}}getGAstProductions(){return this.gastProductionsCache}getSerializedGastProductions(){return YT(br(this.gastProductionsCache))}}});var kk,goe=M(()=>{"use strict";Ht();pk();bg();vg();S2();Us();FR();p0();f0();kk=class{static{o(this,"RecognizerEngine")}initRecognizerEngine(e,r){if(this.className=this.constructor.name,this.shortRuleNameToFull={},this.fullRuleNameToShort={},this.ruleShortNameIdx=256,this.tokenMatcher=dg,this.subruleIdx=0,this.definedRulesNames=[],this.tokensMap={},this.isBackTrackingStack=[],this.RULE_STACK=[],this.RULE_OCCURRENCE_STACK=[],this.gastProductionsCache={},Nt(r,"serializedGrammar"))throw Error(`The Parser's configuration can no longer contain a property. + See: https://chevrotain.io/docs/changes/BREAKING_CHANGES.html#_6-0-0 + For Further details.`);if(Dt(e)){if(cr(e))throw Error(`A Token Vocabulary cannot be empty. + Note that the first argument for the parser constructor + is no longer a Token vector (since v4.0).`);if(typeof e[0].startOffset=="number")throw Error(`The Parser constructor no longer accepts a token vector as the first argument. + See: https://chevrotain.io/docs/changes/BREAKING_CHANGES.html#_4-0-0 + For Further details.`)}if(Dt(e))this.tokensMap=qr(e,(a,s)=>(a[s.name]=s,a),{});else if(Nt(e,"modes")&&za(Wr(br(e.modes)),Ese)){let a=Wr(br(e.modes)),s=Xm(a);this.tokensMap=qr(s,(l,u)=>(l[u.name]=u,l),{})}else if(xn(e))this.tokensMap=rn(e);else throw new Error(" argument must be An Array of Token constructors, A dictionary of Token constructors or an IMultiModeLexerDefinition");this.tokensMap.EOF=mo;let n=Nt(e,"modes")?Wr(br(e.modes)):br(e),i=za(n,a=>cr(a.categoryMatches));this.tokenMatcher=i?dg:Wu,Yu(br(this.tokensMap))}defineRule(e,r,n){if(this.selfAnalysisDone)throw Error(`Grammar rule <${e}> may not be defined after the 'performSelfAnalysis' method has been called' +Make sure that all grammar rule definitions are done before 'performSelfAnalysis' is called.`);let i=Nt(n,"resyncEnabled")?n.resyncEnabled:Tg.resyncEnabled,a=Nt(n,"recoveryValueFunc")?n.recoveryValueFunc:Tg.recoveryValueFunc,s=this.ruleShortNameIdx<<12;this.ruleShortNameIdx++,this.shortRuleNameToFull[s]=e,this.fullRuleNameToShort[e]=s;let l;return this.outputCst===!0?l=o(function(...f){try{this.ruleInvocationStateUpdate(s,e,this.subruleIdx),r.apply(this,f);let d=this.CST_STACK[this.CST_STACK.length-1];return this.cstPostRule(d),d}catch(d){return this.invokeRuleCatch(d,i,a)}finally{this.ruleFinallyStateUpdate()}},"invokeRuleWithTry"):l=o(function(...f){try{return this.ruleInvocationStateUpdate(s,e,this.subruleIdx),r.apply(this,f)}catch(d){return this.invokeRuleCatch(d,i,a)}finally{this.ruleFinallyStateUpdate()}},"invokeRuleWithTryCst"),Object.assign(l,{ruleName:e,originalGrammarAction:r})}invokeRuleCatch(e,r,n){let i=this.RULE_STACK.length===1,a=r&&!this.isBackTracking()&&this.recoveryEnabled;if(ff(e)){let s=e;if(a){let l=this.findReSyncTokenType();if(this.isInCurrentRuleReSyncSet(l))if(s.resyncedTokens=this.reSyncTo(l),this.outputCst){let u=this.CST_STACK[this.CST_STACK.length-1];return u.recoveredNode=!0,u}else return n(e);else{if(this.outputCst){let u=this.CST_STACK[this.CST_STACK.length-1];u.recoveredNode=!0,s.partialCstResult=u}throw s}}else{if(i)return this.moveToTerminatedState(),n(e);throw s}}else throw e}optionInternal(e,r){let n=this.getKeyForAutomaticLookahead(512,r);return this.optionInternalLogic(e,r,n)}optionInternalLogic(e,r,n){let i=this.getLaFuncFromCache(n),a;if(typeof e!="function"){a=e.DEF;let s=e.GATE;if(s!==void 0){let l=i;i=o(()=>s.call(this)&&l.call(this),"lookAheadFunc")}}else a=e;if(i.call(this)===!0)return a.call(this)}atLeastOneInternal(e,r){let n=this.getKeyForAutomaticLookahead(1024,e);return this.atLeastOneInternalLogic(e,r,n)}atLeastOneInternalLogic(e,r,n){let i=this.getLaFuncFromCache(n),a;if(typeof r!="function"){a=r.DEF;let s=r.GATE;if(s!==void 0){let l=i;i=o(()=>s.call(this)&&l.call(this),"lookAheadFunc")}}else a=r;if(i.call(this)===!0){let s=this.doSingleRepetition(a);for(;i.call(this)===!0&&s===!0;)s=this.doSingleRepetition(a)}else throw this.raiseEarlyExitException(e,Xn.REPETITION_MANDATORY,r.ERR_MSG);this.attemptInRepetitionRecovery(this.atLeastOneInternal,[e,r],i,1024,e,ak)}atLeastOneSepFirstInternal(e,r){let n=this.getKeyForAutomaticLookahead(1536,e);this.atLeastOneSepFirstInternalLogic(e,r,n)}atLeastOneSepFirstInternalLogic(e,r,n){let i=r.DEF,a=r.SEP;if(this.getLaFuncFromCache(n).call(this)===!0){i.call(this);let l=o(()=>this.tokenMatcher(this.LA(1),a),"separatorLookAheadFunc");for(;this.tokenMatcher(this.LA(1),a)===!0;)this.CONSUME(a),i.call(this);this.attemptInRepetitionRecovery(this.repetitionSepSecondInternal,[e,a,l,i,E2],l,1536,e,E2)}else throw this.raiseEarlyExitException(e,Xn.REPETITION_MANDATORY_WITH_SEPARATOR,r.ERR_MSG)}manyInternal(e,r){let n=this.getKeyForAutomaticLookahead(768,e);return this.manyInternalLogic(e,r,n)}manyInternalLogic(e,r,n){let i=this.getLaFuncFromCache(n),a;if(typeof r!="function"){a=r.DEF;let l=r.GATE;if(l!==void 0){let u=i;i=o(()=>l.call(this)&&u.call(this),"lookaheadFunction")}}else a=r;let s=!0;for(;i.call(this)===!0&&s===!0;)s=this.doSingleRepetition(a);this.attemptInRepetitionRecovery(this.manyInternal,[e,r],i,768,e,ik,s)}manySepFirstInternal(e,r){let n=this.getKeyForAutomaticLookahead(1280,e);this.manySepFirstInternalLogic(e,r,n)}manySepFirstInternalLogic(e,r,n){let i=r.DEF,a=r.SEP;if(this.getLaFuncFromCache(n).call(this)===!0){i.call(this);let l=o(()=>this.tokenMatcher(this.LA(1),a),"separatorLookAheadFunc");for(;this.tokenMatcher(this.LA(1),a)===!0;)this.CONSUME(a),i.call(this);this.attemptInRepetitionRecovery(this.repetitionSepSecondInternal,[e,a,l,i,k2],l,1280,e,k2)}}repetitionSepSecondInternal(e,r,n,i,a){for(;n();)this.CONSUME(r),i.call(this);this.attemptInRepetitionRecovery(this.repetitionSepSecondInternal,[e,r,n,i,a],n,1536,e,a)}doSingleRepetition(e){let r=this.getLexerPosition();return e.call(this),this.getLexerPosition()>r}orInternal(e,r){let n=this.getKeyForAutomaticLookahead(256,r),i=Dt(e)?e:e.DEF,s=this.getLaFuncFromCache(n).call(this,i);if(s!==void 0)return i[s].ALT.call(this);this.raiseNoAltException(r,e.ERR_MSG)}ruleFinallyStateUpdate(){if(this.RULE_STACK.pop(),this.RULE_OCCURRENCE_STACK.pop(),this.cstFinallyStateUpdate(),this.RULE_STACK.length===0&&this.isAtEndOfInput()===!1){let e=this.LA(1),r=this.errorMessageProvider.buildNotAllInputParsedMessage({firstRedundant:e,ruleName:this.getCurrRuleFullName()});this.SAVE_ERROR(new D2(r,e))}}subruleInternal(e,r,n){let i;try{let a=n!==void 0?n.ARGS:void 0;return this.subruleIdx=r,i=e.apply(this,a),this.cstPostNonTerminal(i,n!==void 0&&n.LABEL!==void 0?n.LABEL:e.ruleName),i}catch(a){throw this.subruleInternalError(a,n,e.ruleName)}}subruleInternalError(e,r,n){throw ff(e)&&e.partialCstResult!==void 0&&(this.cstPostNonTerminal(e.partialCstResult,r!==void 0&&r.LABEL!==void 0?r.LABEL:n),delete e.partialCstResult),e}consumeInternal(e,r,n){let i;try{let a=this.LA(1);this.tokenMatcher(a,e)===!0?(this.consumeToken(),i=a):this.consumeInternalError(e,a,n)}catch(a){i=this.consumeInternalRecovery(e,r,a)}return this.cstPostTerminal(n!==void 0&&n.LABEL!==void 0?n.LABEL:e.name,i),i}consumeInternalError(e,r,n){let i,a=this.LA(0);throw n!==void 0&&n.ERR_MSG?i=n.ERR_MSG:i=this.errorMessageProvider.buildMismatchTokenMessage({expected:e,actual:r,previous:a,ruleName:this.getCurrRuleFullName()}),this.SAVE_ERROR(new m0(i,r,a))}consumeInternalRecovery(e,r,n){if(this.recoveryEnabled&&n.name==="MismatchedTokenException"&&!this.isBackTracking()){let i=this.getFollowsForInRuleRecovery(e,r);try{return this.tryInRuleRecovery(e,i)}catch(a){throw a.name===BR?n:a}}else throw n}saveRecogState(){let e=this.errors,r=rn(this.RULE_STACK);return{errors:e,lexerState:this.exportLexerState(),RULE_STACK:r,CST_STACK:this.CST_STACK}}reloadRecogState(e){this.errors=e.errors,this.importLexerState(e.lexerState),this.RULE_STACK=e.RULE_STACK}ruleInvocationStateUpdate(e,r,n){this.RULE_OCCURRENCE_STACK.push(n),this.RULE_STACK.push(e),this.cstInvocationStateUpdate(r)}isBackTracking(){return this.isBackTrackingStack.length!==0}getCurrRuleFullName(){let e=this.getLastExplicitRuleShortName();return this.shortRuleNameToFull[e]}shortRuleNameToFullName(e){return this.shortRuleNameToFull[e]}isAtEndOfInput(){return this.tokenMatcher(this.LA(1),mo)}reset(){this.resetLexerState(),this.subruleIdx=0,this.isBackTrackingStack=[],this.errors=[],this.RULE_STACK=[],this.CST_STACK=[],this.RULE_OCCURRENCE_STACK=[]}}});var Ek,yoe=M(()=>{"use strict";bg();Ht();vg();Us();Ek=class{static{o(this,"ErrorHandler")}initErrorHandler(e){this._errors=[],this.errorMessageProvider=Nt(e,"errorMessageProvider")?e.errorMessageProvider:hs.errorMessageProvider}SAVE_ERROR(e){if(ff(e))return e.context={ruleStack:this.getHumanReadableRuleStack(),ruleOccurrenceStack:rn(this.RULE_OCCURRENCE_STACK)},this._errors.push(e),e;throw Error("Trying to save an Error which is not a RecognitionException")}get errors(){return rn(this._errors)}set errors(e){this._errors=e}raiseEarlyExitException(e,r,n){let i=this.getCurrRuleFullName(),a=this.getGAstProductions()[i],l=yg(e,a,r,this.maxLookahead)[0],u=[];for(let f=1;f<=this.maxLookahead;f++)u.push(this.LA(f));let h=this.errorMessageProvider.buildEarlyExitMessage({expectedIterationPaths:l,actual:u,previous:this.LA(0),customUserDescription:n,ruleName:i});throw this.SAVE_ERROR(new N2(h,this.LA(1),this.LA(0)))}raiseNoAltException(e,r){let n=this.getCurrRuleFullName(),i=this.getGAstProductions()[n],a=gg(e,i,this.maxLookahead),s=[];for(let h=1;h<=this.maxLookahead;h++)s.push(this.LA(h));let l=this.LA(0),u=this.errorMessageProvider.buildNoViableAltMessage({expectedPathsPerAlt:a,actual:s,previous:l,customUserDescription:r,ruleName:this.getCurrRuleFullName()});throw this.SAVE_ERROR(new L2(u,this.LA(1),l))}}});var Sk,voe=M(()=>{"use strict";S2();Ht();Sk=class{static{o(this,"ContentAssist")}initContentAssist(){}computeContentAssist(e,r){let n=this.gastProductionsCache[e];if(dr(n))throw Error(`Rule ->${e}<- does not exist in this grammar.`);return ok([n],r,this.tokenMatcher,this.maxLookahead)}getNextPossibleTokenTypes(e){let r=sa(e.ruleStack),i=this.getGAstProductions()[r];return new nk(i,e).startWalking()}}});function M2(t,e,r,n=!1){Ak(r);let i=xa(this.recordingProdStack),a=_i(e)?e:e.DEF,s=new t({definition:[],idx:r});return n&&(s.separator=e.SEP),Nt(e,"MAX_LOOKAHEAD")&&(s.maxLookahead=e.MAX_LOOKAHEAD),this.recordingProdStack.push(s),a.call(this),i.definition.push(s),this.recordingProdStack.pop(),_k}function sFe(t,e){Ak(e);let r=xa(this.recordingProdStack),n=Dt(t)===!1,i=n===!1?t:t.DEF,a=new wn({definition:[],idx:e,ignoreAmbiguities:n&&t.IGNORE_AMBIGUITIES===!0});Nt(t,"MAX_LOOKAHEAD")&&(a.maxLookahead=t.MAX_LOOKAHEAD);let s=qv(i,l=>_i(l.GATE));return a.hasPredicates=s,r.definition.push(a),Se(i,l=>{let u=new _n({definition:[]});a.definition.push(u),Nt(l,"IGNORE_AMBIGUITIES")?u.ignoreAmbiguities=l.IGNORE_AMBIGUITIES:Nt(l,"GATE")&&(u.ignoreAmbiguities=!0),this.recordingProdStack.push(u),l.ALT.call(this),this.recordingProdStack.pop()}),_k}function woe(t){return t===0?"":`${t}`}function Ak(t){if(t<0||t>boe){let e=new Error(`Invalid DSL Method idx value: <${t}> + Idx value must be a none negative value smaller than ${boe+1}`);throw e.KNOWN_RECORDER_ERROR=!0,e}}var _k,xoe,boe,Toe,koe,aFe,Ck,Eoe=M(()=>{"use strict";Ht();us();b2();f0();p0();Us();pk();_k={description:"This Object indicates the Parser is during Recording Phase"};Object.freeze(_k);xoe=!0,boe=Math.pow(2,8)-1,Toe=rk({name:"RECORDING_PHASE_TOKEN",pattern:ci.NA});Yu([Toe]);koe=d0(Toe,`This IToken indicates the Parser is in Recording Phase + See: https://chevrotain.io/docs/guide/internals.html#grammar-recording for details`,-1,-1,-1,-1,-1,-1);Object.freeze(koe);aFe={name:`This CSTNode indicates the Parser is in Recording Phase + See: https://chevrotain.io/docs/guide/internals.html#grammar-recording for details`,children:{}},Ck=class{static{o(this,"GastRecorder")}initGastRecorder(e){this.recordingProdStack=[],this.RECORDING_PHASE=!1}enableRecording(){this.RECORDING_PHASE=!0,this.TRACE_INIT("Enable Recording",()=>{for(let e=0;e<10;e++){let r=e>0?e:"";this[`CONSUME${r}`]=function(n,i){return this.consumeInternalRecord(n,e,i)},this[`SUBRULE${r}`]=function(n,i){return this.subruleInternalRecord(n,e,i)},this[`OPTION${r}`]=function(n){return this.optionInternalRecord(n,e)},this[`OR${r}`]=function(n){return this.orInternalRecord(n,e)},this[`MANY${r}`]=function(n){this.manyInternalRecord(e,n)},this[`MANY_SEP${r}`]=function(n){this.manySepFirstInternalRecord(e,n)},this[`AT_LEAST_ONE${r}`]=function(n){this.atLeastOneInternalRecord(e,n)},this[`AT_LEAST_ONE_SEP${r}`]=function(n){this.atLeastOneSepFirstInternalRecord(e,n)}}this.consume=function(e,r,n){return this.consumeInternalRecord(r,e,n)},this.subrule=function(e,r,n){return this.subruleInternalRecord(r,e,n)},this.option=function(e,r){return this.optionInternalRecord(r,e)},this.or=function(e,r){return this.orInternalRecord(r,e)},this.many=function(e,r){this.manyInternalRecord(e,r)},this.atLeastOne=function(e,r){this.atLeastOneInternalRecord(e,r)},this.ACTION=this.ACTION_RECORD,this.BACKTRACK=this.BACKTRACK_RECORD,this.LA=this.LA_RECORD})}disableRecording(){this.RECORDING_PHASE=!1,this.TRACE_INIT("Deleting Recording methods",()=>{let e=this;for(let r=0;r<10;r++){let n=r>0?r:"";delete e[`CONSUME${n}`],delete e[`SUBRULE${n}`],delete e[`OPTION${n}`],delete e[`OR${n}`],delete e[`MANY${n}`],delete e[`MANY_SEP${n}`],delete e[`AT_LEAST_ONE${n}`],delete e[`AT_LEAST_ONE_SEP${n}`]}delete e.consume,delete e.subrule,delete e.option,delete e.or,delete e.many,delete e.atLeastOne,delete e.ACTION,delete e.BACKTRACK,delete e.LA})}ACTION_RECORD(e){}BACKTRACK_RECORD(e,r){return()=>!0}LA_RECORD(e){return wg}topLevelRuleRecord(e,r){try{let n=new ls({definition:[],name:e});return n.name=e,this.recordingProdStack.push(n),r.call(this),this.recordingProdStack.pop(),n}catch(n){if(n.KNOWN_RECORDER_ERROR!==!0)try{n.message=n.message+` + This error was thrown during the "grammar recording phase" For more info see: + https://chevrotain.io/docs/guide/internals.html#grammar-recording`}catch{throw n}throw n}}optionInternalRecord(e,r){return M2.call(this,an,e,r)}atLeastOneInternalRecord(e,r){M2.call(this,Ln,r,e)}atLeastOneSepFirstInternalRecord(e,r){M2.call(this,Dn,r,e,xoe)}manyInternalRecord(e,r){M2.call(this,Dr,r,e)}manySepFirstInternalRecord(e,r){M2.call(this,bn,r,e,xoe)}orInternalRecord(e,r){return sFe.call(this,e,r)}subruleInternalRecord(e,r,n){if(Ak(r),!e||Nt(e,"ruleName")===!1){let l=new Error(` argument is invalid expecting a Parser method reference but got: <${JSON.stringify(e)}> + inside top level rule: <${this.recordingProdStack[0].name}>`);throw l.KNOWN_RECORDER_ERROR=!0,l}let i=xa(this.recordingProdStack),a=e.ruleName,s=new nn({idx:r,nonTerminalName:a,label:n?.LABEL,referencedRule:void 0});return i.definition.push(s),this.outputCst?aFe:_k}consumeInternalRecord(e,r,n){if(Ak(r),!ER(e)){let s=new Error(` argument is invalid expecting a TokenType reference but got: <${JSON.stringify(e)}> + inside top level rule: <${this.recordingProdStack[0].name}>`);throw s.KNOWN_RECORDER_ERROR=!0,s}let i=xa(this.recordingProdStack),a=new Er({idx:r,terminalType:e,label:n?.LABEL});return i.definition.push(a),koe}};o(M2,"recordProd");o(sFe,"recordOrProd");o(woe,"getIdxSuffix");o(Ak,"assertMethodIdxIsValid")});var Lk,Soe=M(()=>{"use strict";Ht();lg();Us();Lk=class{static{o(this,"PerformanceTracer")}initPerformanceTracer(e){if(Nt(e,"traceInitPerf")){let r=e.traceInitPerf,n=typeof r=="number";this.traceInitMaxIdent=n?r:1/0,this.traceInitPerf=n?r>0:r}else this.traceInitMaxIdent=0,this.traceInitPerf=hs.traceInitPerf;this.traceInitIndent=-1}TRACE_INIT(e,r){if(this.traceInitPerf===!0){this.traceInitIndent++;let n=new Array(this.traceInitIndent+1).join(" ");this.traceInitIndent <${e}>`);let{time:i,value:a}=y2(r),s=i>10?console.warn:console.log;return this.traceInitIndent time: ${i}ms`),this.traceInitIndent--,a}else return r()}}});function Coe(t,e){e.forEach(r=>{let n=r.prototype;Object.getOwnPropertyNames(n).forEach(i=>{if(i==="constructor")return;let a=Object.getOwnPropertyDescriptor(n,i);a&&(a.get||a.set)?Object.defineProperty(t.prototype,i,a):t.prototype[i]=r.prototype[i]})})}var Aoe=M(()=>{"use strict";o(Coe,"applyMixins")});function Dk(t=void 0){return function(){return t}}var wg,hs,Tg,Ui,I2,O2,Us=M(()=>{"use strict";Ht();lg();nse();p0();pg();Jse();FR();aoe();doe();poe();moe();goe();yoe();voe();Eoe();Soe();Aoe();_2();wg=d0(mo,"",NaN,NaN,NaN,NaN,NaN,NaN);Object.freeze(wg);hs=Object.freeze({recoveryEnabled:!1,maxLookahead:3,dynamicTokensEnabled:!1,outputCst:!0,errorMessageProvider:Xu,nodeLocationTracking:"none",traceInitPerf:!1,skipValidations:!1}),Tg=Object.freeze({recoveryValueFunc:o(()=>{},"recoveryValueFunc"),resyncEnabled:!0});(function(t){t[t.INVALID_RULE_NAME=0]="INVALID_RULE_NAME",t[t.DUPLICATE_RULE_NAME=1]="DUPLICATE_RULE_NAME",t[t.INVALID_RULE_OVERRIDE=2]="INVALID_RULE_OVERRIDE",t[t.DUPLICATE_PRODUCTIONS=3]="DUPLICATE_PRODUCTIONS",t[t.UNRESOLVED_SUBRULE_REF=4]="UNRESOLVED_SUBRULE_REF",t[t.LEFT_RECURSION=5]="LEFT_RECURSION",t[t.NONE_LAST_EMPTY_ALT=6]="NONE_LAST_EMPTY_ALT",t[t.AMBIGUOUS_ALTS=7]="AMBIGUOUS_ALTS",t[t.CONFLICT_TOKENS_RULES_NAMESPACE=8]="CONFLICT_TOKENS_RULES_NAMESPACE",t[t.INVALID_TOKEN_NAME=9]="INVALID_TOKEN_NAME",t[t.NO_NON_EMPTY_LOOKAHEAD=10]="NO_NON_EMPTY_LOOKAHEAD",t[t.AMBIGUOUS_PREFIX_ALTS=11]="AMBIGUOUS_PREFIX_ALTS",t[t.TOO_MANY_ALTS=12]="TOO_MANY_ALTS",t[t.CUSTOM_LOOKAHEAD_VALIDATION=13]="CUSTOM_LOOKAHEAD_VALIDATION"})(Ui||(Ui={}));o(Dk,"EMPTY_ALT");I2=class t{static{o(this,"Parser")}static performSelfAnalysis(e){throw Error("The **static** `performSelfAnalysis` method has been deprecated. \nUse the **instance** method with the same name instead.")}performSelfAnalysis(){this.TRACE_INIT("performSelfAnalysis",()=>{let e;this.selfAnalysisDone=!0;let r=this.className;this.TRACE_INIT("toFastProps",()=>{v2(this)}),this.TRACE_INIT("Grammar Recording",()=>{try{this.enableRecording(),Se(this.definedRulesNames,i=>{let s=this[i].originalGrammarAction,l;this.TRACE_INIT(`${i} Rule`,()=>{l=this.topLevelRuleRecord(i,s)}),this.gastProductionsCache[i]=l})}finally{this.disableRecording()}});let n=[];if(this.TRACE_INIT("Grammar Resolving",()=>{n=Qse({rules:br(this.gastProductionsCache)}),this.definitionErrors=this.definitionErrors.concat(n)}),this.TRACE_INIT("Grammar Validations",()=>{if(cr(n)&&this.skipValidations===!1){let i=Zse({rules:br(this.gastProductionsCache),tokenTypes:br(this.tokensMap),errMsgProvider:Ul,grammarName:r}),a=Hse({lookaheadStrategy:this.lookaheadStrategy,rules:br(this.gastProductionsCache),tokenTypes:br(this.tokensMap),grammarName:r});this.definitionErrors=this.definitionErrors.concat(i,a)}}),cr(this.definitionErrors)&&(this.recoveryEnabled&&this.TRACE_INIT("computeAllProdsFollows",()=>{let i=rse(br(this.gastProductionsCache));this.resyncFollows=i}),this.TRACE_INIT("ComputeLookaheadFunctions",()=>{var i,a;(a=(i=this.lookaheadStrategy).initialize)===null||a===void 0||a.call(i,{rules:br(this.gastProductionsCache)}),this.preComputeLookaheadFunctions(br(this.gastProductionsCache))})),!t.DEFER_DEFINITION_ERRORS_HANDLING&&!cr(this.definitionErrors))throw e=Qe(this.definitionErrors,i=>i.message),new Error(`Parser Definition Errors detected: + ${e.join(` +------------------------------- +`)}`)})}constructor(e,r){this.definitionErrors=[],this.selfAnalysisDone=!1;let n=this;if(n.initErrorHandler(r),n.initLexerAdapter(),n.initLooksAhead(r),n.initRecognizerEngine(e,r),n.initRecoverable(r),n.initTreeBuilder(r),n.initContentAssist(),n.initGastRecorder(r),n.initPerformanceTracer(r),Nt(r,"ignoredIssues"))throw new Error(`The IParserConfig property has been deprecated. + Please use the flag on the relevant DSL method instead. + See: https://chevrotain.io/docs/guide/resolving_grammar_errors.html#IGNORING_AMBIGUITIES + For further details.`);this.skipValidations=Nt(r,"skipValidations")?r.skipValidations:hs.skipValidations}};I2.DEFER_DEFINITION_ERRORS_HANDLING=!1;Coe(I2,[fk,gk,bk,wk,kk,Tk,Ek,Sk,Ck,Lk]);O2=class extends I2{static{o(this,"EmbeddedActionsParser")}constructor(e,r=hs){let n=rn(r);n.outputCst=!1,super(e,n)}}});var _oe=M(()=>{"use strict";us()});var Loe=M(()=>{"use strict"});var Doe=M(()=>{"use strict";_oe();Loe()});var Noe=M(()=>{"use strict";fR()});var g0=M(()=>{"use strict";fR();Us();b2();p0();vg();zR();pg();bg();CR();us();us();Doe();Noe()});function y0(t,e,r){return`${t.name}_${e}_${r}`}function Ooe(t){let e={decisionMap:{},decisionStates:[],ruleToStartState:new Map,ruleToStopState:new Map,states:[]};dFe(e,t);let r=t.length;for(let n=0;nPoe(t,e,s));return Cg(t,e,n,r,...i)}function xFe(t,e,r){let n=oa(t,e,r,{type:df});pf(t,n);let i=Cg(t,e,n,r,v0(t,e,r));return bFe(t,e,r,i)}function v0(t,e,r){let n=Yr(Qe(r.definition,i=>Poe(t,e,i)),i=>i!==void 0);return n.length===1?n[0]:n.length===0?void 0:TFe(t,n)}function Boe(t,e,r,n,i){let a=n.left,s=n.right,l=oa(t,e,r,{type:fFe});pf(t,l);let u=oa(t,e,r,{type:Ioe});return a.loopback=l,u.loopback=l,t.decisionMap[y0(e,i?"RepetitionMandatoryWithSeparator":"RepetitionMandatory",r.idx)]=l,Ni(s,l),i===void 0?(Ni(l,a),Ni(l,u)):(Ni(l,u),Ni(l,i.left),Ni(i.right,a)),{left:a,right:u}}function Foe(t,e,r,n,i){let a=n.left,s=n.right,l=oa(t,e,r,{type:hFe});pf(t,l);let u=oa(t,e,r,{type:Ioe}),h=oa(t,e,r,{type:uFe});return l.loopback=h,u.loopback=h,Ni(l,a),Ni(l,u),Ni(s,h),i!==void 0?(Ni(h,u),Ni(h,i.left),Ni(i.right,a)):Ni(h,l),t.decisionMap[y0(e,i?"RepetitionWithSeparator":"Repetition",r.idx)]=l,{left:l,right:u}}function bFe(t,e,r,n){let i=n.left,a=n.right;return Ni(i,a),t.decisionMap[y0(e,"Option",r.idx)]=i,n}function pf(t,e){return t.decisionStates.push(e),e.decision=t.decisionStates.length-1,e.decision}function Cg(t,e,r,n,...i){let a=oa(t,e,n,{type:cFe,start:r});r.end=a;for(let l of i)l!==void 0?(Ni(r,l.left),Ni(l.right,a)):Ni(r,a);let s={left:r,right:a};return t.decisionMap[y0(e,wFe(n),n.idx)]=r,s}function wFe(t){if(t instanceof wn)return"Alternation";if(t instanceof an)return"Option";if(t instanceof Dr)return"Repetition";if(t instanceof bn)return"RepetitionWithSeparator";if(t instanceof Ln)return"RepetitionMandatory";if(t instanceof Dn)return"RepetitionMandatoryWithSeparator";throw new Error("Invalid production type encountered")}function TFe(t,e){let r=e.length;for(let a=0;a{"use strict";Wm();GL();g0();o(y0,"buildATNKey");df=1,lFe=2,Roe=4,Moe=5,Sg=7,cFe=8,uFe=9,hFe=10,fFe=11,Ioe=12,P2=class{static{o(this,"AbstractTransition")}constructor(e){this.target=e}isEpsilon(){return!1}},kg=class extends P2{static{o(this,"AtomTransition")}constructor(e,r){super(e),this.tokenType=r}},B2=class extends P2{static{o(this,"EpsilonTransition")}constructor(e){super(e)}isEpsilon(){return!0}},Eg=class extends P2{static{o(this,"RuleTransition")}constructor(e,r,n){super(e),this.rule=r,this.followState=n}isEpsilon(){return!0}};o(Ooe,"createATN");o(dFe,"createRuleStartAndStopATNStates");o(Poe,"atom");o(pFe,"repetition");o(mFe,"repetitionSep");o(gFe,"repetitionMandatory");o(yFe,"repetitionMandatorySep");o(vFe,"alternation");o(xFe,"option");o(v0,"block");o(Boe,"plus");o(Foe,"star");o(bFe,"optional");o(pf,"defineDecisionState");o(Cg,"makeAlts");o(wFe,"getProdType");o(TFe,"makeBlock");o(XR,"tokenRef");o(kFe,"ruleRef");o(EFe,"buildRuleHandle");o(Ni,"epsilon");o(oa,"newState");o(jR,"addTransition");o(SFe,"removeState")});function KR(t,e=!0){return`${e?`a${t.alt}`:""}s${t.state.stateNumber}:${t.stack.map(r=>r.stateNumber.toString()).join("_")}`}var F2,Ag,Goe=M(()=>{"use strict";Wm();F2={},Ag=class{static{o(this,"ATNConfigSet")}constructor(){this.map={},this.configs=[]}get size(){return this.configs.length}finalize(){this.map={}}add(e){let r=KR(e);r in this.map||(this.map[r]=this.configs.length,this.configs.push(e))}get elements(){return this.configs}get alts(){return Qe(this.configs,e=>e.alt)}get key(){let e="";for(let r in this.map)e+=r+":";return e}};o(KR,"getATNConfigKey")});function CFe(t,e){let r={};return n=>{let i=n.toString(),a=r[i];return a!==void 0||(a={atnStartState:t,decision:e,states:{}},r[i]=a),a}}function Voe(t,e=!0){let r=new Set;for(let n of t){let i=new Set;for(let a of n){if(a===void 0){if(e)break;return!1}let s=[a.tokenTypeIdx].concat(a.categoryMatches);for(let l of s)if(r.has(l)){if(!i.has(l))return!1}else r.add(l),i.add(l)}}return!0}function AFe(t){let e=t.decisionStates.length,r=Array(e);for(let n=0;nqu(i)).join(", "),r=t.production.idx===0?"":t.production.idx,n=`Ambiguous Alternatives Detected: <${t.ambiguityIndices.join(", ")}> in <${RFe(t.production)}${r}> inside <${t.topLevelRule.name}> Rule, +<${e}> may appears as a prefix path in all these alternatives. +`;return n=n+`See: https://chevrotain.io/docs/guide/resolving_grammar_errors.html#AMBIGUOUS_ALTERNATIVES +For Further details.`,n}function RFe(t){if(t instanceof nn)return"SUBRULE";if(t instanceof an)return"OPTION";if(t instanceof wn)return"OR";if(t instanceof Ln)return"AT_LEAST_ONE";if(t instanceof Dn)return"AT_LEAST_ONE_SEP";if(t instanceof bn)return"MANY_SEP";if(t instanceof Dr)return"MANY";if(t instanceof Er)return"CONSUME";throw Error("non exhaustive match")}function MFe(t,e,r){let n=ba(e.configs.elements,a=>a.state.transitions),i=Qre(n.filter(a=>a instanceof kg).map(a=>a.tokenType),a=>a.tokenTypeIdx);return{actualToken:r,possibleTokenTypes:i,tokenPath:t}}function IFe(t,e){return t.edges[e.tokenTypeIdx]}function OFe(t,e,r){let n=new Ag,i=[];for(let s of t.elements){if(r.is(s.alt)===!1)continue;if(s.state.type===Sg){i.push(s);continue}let l=s.state.transitions.length;for(let u=0;u0&&!GFe(a))for(let s of i)a.add(s);return a}function PFe(t,e){if(t instanceof kg&&T2(e,t.tokenType))return t.target}function BFe(t,e){let r;for(let n of t.elements)if(e.is(n.alt)===!0){if(r===void 0)r=n.alt;else if(r!==n.alt)return}return r}function Hoe(t){return{configs:t,edges:{},isAcceptState:!1,prediction:-1}}function Uoe(t,e,r,n){return n=Woe(t,n),e.edges[r.tokenTypeIdx]=n,n}function Woe(t,e){if(e===F2)return e;let r=e.configs.key,n=t.states[r];return n!==void 0?n:(e.configs.finalize(),t.states[r]=e,e)}function FFe(t){let e=new Ag,r=t.transitions.length;for(let n=0;n0){let i=[...t.stack],s={state:i.pop(),alt:t.alt,stack:i};Rk(s,e)}else e.add(t);return}r.epsilonOnlyTransitions||e.add(t);let n=r.transitions.length;for(let i=0;i1)return!0;return!1}function WFe(t){for(let e of Array.from(t.values()))if(Object.keys(e).length===1)return!0;return!1}var Nk,$oe,z2,Yoe=M(()=>{"use strict";g0();zoe();Goe();XL();VL();Zre();Wm();_w();nT();lT();ZL();o(CFe,"createDFACache");Nk=class{static{o(this,"PredicateSet")}constructor(){this.predicates=[]}is(e){return e>=this.predicates.length||this.predicates[e]}set(e,r){this.predicates[e]=r}toString(){let e="",r=this.predicates.length;for(let n=0;nconsole.log(n)}initialize(e){this.atn=Ooe(e.rules),this.dfas=AFe(this.atn)}validateAmbiguousAlternationAlternatives(){return[]}validateEmptyOrAlternatives(){return[]}buildLookaheadForAlternation(e){let{prodOccurrence:r,rule:n,hasPredicates:i,dynamicTokensEnabled:a}=e,s=this.dfas,l=this.logging,u=y0(n,"Alternation",r),f=this.atn.decisionMap[u].decision,d=Qe(ck({maxLookahead:1,occurrence:r,prodType:"Alternation",rule:n}),p=>Qe(p,m=>m[0]));if(Voe(d,!1)&&!a){let p=qr(d,(m,g,y)=>(Se(g,v=>{v&&(m[v.tokenTypeIdx]=y,Se(v.categoryMatches,x=>{m[x]=y}))}),m),{});return i?function(m){var g;let y=this.LA(1),v=p[y.tokenTypeIdx];if(m!==void 0&&v!==void 0){let x=(g=m[v])===null||g===void 0?void 0:g.GATE;if(x!==void 0&&x.call(this)===!1)return}return v}:function(){let m=this.LA(1);return p[m.tokenTypeIdx]}}else return i?function(p){let m=new Nk,g=p===void 0?0:p.length;for(let v=0;vQe(p,m=>m[0]));if(Voe(d)&&d[0][0]&&!a){let p=d[0],m=Wr(p);if(m.length===1&&cr(m[0].categoryMatches)){let y=m[0].tokenTypeIdx;return function(){return this.LA(1).tokenTypeIdx===y}}else{let g=qr(m,(y,v)=>(v!==void 0&&(y[v.tokenTypeIdx]=!0,Se(v.categoryMatches,x=>{y[x]=!0})),y),{});return function(){let y=this.LA(1);return g[y.tokenTypeIdx]===!0}}}return function(){let p=QR.call(this,s,f,$oe,l);return typeof p=="object"?!1:p===0}}};o(Voe,"isLL1Sequence");o(AFe,"initATNSimulator");o(QR,"adaptivePredict");o(_Fe,"performLookahead");o(LFe,"computeLookaheadTarget");o(DFe,"reportLookaheadAmbiguity");o(NFe,"buildAmbiguityError");o(RFe,"getProductionDslName");o(MFe,"buildAdaptivePredictError");o(IFe,"getExistingTargetState");o(OFe,"computeReachSet");o(PFe,"getReachableTarget");o(BFe,"getUniqueAlt");o(Hoe,"newDFAState");o(Uoe,"addDFAEdge");o(Woe,"addDFAState");o(FFe,"computeStartState");o(Rk,"closure");o(zFe,"getEpsilonTarget");o(GFe,"hasConfigInRuleStopState");o($Fe,"allConfigsInRuleStopStates");o(VFe,"hasConflictTerminatingPrediction");o(UFe,"getConflictingAltSets");o(HFe,"hasConflictingAltSet");o(WFe,"hasStateAssociatedWithOneAlt")});var qoe=M(()=>{"use strict";Yoe()});var Xoe,ZR,joe,Mk,Xr,Nr,Ik,Koe,JR,Qoe,Zoe,Joe,ele,eM,tle,rle,nle,Ok,_g,Lg,tM,Dg,ile,rM,nM,iM,aM,sM,ale,sle,oM,ole,lM,G2,lle,cle,ule,hle,fle,dle,ple,mle,Pk,gle,yle,vle,xle,ble,wle,Tle,kle,Ele,Sle,Cle,Bk,Ale,_le,Lle,Dle,Nle,Rle,Mle,Ile,Ole,Ple,Ble,Fle,zle,cM,uM,Gle,$le,Vle,Ule,Hle,Wle,Yle,qle,Xle,hM,ze,fM=M(()=>{"use strict";(function(t){function e(r){return typeof r=="string"}o(e,"is"),t.is=e})(Xoe||(Xoe={}));(function(t){function e(r){return typeof r=="string"}o(e,"is"),t.is=e})(ZR||(ZR={}));(function(t){t.MIN_VALUE=-2147483648,t.MAX_VALUE=2147483647;function e(r){return typeof r=="number"&&t.MIN_VALUE<=r&&r<=t.MAX_VALUE}o(e,"is"),t.is=e})(joe||(joe={}));(function(t){t.MIN_VALUE=0,t.MAX_VALUE=2147483647;function e(r){return typeof r=="number"&&t.MIN_VALUE<=r&&r<=t.MAX_VALUE}o(e,"is"),t.is=e})(Mk||(Mk={}));(function(t){function e(n,i){return n===Number.MAX_VALUE&&(n=Mk.MAX_VALUE),i===Number.MAX_VALUE&&(i=Mk.MAX_VALUE),{line:n,character:i}}o(e,"create"),t.create=e;function r(n){let i=n;return ze.objectLiteral(i)&&ze.uinteger(i.line)&&ze.uinteger(i.character)}o(r,"is"),t.is=r})(Xr||(Xr={}));(function(t){function e(n,i,a,s){if(ze.uinteger(n)&&ze.uinteger(i)&&ze.uinteger(a)&&ze.uinteger(s))return{start:Xr.create(n,i),end:Xr.create(a,s)};if(Xr.is(n)&&Xr.is(i))return{start:n,end:i};throw new Error(`Range#create called with invalid arguments[${n}, ${i}, ${a}, ${s}]`)}o(e,"create"),t.create=e;function r(n){let i=n;return ze.objectLiteral(i)&&Xr.is(i.start)&&Xr.is(i.end)}o(r,"is"),t.is=r})(Nr||(Nr={}));(function(t){function e(n,i){return{uri:n,range:i}}o(e,"create"),t.create=e;function r(n){let i=n;return ze.objectLiteral(i)&&Nr.is(i.range)&&(ze.string(i.uri)||ze.undefined(i.uri))}o(r,"is"),t.is=r})(Ik||(Ik={}));(function(t){function e(n,i,a,s){return{targetUri:n,targetRange:i,targetSelectionRange:a,originSelectionRange:s}}o(e,"create"),t.create=e;function r(n){let i=n;return ze.objectLiteral(i)&&Nr.is(i.targetRange)&&ze.string(i.targetUri)&&Nr.is(i.targetSelectionRange)&&(Nr.is(i.originSelectionRange)||ze.undefined(i.originSelectionRange))}o(r,"is"),t.is=r})(Koe||(Koe={}));(function(t){function e(n,i,a,s){return{red:n,green:i,blue:a,alpha:s}}o(e,"create"),t.create=e;function r(n){let i=n;return ze.objectLiteral(i)&&ze.numberRange(i.red,0,1)&&ze.numberRange(i.green,0,1)&&ze.numberRange(i.blue,0,1)&&ze.numberRange(i.alpha,0,1)}o(r,"is"),t.is=r})(JR||(JR={}));(function(t){function e(n,i){return{range:n,color:i}}o(e,"create"),t.create=e;function r(n){let i=n;return ze.objectLiteral(i)&&Nr.is(i.range)&&JR.is(i.color)}o(r,"is"),t.is=r})(Qoe||(Qoe={}));(function(t){function e(n,i,a){return{label:n,textEdit:i,additionalTextEdits:a}}o(e,"create"),t.create=e;function r(n){let i=n;return ze.objectLiteral(i)&&ze.string(i.label)&&(ze.undefined(i.textEdit)||Lg.is(i))&&(ze.undefined(i.additionalTextEdits)||ze.typedArray(i.additionalTextEdits,Lg.is))}o(r,"is"),t.is=r})(Zoe||(Zoe={}));(function(t){t.Comment="comment",t.Imports="imports",t.Region="region"})(Joe||(Joe={}));(function(t){function e(n,i,a,s,l,u){let h={startLine:n,endLine:i};return ze.defined(a)&&(h.startCharacter=a),ze.defined(s)&&(h.endCharacter=s),ze.defined(l)&&(h.kind=l),ze.defined(u)&&(h.collapsedText=u),h}o(e,"create"),t.create=e;function r(n){let i=n;return ze.objectLiteral(i)&&ze.uinteger(i.startLine)&&ze.uinteger(i.startLine)&&(ze.undefined(i.startCharacter)||ze.uinteger(i.startCharacter))&&(ze.undefined(i.endCharacter)||ze.uinteger(i.endCharacter))&&(ze.undefined(i.kind)||ze.string(i.kind))}o(r,"is"),t.is=r})(ele||(ele={}));(function(t){function e(n,i){return{location:n,message:i}}o(e,"create"),t.create=e;function r(n){let i=n;return ze.defined(i)&&Ik.is(i.location)&&ze.string(i.message)}o(r,"is"),t.is=r})(eM||(eM={}));(function(t){t.Error=1,t.Warning=2,t.Information=3,t.Hint=4})(tle||(tle={}));(function(t){t.Unnecessary=1,t.Deprecated=2})(rle||(rle={}));(function(t){function e(r){let n=r;return ze.objectLiteral(n)&&ze.string(n.href)}o(e,"is"),t.is=e})(nle||(nle={}));(function(t){function e(n,i,a,s,l,u){let h={range:n,message:i};return ze.defined(a)&&(h.severity=a),ze.defined(s)&&(h.code=s),ze.defined(l)&&(h.source=l),ze.defined(u)&&(h.relatedInformation=u),h}o(e,"create"),t.create=e;function r(n){var i;let a=n;return ze.defined(a)&&Nr.is(a.range)&&ze.string(a.message)&&(ze.number(a.severity)||ze.undefined(a.severity))&&(ze.integer(a.code)||ze.string(a.code)||ze.undefined(a.code))&&(ze.undefined(a.codeDescription)||ze.string((i=a.codeDescription)===null||i===void 0?void 0:i.href))&&(ze.string(a.source)||ze.undefined(a.source))&&(ze.undefined(a.relatedInformation)||ze.typedArray(a.relatedInformation,eM.is))}o(r,"is"),t.is=r})(Ok||(Ok={}));(function(t){function e(n,i,...a){let s={title:n,command:i};return ze.defined(a)&&a.length>0&&(s.arguments=a),s}o(e,"create"),t.create=e;function r(n){let i=n;return ze.defined(i)&&ze.string(i.title)&&ze.string(i.command)}o(r,"is"),t.is=r})(_g||(_g={}));(function(t){function e(a,s){return{range:a,newText:s}}o(e,"replace"),t.replace=e;function r(a,s){return{range:{start:a,end:a},newText:s}}o(r,"insert"),t.insert=r;function n(a){return{range:a,newText:""}}o(n,"del"),t.del=n;function i(a){let s=a;return ze.objectLiteral(s)&&ze.string(s.newText)&&Nr.is(s.range)}o(i,"is"),t.is=i})(Lg||(Lg={}));(function(t){function e(n,i,a){let s={label:n};return i!==void 0&&(s.needsConfirmation=i),a!==void 0&&(s.description=a),s}o(e,"create"),t.create=e;function r(n){let i=n;return ze.objectLiteral(i)&&ze.string(i.label)&&(ze.boolean(i.needsConfirmation)||i.needsConfirmation===void 0)&&(ze.string(i.description)||i.description===void 0)}o(r,"is"),t.is=r})(tM||(tM={}));(function(t){function e(r){let n=r;return ze.string(n)}o(e,"is"),t.is=e})(Dg||(Dg={}));(function(t){function e(a,s,l){return{range:a,newText:s,annotationId:l}}o(e,"replace"),t.replace=e;function r(a,s,l){return{range:{start:a,end:a},newText:s,annotationId:l}}o(r,"insert"),t.insert=r;function n(a,s){return{range:a,newText:"",annotationId:s}}o(n,"del"),t.del=n;function i(a){let s=a;return Lg.is(s)&&(tM.is(s.annotationId)||Dg.is(s.annotationId))}o(i,"is"),t.is=i})(ile||(ile={}));(function(t){function e(n,i){return{textDocument:n,edits:i}}o(e,"create"),t.create=e;function r(n){let i=n;return ze.defined(i)&&oM.is(i.textDocument)&&Array.isArray(i.edits)}o(r,"is"),t.is=r})(rM||(rM={}));(function(t){function e(n,i,a){let s={kind:"create",uri:n};return i!==void 0&&(i.overwrite!==void 0||i.ignoreIfExists!==void 0)&&(s.options=i),a!==void 0&&(s.annotationId=a),s}o(e,"create"),t.create=e;function r(n){let i=n;return i&&i.kind==="create"&&ze.string(i.uri)&&(i.options===void 0||(i.options.overwrite===void 0||ze.boolean(i.options.overwrite))&&(i.options.ignoreIfExists===void 0||ze.boolean(i.options.ignoreIfExists)))&&(i.annotationId===void 0||Dg.is(i.annotationId))}o(r,"is"),t.is=r})(nM||(nM={}));(function(t){function e(n,i,a,s){let l={kind:"rename",oldUri:n,newUri:i};return a!==void 0&&(a.overwrite!==void 0||a.ignoreIfExists!==void 0)&&(l.options=a),s!==void 0&&(l.annotationId=s),l}o(e,"create"),t.create=e;function r(n){let i=n;return i&&i.kind==="rename"&&ze.string(i.oldUri)&&ze.string(i.newUri)&&(i.options===void 0||(i.options.overwrite===void 0||ze.boolean(i.options.overwrite))&&(i.options.ignoreIfExists===void 0||ze.boolean(i.options.ignoreIfExists)))&&(i.annotationId===void 0||Dg.is(i.annotationId))}o(r,"is"),t.is=r})(iM||(iM={}));(function(t){function e(n,i,a){let s={kind:"delete",uri:n};return i!==void 0&&(i.recursive!==void 0||i.ignoreIfNotExists!==void 0)&&(s.options=i),a!==void 0&&(s.annotationId=a),s}o(e,"create"),t.create=e;function r(n){let i=n;return i&&i.kind==="delete"&&ze.string(i.uri)&&(i.options===void 0||(i.options.recursive===void 0||ze.boolean(i.options.recursive))&&(i.options.ignoreIfNotExists===void 0||ze.boolean(i.options.ignoreIfNotExists)))&&(i.annotationId===void 0||Dg.is(i.annotationId))}o(r,"is"),t.is=r})(aM||(aM={}));(function(t){function e(r){let n=r;return n&&(n.changes!==void 0||n.documentChanges!==void 0)&&(n.documentChanges===void 0||n.documentChanges.every(i=>ze.string(i.kind)?nM.is(i)||iM.is(i)||aM.is(i):rM.is(i)))}o(e,"is"),t.is=e})(sM||(sM={}));(function(t){function e(n){return{uri:n}}o(e,"create"),t.create=e;function r(n){let i=n;return ze.defined(i)&&ze.string(i.uri)}o(r,"is"),t.is=r})(ale||(ale={}));(function(t){function e(n,i){return{uri:n,version:i}}o(e,"create"),t.create=e;function r(n){let i=n;return ze.defined(i)&&ze.string(i.uri)&&ze.integer(i.version)}o(r,"is"),t.is=r})(sle||(sle={}));(function(t){function e(n,i){return{uri:n,version:i}}o(e,"create"),t.create=e;function r(n){let i=n;return ze.defined(i)&&ze.string(i.uri)&&(i.version===null||ze.integer(i.version))}o(r,"is"),t.is=r})(oM||(oM={}));(function(t){function e(n,i,a,s){return{uri:n,languageId:i,version:a,text:s}}o(e,"create"),t.create=e;function r(n){let i=n;return ze.defined(i)&&ze.string(i.uri)&&ze.string(i.languageId)&&ze.integer(i.version)&&ze.string(i.text)}o(r,"is"),t.is=r})(ole||(ole={}));(function(t){t.PlainText="plaintext",t.Markdown="markdown";function e(r){let n=r;return n===t.PlainText||n===t.Markdown}o(e,"is"),t.is=e})(lM||(lM={}));(function(t){function e(r){let n=r;return ze.objectLiteral(r)&&lM.is(n.kind)&&ze.string(n.value)}o(e,"is"),t.is=e})(G2||(G2={}));(function(t){t.Text=1,t.Method=2,t.Function=3,t.Constructor=4,t.Field=5,t.Variable=6,t.Class=7,t.Interface=8,t.Module=9,t.Property=10,t.Unit=11,t.Value=12,t.Enum=13,t.Keyword=14,t.Snippet=15,t.Color=16,t.File=17,t.Reference=18,t.Folder=19,t.EnumMember=20,t.Constant=21,t.Struct=22,t.Event=23,t.Operator=24,t.TypeParameter=25})(lle||(lle={}));(function(t){t.PlainText=1,t.Snippet=2})(cle||(cle={}));(function(t){t.Deprecated=1})(ule||(ule={}));(function(t){function e(n,i,a){return{newText:n,insert:i,replace:a}}o(e,"create"),t.create=e;function r(n){let i=n;return i&&ze.string(i.newText)&&Nr.is(i.insert)&&Nr.is(i.replace)}o(r,"is"),t.is=r})(hle||(hle={}));(function(t){t.asIs=1,t.adjustIndentation=2})(fle||(fle={}));(function(t){function e(r){let n=r;return n&&(ze.string(n.detail)||n.detail===void 0)&&(ze.string(n.description)||n.description===void 0)}o(e,"is"),t.is=e})(dle||(dle={}));(function(t){function e(r){return{label:r}}o(e,"create"),t.create=e})(ple||(ple={}));(function(t){function e(r,n){return{items:r||[],isIncomplete:!!n}}o(e,"create"),t.create=e})(mle||(mle={}));(function(t){function e(n){return n.replace(/[\\`*_{}[\]()#+\-.!]/g,"\\$&")}o(e,"fromPlainText"),t.fromPlainText=e;function r(n){let i=n;return ze.string(i)||ze.objectLiteral(i)&&ze.string(i.language)&&ze.string(i.value)}o(r,"is"),t.is=r})(Pk||(Pk={}));(function(t){function e(r){let n=r;return!!n&&ze.objectLiteral(n)&&(G2.is(n.contents)||Pk.is(n.contents)||ze.typedArray(n.contents,Pk.is))&&(r.range===void 0||Nr.is(r.range))}o(e,"is"),t.is=e})(gle||(gle={}));(function(t){function e(r,n){return n?{label:r,documentation:n}:{label:r}}o(e,"create"),t.create=e})(yle||(yle={}));(function(t){function e(r,n,...i){let a={label:r};return ze.defined(n)&&(a.documentation=n),ze.defined(i)?a.parameters=i:a.parameters=[],a}o(e,"create"),t.create=e})(vle||(vle={}));(function(t){t.Text=1,t.Read=2,t.Write=3})(xle||(xle={}));(function(t){function e(r,n){let i={range:r};return ze.number(n)&&(i.kind=n),i}o(e,"create"),t.create=e})(ble||(ble={}));(function(t){t.File=1,t.Module=2,t.Namespace=3,t.Package=4,t.Class=5,t.Method=6,t.Property=7,t.Field=8,t.Constructor=9,t.Enum=10,t.Interface=11,t.Function=12,t.Variable=13,t.Constant=14,t.String=15,t.Number=16,t.Boolean=17,t.Array=18,t.Object=19,t.Key=20,t.Null=21,t.EnumMember=22,t.Struct=23,t.Event=24,t.Operator=25,t.TypeParameter=26})(wle||(wle={}));(function(t){t.Deprecated=1})(Tle||(Tle={}));(function(t){function e(r,n,i,a,s){let l={name:r,kind:n,location:{uri:a,range:i}};return s&&(l.containerName=s),l}o(e,"create"),t.create=e})(kle||(kle={}));(function(t){function e(r,n,i,a){return a!==void 0?{name:r,kind:n,location:{uri:i,range:a}}:{name:r,kind:n,location:{uri:i}}}o(e,"create"),t.create=e})(Ele||(Ele={}));(function(t){function e(n,i,a,s,l,u){let h={name:n,detail:i,kind:a,range:s,selectionRange:l};return u!==void 0&&(h.children=u),h}o(e,"create"),t.create=e;function r(n){let i=n;return i&&ze.string(i.name)&&ze.number(i.kind)&&Nr.is(i.range)&&Nr.is(i.selectionRange)&&(i.detail===void 0||ze.string(i.detail))&&(i.deprecated===void 0||ze.boolean(i.deprecated))&&(i.children===void 0||Array.isArray(i.children))&&(i.tags===void 0||Array.isArray(i.tags))}o(r,"is"),t.is=r})(Sle||(Sle={}));(function(t){t.Empty="",t.QuickFix="quickfix",t.Refactor="refactor",t.RefactorExtract="refactor.extract",t.RefactorInline="refactor.inline",t.RefactorRewrite="refactor.rewrite",t.Source="source",t.SourceOrganizeImports="source.organizeImports",t.SourceFixAll="source.fixAll"})(Cle||(Cle={}));(function(t){t.Invoked=1,t.Automatic=2})(Bk||(Bk={}));(function(t){function e(n,i,a){let s={diagnostics:n};return i!=null&&(s.only=i),a!=null&&(s.triggerKind=a),s}o(e,"create"),t.create=e;function r(n){let i=n;return ze.defined(i)&&ze.typedArray(i.diagnostics,Ok.is)&&(i.only===void 0||ze.typedArray(i.only,ze.string))&&(i.triggerKind===void 0||i.triggerKind===Bk.Invoked||i.triggerKind===Bk.Automatic)}o(r,"is"),t.is=r})(Ale||(Ale={}));(function(t){function e(n,i,a){let s={title:n},l=!0;return typeof i=="string"?(l=!1,s.kind=i):_g.is(i)?s.command=i:s.edit=i,l&&a!==void 0&&(s.kind=a),s}o(e,"create"),t.create=e;function r(n){let i=n;return i&&ze.string(i.title)&&(i.diagnostics===void 0||ze.typedArray(i.diagnostics,Ok.is))&&(i.kind===void 0||ze.string(i.kind))&&(i.edit!==void 0||i.command!==void 0)&&(i.command===void 0||_g.is(i.command))&&(i.isPreferred===void 0||ze.boolean(i.isPreferred))&&(i.edit===void 0||sM.is(i.edit))}o(r,"is"),t.is=r})(_le||(_le={}));(function(t){function e(n,i){let a={range:n};return ze.defined(i)&&(a.data=i),a}o(e,"create"),t.create=e;function r(n){let i=n;return ze.defined(i)&&Nr.is(i.range)&&(ze.undefined(i.command)||_g.is(i.command))}o(r,"is"),t.is=r})(Lle||(Lle={}));(function(t){function e(n,i){return{tabSize:n,insertSpaces:i}}o(e,"create"),t.create=e;function r(n){let i=n;return ze.defined(i)&&ze.uinteger(i.tabSize)&&ze.boolean(i.insertSpaces)}o(r,"is"),t.is=r})(Dle||(Dle={}));(function(t){function e(n,i,a){return{range:n,target:i,data:a}}o(e,"create"),t.create=e;function r(n){let i=n;return ze.defined(i)&&Nr.is(i.range)&&(ze.undefined(i.target)||ze.string(i.target))}o(r,"is"),t.is=r})(Nle||(Nle={}));(function(t){function e(n,i){return{range:n,parent:i}}o(e,"create"),t.create=e;function r(n){let i=n;return ze.objectLiteral(i)&&Nr.is(i.range)&&(i.parent===void 0||t.is(i.parent))}o(r,"is"),t.is=r})(Rle||(Rle={}));(function(t){t.namespace="namespace",t.type="type",t.class="class",t.enum="enum",t.interface="interface",t.struct="struct",t.typeParameter="typeParameter",t.parameter="parameter",t.variable="variable",t.property="property",t.enumMember="enumMember",t.event="event",t.function="function",t.method="method",t.macro="macro",t.keyword="keyword",t.modifier="modifier",t.comment="comment",t.string="string",t.number="number",t.regexp="regexp",t.operator="operator",t.decorator="decorator"})(Mle||(Mle={}));(function(t){t.declaration="declaration",t.definition="definition",t.readonly="readonly",t.static="static",t.deprecated="deprecated",t.abstract="abstract",t.async="async",t.modification="modification",t.documentation="documentation",t.defaultLibrary="defaultLibrary"})(Ile||(Ile={}));(function(t){function e(r){let n=r;return ze.objectLiteral(n)&&(n.resultId===void 0||typeof n.resultId=="string")&&Array.isArray(n.data)&&(n.data.length===0||typeof n.data[0]=="number")}o(e,"is"),t.is=e})(Ole||(Ole={}));(function(t){function e(n,i){return{range:n,text:i}}o(e,"create"),t.create=e;function r(n){let i=n;return i!=null&&Nr.is(i.range)&&ze.string(i.text)}o(r,"is"),t.is=r})(Ple||(Ple={}));(function(t){function e(n,i,a){return{range:n,variableName:i,caseSensitiveLookup:a}}o(e,"create"),t.create=e;function r(n){let i=n;return i!=null&&Nr.is(i.range)&&ze.boolean(i.caseSensitiveLookup)&&(ze.string(i.variableName)||i.variableName===void 0)}o(r,"is"),t.is=r})(Ble||(Ble={}));(function(t){function e(n,i){return{range:n,expression:i}}o(e,"create"),t.create=e;function r(n){let i=n;return i!=null&&Nr.is(i.range)&&(ze.string(i.expression)||i.expression===void 0)}o(r,"is"),t.is=r})(Fle||(Fle={}));(function(t){function e(n,i){return{frameId:n,stoppedLocation:i}}o(e,"create"),t.create=e;function r(n){let i=n;return ze.defined(i)&&Nr.is(n.stoppedLocation)}o(r,"is"),t.is=r})(zle||(zle={}));(function(t){t.Type=1,t.Parameter=2;function e(r){return r===1||r===2}o(e,"is"),t.is=e})(cM||(cM={}));(function(t){function e(n){return{value:n}}o(e,"create"),t.create=e;function r(n){let i=n;return ze.objectLiteral(i)&&(i.tooltip===void 0||ze.string(i.tooltip)||G2.is(i.tooltip))&&(i.location===void 0||Ik.is(i.location))&&(i.command===void 0||_g.is(i.command))}o(r,"is"),t.is=r})(uM||(uM={}));(function(t){function e(n,i,a){let s={position:n,label:i};return a!==void 0&&(s.kind=a),s}o(e,"create"),t.create=e;function r(n){let i=n;return ze.objectLiteral(i)&&Xr.is(i.position)&&(ze.string(i.label)||ze.typedArray(i.label,uM.is))&&(i.kind===void 0||cM.is(i.kind))&&i.textEdits===void 0||ze.typedArray(i.textEdits,Lg.is)&&(i.tooltip===void 0||ze.string(i.tooltip)||G2.is(i.tooltip))&&(i.paddingLeft===void 0||ze.boolean(i.paddingLeft))&&(i.paddingRight===void 0||ze.boolean(i.paddingRight))}o(r,"is"),t.is=r})(Gle||(Gle={}));(function(t){function e(r){return{kind:"snippet",value:r}}o(e,"createSnippet"),t.createSnippet=e})($le||($le={}));(function(t){function e(r,n,i,a){return{insertText:r,filterText:n,range:i,command:a}}o(e,"create"),t.create=e})(Vle||(Vle={}));(function(t){function e(r){return{items:r}}o(e,"create"),t.create=e})(Ule||(Ule={}));(function(t){t.Invoked=0,t.Automatic=1})(Hle||(Hle={}));(function(t){function e(r,n){return{range:r,text:n}}o(e,"create"),t.create=e})(Wle||(Wle={}));(function(t){function e(r,n){return{triggerKind:r,selectedCompletionInfo:n}}o(e,"create"),t.create=e})(Yle||(Yle={}));(function(t){function e(r){let n=r;return ze.objectLiteral(n)&&ZR.is(n.uri)&&ze.string(n.name)}o(e,"is"),t.is=e})(qle||(qle={}));(function(t){function e(a,s,l,u){return new hM(a,s,l,u)}o(e,"create"),t.create=e;function r(a){let s=a;return!!(ze.defined(s)&&ze.string(s.uri)&&(ze.undefined(s.languageId)||ze.string(s.languageId))&&ze.uinteger(s.lineCount)&&ze.func(s.getText)&&ze.func(s.positionAt)&&ze.func(s.offsetAt))}o(r,"is"),t.is=r;function n(a,s){let l=a.getText(),u=i(s,(f,d)=>{let p=f.range.start.line-d.range.start.line;return p===0?f.range.start.character-d.range.start.character:p}),h=l.length;for(let f=u.length-1;f>=0;f--){let d=u[f],p=a.offsetAt(d.range.start),m=a.offsetAt(d.range.end);if(m<=h)l=l.substring(0,p)+d.newText+l.substring(m,l.length);else throw new Error("Overlapping edit");h=p}return l}o(n,"applyEdits"),t.applyEdits=n;function i(a,s){if(a.length<=1)return a;let l=a.length/2|0,u=a.slice(0,l),h=a.slice(l);i(u,s),i(h,s);let f=0,d=0,p=0;for(;f0&&e.push(r.length),this._lineOffsets=e}return this._lineOffsets}positionAt(e){e=Math.max(Math.min(e,this._content.length),0);let r=this.getLineOffsets(),n=0,i=r.length;if(i===0)return Xr.create(0,e);for(;ne?i=s:n=s+1}let a=n-1;return Xr.create(a,e-r[a])}offsetAt(e){let r=this.getLineOffsets();if(e.line>=r.length)return this._content.length;if(e.line<0)return 0;let n=r[e.line],i=e.line+1"u"}o(n,"undefined"),t.undefined=n;function i(m){return m===!0||m===!1}o(i,"boolean"),t.boolean=i;function a(m){return e.call(m)==="[object String]"}o(a,"string"),t.string=a;function s(m){return e.call(m)==="[object Number]"}o(s,"number"),t.number=s;function l(m,g,y){return e.call(m)==="[object Number]"&&g<=m&&m<=y}o(l,"numberRange"),t.numberRange=l;function u(m){return e.call(m)==="[object Number]"&&-2147483648<=m&&m<=2147483647}o(u,"integer"),t.integer=u;function h(m){return e.call(m)==="[object Number]"&&0<=m&&m<=2147483647}o(h,"uinteger"),t.uinteger=h;function f(m){return e.call(m)==="[object Function]"}o(f,"func"),t.func=f;function d(m){return m!==null&&typeof m=="object"}o(d,"objectLiteral"),t.objectLiteral=d;function p(m,g){return Array.isArray(m)&&m.every(g)}o(p,"typedArray"),t.typedArray=p})(ze||(ze={}))});var $2,V2,x0,b0,dM,Ng,Fk=M(()=>{"use strict";fM();Zo();zl();$2=class{static{o(this,"CstNodeBuilder")}constructor(){this.nodeStack=[]}get current(){return this.nodeStack[this.nodeStack.length-1]}buildRootNode(e){return this.rootNode=new Ng(e),this.rootNode.root=this.rootNode,this.nodeStack=[this.rootNode],this.rootNode}buildCompositeNode(e){let r=new b0;return r.grammarSource=e,r.root=this.rootNode,this.current.content.push(r),this.nodeStack.push(r),r}buildLeafNode(e,r){let n=new x0(e.startOffset,e.image.length,eg(e),e.tokenType,!1);return n.grammarSource=r,n.root=this.rootNode,this.current.content.push(n),n}removeNode(e){let r=e.container;if(r){let n=r.content.indexOf(e);n>=0&&r.content.splice(n,1)}}construct(e){let r=this.current;typeof e.$type=="string"&&(this.current.astNode=e),e.$cstNode=r;let n=this.nodeStack.pop();n?.content.length===0&&this.removeNode(n)}addHiddenTokens(e){for(let r of e){let n=new x0(r.startOffset,r.image.length,eg(r),r.tokenType,!0);n.root=this.rootNode,this.addHiddenToken(this.rootNode,n)}}addHiddenToken(e,r){let{offset:n,end:i}=r;for(let a=0;al&&i=0;e--){let r=this.content[e];if(!r.hidden)return r}return this.content[this.content.length-1]}},dM=class t extends Array{static{o(this,"CstNodeContainer")}constructor(e){super(),this.parent=e,Object.setPrototypeOf(this,t.prototype)}push(...e){return this.addParents(e),super.push(...e)}unshift(...e){return this.addParents(e),super.unshift(...e)}splice(e,r,...n){return this.addParents(n),super.splice(e,r,...n)}addParents(e){for(let r of e)r.container=this.parent}},Ng=class extends b0{static{o(this,"RootCstNodeImpl")}get text(){return this._text.substring(this.offset,this.end)}get fullText(){return this._text}constructor(e){super(),this._text="",this._text=e??""}}});function pM(t){return t.$type===zk}var zk,jle,Kle,U2,H2,Gk,Rg,W2,YFe,mM,Y2=M(()=>{"use strict";g0();qoe();Bc();Vl();os();Fk();zk=Symbol("Datatype");o(pM,"isDataTypeNode");jle="\u200B",Kle=o(t=>t.endsWith(jle)?t:t+jle,"withRuleSuffix"),U2=class{static{o(this,"AbstractLangiumParser")}constructor(e){this._unorderedGroups=new Map,this.lexer=e.parser.Lexer;let r=this.lexer.definition;this.wrapper=new mM(r,Object.assign(Object.assign({},e.parser.ParserConfig),{errorMessageProvider:e.parser.ParserErrorMessageProvider}))}alternatives(e,r){this.wrapper.wrapOr(e,r)}optional(e,r){this.wrapper.wrapOption(e,r)}many(e,r){this.wrapper.wrapMany(e,r)}atLeastOne(e,r){this.wrapper.wrapAtLeastOne(e,r)}isRecording(){return this.wrapper.IS_RECORDING}get unorderedGroups(){return this._unorderedGroups}getRuleStack(){return this.wrapper.RULE_STACK}finalize(){this.wrapper.wrapSelfAnalysis()}},H2=class extends U2{static{o(this,"LangiumParser")}get current(){return this.stack[this.stack.length-1]}constructor(e){super(e),this.nodeBuilder=new $2,this.stack=[],this.assignmentMap=new Map,this.linker=e.references.Linker,this.converter=e.parser.ValueConverter,this.astReflection=e.shared.AstReflection}rule(e,r){let n=e.fragment?void 0:m2(e)?zk:l0(e),i=this.wrapper.DEFINE_RULE(Kle(e.name),this.startImplementation(n,r).bind(this));return e.entry&&(this.mainRule=i),i}parse(e){this.nodeBuilder.buildRootNode(e);let r=this.lexer.tokenize(e);this.wrapper.input=r.tokens;let n=this.mainRule.call(this.wrapper,{});return this.nodeBuilder.addHiddenTokens(r.hidden),this.unorderedGroups.clear(),{value:n,lexerErrors:r.errors,parserErrors:this.wrapper.errors}}startImplementation(e,r){return n=>{if(!this.isRecording()){let a={$type:e};this.stack.push(a),e===zk&&(a.value="")}let i;try{i=r(n)}catch{i=void 0}return!this.isRecording()&&i===void 0&&(i=this.construct()),i}}consume(e,r,n){let i=this.wrapper.wrapConsume(e,r);if(!this.isRecording()&&this.isValidToken(i)){let a=this.nodeBuilder.buildLeafNode(i,n),{assignment:s,isCrossRef:l}=this.getAssignment(n),u=this.current;if(s){let h=el(n)?i.image:this.converter.convert(i.image,a);this.assign(s.operator,s.feature,h,a,l)}else if(pM(u)){let h=i.image;el(n)||(h=this.converter.convert(h,a).toString()),u.value+=h}}}isValidToken(e){return!e.isInsertedInRecovery&&!isNaN(e.startOffset)&&typeof e.endOffset=="number"&&!isNaN(e.endOffset)}subrule(e,r,n,i){let a;this.isRecording()||(a=this.nodeBuilder.buildCompositeNode(n));let s=this.wrapper.wrapSubrule(e,r,i);!this.isRecording()&&a&&a.length>0&&this.performSubruleAssignment(s,n,a)}performSubruleAssignment(e,r,n){let{assignment:i,isCrossRef:a}=this.getAssignment(r);if(i)this.assign(i.operator,i.feature,e,n,a);else if(!i){let s=this.current;if(pM(s))s.value+=e.toString();else if(typeof e=="object"&&e){let l=e.$type,u=this.assignWithoutOverride(e,s);l&&(u.$type=l);let h=u;this.stack.pop(),this.stack.push(h)}}}action(e,r){if(!this.isRecording()){let n=this.current;if(!n.$cstNode&&r.feature&&r.operator){n=this.construct(!1);let a=n.$cstNode.feature;this.nodeBuilder.buildCompositeNode(a)}let i={$type:e};this.stack.pop(),this.stack.push(i),r.feature&&r.operator&&this.assign(r.operator,r.feature,n,n.$cstNode,!1)}}construct(e=!0){if(this.isRecording())return;let r=this.current;return FT(r),this.nodeBuilder.construct(r),e&&this.stack.pop(),pM(r)?this.converter.convert(r.value,r.$cstNode):(UN(this.astReflection,r),r)}getAssignment(e){if(!this.assignmentMap.has(e)){let r=n0(e,Gl);this.assignmentMap.set(e,{assignment:r,isCrossRef:r?r0(r.terminal):!1})}return this.assignmentMap.get(e)}assign(e,r,n,i,a){let s=this.current,l;switch(a&&typeof n=="string"?l=this.linker.buildReference(s,r,i,n):l=n,e){case"=":{s[r]=l;break}case"?=":{s[r]=!0;break}case"+=":Array.isArray(s[r])||(s[r]=[]),s[r].push(l)}}assignWithoutOverride(e,r){for(let[n,i]of Object.entries(r)){let a=e[n];a===void 0?e[n]=i:Array.isArray(a)&&Array.isArray(i)&&(i.push(...a),e[n]=i)}return e}get definitionErrors(){return this.wrapper.definitionErrors}},Gk=class{static{o(this,"AbstractParserErrorMessageProvider")}buildMismatchTokenMessage(e){return Xu.buildMismatchTokenMessage(e)}buildNotAllInputParsedMessage(e){return Xu.buildNotAllInputParsedMessage(e)}buildNoViableAltMessage(e){return Xu.buildNoViableAltMessage(e)}buildEarlyExitMessage(e){return Xu.buildEarlyExitMessage(e)}},Rg=class extends Gk{static{o(this,"LangiumParserErrorMessageProvider")}buildMismatchTokenMessage({expected:e,actual:r}){return`Expecting ${e.LABEL?"`"+e.LABEL+"`":e.name.endsWith(":KW")?`keyword '${e.name.substring(0,e.name.length-3)}'`:`token of type '${e.name}'`} but found \`${r.image}\`.`}buildNotAllInputParsedMessage({firstRedundant:e}){return`Expecting end of file but found \`${e.image}\`.`}},W2=class extends U2{static{o(this,"LangiumCompletionParser")}constructor(){super(...arguments),this.tokens=[],this.elementStack=[],this.lastElementStack=[],this.nextTokenIndex=0,this.stackSize=0}action(){}construct(){}parse(e){this.resetState();let r=this.lexer.tokenize(e);return this.tokens=r.tokens,this.wrapper.input=[...this.tokens],this.mainRule.call(this.wrapper,{}),this.unorderedGroups.clear(),{tokens:this.tokens,elementStack:[...this.lastElementStack],tokenIndex:this.nextTokenIndex}}rule(e,r){let n=this.wrapper.DEFINE_RULE(Kle(e.name),this.startImplementation(r).bind(this));return e.entry&&(this.mainRule=n),n}resetState(){this.elementStack=[],this.lastElementStack=[],this.nextTokenIndex=0,this.stackSize=0}startImplementation(e){return r=>{let n=this.keepStackSize();try{e(r)}finally{this.resetStackSize(n)}}}removeUnexpectedElements(){this.elementStack.splice(this.stackSize)}keepStackSize(){let e=this.elementStack.length;return this.stackSize=e,e}resetStackSize(e){this.removeUnexpectedElements(),this.stackSize=e}consume(e,r,n){this.wrapper.wrapConsume(e,r),this.isRecording()||(this.lastElementStack=[...this.elementStack,n],this.nextTokenIndex=this.currIdx+1)}subrule(e,r,n,i){this.before(n),this.wrapper.wrapSubrule(e,r,i),this.after(n)}before(e){this.isRecording()||this.elementStack.push(e)}after(e){if(!this.isRecording()){let r=this.elementStack.lastIndexOf(e);r>=0&&this.elementStack.splice(r)}}get currIdx(){return this.wrapper.currIdx}},YFe={recoveryEnabled:!0,nodeLocationTracking:"full",skipValidations:!0,errorMessageProvider:new Rg},mM=class extends O2{static{o(this,"ChevrotainWrapper")}constructor(e,r){let n=r&&"maxLookahead"in r;super(e,Object.assign(Object.assign(Object.assign({},YFe),{lookaheadStrategy:n?new ju({maxLookahead:r.maxLookahead}):new z2}),r))}get IS_RECORDING(){return this.RECORDING_PHASE}DEFINE_RULE(e,r){return this.RULE(e,r)}wrapSelfAnalysis(){this.performSelfAnalysis()}wrapConsume(e,r){return this.consume(e,r)}wrapSubrule(e,r,n){return this.subrule(e,r,{ARGS:[n]})}wrapOr(e,r){this.or(e,r)}wrapOption(e,r){this.option(e,r)}wrapMany(e,r){this.many(e,r)}wrapAtLeastOne(e,r){this.atLeastOne(e,r)}}});function Vk(t,e,r){return qFe({parser:e,tokens:r,rules:new Map,ruleNames:new Map},t),e}function qFe(t,e){let r=d2(e,!1),n=tn(e.rules).filter(Ga).filter(i=>r.has(i));for(let i of n){let a=Object.assign(Object.assign({},t),{consume:1,optional:1,subrule:1,many:1,or:1});a.rules.set(i.name,t.parser.rule(i,w0(a,i.definition)))}}function w0(t,e,r=!1){let n;if(el(e))n=eze(t,e);else if(Vu(e))n=XFe(t,e);else if(Gl(e))n=w0(t,e.terminal);else if(r0(e))n=Qle(t,e);else if($l(e))n=jFe(t,e);else if(OT(e))n=QFe(t,e);else if(BT(e))n=ZFe(t,e);else if(hf(e))n=JFe(t,e);else if(kN(e)){let i=t.consume++;n=o(()=>t.parser.consume(i,mo,e),"method")}else throw new t0(e.$cstNode,`Unexpected element type: ${e.$type}`);return Zle(t,r?void 0:$k(e),n,e.cardinality)}function XFe(t,e){let r=l0(e);return()=>t.parser.action(r,e)}function jFe(t,e){let r=e.rule.ref;if(Ga(r)){let n=t.subrule++,i=e.arguments.length>0?KFe(r,e.arguments):()=>({});return a=>t.parser.subrule(n,Jle(t,r),e,i(a))}else if(Jo(r)){let n=t.consume++,i=gM(t,r.name);return()=>t.parser.consume(n,i,e)}else if(r)uf(r);else throw new t0(e.$cstNode,`Undefined rule type: ${e.$type}`)}function KFe(t,e){let r=e.map(n=>Ku(n.value));return n=>{let i={};for(let a=0;ae(n)||r(n)}else if(jD(t)){let e=Ku(t.left),r=Ku(t.right);return n=>e(n)&&r(n)}else if(rN(t)){let e=Ku(t.value);return r=>!e(r)}else if(sN(t)){let e=t.parameter.ref.name;return r=>r!==void 0&&r[e]===!0}else if(qD(t)){let e=!!t.true;return()=>e}uf(t)}function QFe(t,e){if(e.elements.length===1)return w0(t,e.elements[0]);{let r=[];for(let i of e.elements){let a={ALT:w0(t,i,!0)},s=$k(i);s&&(a.GATE=Ku(s)),r.push(a)}let n=t.or++;return i=>t.parser.alternatives(n,r.map(a=>{let s={ALT:o(()=>a.ALT(i),"ALT")},l=a.GATE;return l&&(s.GATE=()=>l(i)),s}))}}function ZFe(t,e){if(e.elements.length===1)return w0(t,e.elements[0]);let r=[];for(let l of e.elements){let u={ALT:w0(t,l,!0)},h=$k(l);h&&(u.GATE=Ku(h)),r.push(u)}let n=t.or++,i=o((l,u)=>{let h=u.getRuleStack().join("-");return`uGroup_${l}_${h}`},"idFunc"),a=o(l=>t.parser.alternatives(n,r.map((u,h)=>{let f={ALT:o(()=>!0,"ALT")},d=t.parser;f.ALT=()=>{if(u.ALT(l),!d.isRecording()){let m=i(n,d);d.unorderedGroups.get(m)||d.unorderedGroups.set(m,[]);let g=d.unorderedGroups.get(m);typeof g?.[h]>"u"&&(g[h]=!0)}};let p=u.GATE;return p?f.GATE=()=>p(l):f.GATE=()=>{let m=d.unorderedGroups.get(i(n,d));return!m?.[h]},f})),"alternatives"),s=Zle(t,$k(e),a,"*");return l=>{s(l),t.parser.isRecording()||t.parser.unorderedGroups.delete(i(n,t.parser))}}function JFe(t,e){let r=e.elements.map(n=>w0(t,n));return n=>r.forEach(i=>i(n))}function $k(t){if(hf(t))return t.guardCondition}function Qle(t,e,r=e.terminal){if(r)if($l(r)&&Ga(r.rule.ref)){let n=t.subrule++;return i=>t.parser.subrule(n,Jle(t,r.rule.ref),e,i)}else if($l(r)&&Jo(r.rule.ref)){let n=t.consume++,i=gM(t,r.rule.ref.name);return()=>t.parser.consume(n,i,e)}else if(el(r)){let n=t.consume++,i=gM(t,r.value);return()=>t.parser.consume(n,i,e)}else throw new Error("Could not build cross reference parser");else{if(!e.type.ref)throw new Error("Could not resolve reference to type: "+e.type.$refText);let n=HT(e.type.ref),i=n?.terminal;if(!i)throw new Error("Could not find name assignment for type: "+l0(e.type.ref));return Qle(t,e,i)}}function eze(t,e){let r=t.consume++,n=t.tokens[e.value];if(!n)throw new Error("Could not find token for keyword: "+e.value);return()=>t.parser.consume(r,n,e)}function Zle(t,e,r,n){let i=e&&Ku(e);if(!n)if(i){let a=t.or++;return s=>t.parser.alternatives(a,[{ALT:o(()=>r(s),"ALT"),GATE:o(()=>i(s),"GATE")},{ALT:Dk(),GATE:o(()=>!i(s),"GATE")}])}else return r;if(n==="*"){let a=t.many++;return s=>t.parser.many(a,{DEF:o(()=>r(s),"DEF"),GATE:i?()=>i(s):void 0})}else if(n==="+"){let a=t.many++;if(i){let s=t.or++;return l=>t.parser.alternatives(s,[{ALT:o(()=>t.parser.atLeastOne(a,{DEF:o(()=>r(l),"DEF")}),"ALT"),GATE:o(()=>i(l),"GATE")},{ALT:Dk(),GATE:o(()=>!i(l),"GATE")}])}else return s=>t.parser.atLeastOne(a,{DEF:o(()=>r(s),"DEF")})}else if(n==="?"){let a=t.optional++;return s=>t.parser.optional(a,{DEF:o(()=>r(s),"DEF"),GATE:i?()=>i(s):void 0})}else uf(n)}function Jle(t,e){let r=tze(t,e),n=t.rules.get(r);if(!n)throw new Error(`Rule "${r}" not found."`);return n}function tze(t,e){if(Ga(e))return e.name;if(t.ruleNames.has(e))return t.ruleNames.get(e);{let r=e,n=r.$container,i=e.$type;for(;!Ga(n);)(hf(n)||OT(n)||BT(n))&&(i=n.elements.indexOf(r).toString()+":"+i),r=n,n=n.$container;return i=n.name+":"+i,t.ruleNames.set(e,i),i}}function gM(t,e){let r=t.tokens[e];if(!r)throw new Error(`Token "${e}" not found."`);return r}var yM=M(()=>{"use strict";g0();Bc();_T();$s();Vl();o(Vk,"createParser");o(qFe,"buildRules");o(w0,"buildElement");o(XFe,"buildAction");o(jFe,"buildRuleCall");o(KFe,"buildRuleCallPredicate");o(Ku,"buildPredicate");o(QFe,"buildAlternatives");o(ZFe,"buildUnorderedGroup");o(JFe,"buildGroup");o($k,"getGuardCondition");o(Qle,"buildCrossReference");o(eze,"buildKeyword");o(Zle,"wrap");o(Jle,"getRule");o(tze,"getRuleName");o(gM,"getToken")});function vM(t){let e=t.Grammar,r=t.parser.Lexer,n=new W2(t);return Vk(e,n,r.definition),n.finalize(),n}var xM=M(()=>{"use strict";Y2();yM();o(vM,"createCompletionParser")});function bM(t){let e=ece(t);return e.finalize(),e}function ece(t){let e=t.Grammar,r=t.parser.Lexer,n=new H2(t);return Vk(e,n,r.definition)}var wM=M(()=>{"use strict";Y2();yM();o(bM,"createLangiumParser");o(ece,"prepareLangiumParser")});var T0,TM=M(()=>{"use strict";g0();Bc();os();Vl();ig();$s();T0=class{static{o(this,"DefaultTokenBuilder")}buildTokens(e,r){let n=tn(d2(e,!1)),i=this.buildTerminalTokens(n),a=this.buildKeywordTokens(n,i,r);return i.forEach(s=>{let l=s.PATTERN;typeof l=="object"&&l&&"test"in l&&VT(l)?a.unshift(s):a.push(s)}),a}buildTerminalTokens(e){return e.filter(Jo).filter(r=>!r.fragment).map(r=>this.buildTerminalToken(r)).toArray()}buildTerminalToken(e){let r=ag(e),n=this.requiresCustomPattern(r)?this.regexPatternFunction(r):r,i={name:e.name,PATTERN:n,LINE_BREAKS:!0};return e.hidden&&(i.GROUP=VT(r)?ci.SKIPPED:"hidden"),i}requiresCustomPattern(e){return e.flags.includes("u")?!0:!!(e.source.includes("?<=")||e.source.includes("?(r.lastIndex=i,r.exec(n))}buildKeywordTokens(e,r,n){return e.filter(Ga).flatMap(i=>Fc(i).filter(el)).distinct(i=>i.value).toArray().sort((i,a)=>a.value.length-i.value.length).map(i=>this.buildKeywordToken(i,r,!!n?.caseInsensitive))}buildKeywordToken(e,r,n){return{name:e.value,PATTERN:this.buildKeywordPattern(e,n),LONGER_ALT:this.findLongerAlt(e,r)}}buildKeywordPattern(e,r){return r?new RegExp(KN(e.value)):e.value}findLongerAlt(e,r){return r.reduce((n,i)=>{let a=i?.PATTERN;return a?.source&&QN("^"+a.source+"$",e.value)&&n.push(i),n},[])}}});var k0,$c,kM=M(()=>{"use strict";Bc();Vl();k0=class{static{o(this,"DefaultValueConverter")}convert(e,r){let n=r.grammarSource;if(r0(n)&&(n=eR(n)),$l(n)){let i=n.rule.ref;if(!i)throw new Error("This cst node was not parsed by a rule.");return this.runConverter(i,e,r)}return e}runConverter(e,r,n){var i;switch(e.name.toUpperCase()){case"INT":return $c.convertInt(r);case"STRING":return $c.convertString(r);case"ID":return $c.convertID(r)}switch((i=lR(e))===null||i===void 0?void 0:i.toLowerCase()){case"number":return $c.convertNumber(r);case"boolean":return $c.convertBoolean(r);case"bigint":return $c.convertBigint(r);case"date":return $c.convertDate(r);default:return r}}};(function(t){function e(h){let f="";for(let d=1;d{"use strict";Object.defineProperty(CM,"__esModule",{value:!0});var EM;function SM(){if(EM===void 0)throw new Error("No runtime abstraction layer installed");return EM}o(SM,"RAL");(function(t){function e(r){if(r===void 0)throw new Error("No runtime abstraction layer provided");EM=r}o(e,"install"),t.install=e})(SM||(SM={}));CM.default=SM});var nce=Ei($a=>{"use strict";Object.defineProperty($a,"__esModule",{value:!0});$a.stringArray=$a.array=$a.func=$a.error=$a.number=$a.string=$a.boolean=void 0;function rze(t){return t===!0||t===!1}o(rze,"boolean");$a.boolean=rze;function tce(t){return typeof t=="string"||t instanceof String}o(tce,"string");$a.string=tce;function nze(t){return typeof t=="number"||t instanceof Number}o(nze,"number");$a.number=nze;function ize(t){return t instanceof Error}o(ize,"error");$a.error=ize;function aze(t){return typeof t=="function"}o(aze,"func");$a.func=aze;function rce(t){return Array.isArray(t)}o(rce,"array");$a.array=rce;function sze(t){return rce(t)&&t.every(e=>tce(e))}o(sze,"stringArray");$a.stringArray=sze});var LM=Ei(Mg=>{"use strict";Object.defineProperty(Mg,"__esModule",{value:!0});Mg.Emitter=Mg.Event=void 0;var oze=AM(),ice;(function(t){let e={dispose(){}};t.None=function(){return e}})(ice||(Mg.Event=ice={}));var _M=class{static{o(this,"CallbackList")}add(e,r=null,n){this._callbacks||(this._callbacks=[],this._contexts=[]),this._callbacks.push(e),this._contexts.push(r),Array.isArray(n)&&n.push({dispose:o(()=>this.remove(e,r),"dispose")})}remove(e,r=null){if(!this._callbacks)return;let n=!1;for(let i=0,a=this._callbacks.length;i{this._callbacks||(this._callbacks=new _M),this._options&&this._options.onFirstListenerAdd&&this._callbacks.isEmpty()&&this._options.onFirstListenerAdd(this),this._callbacks.add(e,r);let i={dispose:o(()=>{this._callbacks&&(this._callbacks.remove(e,r),i.dispose=t._noop,this._options&&this._options.onLastListenerRemove&&this._callbacks.isEmpty()&&this._options.onLastListenerRemove(this))},"dispose")};return Array.isArray(n)&&n.push(i),i}),this._event}fire(e){this._callbacks&&this._callbacks.invoke.call(this._callbacks,e)}dispose(){this._callbacks&&(this._callbacks.dispose(),this._callbacks=void 0)}};Mg.Emitter=Uk;Uk._noop=function(){}});var ace=Ei(Ig=>{"use strict";Object.defineProperty(Ig,"__esModule",{value:!0});Ig.CancellationTokenSource=Ig.CancellationToken=void 0;var lze=AM(),cze=nce(),DM=LM(),Hk;(function(t){t.None=Object.freeze({isCancellationRequested:!1,onCancellationRequested:DM.Event.None}),t.Cancelled=Object.freeze({isCancellationRequested:!0,onCancellationRequested:DM.Event.None});function e(r){let n=r;return n&&(n===t.None||n===t.Cancelled||cze.boolean(n.isCancellationRequested)&&!!n.onCancellationRequested)}o(e,"is"),t.is=e})(Hk||(Ig.CancellationToken=Hk={}));var uze=Object.freeze(function(t,e){let r=(0,lze.default)().timer.setTimeout(t.bind(e),0);return{dispose(){r.dispose()}}}),Wk=class{static{o(this,"MutableToken")}constructor(){this._isCancelled=!1}cancel(){this._isCancelled||(this._isCancelled=!0,this._emitter&&(this._emitter.fire(void 0),this.dispose()))}get isCancellationRequested(){return this._isCancelled}get onCancellationRequested(){return this._isCancelled?uze:(this._emitter||(this._emitter=new DM.Emitter),this._emitter.event)}dispose(){this._emitter&&(this._emitter.dispose(),this._emitter=void 0)}},NM=class{static{o(this,"CancellationTokenSource")}get token(){return this._token||(this._token=new Wk),this._token}cancel(){this._token?this._token.cancel():this._token=Hk.Cancelled}dispose(){this._token?this._token instanceof Wk&&this._token.dispose():this._token=Hk.None}};Ig.CancellationTokenSource=NM});var Ar={};var rl=M(()=>{"use strict";Sr(Ar,Ji(ace(),1))});function MM(){return new Promise(t=>{typeof setImmediate>"u"?setTimeout(t,0):setImmediate(t)})}function oce(){return RM=Date.now(),new Ar.CancellationTokenSource}function lce(t){sce=t}function mf(t){return t===Vc}async function Hi(t){if(t===Ar.CancellationToken.None)return;let e=Date.now();if(e-RM>=sce&&(RM=e,await MM()),t.isCancellationRequested)throw Vc}var RM,sce,Vc,fs,nl=M(()=>{"use strict";rl();o(MM,"delayNextTick");RM=0,sce=10;o(oce,"startCancelableOperation");o(lce,"setInterruptionPeriod");Vc=Symbol("OperationCancelled");o(mf,"isOperationCancelled");o(Hi,"interruptAndCheck");fs=class{static{o(this,"Deferred")}constructor(){this.promise=new Promise((e,r)=>{this.resolve=n=>(e(n),this),this.reject=n=>(r(n),this)})}}});function IM(t,e){if(t.length<=1)return t;let r=t.length/2|0,n=t.slice(0,r),i=t.slice(r);IM(n,e),IM(i,e);let a=0,s=0,l=0;for(;ar.line||e.line===r.line&&e.character>r.character?{start:r,end:e}:t}function hze(t){let e=hce(t.range);return e!==t.range?{newText:t.newText,range:e}:t}var Yk,Og,fce=M(()=>{"use strict";Yk=class t{static{o(this,"FullTextDocument")}constructor(e,r,n,i){this._uri=e,this._languageId=r,this._version=n,this._content=i,this._lineOffsets=void 0}get uri(){return this._uri}get languageId(){return this._languageId}get version(){return this._version}getText(e){if(e){let r=this.offsetAt(e.start),n=this.offsetAt(e.end);return this._content.substring(r,n)}return this._content}update(e,r){for(let n of e)if(t.isIncremental(n)){let i=hce(n.range),a=this.offsetAt(i.start),s=this.offsetAt(i.end);this._content=this._content.substring(0,a)+n.text+this._content.substring(s,this._content.length);let l=Math.max(i.start.line,0),u=Math.max(i.end.line,0),h=this._lineOffsets,f=cce(n.text,!1,a);if(u-l===f.length)for(let p=0,m=f.length;pe?i=s:n=s+1}let a=n-1;return e=this.ensureBeforeEOL(e,r[a]),{line:a,character:e-r[a]}}offsetAt(e){let r=this.getLineOffsets();if(e.line>=r.length)return this._content.length;if(e.line<0)return 0;let n=r[e.line];if(e.character<=0)return n;let i=e.line+1r&&uce(this._content.charCodeAt(e-1));)e--;return e}get lineCount(){return this.getLineOffsets().length}static isIncremental(e){let r=e;return r!=null&&typeof r.text=="string"&&r.range!==void 0&&(r.rangeLength===void 0||typeof r.rangeLength=="number")}static isFull(e){let r=e;return r!=null&&typeof r.text=="string"&&r.range===void 0&&r.rangeLength===void 0}};(function(t){function e(i,a,s,l){return new Yk(i,a,s,l)}o(e,"create"),t.create=e;function r(i,a,s){if(i instanceof Yk)return i.update(a,s),i;throw new Error("TextDocument.update: document must be created by TextDocument.create")}o(r,"update"),t.update=r;function n(i,a){let s=i.getText(),l=IM(a.map(hze),(f,d)=>{let p=f.range.start.line-d.range.start.line;return p===0?f.range.start.character-d.range.start.character:p}),u=0,h=[];for(let f of l){let d=i.offsetAt(f.range.start);if(du&&h.push(s.substring(u,d)),f.newText.length&&h.push(f.newText),u=i.offsetAt(f.range.end)}return h.push(s.substr(u)),h.join("")}o(n,"applyEdits"),t.applyEdits=n})(Og||(Og={}));o(IM,"mergeSort");o(cce,"computeLineOffsets");o(uce,"isEOL");o(hce,"getWellformedRange");o(hze,"getWellformedEdit")});var dce,Hs,Pg,OM=M(()=>{"use strict";(()=>{"use strict";var t={470:i=>{function a(u){if(typeof u!="string")throw new TypeError("Path must be a string. Received "+JSON.stringify(u))}o(a,"e");function s(u,h){for(var f,d="",p=0,m=-1,g=0,y=0;y<=u.length;++y){if(y2){var v=d.lastIndexOf("/");if(v!==d.length-1){v===-1?(d="",p=0):p=(d=d.slice(0,v)).length-1-d.lastIndexOf("/"),m=y,g=0;continue}}else if(d.length===2||d.length===1){d="",p=0,m=y,g=0;continue}}h&&(d.length>0?d+="/..":d="..",p=2)}else d.length>0?d+="/"+u.slice(m+1,y):d=u.slice(m+1,y),p=y-m-1;m=y,g=0}else f===46&&g!==-1?++g:g=-1}return d}o(s,"r");var l={resolve:o(function(){for(var u,h="",f=!1,d=arguments.length-1;d>=-1&&!f;d--){var p;d>=0?p=arguments[d]:(u===void 0&&(u=process.cwd()),p=u),a(p),p.length!==0&&(h=p+"/"+h,f=p.charCodeAt(0)===47)}return h=s(h,!f),f?h.length>0?"/"+h:"/":h.length>0?h:"."},"resolve"),normalize:o(function(u){if(a(u),u.length===0)return".";var h=u.charCodeAt(0)===47,f=u.charCodeAt(u.length-1)===47;return(u=s(u,!h)).length!==0||h||(u="."),u.length>0&&f&&(u+="/"),h?"/"+u:u},"normalize"),isAbsolute:o(function(u){return a(u),u.length>0&&u.charCodeAt(0)===47},"isAbsolute"),join:o(function(){if(arguments.length===0)return".";for(var u,h=0;h0&&(u===void 0?u=f:u+="/"+f)}return u===void 0?".":l.normalize(u)},"join"),relative:o(function(u,h){if(a(u),a(h),u===h||(u=l.resolve(u))===(h=l.resolve(h)))return"";for(var f=1;fy){if(h.charCodeAt(m+x)===47)return h.slice(m+x+1);if(x===0)return h.slice(m+x)}else p>y&&(u.charCodeAt(f+x)===47?v=x:x===0&&(v=0));break}var b=u.charCodeAt(f+x);if(b!==h.charCodeAt(m+x))break;b===47&&(v=x)}var w="";for(x=f+v+1;x<=d;++x)x!==d&&u.charCodeAt(x)!==47||(w.length===0?w+="..":w+="/..");return w.length>0?w+h.slice(m+v):(m+=v,h.charCodeAt(m)===47&&++m,h.slice(m))},"relative"),_makeLong:o(function(u){return u},"_makeLong"),dirname:o(function(u){if(a(u),u.length===0)return".";for(var h=u.charCodeAt(0),f=h===47,d=-1,p=!0,m=u.length-1;m>=1;--m)if((h=u.charCodeAt(m))===47){if(!p){d=m;break}}else p=!1;return d===-1?f?"/":".":f&&d===1?"//":u.slice(0,d)},"dirname"),basename:o(function(u,h){if(h!==void 0&&typeof h!="string")throw new TypeError('"ext" argument must be a string');a(u);var f,d=0,p=-1,m=!0;if(h!==void 0&&h.length>0&&h.length<=u.length){if(h.length===u.length&&h===u)return"";var g=h.length-1,y=-1;for(f=u.length-1;f>=0;--f){var v=u.charCodeAt(f);if(v===47){if(!m){d=f+1;break}}else y===-1&&(m=!1,y=f+1),g>=0&&(v===h.charCodeAt(g)?--g==-1&&(p=f):(g=-1,p=y))}return d===p?p=y:p===-1&&(p=u.length),u.slice(d,p)}for(f=u.length-1;f>=0;--f)if(u.charCodeAt(f)===47){if(!m){d=f+1;break}}else p===-1&&(m=!1,p=f+1);return p===-1?"":u.slice(d,p)},"basename"),extname:o(function(u){a(u);for(var h=-1,f=0,d=-1,p=!0,m=0,g=u.length-1;g>=0;--g){var y=u.charCodeAt(g);if(y!==47)d===-1&&(p=!1,d=g+1),y===46?h===-1?h=g:m!==1&&(m=1):h!==-1&&(m=-1);else if(!p){f=g+1;break}}return h===-1||d===-1||m===0||m===1&&h===d-1&&h===f+1?"":u.slice(h,d)},"extname"),format:o(function(u){if(u===null||typeof u!="object")throw new TypeError('The "pathObject" argument must be of type Object. Received type '+typeof u);return function(h,f){var d=f.dir||f.root,p=f.base||(f.name||"")+(f.ext||"");return d?d===f.root?d+p:d+"/"+p:p}(0,u)},"format"),parse:o(function(u){a(u);var h={root:"",dir:"",base:"",ext:"",name:""};if(u.length===0)return h;var f,d=u.charCodeAt(0),p=d===47;p?(h.root="/",f=1):f=0;for(var m=-1,g=0,y=-1,v=!0,x=u.length-1,b=0;x>=f;--x)if((d=u.charCodeAt(x))!==47)y===-1&&(v=!1,y=x+1),d===46?m===-1?m=x:b!==1&&(b=1):m!==-1&&(b=-1);else if(!v){g=x+1;break}return m===-1||y===-1||b===0||b===1&&m===y-1&&m===g+1?y!==-1&&(h.base=h.name=g===0&&p?u.slice(1,y):u.slice(g,y)):(g===0&&p?(h.name=u.slice(1,m),h.base=u.slice(1,y)):(h.name=u.slice(g,m),h.base=u.slice(g,y)),h.ext=u.slice(m,y)),g>0?h.dir=u.slice(0,g-1):p&&(h.dir="/"),h},"parse"),sep:"/",delimiter:":",win32:null,posix:null};l.posix=l,i.exports=l}},e={};function r(i){var a=e[i];if(a!==void 0)return a.exports;var s=e[i]={exports:{}};return t[i](s,s.exports,r),s.exports}o(r,"r"),r.d=(i,a)=>{for(var s in a)r.o(a,s)&&!r.o(i,s)&&Object.defineProperty(i,s,{enumerable:!0,get:a[s]})},r.o=(i,a)=>Object.prototype.hasOwnProperty.call(i,a),r.r=i=>{typeof Symbol<"u"&&Symbol.toStringTag&&Object.defineProperty(i,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(i,"__esModule",{value:!0})};var n={};(()=>{let i;r.r(n),r.d(n,{URI:o(()=>p,"URI"),Utils:o(()=>I,"Utils")}),typeof process=="object"?i=process.platform==="win32":typeof navigator=="object"&&(i=navigator.userAgent.indexOf("Windows")>=0);let a=/^\w[\w\d+.-]*$/,s=/^\//,l=/^\/\//;function u(D,k){if(!D.scheme&&k)throw new Error(`[UriError]: Scheme is missing: {scheme: "", authority: "${D.authority}", path: "${D.path}", query: "${D.query}", fragment: "${D.fragment}"}`);if(D.scheme&&!a.test(D.scheme))throw new Error("[UriError]: Scheme contains illegal characters.");if(D.path){if(D.authority){if(!s.test(D.path))throw new Error('[UriError]: If a URI contains an authority component, then the path component must either be empty or begin with a slash ("/") character')}else if(l.test(D.path))throw new Error('[UriError]: If a URI does not contain an authority component, then the path cannot begin with two slash characters ("//")')}}o(u,"s");let h="",f="/",d=/^(([^:/?#]+?):)?(\/\/([^/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))?/;class p{static{o(this,"f")}static isUri(k){return k instanceof p||!!k&&typeof k.authority=="string"&&typeof k.fragment=="string"&&typeof k.path=="string"&&typeof k.query=="string"&&typeof k.scheme=="string"&&typeof k.fsPath=="string"&&typeof k.with=="function"&&typeof k.toString=="function"}scheme;authority;path;query;fragment;constructor(k,R,C,O,N,P=!1){typeof k=="object"?(this.scheme=k.scheme||h,this.authority=k.authority||h,this.path=k.path||h,this.query=k.query||h,this.fragment=k.fragment||h):(this.scheme=function(F,B){return F||B?F:"file"}(k,P),this.authority=R||h,this.path=function(F,B){switch(F){case"https":case"http":case"file":B?B[0]!==f&&(B=f+B):B=f}return B}(this.scheme,C||h),this.query=O||h,this.fragment=N||h,u(this,P))}get fsPath(){return b(this,!1)}with(k){if(!k)return this;let{scheme:R,authority:C,path:O,query:N,fragment:P}=k;return R===void 0?R=this.scheme:R===null&&(R=h),C===void 0?C=this.authority:C===null&&(C=h),O===void 0?O=this.path:O===null&&(O=h),N===void 0?N=this.query:N===null&&(N=h),P===void 0?P=this.fragment:P===null&&(P=h),R===this.scheme&&C===this.authority&&O===this.path&&N===this.query&&P===this.fragment?this:new g(R,C,O,N,P)}static parse(k,R=!1){let C=d.exec(k);return C?new g(C[2]||h,E(C[4]||h),E(C[5]||h),E(C[7]||h),E(C[9]||h),R):new g(h,h,h,h,h)}static file(k){let R=h;if(i&&(k=k.replace(/\\/g,f)),k[0]===f&&k[1]===f){let C=k.indexOf(f,2);C===-1?(R=k.substring(2),k=f):(R=k.substring(2,C),k=k.substring(C)||f)}return new g("file",R,k,h,h)}static from(k){let R=new g(k.scheme,k.authority,k.path,k.query,k.fragment);return u(R,!0),R}toString(k=!1){return w(this,k)}toJSON(){return this}static revive(k){if(k){if(k instanceof p)return k;{let R=new g(k);return R._formatted=k.external,R._fsPath=k._sep===m?k.fsPath:null,R}}return k}}let m=i?1:void 0;class g extends p{static{o(this,"l")}_formatted=null;_fsPath=null;get fsPath(){return this._fsPath||(this._fsPath=b(this,!1)),this._fsPath}toString(k=!1){return k?w(this,!0):(this._formatted||(this._formatted=w(this,!1)),this._formatted)}toJSON(){let k={$mid:1};return this._fsPath&&(k.fsPath=this._fsPath,k._sep=m),this._formatted&&(k.external=this._formatted),this.path&&(k.path=this.path),this.scheme&&(k.scheme=this.scheme),this.authority&&(k.authority=this.authority),this.query&&(k.query=this.query),this.fragment&&(k.fragment=this.fragment),k}}let y={58:"%3A",47:"%2F",63:"%3F",35:"%23",91:"%5B",93:"%5D",64:"%40",33:"%21",36:"%24",38:"%26",39:"%27",40:"%28",41:"%29",42:"%2A",43:"%2B",44:"%2C",59:"%3B",61:"%3D",32:"%20"};function v(D,k,R){let C,O=-1;for(let N=0;N=97&&P<=122||P>=65&&P<=90||P>=48&&P<=57||P===45||P===46||P===95||P===126||k&&P===47||R&&P===91||R&&P===93||R&&P===58)O!==-1&&(C+=encodeURIComponent(D.substring(O,N)),O=-1),C!==void 0&&(C+=D.charAt(N));else{C===void 0&&(C=D.substr(0,N));let F=y[P];F!==void 0?(O!==-1&&(C+=encodeURIComponent(D.substring(O,N)),O=-1),C+=F):O===-1&&(O=N)}}return O!==-1&&(C+=encodeURIComponent(D.substring(O))),C!==void 0?C:D}o(v,"d");function x(D){let k;for(let R=0;R1&&D.scheme==="file"?`//${D.authority}${D.path}`:D.path.charCodeAt(0)===47&&(D.path.charCodeAt(1)>=65&&D.path.charCodeAt(1)<=90||D.path.charCodeAt(1)>=97&&D.path.charCodeAt(1)<=122)&&D.path.charCodeAt(2)===58?k?D.path.substr(1):D.path[1].toLowerCase()+D.path.substr(2):D.path,i&&(R=R.replace(/\//g,"\\")),R}o(b,"m");function w(D,k){let R=k?x:v,C="",{scheme:O,authority:N,path:P,query:F,fragment:B}=D;if(O&&(C+=O,C+=":"),(N||O==="file")&&(C+=f,C+=f),N){let G=N.indexOf("@");if(G!==-1){let z=N.substr(0,G);N=N.substr(G+1),G=z.lastIndexOf(":"),G===-1?C+=R(z,!1,!1):(C+=R(z.substr(0,G),!1,!1),C+=":",C+=R(z.substr(G+1),!1,!0)),C+="@"}N=N.toLowerCase(),G=N.lastIndexOf(":"),G===-1?C+=R(N,!1,!0):(C+=R(N.substr(0,G),!1,!0),C+=N.substr(G))}if(P){if(P.length>=3&&P.charCodeAt(0)===47&&P.charCodeAt(2)===58){let G=P.charCodeAt(1);G>=65&&G<=90&&(P=`/${String.fromCharCode(G+32)}:${P.substr(3)}`)}else if(P.length>=2&&P.charCodeAt(1)===58){let G=P.charCodeAt(0);G>=65&&G<=90&&(P=`${String.fromCharCode(G+32)}:${P.substr(2)}`)}C+=R(P,!0,!1)}return F&&(C+="?",C+=R(F,!1,!1)),B&&(C+="#",C+=k?B:v(B,!1,!1)),C}o(w,"y");function _(D){try{return decodeURIComponent(D)}catch{return D.length>3?D.substr(0,3)+_(D.substr(3)):D}}o(_,"v");let T=/(%[0-9A-Za-z][0-9A-Za-z])+/g;function E(D){return D.match(T)?D.replace(T,k=>_(k)):D}o(E,"C");var L=r(470);let S=L.posix||L,A="/";var I;(function(D){D.joinPath=function(k,...R){return k.with({path:S.join(k.path,...R)})},D.resolvePath=function(k,...R){let C=k.path,O=!1;C[0]!==A&&(C=A+C,O=!0);let N=S.resolve(C,...R);return O&&N[0]===A&&!k.authority&&(N=N.substring(1)),k.with({path:N})},D.dirname=function(k){if(k.path.length===0||k.path===A)return k;let R=S.dirname(k.path);return R.length===1&&R.charCodeAt(0)===46&&(R=""),k.with({path:R})},D.basename=function(k){return S.basename(k.path)},D.extname=function(k){return S.extname(k.path)}})(I||(I={}))})(),dce=n})();({URI:Hs,Utils:Pg}=dce)});var ds,Uc=M(()=>{"use strict";OM();(function(t){t.basename=Pg.basename,t.dirname=Pg.dirname,t.extname=Pg.extname,t.joinPath=Pg.joinPath,t.resolvePath=Pg.resolvePath;function e(n,i){return n?.toString()===i?.toString()}o(e,"equals"),t.equals=e;function r(n,i){let a=typeof n=="string"?n:n.path,s=typeof i=="string"?i:i.path,l=a.split("/").filter(p=>p.length>0),u=s.split("/").filter(p=>p.length>0),h=0;for(;h{"use strict";fce();Bg();rl();$s();Uc();(function(t){t[t.Changed=0]="Changed",t[t.Parsed=1]="Parsed",t[t.IndexedContent=2]="IndexedContent",t[t.ComputedScopes=3]="ComputedScopes",t[t.Linked=4]="Linked",t[t.IndexedReferences=5]="IndexedReferences",t[t.Validated=6]="Validated"})(Tn||(Tn={}));q2=class{static{o(this,"DefaultLangiumDocumentFactory")}constructor(e){this.serviceRegistry=e.ServiceRegistry,this.textDocuments=e.workspace.TextDocuments,this.fileSystemProvider=e.workspace.FileSystemProvider}async fromUri(e,r=Ar.CancellationToken.None){let n=await this.fileSystemProvider.readFile(e);return this.createAsync(e,n,r)}fromTextDocument(e,r,n){return r=r??Hs.parse(e.uri),n?this.createAsync(r,e,n):this.create(r,e)}fromString(e,r,n){return n?this.createAsync(r,e,n):this.create(r,e)}fromModel(e,r){return this.create(r,{$model:e})}create(e,r){if(typeof r=="string"){let n=this.parse(e,r);return this.createLangiumDocument(n,e,void 0,r)}else if("$model"in r){let n={value:r.$model,parserErrors:[],lexerErrors:[]};return this.createLangiumDocument(n,e)}else{let n=this.parse(e,r.getText());return this.createLangiumDocument(n,e,r)}}async createAsync(e,r,n){if(typeof r=="string"){let i=await this.parseAsync(e,r,n);return this.createLangiumDocument(i,e,void 0,r)}else{let i=await this.parseAsync(e,r.getText(),n);return this.createLangiumDocument(i,e,r)}}createLangiumDocument(e,r,n,i){let a;if(n)a={parseResult:e,uri:r,state:Tn.Parsed,references:[],textDocument:n};else{let s=this.createTextDocumentGetter(r,i);a={parseResult:e,uri:r,state:Tn.Parsed,references:[],get textDocument(){return s()}}}return e.value.$document=a,a}async update(e,r){var n,i;let a=(n=e.parseResult.value.$cstNode)===null||n===void 0?void 0:n.root.fullText,s=(i=this.textDocuments)===null||i===void 0?void 0:i.get(e.uri.toString()),l=s?s.getText():await this.fileSystemProvider.readFile(e.uri);if(s)Object.defineProperty(e,"textDocument",{value:s});else{let u=this.createTextDocumentGetter(e.uri,l);Object.defineProperty(e,"textDocument",{get:u})}return a!==l&&(e.parseResult=await this.parseAsync(e.uri,l,r),e.parseResult.value.$document=e),e.state=Tn.Parsed,e}parse(e,r){return this.serviceRegistry.getServices(e).parser.LangiumParser.parse(r)}parseAsync(e,r,n){return this.serviceRegistry.getServices(e).parser.AsyncParser.parse(r,n)}createTextDocumentGetter(e,r){let n=this.serviceRegistry,i;return()=>i??(i=Og.create(e.toString(),n.getServices(e).LanguageMetaData.languageId,0,r??""))}},X2=class{static{o(this,"DefaultLangiumDocuments")}constructor(e){this.documentMap=new Map,this.langiumDocumentFactory=e.workspace.LangiumDocumentFactory}get all(){return tn(this.documentMap.values())}addDocument(e){let r=e.uri.toString();if(this.documentMap.has(r))throw new Error(`A document with the URI '${r}' is already present.`);this.documentMap.set(r,e)}getDocument(e){let r=e.toString();return this.documentMap.get(r)}async getOrCreateDocument(e,r){let n=this.getDocument(e);return n||(n=await this.langiumDocumentFactory.fromUri(e,r),this.addDocument(n),n)}createDocument(e,r,n){if(n)return this.langiumDocumentFactory.fromString(r,e,n).then(i=>(this.addDocument(i),i));{let i=this.langiumDocumentFactory.fromString(r,e);return this.addDocument(i),i}}hasDocument(e){return this.documentMap.has(e.toString())}invalidateDocument(e){let r=e.toString(),n=this.documentMap.get(r);return n&&(n.state=Tn.Changed,n.precomputedScopes=void 0,n.references=[],n.diagnostics=void 0),n}deleteDocument(e){let r=e.toString(),n=this.documentMap.get(r);return n&&(n.state=Tn.Changed,this.documentMap.delete(r)),n}}});var j2,PM=M(()=>{"use strict";rl();Zo();os();nl();Bg();j2=class{static{o(this,"DefaultLinker")}constructor(e){this.reflection=e.shared.AstReflection,this.langiumDocuments=()=>e.shared.workspace.LangiumDocuments,this.scopeProvider=e.references.ScopeProvider,this.astNodeLocator=e.workspace.AstNodeLocator}async link(e,r=Ar.CancellationToken.None){for(let n of tl(e.parseResult.value))await Hi(r),rg(n).forEach(i=>this.doLink(i,e))}doLink(e,r){let n=e.reference;if(n._ref===void 0)try{let i=this.getCandidate(e);if(Zd(i))n._ref=i;else if(n._nodeDescription=i,this.langiumDocuments().hasDocument(i.documentUri)){let a=this.loadAstNode(i);n._ref=a??this.createLinkingError(e,i)}}catch(i){n._ref=Object.assign(Object.assign({},e),{message:`An error occurred while resolving reference to '${n.$refText}': ${i}`})}r.references.push(n)}unlink(e){for(let r of e.references)delete r._ref,delete r._nodeDescription;e.references=[]}getCandidate(e){let n=this.scopeProvider.getScope(e).getElement(e.reference.$refText);return n??this.createLinkingError(e)}buildReference(e,r,n,i){let a=this,s={$refNode:n,$refText:i,get ref(){var l;if(ri(this._ref))return this._ref;if(OD(this._nodeDescription)){let u=a.loadAstNode(this._nodeDescription);this._ref=u??a.createLinkingError({reference:s,container:e,property:r},this._nodeDescription)}else if(this._ref===void 0){let u=a.getLinkedNode({reference:s,container:e,property:r});if(u.error&&Vi(e).state{"use strict";Vl();o(pce,"isNamed");K2=class{static{o(this,"DefaultNameProvider")}getName(e){if(pce(e))return e.name}getNameNode(e){return p2(e.$cstNode,"name")}}});var Q2,FM=M(()=>{"use strict";Vl();Zo();os();zl();$s();Uc();Q2=class{static{o(this,"DefaultReferences")}constructor(e){this.nameProvider=e.references.NameProvider,this.index=e.shared.workspace.IndexManager,this.nodeLocator=e.workspace.AstNodeLocator}findDeclaration(e){if(e){let r=sR(e),n=e.astNode;if(r&&n){let i=n[r.feature];if(Ta(i))return i.ref;if(Array.isArray(i)){for(let a of i)if(Ta(a)&&a.$refNode&&a.$refNode.offset<=e.offset&&a.$refNode.end>=e.end)return a.ref}}if(n){let i=this.nameProvider.getNameNode(n);if(i&&(i===e||BD(e,i)))return n}}}findDeclarationNode(e){let r=this.findDeclaration(e);if(r?.$cstNode){let n=this.nameProvider.getNameNode(r);return n??r.$cstNode}}findReferences(e,r){let n=[];if(r.includeDeclaration){let a=this.getReferenceToSelf(e);a&&n.push(a)}let i=this.index.findAllReferences(e,this.nodeLocator.getAstNodePath(e));return r.documentUri&&(i=i.filter(a=>ds.equals(a.sourceUri,r.documentUri))),n.push(...i),tn(n)}getReferenceToSelf(e){let r=this.nameProvider.getNameNode(e);if(r){let n=Vi(e),i=this.nodeLocator.getAstNodePath(e);return{sourceUri:n.uri,sourcePath:i,targetUri:n.uri,targetPath:i,segment:e0(r),local:!0}}}}});var Hc,E0,Fg=M(()=>{"use strict";$s();Hc=class{static{o(this,"MultiMap")}constructor(e){if(this.map=new Map,e)for(let[r,n]of e)this.add(r,n)}get size(){return Jm.sum(tn(this.map.values()).map(e=>e.length))}clear(){this.map.clear()}delete(e,r){if(r===void 0)return this.map.delete(e);{let n=this.map.get(e);if(n){let i=n.indexOf(r);if(i>=0)return n.length===1?this.map.delete(e):n.splice(i,1),!0}return!1}}get(e){var r;return(r=this.map.get(e))!==null&&r!==void 0?r:[]}has(e,r){if(r===void 0)return this.map.has(e);{let n=this.map.get(e);return n?n.indexOf(r)>=0:!1}}add(e,r){return this.map.has(e)?this.map.get(e).push(r):this.map.set(e,[r]),this}addAll(e,r){return this.map.has(e)?this.map.get(e).push(...r):this.map.set(e,Array.from(r)),this}forEach(e){this.map.forEach((r,n)=>r.forEach(i=>e(i,n,this)))}[Symbol.iterator](){return this.entries().iterator()}entries(){return tn(this.map.entries()).flatMap(([e,r])=>r.map(n=>[e,n]))}keys(){return tn(this.map.keys())}values(){return tn(this.map.values()).flat()}entriesGroupedByKey(){return tn(this.map.entries())}},E0=class{static{o(this,"BiMap")}get size(){return this.map.size}constructor(e){if(this.map=new Map,this.inverse=new Map,e)for(let[r,n]of e)this.set(r,n)}clear(){this.map.clear(),this.inverse.clear()}set(e,r){return this.map.set(e,r),this.inverse.set(r,e),this}get(e){return this.map.get(e)}getKey(e){return this.inverse.get(e)}delete(e){let r=this.map.get(e);return r!==void 0?(this.map.delete(e),this.inverse.delete(r),!0):!1}}});var Z2,zM=M(()=>{"use strict";rl();os();Fg();nl();Z2=class{static{o(this,"DefaultScopeComputation")}constructor(e){this.nameProvider=e.references.NameProvider,this.descriptions=e.workspace.AstNodeDescriptionProvider}async computeExports(e,r=Ar.CancellationToken.None){return this.computeExportsForNode(e.parseResult.value,e,void 0,r)}async computeExportsForNode(e,r,n=l2,i=Ar.CancellationToken.None){let a=[];this.exportNode(e,a,r);for(let s of n(e))await Hi(i),this.exportNode(s,a,r);return a}exportNode(e,r,n){let i=this.nameProvider.getName(e);i&&r.push(this.descriptions.createDescription(e,i,n))}async computeLocalScopes(e,r=Ar.CancellationToken.None){let n=e.parseResult.value,i=new Hc;for(let a of Fc(n))await Hi(r),this.processNode(a,e,i);return i}processNode(e,r,n){let i=e.$container;if(i){let a=this.nameProvider.getName(e);a&&n.add(i,this.descriptions.createDescription(e,a,r))}}}});var zg,J2,fze,GM=M(()=>{"use strict";$s();zg=class{static{o(this,"StreamScope")}constructor(e,r,n){var i;this.elements=e,this.outerScope=r,this.caseInsensitive=(i=n?.caseInsensitive)!==null&&i!==void 0?i:!1}getAllElements(){return this.outerScope?this.elements.concat(this.outerScope.getAllElements()):this.elements}getElement(e){let r=this.caseInsensitive?this.elements.find(n=>n.name.toLowerCase()===e.toLowerCase()):this.elements.find(n=>n.name===e);if(r)return r;if(this.outerScope)return this.outerScope.getElement(e)}},J2=class{static{o(this,"MapScope")}constructor(e,r,n){var i;this.elements=new Map,this.caseInsensitive=(i=n?.caseInsensitive)!==null&&i!==void 0?i:!1;for(let a of e){let s=this.caseInsensitive?a.name.toLowerCase():a.name;this.elements.set(s,a)}this.outerScope=r}getElement(e){let r=this.caseInsensitive?e.toLowerCase():e,n=this.elements.get(r);if(n)return n;if(this.outerScope)return this.outerScope.getElement(e)}getAllElements(){let e=tn(this.elements.values());return this.outerScope&&(e=e.concat(this.outerScope.getAllElements())),e}},fze={getElement(){},getAllElements(){return r2}}});var Gg,ex,S0,qk,$g,Xk=M(()=>{"use strict";Gg=class{static{o(this,"DisposableCache")}constructor(){this.toDispose=[],this.isDisposed=!1}onDispose(e){this.toDispose.push(e)}dispose(){this.throwIfDisposed(),this.clear(),this.isDisposed=!0,this.toDispose.forEach(e=>e.dispose())}throwIfDisposed(){if(this.isDisposed)throw new Error("This cache has already been disposed")}},ex=class extends Gg{static{o(this,"SimpleCache")}constructor(){super(...arguments),this.cache=new Map}has(e){return this.throwIfDisposed(),this.cache.has(e)}set(e,r){this.throwIfDisposed(),this.cache.set(e,r)}get(e,r){if(this.throwIfDisposed(),this.cache.has(e))return this.cache.get(e);if(r){let n=r();return this.cache.set(e,n),n}else return}delete(e){return this.throwIfDisposed(),this.cache.delete(e)}clear(){this.throwIfDisposed(),this.cache.clear()}},S0=class extends Gg{static{o(this,"ContextCache")}constructor(e){super(),this.cache=new Map,this.converter=e??(r=>r)}has(e,r){return this.throwIfDisposed(),this.cacheForContext(e).has(r)}set(e,r,n){this.throwIfDisposed(),this.cacheForContext(e).set(r,n)}get(e,r,n){this.throwIfDisposed();let i=this.cacheForContext(e);if(i.has(r))return i.get(r);if(n){let a=n();return i.set(r,a),a}else return}delete(e,r){return this.throwIfDisposed(),this.cacheForContext(e).delete(r)}clear(e){if(this.throwIfDisposed(),e){let r=this.converter(e);this.cache.delete(r)}else this.cache.clear()}cacheForContext(e){let r=this.converter(e),n=this.cache.get(r);return n||(n=new Map,this.cache.set(r,n)),n}},qk=class extends S0{static{o(this,"DocumentCache")}constructor(e){super(r=>r.toString()),this.onDispose(e.workspace.DocumentBuilder.onUpdate((r,n)=>{let i=r.concat(n);for(let a of i)this.clear(a)}))}},$g=class extends ex{static{o(this,"WorkspaceCache")}constructor(e){super(),this.onDispose(e.workspace.DocumentBuilder.onUpdate(()=>{this.clear()}))}}});var tx,$M=M(()=>{"use strict";GM();os();$s();Xk();tx=class{static{o(this,"DefaultScopeProvider")}constructor(e){this.reflection=e.shared.AstReflection,this.nameProvider=e.references.NameProvider,this.descriptions=e.workspace.AstNodeDescriptionProvider,this.indexManager=e.shared.workspace.IndexManager,this.globalScopeCache=new $g(e.shared)}getScope(e){let r=[],n=this.reflection.getReferenceType(e),i=Vi(e.container).precomputedScopes;if(i){let s=e.container;do{let l=i.get(s);l.length>0&&r.push(tn(l).filter(u=>this.reflection.isSubtype(u.type,n))),s=s.$container}while(s)}let a=this.getGlobalScope(n,e);for(let s=r.length-1;s>=0;s--)a=this.createScope(r[s],a);return a}createScope(e,r,n){return new zg(tn(e),r,n)}createScopeForNodes(e,r,n){let i=tn(e).map(a=>{let s=this.nameProvider.getName(a);if(s)return this.descriptions.createDescription(a,s)}).nonNullable();return new zg(i,r,n)}getGlobalScope(e,r){return this.globalScopeCache.get(e,()=>new J2(this.indexManager.allElements(e)))}}});function VM(t){return typeof t.$comment=="string"}function mce(t){return typeof t=="object"&&!!t&&("$ref"in t||"$error"in t)}var rx,jk=M(()=>{"use strict";OM();Zo();os();Vl();o(VM,"isAstNodeWithComment");o(mce,"isIntermediateReference");rx=class{static{o(this,"DefaultJsonSerializer")}constructor(e){this.ignoreProperties=new Set(["$container","$containerProperty","$containerIndex","$document","$cstNode"]),this.langiumDocuments=e.shared.workspace.LangiumDocuments,this.astNodeLocator=e.workspace.AstNodeLocator,this.nameProvider=e.references.NameProvider,this.commentProvider=e.documentation.CommentProvider}serialize(e,r={}){let n=r?.replacer,i=o((s,l)=>this.replacer(s,l,r),"defaultReplacer"),a=n?(s,l)=>n(s,l,i):i;try{return this.currentDocument=Vi(e),JSON.stringify(e,a,r?.space)}finally{this.currentDocument=void 0}}deserialize(e,r={}){let n=JSON.parse(e);return this.linkNode(n,n,r),n}replacer(e,r,{refText:n,sourceText:i,textRegions:a,comments:s,uriConverter:l}){var u,h,f,d;if(!this.ignoreProperties.has(e))if(Ta(r)){let p=r.ref,m=n?r.$refText:void 0;if(p){let g=Vi(p),y="";this.currentDocument&&this.currentDocument!==g&&(l?y=l(g.uri,r):y=g.uri.toString());let v=this.astNodeLocator.getAstNodePath(p);return{$ref:`${y}#${v}`,$refText:m}}else return{$error:(h=(u=r.error)===null||u===void 0?void 0:u.message)!==null&&h!==void 0?h:"Could not resolve reference",$refText:m}}else if(ri(r)){let p;if(a&&(p=this.addAstNodeRegionWithAssignmentsTo(Object.assign({},r)),(!e||r.$document)&&p?.$textRegion&&(p.$textRegion.documentURI=(f=this.currentDocument)===null||f===void 0?void 0:f.uri.toString())),i&&!e&&(p??(p=Object.assign({},r)),p.$sourceText=(d=r.$cstNode)===null||d===void 0?void 0:d.text),s){p??(p=Object.assign({},r));let m=this.commentProvider.getComment(r);m&&(p.$comment=m.replace(/\r/g,""))}return p??r}else return r}addAstNodeRegionWithAssignmentsTo(e){let r=o(n=>({offset:n.offset,end:n.end,length:n.length,range:n.range}),"createDocumentSegment");if(e.$cstNode){let n=e.$textRegion=r(e.$cstNode),i=n.assignments={};return Object.keys(e).filter(a=>!a.startsWith("$")).forEach(a=>{let s=rR(e.$cstNode,a).map(r);s.length!==0&&(i[a]=s)}),e}}linkNode(e,r,n,i,a,s){for(let[u,h]of Object.entries(e))if(Array.isArray(h))for(let f=0;f{"use strict";Uc();nx=class{static{o(this,"DefaultServiceRegistry")}register(e){if(!this.singleton&&!this.map){this.singleton=e;return}if(!this.map&&(this.map={},this.singleton)){for(let r of this.singleton.LanguageMetaData.fileExtensions)this.map[r]=this.singleton;this.singleton=void 0}for(let r of e.LanguageMetaData.fileExtensions)this.map[r]!==void 0&&this.map[r]!==e&&console.warn(`The file extension ${r} is used by multiple languages. It is now assigned to '${e.LanguageMetaData.languageId}'.`),this.map[r]=e}getServices(e){if(this.singleton!==void 0)return this.singleton;if(this.map===void 0)throw new Error("The service registry is empty. Use `register` to register the services of a language.");let r=ds.extname(e),n=this.map[r];if(!n)throw new Error(`The service registry contains no services for the extension '${r}'.`);return n}get all(){return this.singleton!==void 0?[this.singleton]:this.map!==void 0?Object.values(this.map):[]}}});function Kk(t){return{code:t}}var Vg,ix,ax=M(()=>{"use strict";Fg();nl();$s();o(Kk,"diagnosticData");(function(t){t.all=["fast","slow","built-in"]})(Vg||(Vg={}));ix=class{static{o(this,"ValidationRegistry")}constructor(e){this.entries=new Hc,this.reflection=e.shared.AstReflection}register(e,r=this,n="fast"){if(n==="built-in")throw new Error("The 'built-in' category is reserved for lexer, parser, and linker errors.");for(let[i,a]of Object.entries(e)){let s=a;if(Array.isArray(s))for(let l of s){let u={check:this.wrapValidationException(l,r),category:n};this.addEntry(i,u)}else if(typeof s=="function"){let l={check:this.wrapValidationException(s,r),category:n};this.addEntry(i,l)}}}wrapValidationException(e,r){return async(n,i,a)=>{try{await e.call(r,n,i,a)}catch(s){if(mf(s))throw s;console.error("An error occurred during validation:",s);let l=s instanceof Error?s.message:String(s);s instanceof Error&&s.stack&&console.error(s.stack),i("error","An error occurred during validation: "+l,{node:n})}}}addEntry(e,r){if(e==="AstNode"){this.entries.add("AstNode",r);return}for(let n of this.reflection.getAllSubTypes(e))this.entries.add(n,r)}getChecks(e,r){let n=tn(this.entries.get(e)).concat(this.entries.get("AstNode"));return r&&(n=n.filter(i=>r.includes(i.category))),n.map(i=>i.check)}}});function gce(t){if(t.range)return t.range;let e;return typeof t.property=="string"?e=p2(t.node.$cstNode,t.property,t.index):typeof t.keyword=="string"&&(e=iR(t.node.$cstNode,t.keyword,t.index)),e??(e=t.node.$cstNode),e?e.range:{start:{line:0,character:0},end:{line:0,character:0}}}function Qk(t){switch(t){case"error":return 1;case"warning":return 2;case"info":return 3;case"hint":return 4;default:throw new Error("Invalid diagnostic severity: "+t)}}var sx,Qu,HM=M(()=>{"use strict";rl();Vl();os();zl();nl();ax();sx=class{static{o(this,"DefaultDocumentValidator")}constructor(e){this.validationRegistry=e.validation.ValidationRegistry,this.metadata=e.LanguageMetaData}async validateDocument(e,r={},n=Ar.CancellationToken.None){let i=e.parseResult,a=[];if(await Hi(n),(!r.categories||r.categories.includes("built-in"))&&(this.processLexingErrors(i,a,r),r.stopAfterLexingErrors&&a.some(s=>{var l;return((l=s.data)===null||l===void 0?void 0:l.code)===Qu.LexingError})||(this.processParsingErrors(i,a,r),r.stopAfterParsingErrors&&a.some(s=>{var l;return((l=s.data)===null||l===void 0?void 0:l.code)===Qu.ParsingError}))||(this.processLinkingErrors(e,a,r),r.stopAfterLinkingErrors&&a.some(s=>{var l;return((l=s.data)===null||l===void 0?void 0:l.code)===Qu.LinkingError}))))return a;try{a.push(...await this.validateAst(i.value,r,n))}catch(s){if(mf(s))throw s;console.error("An error occurred during validation:",s)}return await Hi(n),a}processLexingErrors(e,r,n){for(let i of e.lexerErrors){let a={severity:Qk("error"),range:{start:{line:i.line-1,character:i.column-1},end:{line:i.line-1,character:i.column+i.length-1}},message:i.message,data:Kk(Qu.LexingError),source:this.getSource()};r.push(a)}}processParsingErrors(e,r,n){for(let i of e.parserErrors){let a;if(isNaN(i.token.startOffset)){if("previousToken"in i){let s=i.previousToken;if(isNaN(s.startOffset)){let l={line:0,character:0};a={start:l,end:l}}else{let l={line:s.endLine-1,character:s.endColumn};a={start:l,end:l}}}}else a=eg(i.token);if(a){let s={severity:Qk("error"),range:a,message:i.message,data:Kk(Qu.ParsingError),source:this.getSource()};r.push(s)}}}processLinkingErrors(e,r,n){for(let i of e.references){let a=i.error;if(a){let s={node:a.container,property:a.property,index:a.index,data:{code:Qu.LinkingError,containerType:a.container.$type,property:a.property,refText:a.reference.$refText}};r.push(this.toDiagnostic("error",a.message,s))}}}async validateAst(e,r,n=Ar.CancellationToken.None){let i=[],a=o((s,l,u)=>{i.push(this.toDiagnostic(s,l,u))},"acceptor");return await Promise.all(tl(e).map(async s=>{await Hi(n);let l=this.validationRegistry.getChecks(s.$type,r.categories);for(let u of l)await u(s,a,n)})),i}toDiagnostic(e,r,n){return{message:r,range:gce(n),severity:Qk(e),code:n.code,codeDescription:n.codeDescription,tags:n.tags,relatedInformation:n.relatedInformation,data:n.data,source:this.getSource()}}getSource(){return this.metadata.languageId}};o(gce,"getDiagnosticRange");o(Qk,"toDiagnosticSeverity");(function(t){t.LexingError="lexing-error",t.ParsingError="parsing-error",t.LinkingError="linking-error"})(Qu||(Qu={}))});var ox,lx,WM=M(()=>{"use strict";rl();Zo();os();zl();nl();Uc();ox=class{static{o(this,"DefaultAstNodeDescriptionProvider")}constructor(e){this.astNodeLocator=e.workspace.AstNodeLocator,this.nameProvider=e.references.NameProvider}createDescription(e,r,n=Vi(e)){r??(r=this.nameProvider.getName(e));let i=this.astNodeLocator.getAstNodePath(e);if(!r)throw new Error(`Node at path ${i} has no name.`);let a,s=o(()=>{var l;return a??(a=e0((l=this.nameProvider.getNameNode(e))!==null&&l!==void 0?l:e.$cstNode))},"nameSegmentGetter");return{node:e,name:r,get nameSegment(){return s()},selectionSegment:e0(e.$cstNode),type:e.$type,documentUri:n.uri,path:i}}},lx=class{static{o(this,"DefaultReferenceDescriptionProvider")}constructor(e){this.nodeLocator=e.workspace.AstNodeLocator}async createDescriptions(e,r=Ar.CancellationToken.None){let n=[],i=e.parseResult.value;for(let a of tl(i))await Hi(r),rg(a).filter(s=>!Zd(s)).forEach(s=>{let l=this.createDescription(s);l&&n.push(l)});return n}createDescription(e){let r=e.reference.$nodeDescription,n=e.reference.$refNode;if(!r||!n)return;let i=Vi(e.container).uri;return{sourceUri:i,sourcePath:this.nodeLocator.getAstNodePath(e.container),targetUri:r.documentUri,targetPath:r.path,segment:e0(n),local:ds.equals(r.documentUri,i)}}}});var cx,YM=M(()=>{"use strict";cx=class{static{o(this,"DefaultAstNodeLocator")}constructor(){this.segmentSeparator="/",this.indexSeparator="@"}getAstNodePath(e){if(e.$container){let r=this.getAstNodePath(e.$container),n=this.getPathSegment(e);return r+this.segmentSeparator+n}return""}getPathSegment({$containerProperty:e,$containerIndex:r}){if(!e)throw new Error("Missing '$containerProperty' in AST node.");return r!==void 0?e+this.indexSeparator+r:e}getAstNode(e,r){return r.split(this.segmentSeparator).reduce((i,a)=>{if(!i||a.length===0)return i;let s=a.indexOf(this.indexSeparator);if(s>0){let l=a.substring(0,s),u=parseInt(a.substring(s+1)),h=i[l];return h?.[u]}return i[a]},e)}}});var ux,qM=M(()=>{"use strict";nl();ux=class{static{o(this,"DefaultConfigurationProvider")}constructor(e){this._ready=new fs,this.settings={},this.workspaceConfig=!1,this.serviceRegistry=e.ServiceRegistry}get ready(){return this._ready.promise}initialize(e){var r,n;this.workspaceConfig=(n=(r=e.capabilities.workspace)===null||r===void 0?void 0:r.configuration)!==null&&n!==void 0?n:!1}async initialized(e){if(this.workspaceConfig){if(e.register){let r=this.serviceRegistry.all;e.register({section:r.map(n=>this.toSectionName(n.LanguageMetaData.languageId))})}if(e.fetchConfiguration){let r=this.serviceRegistry.all.map(i=>({section:this.toSectionName(i.LanguageMetaData.languageId)})),n=await e.fetchConfiguration(r);r.forEach((i,a)=>{this.updateSectionConfiguration(i.section,n[a])})}}this._ready.resolve()}updateConfiguration(e){e.settings&&Object.keys(e.settings).forEach(r=>{this.updateSectionConfiguration(r,e.settings[r])})}updateSectionConfiguration(e,r){this.settings[e]=r}async getConfiguration(e,r){await this.ready;let n=this.toSectionName(e);if(this.settings[n])return this.settings[n][r]}toSectionName(e){return`${e}`}}});var C0,XM=M(()=>{"use strict";(function(t){function e(r){return{dispose:o(async()=>await r(),"dispose")}}o(e,"create"),t.create=e})(C0||(C0={}))});var hx,jM=M(()=>{"use strict";rl();XM();Fg();nl();$s();ax();Bg();hx=class{static{o(this,"DefaultDocumentBuilder")}constructor(e){this.updateBuildOptions={validation:{categories:["built-in","fast"]}},this.updateListeners=[],this.buildPhaseListeners=new Hc,this.buildState=new Map,this.documentBuildWaiters=new Map,this.currentState=Tn.Changed,this.langiumDocuments=e.workspace.LangiumDocuments,this.langiumDocumentFactory=e.workspace.LangiumDocumentFactory,this.indexManager=e.workspace.IndexManager,this.serviceRegistry=e.ServiceRegistry}async build(e,r={},n=Ar.CancellationToken.None){var i,a;for(let s of e){let l=s.uri.toString();if(s.state===Tn.Validated){if(typeof r.validation=="boolean"&&r.validation)s.state=Tn.IndexedReferences,s.diagnostics=void 0,this.buildState.delete(l);else if(typeof r.validation=="object"){let u=this.buildState.get(l),h=(i=u?.result)===null||i===void 0?void 0:i.validationChecks;if(h){let d=((a=r.validation.categories)!==null&&a!==void 0?a:Vg.all).filter(p=>!h.includes(p));d.length>0&&(this.buildState.set(l,{completed:!1,options:{validation:Object.assign(Object.assign({},r.validation),{categories:d})},result:u.result}),s.state=Tn.IndexedReferences)}}}else this.buildState.delete(l)}this.currentState=Tn.Changed,await this.emitUpdate(e.map(s=>s.uri),[]),await this.buildDocuments(e,r,n)}async update(e,r,n=Ar.CancellationToken.None){this.currentState=Tn.Changed;for(let s of r)this.langiumDocuments.deleteDocument(s),this.buildState.delete(s.toString()),this.indexManager.remove(s);for(let s of e){if(!this.langiumDocuments.invalidateDocument(s)){let u=this.langiumDocumentFactory.fromModel({$type:"INVALID"},s);u.state=Tn.Changed,this.langiumDocuments.addDocument(u)}this.buildState.delete(s.toString())}let i=tn(e).concat(r).map(s=>s.toString()).toSet();this.langiumDocuments.all.filter(s=>!i.has(s.uri.toString())&&this.shouldRelink(s,i)).forEach(s=>{this.serviceRegistry.getServices(s.uri).references.Linker.unlink(s),s.state=Math.min(s.state,Tn.ComputedScopes),s.diagnostics=void 0}),await this.emitUpdate(e,r),await Hi(n);let a=this.langiumDocuments.all.filter(s=>{var l;return s.staten(e,r)))}shouldRelink(e,r){return e.references.some(n=>n.error!==void 0)?!0:this.indexManager.isAffected(e,r)}onUpdate(e){return this.updateListeners.push(e),C0.create(()=>{let r=this.updateListeners.indexOf(e);r>=0&&this.updateListeners.splice(r,1)})}async buildDocuments(e,r,n){this.prepareBuild(e,r),await this.runCancelable(e,Tn.Parsed,n,a=>this.langiumDocumentFactory.update(a,n)),await this.runCancelable(e,Tn.IndexedContent,n,a=>this.indexManager.updateContent(a,n)),await this.runCancelable(e,Tn.ComputedScopes,n,async a=>{let s=this.serviceRegistry.getServices(a.uri).references.ScopeComputation;a.precomputedScopes=await s.computeLocalScopes(a,n)}),await this.runCancelable(e,Tn.Linked,n,a=>this.serviceRegistry.getServices(a.uri).references.Linker.link(a,n)),await this.runCancelable(e,Tn.IndexedReferences,n,a=>this.indexManager.updateReferences(a,n));let i=e.filter(a=>this.shouldValidate(a));await this.runCancelable(i,Tn.Validated,n,a=>this.validate(a,n));for(let a of e){let s=this.buildState.get(a.uri.toString());s&&(s.completed=!0)}}prepareBuild(e,r){for(let n of e){let i=n.uri.toString(),a=this.buildState.get(i);(!a||a.completed)&&this.buildState.set(i,{completed:!1,options:r,result:a?.result})}}async runCancelable(e,r,n,i){let a=e.filter(s=>s.state{this.buildPhaseListeners.delete(e,r)})}waitUntil(e,r,n){let i;if(r&&"path"in r?i=r:n=r,n??(n=Ar.CancellationToken.None),i){let a=this.langiumDocuments.getDocument(i);if(a&&a.state>e)return Promise.resolve(i)}return this.currentState>=e?Promise.resolve(void 0):n.isCancellationRequested?Promise.reject(Vc):new Promise((a,s)=>{let l=this.onBuildPhase(e,()=>{if(l.dispose(),u.dispose(),i){let h=this.langiumDocuments.getDocument(i);a(h?.uri)}else a(void 0)}),u=n.onCancellationRequested(()=>{l.dispose(),u.dispose(),s(Vc)})})}async notifyBuildPhase(e,r,n){if(e.length===0)return;let i=this.buildPhaseListeners.get(r);for(let a of i)await Hi(n),await a(e,n)}shouldValidate(e){return!!this.getBuildOptions(e).validation}async validate(e,r){var n,i;let a=this.serviceRegistry.getServices(e.uri).validation.DocumentValidator,s=this.getBuildOptions(e).validation,l=typeof s=="object"?s:void 0,u=await a.validateDocument(e,l,r);e.diagnostics?e.diagnostics.push(...u):e.diagnostics=u;let h=this.buildState.get(e.uri.toString());if(h){(n=h.result)!==null&&n!==void 0||(h.result={});let f=(i=l?.categories)!==null&&i!==void 0?i:Vg.all;h.result.validationChecks?h.result.validationChecks.push(...f):h.result.validationChecks=[...f]}}getBuildOptions(e){var r,n;return(n=(r=this.buildState.get(e.uri.toString()))===null||r===void 0?void 0:r.options)!==null&&n!==void 0?n:{}}}});var fx,KM=M(()=>{"use strict";os();Xk();rl();$s();Uc();fx=class{static{o(this,"DefaultIndexManager")}constructor(e){this.symbolIndex=new Map,this.symbolByTypeIndex=new S0,this.referenceIndex=new Map,this.documents=e.workspace.LangiumDocuments,this.serviceRegistry=e.ServiceRegistry,this.astReflection=e.AstReflection}findAllReferences(e,r){let n=Vi(e).uri,i=[];return this.referenceIndex.forEach(a=>{a.forEach(s=>{ds.equals(s.targetUri,n)&&s.targetPath===r&&i.push(s)})}),tn(i)}allElements(e,r){let n=tn(this.symbolIndex.keys());return r&&(n=n.filter(i=>!r||r.has(i))),n.map(i=>this.getFileDescriptions(i,e)).flat()}getFileDescriptions(e,r){var n;return r?this.symbolByTypeIndex.get(e,r,()=>{var a;return((a=this.symbolIndex.get(e))!==null&&a!==void 0?a:[]).filter(l=>this.astReflection.isSubtype(l.type,r))}):(n=this.symbolIndex.get(e))!==null&&n!==void 0?n:[]}remove(e){let r=e.toString();this.symbolIndex.delete(r),this.symbolByTypeIndex.clear(r),this.referenceIndex.delete(r)}async updateContent(e,r=Ar.CancellationToken.None){let i=await this.serviceRegistry.getServices(e.uri).references.ScopeComputation.computeExports(e,r),a=e.uri.toString();this.symbolIndex.set(a,i),this.symbolByTypeIndex.clear(a)}async updateReferences(e,r=Ar.CancellationToken.None){let i=await this.serviceRegistry.getServices(e.uri).workspace.ReferenceDescriptionProvider.createDescriptions(e,r);this.referenceIndex.set(e.uri.toString(),i)}isAffected(e,r){let n=this.referenceIndex.get(e.uri.toString());return n?n.some(i=>!i.local&&r.has(i.targetUri.toString())):!1}}});var dx,QM=M(()=>{"use strict";rl();nl();Uc();dx=class{static{o(this,"DefaultWorkspaceManager")}constructor(e){this.initialBuildOptions={},this._ready=new fs,this.serviceRegistry=e.ServiceRegistry,this.langiumDocuments=e.workspace.LangiumDocuments,this.documentBuilder=e.workspace.DocumentBuilder,this.fileSystemProvider=e.workspace.FileSystemProvider,this.mutex=e.workspace.WorkspaceLock}get ready(){return this._ready.promise}initialize(e){var r;this.folders=(r=e.workspaceFolders)!==null&&r!==void 0?r:void 0}initialized(e){return this.mutex.write(r=>{var n;return this.initializeWorkspace((n=this.folders)!==null&&n!==void 0?n:[],r)})}async initializeWorkspace(e,r=Ar.CancellationToken.None){let n=await this.performStartup(e);await Hi(r),await this.documentBuilder.build(n,this.initialBuildOptions,r)}async performStartup(e){let r=this.serviceRegistry.all.flatMap(a=>a.LanguageMetaData.fileExtensions),n=[],i=o(a=>{n.push(a),this.langiumDocuments.hasDocument(a.uri)||this.langiumDocuments.addDocument(a)},"collector");return await this.loadAdditionalDocuments(e,i),await Promise.all(e.map(a=>[a,this.getRootFolder(a)]).map(async a=>this.traverseFolder(...a,r,i))),this._ready.resolve(),n}loadAdditionalDocuments(e,r){return Promise.resolve()}getRootFolder(e){return Hs.parse(e.uri)}async traverseFolder(e,r,n,i){let a=await this.fileSystemProvider.readDirectory(r);await Promise.all(a.map(async s=>{if(this.includeEntry(e,s,n)){if(s.isDirectory)await this.traverseFolder(e,s.uri,n,i);else if(s.isFile){let l=await this.langiumDocuments.getOrCreateDocument(s.uri);i(l)}}}))}includeEntry(e,r,n){let i=ds.basename(r.uri);if(i.startsWith("."))return!1;if(r.isDirectory)return i!=="node_modules"&&i!=="out";if(r.isFile){let a=ds.extname(r.uri);return n.includes(a)}return!1}}});function yce(t){return Array.isArray(t)&&(t.length===0||"name"in t[0])}function JM(t){return t&&"modes"in t&&"defaultMode"in t}function ZM(t){return!yce(t)&&!JM(t)}var px,eI=M(()=>{"use strict";g0();px=class{static{o(this,"DefaultLexer")}constructor(e){let r=e.parser.TokenBuilder.buildTokens(e.Grammar,{caseInsensitive:e.LanguageMetaData.caseInsensitive});this.tokenTypes=this.toTokenTypeDictionary(r);let n=ZM(r)?Object.values(r):r;this.chevrotainLexer=new ci(n,{positionTracking:"full"})}get definition(){return this.tokenTypes}tokenize(e){var r;let n=this.chevrotainLexer.tokenize(e);return{tokens:n.tokens,errors:n.errors,hidden:(r=n.groups.hidden)!==null&&r!==void 0?r:[]}}toTokenTypeDictionary(e){if(ZM(e))return e;let r=JM(e)?Object.values(e.modes).flat():e,n={};return r.forEach(i=>n[i.name]=i),n}};o(yce,"isTokenTypeArray");o(JM,"isIMultiModeLexerDefinition");o(ZM,"isTokenTypeDictionary")});function nI(t,e,r){let n,i;typeof t=="string"?(i=e,n=r):(i=t.range.start,n=e),i||(i=Xr.create(0,0));let a=bce(t),s=aI(n),l=pze({lines:a,position:i,options:s});return xze({index:0,tokens:l,position:i})}function iI(t,e){let r=aI(e),n=bce(t);if(n.length===0)return!1;let i=n[0],a=n[n.length-1],s=r.start,l=r.end;return!!s?.exec(i)&&!!l?.exec(a)}function bce(t){let e="";return typeof t=="string"?e=t:e=t.text,e.split(XN)}function pze(t){var e,r,n;let i=[],a=t.position.line,s=t.position.character;for(let l=0;l=f.length){if(i.length>0){let m=Xr.create(a,s);i.push({type:"break",content:"",range:Nr.create(m,m)})}}else{vce.lastIndex=d;let m=vce.exec(f);if(m){let g=m[0],y=m[1],v=Xr.create(a,s+d),x=Xr.create(a,s+d+g.length);i.push({type:"tag",content:y,range:Nr.create(v,x)}),d+=g.length,d=rI(f,d)}if(d0&&i[i.length-1].type==="break"?i.slice(0,-1):i}function mze(t,e,r,n){let i=[];if(t.length===0){let a=Xr.create(r,n),s=Xr.create(r,n+e.length);i.push({type:"text",content:e,range:Nr.create(a,s)})}else{let a=0;for(let l of t){let u=l.index,h=e.substring(a,u);h.length>0&&i.push({type:"text",content:e.substring(a,u),range:Nr.create(Xr.create(r,a+n),Xr.create(r,u+n))});let f=h.length+1,d=l[1];if(i.push({type:"inline-tag",content:d,range:Nr.create(Xr.create(r,a+f+n),Xr.create(r,a+f+d.length+n))}),f+=d.length,l.length===4){f+=l[2].length;let p=l[3];i.push({type:"text",content:p,range:Nr.create(Xr.create(r,a+f+n),Xr.create(r,a+f+p.length+n))})}else i.push({type:"text",content:"",range:Nr.create(Xr.create(r,a+f+n),Xr.create(r,a+f+n))});a=u+l[0].length}let s=e.substring(a);s.length>0&&i.push({type:"text",content:s,range:Nr.create(Xr.create(r,a+n),Xr.create(r,a+n+s.length))})}return i}function rI(t,e){let r=t.substring(e).match(gze);return r?e+r.index:t.length}function vze(t){let e=t.match(yze);if(e&&typeof e.index=="number")return e.index}function xze(t){var e,r,n,i;let a=Xr.create(t.position.line,t.position.character);if(t.tokens.length===0)return new Zk([],Nr.create(a,a));let s=[];for(;t.index0){let u=rI(e,a);s=e.substring(u),e=e.substring(0,a)}return(t==="linkcode"||t==="link"&&r.link==="code")&&(s=`\`${s}\``),(i=(n=r.renderLink)===null||n===void 0?void 0:n.call(r,e,s))!==null&&i!==void 0?i:Eze(e,s)}}function Eze(t,e){try{return Hs.parse(t,!0),`[${e}](${t})`}catch{return t}}function xce(t){return t.endsWith(` +`)?` +`:` + +`}var vce,dze,gze,yze,Zk,mx,gx,Jk,sI=M(()=>{"use strict";fM();ig();Uc();o(nI,"parseJSDoc");o(iI,"isJSDoc");o(bce,"getLines");vce=/\s*(@([\p{L}][\p{L}\p{N}]*)?)/uy,dze=/\{(@[\p{L}][\p{L}\p{N}]*)(\s*)([^\r\n}]+)?\}/gu;o(pze,"tokenize");o(mze,"buildInlineTokens");gze=/\S/,yze=/\s*$/;o(rI,"skipWhitespace");o(vze,"lastCharacter");o(xze,"parseJSDocComment");o(bze,"parseJSDocElement");o(wze,"appendEmptyLine");o(wce,"parseJSDocText");o(Tze,"parseJSDocInline");o(Tce,"parseJSDocTag");o(kce,"parseJSDocLine");o(aI,"normalizeOptions");o(tI,"normalizeOption");Zk=class{static{o(this,"JSDocCommentImpl")}constructor(e,r){this.elements=e,this.range=r}getTag(e){return this.getAllTags().find(r=>r.name===e)}getTags(e){return this.getAllTags().filter(r=>r.name===e)}getAllTags(){return this.elements.filter(e=>"name"in e)}toString(){let e="";for(let r of this.elements)if(e.length===0)e=r.toString();else{let n=r.toString();e+=xce(e)+n}return e.trim()}toMarkdown(e){let r="";for(let n of this.elements)if(r.length===0)r=n.toMarkdown(e);else{let i=n.toMarkdown(e);r+=xce(r)+i}return r.trim()}},mx=class{static{o(this,"JSDocTagImpl")}constructor(e,r,n,i){this.name=e,this.content=r,this.inline=n,this.range=i}toString(){let e=`@${this.name}`,r=this.content.toString();return this.content.inlines.length===1?e=`${e} ${r}`:this.content.inlines.length>1&&(e=`${e} +${r}`),this.inline?`{${e}}`:e}toMarkdown(e){var r,n;return(n=(r=e?.renderTag)===null||r===void 0?void 0:r.call(e,this))!==null&&n!==void 0?n:this.toMarkdownDefault(e)}toMarkdownDefault(e){let r=this.content.toMarkdown(e);if(this.inline){let a=kze(this.name,r,e??{});if(typeof a=="string")return a}let n="";e?.tag==="italic"||e?.tag===void 0?n="*":e?.tag==="bold"?n="**":e?.tag==="bold-italic"&&(n="***");let i=`${n}@${this.name}${n}`;return this.content.inlines.length===1?i=`${i} \u2014 ${r}`:this.content.inlines.length>1&&(i=`${i} +${r}`),this.inline?`{${i}}`:i}};o(kze,"renderInlineTag");o(Eze,"renderLinkDefault");gx=class{static{o(this,"JSDocTextImpl")}constructor(e,r){this.inlines=e,this.range=r}toString(){let e="";for(let r=0;rn.range.start.line&&(e+=` +`)}return e}toMarkdown(e){let r="";for(let n=0;ni.range.start.line&&(r+=` +`)}return r}},Jk=class{static{o(this,"JSDocLineImpl")}constructor(e,r){this.text=e,this.range=r}toString(){return this.text}toMarkdown(){return this.text}};o(xce,"fillNewlines")});var yx,oI=M(()=>{"use strict";os();sI();yx=class{static{o(this,"JSDocDocumentationProvider")}constructor(e){this.indexManager=e.shared.workspace.IndexManager,this.commentProvider=e.documentation.CommentProvider}getDocumentation(e){let r=this.commentProvider.getComment(e);if(r&&iI(r))return nI(r).toMarkdown({renderLink:o((i,a)=>this.documentationLinkRenderer(e,i,a),"renderLink"),renderTag:o(i=>this.documentationTagRenderer(e,i),"renderTag")})}documentationLinkRenderer(e,r,n){var i;let a=(i=this.findNameInPrecomputedScopes(e,r))!==null&&i!==void 0?i:this.findNameInGlobalScope(e,r);if(a&&a.nameSegment){let s=a.nameSegment.range.start.line+1,l=a.nameSegment.range.start.character+1,u=a.documentUri.with({fragment:`L${s},${l}`});return`[${n}](${u.toString()})`}else return}documentationTagRenderer(e,r){}findNameInPrecomputedScopes(e,r){let i=Vi(e).precomputedScopes;if(!i)return;let a=e;do{let l=i.get(a).find(u=>u.name===r);if(l)return l;a=a.$container}while(a)}findNameInGlobalScope(e,r){return this.indexManager.allElements().find(i=>i.name===r)}}});var vx,lI=M(()=>{"use strict";jk();zl();vx=class{static{o(this,"DefaultCommentProvider")}constructor(e){this.grammarConfig=()=>e.parser.GrammarConfig}getComment(e){var r;return VM(e)?e.$comment:(r=zD(e.$cstNode,this.grammarConfig().multilineCommentRules))===null||r===void 0?void 0:r.text}}});var ui={};var cI=M(()=>{"use strict";Sr(ui,Ji(LM(),1))});var xx,uI,hI,fI=M(()=>{"use strict";nl();cI();xx=class{static{o(this,"DefaultAsyncParser")}constructor(e){this.syncParser=e.parser.LangiumParser}parse(e){return Promise.resolve(this.syncParser.parse(e))}},uI=class{static{o(this,"AbstractThreadedAsyncParser")}constructor(e){this.threadCount=8,this.terminationDelay=200,this.workerPool=[],this.queue=[],this.hydrator=e.serializer.Hydrator}initializeWorkers(){for(;this.workerPool.length{if(this.queue.length>0){let r=this.queue.shift();r&&(e.lock(),r.resolve(e))}}),this.workerPool.push(e)}}async parse(e,r){let n=await this.acquireParserWorker(r),i=new fs,a,s=r.onCancellationRequested(()=>{a=setTimeout(()=>{this.terminateWorker(n)},this.terminationDelay)});return n.parse(e).then(l=>{let u=this.hydrator.hydrate(l);i.resolve(u)}).catch(l=>{i.reject(l)}).finally(()=>{s.dispose(),clearTimeout(a)}),i.promise}terminateWorker(e){e.terminate();let r=this.workerPool.indexOf(e);r>=0&&this.workerPool.splice(r,1)}async acquireParserWorker(e){this.initializeWorkers();for(let n of this.workerPool)if(n.ready)return n.lock(),n;let r=new fs;return e.onCancellationRequested(()=>{let n=this.queue.indexOf(r);n>=0&&this.queue.splice(n,1),r.reject(Vc)}),this.queue.push(r),r.promise}},hI=class{static{o(this,"ParserWorker")}get ready(){return this._ready}get onReady(){return this.onReadyEmitter.event}constructor(e,r,n,i){this.onReadyEmitter=new ui.Emitter,this.deferred=new fs,this._ready=!0,this._parsing=!1,this.sendMessage=e,this._terminate=i,r(a=>{let s=a;this.deferred.resolve(s),this.unlock()}),n(a=>{this.deferred.reject(a),this.unlock()})}terminate(){this.deferred.reject(Vc),this._terminate()}lock(){this._ready=!1}unlock(){this._parsing=!1,this._ready=!0,this.onReadyEmitter.fire()}parse(e){if(this._parsing)throw new Error("Parser worker is busy");return this._parsing=!0,this.deferred=new fs,this.sendMessage(e),this.deferred.promise}}});var bx,dI=M(()=>{"use strict";rl();nl();bx=class{static{o(this,"DefaultWorkspaceLock")}constructor(){this.previousTokenSource=new Ar.CancellationTokenSource,this.writeQueue=[],this.readQueue=[],this.done=!0}write(e){this.cancelWrite();let r=new Ar.CancellationTokenSource;return this.previousTokenSource=r,this.enqueue(this.writeQueue,e,r.token)}read(e){return this.enqueue(this.readQueue,e)}enqueue(e,r,n){let i=new fs,a={action:r,deferred:i,cancellationToken:n??Ar.CancellationToken.None};return e.push(a),this.performNextOperation(),i.promise}async performNextOperation(){if(!this.done)return;let e=[];if(this.writeQueue.length>0)e.push(this.writeQueue.shift());else if(this.readQueue.length>0)e.push(...this.readQueue.splice(0,this.readQueue.length));else return;this.done=!1,await Promise.all(e.map(async({action:r,deferred:n,cancellationToken:i})=>{try{let a=await Promise.resolve().then(()=>r(i));n.resolve(a)}catch(a){mf(a)?n.resolve(void 0):n.reject(a)}})),this.done=!0,this.performNextOperation()}cancelWrite(){this.previousTokenSource.cancel()}}});var wx,pI=M(()=>{"use strict";Fk();Bc();Zo();os();Fg();zl();wx=class{static{o(this,"DefaultHydrator")}constructor(e){this.grammarElementIdMap=new E0,this.tokenTypeIdMap=new E0,this.grammar=e.Grammar,this.lexer=e.parser.Lexer,this.linker=e.references.Linker}dehydrate(e){return{lexerErrors:e.lexerErrors.map(r=>Object.assign({},r)),parserErrors:e.parserErrors.map(r=>Object.assign({},r)),value:this.dehydrateAstNode(e.value,this.createDehyrationContext(e.value))}}createDehyrationContext(e){let r=new Map,n=new Map;for(let i of tl(e))r.set(i,{});if(e.$cstNode)for(let i of Jd(e.$cstNode))n.set(i,{});return{astNodes:r,cstNodes:n}}dehydrateAstNode(e,r){let n=r.astNodes.get(e);n.$type=e.$type,n.$containerIndex=e.$containerIndex,n.$containerProperty=e.$containerProperty,e.$cstNode!==void 0&&(n.$cstNode=this.dehydrateCstNode(e.$cstNode,r));for(let[i,a]of Object.entries(e))if(!i.startsWith("$"))if(Array.isArray(a)){let s=[];n[i]=s;for(let l of a)ri(l)?s.push(this.dehydrateAstNode(l,r)):Ta(l)?s.push(this.dehydrateReference(l,r)):s.push(l)}else ri(a)?n[i]=this.dehydrateAstNode(a,r):Ta(a)?n[i]=this.dehydrateReference(a,r):a!==void 0&&(n[i]=a);return n}dehydrateReference(e,r){let n={};return n.$refText=e.$refText,e.$refNode&&(n.$refNode=r.cstNodes.get(e.$refNode)),n}dehydrateCstNode(e,r){let n=r.cstNodes.get(e);return t2(e)?n.fullText=e.fullText:n.grammarSource=this.getGrammarElementId(e.grammarSource),n.hidden=e.hidden,n.astNode=r.astNodes.get(e.astNode),ho(e)?n.content=e.content.map(i=>this.dehydrateCstNode(i,r)):cf(e)&&(n.tokenType=e.tokenType.name,n.offset=e.offset,n.length=e.length,n.startLine=e.range.start.line,n.startColumn=e.range.start.character,n.endLine=e.range.end.line,n.endColumn=e.range.end.character),n}hydrate(e){let r=e.value,n=this.createHydrationContext(r);return"$cstNode"in r&&this.hydrateCstNode(r.$cstNode,n),{lexerErrors:e.lexerErrors,parserErrors:e.parserErrors,value:this.hydrateAstNode(r,n)}}createHydrationContext(e){let r=new Map,n=new Map;for(let a of tl(e))r.set(a,{});let i;if(e.$cstNode)for(let a of Jd(e.$cstNode)){let s;"fullText"in a?(s=new Ng(a.fullText),i=s):"content"in a?s=new b0:"tokenType"in a&&(s=this.hydrateCstLeafNode(a)),s&&(n.set(a,s),s.root=i)}return{astNodes:r,cstNodes:n}}hydrateAstNode(e,r){let n=r.astNodes.get(e);n.$type=e.$type,n.$containerIndex=e.$containerIndex,n.$containerProperty=e.$containerProperty,e.$cstNode&&(n.$cstNode=r.cstNodes.get(e.$cstNode));for(let[i,a]of Object.entries(e))if(!i.startsWith("$"))if(Array.isArray(a)){let s=[];n[i]=s;for(let l of a)ri(l)?s.push(this.setParent(this.hydrateAstNode(l,r),n)):Ta(l)?s.push(this.hydrateReference(l,n,i,r)):s.push(l)}else ri(a)?n[i]=this.setParent(this.hydrateAstNode(a,r),n):Ta(a)?n[i]=this.hydrateReference(a,n,i,r):a!==void 0&&(n[i]=a);return n}setParent(e,r){return e.$container=r,e}hydrateReference(e,r,n,i){return this.linker.buildReference(r,n,i.cstNodes.get(e.$refNode),e.$refText)}hydrateCstNode(e,r,n=0){let i=r.cstNodes.get(e);if(typeof e.grammarSource=="number"&&(i.grammarSource=this.getGrammarElement(e.grammarSource)),i.astNode=r.astNodes.get(e.astNode),ho(i))for(let a of e.content){let s=this.hydrateCstNode(a,r,n++);i.content.push(s)}return i}hydrateCstLeafNode(e){let r=this.getTokenType(e.tokenType),n=e.offset,i=e.length,a=e.startLine,s=e.startColumn,l=e.endLine,u=e.endColumn,h=e.hidden;return new x0(n,i,{start:{line:a,character:s},end:{line:l,character:u}},r,h)}getTokenType(e){return this.lexer.definition[e]}getGrammarElementId(e){return this.grammarElementIdMap.size===0&&this.createGrammarElementIdMap(),this.grammarElementIdMap.get(e)}getGrammarElement(e){this.grammarElementIdMap.size===0&&this.createGrammarElementIdMap();let r=this.grammarElementIdMap.getKey(e);if(r)return r;throw new Error("Invalid grammar element id: "+e)}createGrammarElementIdMap(){let e=0;for(let r of tl(this.grammar))a2(r)&&this.grammarElementIdMap.set(r,e++)}}});function go(t){return{documentation:{CommentProvider:o(e=>new vx(e),"CommentProvider"),DocumentationProvider:o(e=>new yx(e),"DocumentationProvider")},parser:{AsyncParser:o(e=>new xx(e),"AsyncParser"),GrammarConfig:o(e=>uR(e),"GrammarConfig"),LangiumParser:o(e=>bM(e),"LangiumParser"),CompletionParser:o(e=>vM(e),"CompletionParser"),ValueConverter:o(()=>new k0,"ValueConverter"),TokenBuilder:o(()=>new T0,"TokenBuilder"),Lexer:o(e=>new px(e),"Lexer"),ParserErrorMessageProvider:o(()=>new Rg,"ParserErrorMessageProvider")},workspace:{AstNodeLocator:o(()=>new cx,"AstNodeLocator"),AstNodeDescriptionProvider:o(e=>new ox(e),"AstNodeDescriptionProvider"),ReferenceDescriptionProvider:o(e=>new lx(e),"ReferenceDescriptionProvider")},references:{Linker:o(e=>new j2(e),"Linker"),NameProvider:o(()=>new K2,"NameProvider"),ScopeProvider:o(e=>new tx(e),"ScopeProvider"),ScopeComputation:o(e=>new Z2(e),"ScopeComputation"),References:o(e=>new Q2(e),"References")},serializer:{Hydrator:o(e=>new wx(e),"Hydrator"),JsonSerializer:o(e=>new rx(e),"JsonSerializer")},validation:{DocumentValidator:o(e=>new sx(e),"DocumentValidator"),ValidationRegistry:o(e=>new ix(e),"ValidationRegistry")},shared:o(()=>t.shared,"shared")}}function yo(t){return{ServiceRegistry:o(()=>new nx,"ServiceRegistry"),workspace:{LangiumDocuments:o(e=>new X2(e),"LangiumDocuments"),LangiumDocumentFactory:o(e=>new q2(e),"LangiumDocumentFactory"),DocumentBuilder:o(e=>new hx(e),"DocumentBuilder"),IndexManager:o(e=>new fx(e),"IndexManager"),WorkspaceManager:o(e=>new dx(e),"WorkspaceManager"),FileSystemProvider:o(e=>t.fileSystemProvider(e),"FileSystemProvider"),WorkspaceLock:o(()=>new bx,"WorkspaceLock"),ConfigurationProvider:o(e=>new ux(e),"ConfigurationProvider")}}}var mI=M(()=>{"use strict";hR();xM();wM();TM();kM();PM();BM();FM();zM();$M();jk();UM();HM();ax();WM();YM();qM();jM();Bg();KM();QM();eI();oI();lI();Y2();fI();dI();pI();o(go,"createDefaultCoreModule");o(yo,"createDefaultSharedCoreModule")});function Wi(t,e,r,n,i,a,s,l,u){let h=[t,e,r,n,i,a,s,l,u].reduce(eE,{});return Ace(h)}function Cce(t){if(t&&t[yI])for(let e of Object.values(t))Cce(e);return t}function Ace(t,e){let r=new Proxy({},{deleteProperty:o(()=>!1,"deleteProperty"),get:o((n,i)=>Sce(n,i,t,e||r),"get"),getOwnPropertyDescriptor:o((n,i)=>(Sce(n,i,t,e||r),Object.getOwnPropertyDescriptor(n,i)),"getOwnPropertyDescriptor"),has:o((n,i)=>i in t,"has"),ownKeys:o(()=>[...Reflect.ownKeys(t),yI],"ownKeys")});return r[yI]=!0,r}function Sce(t,e,r,n){if(e in t){if(t[e]instanceof Error)throw new Error("Construction failure. Please make sure that your dependencies are constructable.",{cause:t[e]});if(t[e]===Ece)throw new Error('Cycle detected. Please make "'+String(e)+'" lazy. See https://langium.org/docs/configuration-services/#resolving-cyclic-dependencies');return t[e]}else if(e in r){let i=r[e];t[e]=Ece;try{t[e]=typeof i=="function"?i(n):Ace(i,n)}catch(a){throw t[e]=a instanceof Error?a:void 0,a}return t[e]}else return}function eE(t,e){if(e){for(let[r,n]of Object.entries(e))if(n!==void 0){let i=t[r];i!==null&&n!==null&&typeof i=="object"&&typeof n=="object"?t[r]=eE(i,n):t[r]=n}}return t}var gI,yI,Ece,vI=M(()=>{"use strict";(function(t){t.merge=(e,r)=>eE(eE({},e),r)})(gI||(gI={}));o(Wi,"inject");yI=Symbol("isProxy");o(Cce,"eagerLoad");o(Ace,"_inject");Ece=Symbol();o(Sce,"_resolve");o(eE,"_merge")});var _ce=M(()=>{"use strict"});var Lce=M(()=>{"use strict";lI();oI();sI()});var Dce=M(()=>{"use strict"});var Nce=M(()=>{"use strict";hR();Dce()});var Rce=M(()=>{"use strict"});var Mce=M(()=>{"use strict";fI();xM();Fk();wM();Y2();eI();Rce();TM();kM()});var Ice=M(()=>{"use strict";PM();BM();FM();GM();zM();$M()});var Oce=M(()=>{"use strict";pI();jk()});var tE,vo,xI=M(()=>{"use strict";tE=class{static{o(this,"EmptyFileSystemProvider")}readFile(){throw new Error("No file system is available.")}async readDirectory(){return[]}},vo={fileSystemProvider:o(()=>new tE,"fileSystemProvider")}});function Aze(){let t=Wi(yo(vo),Cze),e=Wi(go({shared:t}),Sze);return t.ServiceRegistry.register(e),e}function gf(t){var e;let r=Aze(),n=r.serializer.JsonSerializer.deserialize(t);return r.shared.workspace.LangiumDocumentFactory.fromModel(n,Hs.parse(`memory://${(e=n.name)!==null&&e!==void 0?e:"grammar"}.langium`)),n}var Sze,Cze,Pce=M(()=>{"use strict";mI();vI();Bc();xI();Uc();Sze={Grammar:o(()=>{},"Grammar"),LanguageMetaData:o(()=>({caseInsensitive:!1,fileExtensions:[".langium"],languageId:"langium"}),"LanguageMetaData")},Cze={AstReflection:o(()=>new tg,"AstReflection")};o(Aze,"createMinimalGrammarServices");o(gf,"loadGrammarFromJson")});var $r={};vr($r,{AstUtils:()=>zT,BiMap:()=>E0,Cancellation:()=>Ar,ContextCache:()=>S0,CstUtils:()=>AT,DONE_RESULT:()=>ss,Deferred:()=>fs,Disposable:()=>C0,DisposableCache:()=>Gg,DocumentCache:()=>qk,EMPTY_STREAM:()=>r2,ErrorWithLocation:()=>t0,GrammarUtils:()=>WT,MultiMap:()=>Hc,OperationCancelled:()=>Vc,Reduction:()=>Jm,RegExpUtils:()=>UT,SimpleCache:()=>ex,StreamImpl:()=>fo,TreeStreamImpl:()=>Pc,URI:()=>Hs,UriUtils:()=>ds,WorkspaceCache:()=>$g,assertUnreachable:()=>uf,delayNextTick:()=>MM,interruptAndCheck:()=>Hi,isOperationCancelled:()=>mf,loadGrammarFromJson:()=>gf,setInterruptionPeriod:()=>lce,startCancelableOperation:()=>oce,stream:()=>tn});var Bce=M(()=>{"use strict";Xk();cI();Sr($r,ui);Fg();XM();_T();Pce();nl();$s();Uc();os();rl();zl();Vl();ig()});var Fce=M(()=>{"use strict";HM();ax()});var zce=M(()=>{"use strict";WM();YM();qM();jM();Bg();xI();KM();dI();QM()});var ka={};vr(ka,{AbstractAstReflection:()=>Qd,AbstractCstNode:()=>V2,AbstractLangiumParser:()=>U2,AbstractParserErrorMessageProvider:()=>Gk,AbstractThreadedAsyncParser:()=>uI,AstUtils:()=>zT,BiMap:()=>E0,Cancellation:()=>Ar,CompositeCstNodeImpl:()=>b0,ContextCache:()=>S0,CstNodeBuilder:()=>$2,CstUtils:()=>AT,DONE_RESULT:()=>ss,DatatypeSymbol:()=>zk,DefaultAstNodeDescriptionProvider:()=>ox,DefaultAstNodeLocator:()=>cx,DefaultAsyncParser:()=>xx,DefaultCommentProvider:()=>vx,DefaultConfigurationProvider:()=>ux,DefaultDocumentBuilder:()=>hx,DefaultDocumentValidator:()=>sx,DefaultHydrator:()=>wx,DefaultIndexManager:()=>fx,DefaultJsonSerializer:()=>rx,DefaultLangiumDocumentFactory:()=>q2,DefaultLangiumDocuments:()=>X2,DefaultLexer:()=>px,DefaultLinker:()=>j2,DefaultNameProvider:()=>K2,DefaultReferenceDescriptionProvider:()=>lx,DefaultReferences:()=>Q2,DefaultScopeComputation:()=>Z2,DefaultScopeProvider:()=>tx,DefaultServiceRegistry:()=>nx,DefaultTokenBuilder:()=>T0,DefaultValueConverter:()=>k0,DefaultWorkspaceLock:()=>bx,DefaultWorkspaceManager:()=>dx,Deferred:()=>fs,Disposable:()=>C0,DisposableCache:()=>Gg,DocumentCache:()=>qk,DocumentState:()=>Tn,DocumentValidator:()=>Qu,EMPTY_SCOPE:()=>fze,EMPTY_STREAM:()=>r2,EmptyFileSystem:()=>vo,EmptyFileSystemProvider:()=>tE,ErrorWithLocation:()=>t0,GrammarAST:()=>o2,GrammarUtils:()=>WT,JSDocDocumentationProvider:()=>yx,LangiumCompletionParser:()=>W2,LangiumParser:()=>H2,LangiumParserErrorMessageProvider:()=>Rg,LeafCstNodeImpl:()=>x0,MapScope:()=>J2,Module:()=>gI,MultiMap:()=>Hc,OperationCancelled:()=>Vc,ParserWorker:()=>hI,Reduction:()=>Jm,RegExpUtils:()=>UT,RootCstNodeImpl:()=>Ng,SimpleCache:()=>ex,StreamImpl:()=>fo,StreamScope:()=>zg,TextDocument:()=>Og,TreeStreamImpl:()=>Pc,URI:()=>Hs,UriUtils:()=>ds,ValidationCategory:()=>Vg,ValidationRegistry:()=>ix,ValueConverter:()=>$c,WorkspaceCache:()=>$g,assertUnreachable:()=>uf,createCompletionParser:()=>vM,createDefaultCoreModule:()=>go,createDefaultSharedCoreModule:()=>yo,createGrammarConfig:()=>uR,createLangiumParser:()=>bM,delayNextTick:()=>MM,diagnosticData:()=>Kk,eagerLoad:()=>Cce,getDiagnosticRange:()=>gce,inject:()=>Wi,interruptAndCheck:()=>Hi,isAstNode:()=>ri,isAstNodeDescription:()=>OD,isAstNodeWithComment:()=>VM,isCompositeCstNode:()=>ho,isIMultiModeLexerDefinition:()=>JM,isJSDoc:()=>iI,isLeafCstNode:()=>cf,isLinkingError:()=>Zd,isNamed:()=>pce,isOperationCancelled:()=>mf,isReference:()=>Ta,isRootCstNode:()=>t2,isTokenTypeArray:()=>yce,isTokenTypeDictionary:()=>ZM,loadGrammarFromJson:()=>gf,parseJSDoc:()=>nI,prepareLangiumParser:()=>ece,setInterruptionPeriod:()=>lce,startCancelableOperation:()=>oce,stream:()=>tn,toDiagnosticSeverity:()=>Qk});var Wc=M(()=>{"use strict";mI();vI();UM();_ce();Zo();Lce();Nce();Mce();Ice();Oce();Bce();Sr(ka,$r);Fce();zce();Bc()});function qce(t){return Hl.isInstance(t,Yce)}function Xce(t){return Hl.isInstance(t,bI)}function jce(t){return Hl.isInstance(t,wI)}function Kce(t){return Hl.isInstance(t,Nze)}function Qce(t){return Hl.isInstance(t,TI)}function Jce(t){return Hl.isInstance(t,Zce)}function eue(t){return Hl.isInstance(t,kI)}function rue(t){return Hl.isInstance(t,tue)}function iue(t){return Hl.isInstance(t,nue)}function sue(t){return Hl.isInstance(t,aue)}function lue(t){return Hl.isInstance(t,oue)}var _ze,Rt,Wce,Yce,bI,Lze,Dze,wI,Nze,TI,Zce,kI,tue,nue,aue,oue,Rze,cue,Hl,Gce,Mze,$ce,Ize,Vce,Oze,Uce,Pze,Hce,Bze,Fze,zze,Gze,$ze,Vze,Wl,EI,SI,CI,AI,_I,Uze,Hze,Wze,Yze,Ug,A0,il,qze,al=M(()=>{"use strict";Wc();Wc();Wc();Wc();_ze=Object.defineProperty,Rt=o((t,e)=>_ze(t,"name",{value:e,configurable:!0}),"__name"),Wce="Statement",Yce="Architecture";o(qce,"isArchitecture");Rt(qce,"isArchitecture");bI="Branch";o(Xce,"isBranch");Rt(Xce,"isBranch");Lze="Checkout",Dze="CherryPicking",wI="Commit";o(jce,"isCommit");Rt(jce,"isCommit");Nze="Common";o(Kce,"isCommon");Rt(Kce,"isCommon");TI="GitGraph";o(Qce,"isGitGraph");Rt(Qce,"isGitGraph");Zce="Info";o(Jce,"isInfo");Rt(Jce,"isInfo");kI="Merge";o(eue,"isMerge");Rt(eue,"isMerge");tue="Packet";o(rue,"isPacket");Rt(rue,"isPacket");nue="PacketBlock";o(iue,"isPacketBlock");Rt(iue,"isPacketBlock");aue="Pie";o(sue,"isPie");Rt(sue,"isPie");oue="PieSection";o(lue,"isPieSection");Rt(lue,"isPieSection");Rze="Direction",cue=class extends Qd{static{o(this,"MermaidAstReflection")}static{Rt(this,"MermaidAstReflection")}getAllTypes(){return["Architecture","Branch","Checkout","CherryPicking","Commit","Common","Direction","Edge","GitGraph","Group","Info","Junction","Merge","Packet","PacketBlock","Pie","PieSection","Service","Statement"]}computeIsSubtype(t,e){switch(t){case bI:case Lze:case Dze:case wI:case kI:return this.isSubtype(Wce,e);case Rze:return this.isSubtype(TI,e);default:return!1}}getReferenceType(t){let e=`${t.container.$type}:${t.property}`;switch(e){default:throw new Error(`${e} is not a valid reference id.`)}}getTypeMetaData(t){switch(t){case"Architecture":return{name:"Architecture",properties:[{name:"accDescr"},{name:"accTitle"},{name:"edges",defaultValue:[]},{name:"groups",defaultValue:[]},{name:"junctions",defaultValue:[]},{name:"services",defaultValue:[]},{name:"title"}]};case"Branch":return{name:"Branch",properties:[{name:"name"},{name:"order"}]};case"Checkout":return{name:"Checkout",properties:[{name:"branch"}]};case"CherryPicking":return{name:"CherryPicking",properties:[{name:"id"},{name:"parent"},{name:"tags",defaultValue:[]}]};case"Commit":return{name:"Commit",properties:[{name:"id"},{name:"message"},{name:"tags",defaultValue:[]},{name:"type"}]};case"Common":return{name:"Common",properties:[{name:"accDescr"},{name:"accTitle"},{name:"title"}]};case"Edge":return{name:"Edge",properties:[{name:"lhsDir"},{name:"lhsGroup",defaultValue:!1},{name:"lhsId"},{name:"lhsInto",defaultValue:!1},{name:"rhsDir"},{name:"rhsGroup",defaultValue:!1},{name:"rhsId"},{name:"rhsInto",defaultValue:!1},{name:"title"}]};case"GitGraph":return{name:"GitGraph",properties:[{name:"accDescr"},{name:"accTitle"},{name:"statements",defaultValue:[]},{name:"title"}]};case"Group":return{name:"Group",properties:[{name:"icon"},{name:"id"},{name:"in"},{name:"title"}]};case"Info":return{name:"Info",properties:[{name:"accDescr"},{name:"accTitle"},{name:"title"}]};case"Junction":return{name:"Junction",properties:[{name:"id"},{name:"in"}]};case"Merge":return{name:"Merge",properties:[{name:"branch"},{name:"id"},{name:"tags",defaultValue:[]},{name:"type"}]};case"Packet":return{name:"Packet",properties:[{name:"accDescr"},{name:"accTitle"},{name:"blocks",defaultValue:[]},{name:"title"}]};case"PacketBlock":return{name:"PacketBlock",properties:[{name:"end"},{name:"label"},{name:"start"}]};case"Pie":return{name:"Pie",properties:[{name:"accDescr"},{name:"accTitle"},{name:"sections",defaultValue:[]},{name:"showData",defaultValue:!1},{name:"title"}]};case"PieSection":return{name:"PieSection",properties:[{name:"label"},{name:"value"}]};case"Service":return{name:"Service",properties:[{name:"icon"},{name:"iconText"},{name:"id"},{name:"in"},{name:"title"}]};case"Direction":return{name:"Direction",properties:[{name:"accDescr"},{name:"accTitle"},{name:"dir"},{name:"statements",defaultValue:[]},{name:"title"}]};default:return{name:t,properties:[]}}}},Hl=new cue,Mze=Rt(()=>Gce??(Gce=gf('{"$type":"Grammar","isDeclared":true,"name":"Info","imports":[],"rules":[{"$type":"ParserRule","name":"Info","entry":true,"definition":{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@3"},"arguments":[],"cardinality":"*"},{"$type":"Keyword","value":"info"},{"$type":"RuleCall","rule":{"$ref":"#/rules@3"},"arguments":[],"cardinality":"*"},{"$type":"Group","elements":[{"$type":"Keyword","value":"showInfo"},{"$type":"RuleCall","rule":{"$ref":"#/rules@3"},"arguments":[],"cardinality":"*"}],"cardinality":"?"},{"$type":"RuleCall","rule":{"$ref":"#/rules@1"},"arguments":[],"cardinality":"?"}]},"definesHiddenTokens":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"TitleAndAccessibilities","fragment":true,"definition":{"$type":"Group","elements":[{"$type":"Alternatives","elements":[{"$type":"Assignment","feature":"accDescr","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@4"},"arguments":[]}},{"$type":"Assignment","feature":"accTitle","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@5"},"arguments":[]}},{"$type":"Assignment","feature":"title","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@6"},"arguments":[]}}]},{"$type":"RuleCall","rule":{"$ref":"#/rules@2"},"arguments":[]}],"cardinality":"+"},"definesHiddenTokens":false,"entry":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"EOL","fragment":true,"dataType":"string","definition":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@3"},"arguments":[],"cardinality":"+"},{"$type":"EndOfFile"}]},"definesHiddenTokens":false,"entry":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"TerminalRule","name":"NEWLINE","definition":{"$type":"RegexToken","regex":"/\\\\r?\\\\n/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ACC_DESCR","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*accDescr(?:[\\\\t ]*:([^\\\\n\\\\r]*?(?=%%)|[^\\\\n\\\\r]*)|\\\\s*{([^}]*)})/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ACC_TITLE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*accTitle[\\\\t ]*:(?:[^\\\\n\\\\r]*?(?=%%)|[^\\\\n\\\\r]*)/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"TITLE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*title(?:[\\\\t ][^\\\\n\\\\r]*?(?=%%)|[\\\\t ][^\\\\n\\\\r]*|)/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","hidden":true,"name":"WHITESPACE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]+/"},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"YAML","definition":{"$type":"RegexToken","regex":"/---[\\\\t ]*\\\\r?\\\\n(?:[\\\\S\\\\s]*?\\\\r?\\\\n)?---(?:\\\\r?\\\\n|(?!\\\\S))/"},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"DIRECTIVE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*%%{[\\\\S\\\\s]*?}%%(?:\\\\r?\\\\n|(?!\\\\S))/"},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"SINGLE_LINE_COMMENT","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*%%[^\\\\n\\\\r]*/"},"fragment":false}],"definesHiddenTokens":false,"hiddenTokens":[],"interfaces":[{"$type":"Interface","name":"Common","attributes":[{"$type":"TypeAttribute","name":"accDescr","isOptional":true,"type":{"$type":"SimpleType","primitiveType":"string"}},{"$type":"TypeAttribute","name":"accTitle","isOptional":true,"type":{"$type":"SimpleType","primitiveType":"string"}},{"$type":"TypeAttribute","name":"title","isOptional":true,"type":{"$type":"SimpleType","primitiveType":"string"}}],"superTypes":[]}],"types":[],"usedGrammars":[]}')),"InfoGrammar"),Ize=Rt(()=>$ce??($ce=gf(`{"$type":"Grammar","isDeclared":true,"name":"Packet","imports":[],"rules":[{"$type":"ParserRule","name":"Packet","entry":true,"definition":{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@6"},"arguments":[],"cardinality":"*"},{"$type":"Keyword","value":"packet-beta"},{"$type":"Alternatives","elements":[{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@6"},"arguments":[],"cardinality":"*"},{"$type":"RuleCall","rule":{"$ref":"#/rules@4"},"arguments":[]},{"$type":"Assignment","feature":"blocks","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@1"},"arguments":[]},"cardinality":"*"}]},{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@6"},"arguments":[],"cardinality":"+"},{"$type":"Assignment","feature":"blocks","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@1"},"arguments":[]},"cardinality":"+"}]},{"$type":"RuleCall","rule":{"$ref":"#/rules@6"},"arguments":[],"cardinality":"*"}]}]},"definesHiddenTokens":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"PacketBlock","definition":{"$type":"Group","elements":[{"$type":"Assignment","feature":"start","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@2"},"arguments":[]}},{"$type":"Group","elements":[{"$type":"Keyword","value":"-"},{"$type":"Assignment","feature":"end","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@2"},"arguments":[]}}],"cardinality":"?"},{"$type":"Keyword","value":":"},{"$type":"Assignment","feature":"label","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@3"},"arguments":[]}},{"$type":"RuleCall","rule":{"$ref":"#/rules@5"},"arguments":[]}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"TerminalRule","name":"INT","type":{"$type":"ReturnType","name":"number"},"definition":{"$type":"RegexToken","regex":"/0|[1-9][0-9]*/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"STRING","definition":{"$type":"RegexToken","regex":"/\\"[^\\"]*\\"|'[^']*'/"},"fragment":false,"hidden":false},{"$type":"ParserRule","name":"TitleAndAccessibilities","fragment":true,"definition":{"$type":"Group","elements":[{"$type":"Alternatives","elements":[{"$type":"Assignment","feature":"accDescr","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@7"},"arguments":[]}},{"$type":"Assignment","feature":"accTitle","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@8"},"arguments":[]}},{"$type":"Assignment","feature":"title","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@9"},"arguments":[]}}]},{"$type":"RuleCall","rule":{"$ref":"#/rules@5"},"arguments":[]}],"cardinality":"+"},"definesHiddenTokens":false,"entry":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"EOL","fragment":true,"dataType":"string","definition":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@6"},"arguments":[],"cardinality":"+"},{"$type":"EndOfFile"}]},"definesHiddenTokens":false,"entry":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"TerminalRule","name":"NEWLINE","definition":{"$type":"RegexToken","regex":"/\\\\r?\\\\n/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ACC_DESCR","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*accDescr(?:[\\\\t ]*:([^\\\\n\\\\r]*?(?=%%)|[^\\\\n\\\\r]*)|\\\\s*{([^}]*)})/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ACC_TITLE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*accTitle[\\\\t ]*:(?:[^\\\\n\\\\r]*?(?=%%)|[^\\\\n\\\\r]*)/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"TITLE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*title(?:[\\\\t ][^\\\\n\\\\r]*?(?=%%)|[\\\\t ][^\\\\n\\\\r]*|)/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","hidden":true,"name":"WHITESPACE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]+/"},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"YAML","definition":{"$type":"RegexToken","regex":"/---[\\\\t ]*\\\\r?\\\\n(?:[\\\\S\\\\s]*?\\\\r?\\\\n)?---(?:\\\\r?\\\\n|(?!\\\\S))/"},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"DIRECTIVE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*%%{[\\\\S\\\\s]*?}%%(?:\\\\r?\\\\n|(?!\\\\S))/"},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"SINGLE_LINE_COMMENT","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*%%[^\\\\n\\\\r]*/"},"fragment":false}],"definesHiddenTokens":false,"hiddenTokens":[],"interfaces":[{"$type":"Interface","name":"Common","attributes":[{"$type":"TypeAttribute","name":"accDescr","isOptional":true,"type":{"$type":"SimpleType","primitiveType":"string"}},{"$type":"TypeAttribute","name":"accTitle","isOptional":true,"type":{"$type":"SimpleType","primitiveType":"string"}},{"$type":"TypeAttribute","name":"title","isOptional":true,"type":{"$type":"SimpleType","primitiveType":"string"}}],"superTypes":[]}],"types":[],"usedGrammars":[]}`)),"PacketGrammar"),Oze=Rt(()=>Vce??(Vce=gf('{"$type":"Grammar","isDeclared":true,"name":"Pie","imports":[],"rules":[{"$type":"ParserRule","name":"Pie","entry":true,"definition":{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@6"},"arguments":[],"cardinality":"*"},{"$type":"Keyword","value":"pie"},{"$type":"Assignment","feature":"showData","operator":"?=","terminal":{"$type":"Keyword","value":"showData"},"cardinality":"?"},{"$type":"Alternatives","elements":[{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@6"},"arguments":[],"cardinality":"*"},{"$type":"RuleCall","rule":{"$ref":"#/rules@4"},"arguments":[]},{"$type":"Assignment","feature":"sections","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@1"},"arguments":[]},"cardinality":"*"}]},{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@6"},"arguments":[],"cardinality":"+"},{"$type":"Assignment","feature":"sections","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@1"},"arguments":[]},"cardinality":"+"}]},{"$type":"RuleCall","rule":{"$ref":"#/rules@6"},"arguments":[],"cardinality":"*"}]}]},"definesHiddenTokens":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"PieSection","definition":{"$type":"Group","elements":[{"$type":"Assignment","feature":"label","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@2"},"arguments":[]}},{"$type":"Keyword","value":":"},{"$type":"Assignment","feature":"value","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@3"},"arguments":[]}},{"$type":"RuleCall","rule":{"$ref":"#/rules@5"},"arguments":[]}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"TerminalRule","name":"PIE_SECTION_LABEL","definition":{"$type":"RegexToken","regex":"/\\"[^\\"]+\\"/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"PIE_SECTION_VALUE","type":{"$type":"ReturnType","name":"number"},"definition":{"$type":"RegexToken","regex":"/(0|[1-9][0-9]*)(\\\\.[0-9]+)?/"},"fragment":false,"hidden":false},{"$type":"ParserRule","name":"TitleAndAccessibilities","fragment":true,"definition":{"$type":"Group","elements":[{"$type":"Alternatives","elements":[{"$type":"Assignment","feature":"accDescr","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@7"},"arguments":[]}},{"$type":"Assignment","feature":"accTitle","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@8"},"arguments":[]}},{"$type":"Assignment","feature":"title","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@9"},"arguments":[]}}]},{"$type":"RuleCall","rule":{"$ref":"#/rules@5"},"arguments":[]}],"cardinality":"+"},"definesHiddenTokens":false,"entry":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"EOL","fragment":true,"dataType":"string","definition":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@6"},"arguments":[],"cardinality":"+"},{"$type":"EndOfFile"}]},"definesHiddenTokens":false,"entry":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"TerminalRule","name":"NEWLINE","definition":{"$type":"RegexToken","regex":"/\\\\r?\\\\n/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ACC_DESCR","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*accDescr(?:[\\\\t ]*:([^\\\\n\\\\r]*?(?=%%)|[^\\\\n\\\\r]*)|\\\\s*{([^}]*)})/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ACC_TITLE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*accTitle[\\\\t ]*:(?:[^\\\\n\\\\r]*?(?=%%)|[^\\\\n\\\\r]*)/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"TITLE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*title(?:[\\\\t ][^\\\\n\\\\r]*?(?=%%)|[\\\\t ][^\\\\n\\\\r]*|)/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","hidden":true,"name":"WHITESPACE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]+/"},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"YAML","definition":{"$type":"RegexToken","regex":"/---[\\\\t ]*\\\\r?\\\\n(?:[\\\\S\\\\s]*?\\\\r?\\\\n)?---(?:\\\\r?\\\\n|(?!\\\\S))/"},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"DIRECTIVE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*%%{[\\\\S\\\\s]*?}%%(?:\\\\r?\\\\n|(?!\\\\S))/"},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"SINGLE_LINE_COMMENT","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*%%[^\\\\n\\\\r]*/"},"fragment":false}],"definesHiddenTokens":false,"hiddenTokens":[],"interfaces":[{"$type":"Interface","name":"Common","attributes":[{"$type":"TypeAttribute","name":"accDescr","isOptional":true,"type":{"$type":"SimpleType","primitiveType":"string"}},{"$type":"TypeAttribute","name":"accTitle","isOptional":true,"type":{"$type":"SimpleType","primitiveType":"string"}},{"$type":"TypeAttribute","name":"title","isOptional":true,"type":{"$type":"SimpleType","primitiveType":"string"}}],"superTypes":[]}],"types":[],"usedGrammars":[]}')),"PieGrammar"),Pze=Rt(()=>Uce??(Uce=gf('{"$type":"Grammar","isDeclared":true,"name":"Architecture","imports":[],"rules":[{"$type":"ParserRule","name":"Architecture","entry":true,"definition":{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@18"},"arguments":[],"cardinality":"*"},{"$type":"Keyword","value":"architecture-beta"},{"$type":"Alternatives","elements":[{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@18"},"arguments":[],"cardinality":"*"},{"$type":"RuleCall","rule":{"$ref":"#/rules@16"},"arguments":[]}]},{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@18"},"arguments":[],"cardinality":"*"},{"$type":"RuleCall","rule":{"$ref":"#/rules@1"},"arguments":[],"cardinality":"*"}]},{"$type":"RuleCall","rule":{"$ref":"#/rules@18"},"arguments":[],"cardinality":"*"}]}]},"definesHiddenTokens":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"Statement","fragment":true,"definition":{"$type":"Alternatives","elements":[{"$type":"Assignment","feature":"groups","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@5"},"arguments":[]}},{"$type":"Assignment","feature":"services","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@6"},"arguments":[]}},{"$type":"Assignment","feature":"junctions","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@7"},"arguments":[]}},{"$type":"Assignment","feature":"edges","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@8"},"arguments":[]}}]},"definesHiddenTokens":false,"entry":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"LeftPort","fragment":true,"definition":{"$type":"Group","elements":[{"$type":"Keyword","value":":"},{"$type":"Assignment","feature":"lhsDir","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@9"},"arguments":[]}}]},"definesHiddenTokens":false,"entry":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"RightPort","fragment":true,"definition":{"$type":"Group","elements":[{"$type":"Assignment","feature":"rhsDir","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@9"},"arguments":[]}},{"$type":"Keyword","value":":"}]},"definesHiddenTokens":false,"entry":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"Arrow","fragment":true,"definition":{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@2"},"arguments":[]},{"$type":"Assignment","feature":"lhsInto","operator":"?=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@15"},"arguments":[]},"cardinality":"?"},{"$type":"Alternatives","elements":[{"$type":"Keyword","value":"--"},{"$type":"Group","elements":[{"$type":"Keyword","value":"-"},{"$type":"Assignment","feature":"title","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@13"},"arguments":[]}},{"$type":"Keyword","value":"-"}]}]},{"$type":"Assignment","feature":"rhsInto","operator":"?=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@15"},"arguments":[]},"cardinality":"?"},{"$type":"RuleCall","rule":{"$ref":"#/rules@3"},"arguments":[]}]},"definesHiddenTokens":false,"entry":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"Group","definition":{"$type":"Group","elements":[{"$type":"Keyword","value":"group"},{"$type":"Assignment","feature":"id","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@10"},"arguments":[]}},{"$type":"Assignment","feature":"icon","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@12"},"arguments":[]},"cardinality":"?"},{"$type":"Assignment","feature":"title","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@13"},"arguments":[]},"cardinality":"?"},{"$type":"Group","elements":[{"$type":"Keyword","value":"in"},{"$type":"Assignment","feature":"in","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@10"},"arguments":[]}}],"cardinality":"?"},{"$type":"RuleCall","rule":{"$ref":"#/rules@17"},"arguments":[]}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"Service","definition":{"$type":"Group","elements":[{"$type":"Keyword","value":"service"},{"$type":"Assignment","feature":"id","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@10"},"arguments":[]}},{"$type":"Alternatives","elements":[{"$type":"Assignment","feature":"iconText","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@11"},"arguments":[]}},{"$type":"Assignment","feature":"icon","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@12"},"arguments":[]}}],"cardinality":"?"},{"$type":"Assignment","feature":"title","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@13"},"arguments":[]},"cardinality":"?"},{"$type":"Group","elements":[{"$type":"Keyword","value":"in"},{"$type":"Assignment","feature":"in","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@10"},"arguments":[]}}],"cardinality":"?"},{"$type":"RuleCall","rule":{"$ref":"#/rules@17"},"arguments":[]}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"Junction","definition":{"$type":"Group","elements":[{"$type":"Keyword","value":"junction"},{"$type":"Assignment","feature":"id","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@10"},"arguments":[]}},{"$type":"Group","elements":[{"$type":"Keyword","value":"in"},{"$type":"Assignment","feature":"in","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@10"},"arguments":[]}}],"cardinality":"?"},{"$type":"RuleCall","rule":{"$ref":"#/rules@17"},"arguments":[]}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"Edge","definition":{"$type":"Group","elements":[{"$type":"Assignment","feature":"lhsId","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@10"},"arguments":[]}},{"$type":"Assignment","feature":"lhsGroup","operator":"?=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@14"},"arguments":[]},"cardinality":"?"},{"$type":"RuleCall","rule":{"$ref":"#/rules@4"},"arguments":[]},{"$type":"Assignment","feature":"rhsId","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@10"},"arguments":[]}},{"$type":"Assignment","feature":"rhsGroup","operator":"?=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@14"},"arguments":[]},"cardinality":"?"},{"$type":"RuleCall","rule":{"$ref":"#/rules@17"},"arguments":[]}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"TerminalRule","name":"ARROW_DIRECTION","definition":{"$type":"TerminalAlternatives","elements":[{"$type":"TerminalAlternatives","elements":[{"$type":"TerminalAlternatives","elements":[{"$type":"CharacterRange","left":{"$type":"Keyword","value":"L"}},{"$type":"CharacterRange","left":{"$type":"Keyword","value":"R"}}]},{"$type":"CharacterRange","left":{"$type":"Keyword","value":"T"}}]},{"$type":"CharacterRange","left":{"$type":"Keyword","value":"B"}}]},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ARCH_ID","definition":{"$type":"RegexToken","regex":"/[\\\\w]+/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ARCH_TEXT_ICON","definition":{"$type":"RegexToken","regex":"/\\\\(\\"[^\\"]+\\"\\\\)/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ARCH_ICON","definition":{"$type":"RegexToken","regex":"/\\\\([\\\\w-:]+\\\\)/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ARCH_TITLE","definition":{"$type":"RegexToken","regex":"/\\\\[[\\\\w ]+\\\\]/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ARROW_GROUP","definition":{"$type":"RegexToken","regex":"/\\\\{group\\\\}/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ARROW_INTO","definition":{"$type":"RegexToken","regex":"/<|>/"},"fragment":false,"hidden":false},{"$type":"ParserRule","name":"TitleAndAccessibilities","fragment":true,"definition":{"$type":"Group","elements":[{"$type":"Alternatives","elements":[{"$type":"Assignment","feature":"accDescr","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@19"},"arguments":[]}},{"$type":"Assignment","feature":"accTitle","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@20"},"arguments":[]}},{"$type":"Assignment","feature":"title","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@21"},"arguments":[]}}]},{"$type":"RuleCall","rule":{"$ref":"#/rules@17"},"arguments":[]}],"cardinality":"+"},"definesHiddenTokens":false,"entry":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"EOL","fragment":true,"dataType":"string","definition":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@18"},"arguments":[],"cardinality":"+"},{"$type":"EndOfFile"}]},"definesHiddenTokens":false,"entry":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"TerminalRule","name":"NEWLINE","definition":{"$type":"RegexToken","regex":"/\\\\r?\\\\n/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ACC_DESCR","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*accDescr(?:[\\\\t ]*:([^\\\\n\\\\r]*?(?=%%)|[^\\\\n\\\\r]*)|\\\\s*{([^}]*)})/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ACC_TITLE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*accTitle[\\\\t ]*:(?:[^\\\\n\\\\r]*?(?=%%)|[^\\\\n\\\\r]*)/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"TITLE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*title(?:[\\\\t ][^\\\\n\\\\r]*?(?=%%)|[\\\\t ][^\\\\n\\\\r]*|)/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","hidden":true,"name":"WHITESPACE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]+/"},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"YAML","definition":{"$type":"RegexToken","regex":"/---[\\\\t ]*\\\\r?\\\\n(?:[\\\\S\\\\s]*?\\\\r?\\\\n)?---(?:\\\\r?\\\\n|(?!\\\\S))/"},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"DIRECTIVE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*%%{[\\\\S\\\\s]*?}%%(?:\\\\r?\\\\n|(?!\\\\S))/"},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"SINGLE_LINE_COMMENT","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*%%[^\\\\n\\\\r]*/"},"fragment":false}],"definesHiddenTokens":false,"hiddenTokens":[],"interfaces":[{"$type":"Interface","name":"Common","attributes":[{"$type":"TypeAttribute","name":"accDescr","isOptional":true,"type":{"$type":"SimpleType","primitiveType":"string"}},{"$type":"TypeAttribute","name":"accTitle","isOptional":true,"type":{"$type":"SimpleType","primitiveType":"string"}},{"$type":"TypeAttribute","name":"title","isOptional":true,"type":{"$type":"SimpleType","primitiveType":"string"}}],"superTypes":[]}],"types":[],"usedGrammars":[]}')),"ArchitectureGrammar"),Bze=Rt(()=>Hce??(Hce=gf(`{"$type":"Grammar","isDeclared":true,"name":"GitGraph","interfaces":[{"$type":"Interface","name":"Common","attributes":[{"$type":"TypeAttribute","name":"accDescr","isOptional":true,"type":{"$type":"SimpleType","primitiveType":"string"}},{"$type":"TypeAttribute","name":"accTitle","isOptional":true,"type":{"$type":"SimpleType","primitiveType":"string"}},{"$type":"TypeAttribute","name":"title","isOptional":true,"type":{"$type":"SimpleType","primitiveType":"string"}}],"superTypes":[]}],"rules":[{"$type":"ParserRule","name":"TitleAndAccessibilities","fragment":true,"definition":{"$type":"Group","elements":[{"$type":"Alternatives","elements":[{"$type":"Assignment","feature":"accDescr","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@3"},"arguments":[]}},{"$type":"Assignment","feature":"accTitle","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@4"},"arguments":[]}},{"$type":"Assignment","feature":"title","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@5"},"arguments":[]}}]},{"$type":"RuleCall","rule":{"$ref":"#/rules@1"},"arguments":[]}],"cardinality":"+"},"definesHiddenTokens":false,"entry":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"EOL","fragment":true,"dataType":"string","definition":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@2"},"arguments":[],"cardinality":"+"},{"$type":"EndOfFile"}]},"definesHiddenTokens":false,"entry":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"TerminalRule","name":"NEWLINE","definition":{"$type":"RegexToken","regex":"/\\\\r?\\\\n/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ACC_DESCR","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*accDescr(?:[\\\\t ]*:([^\\\\n\\\\r]*?(?=%%)|[^\\\\n\\\\r]*)|\\\\s*{([^}]*)})/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ACC_TITLE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*accTitle[\\\\t ]*:(?:[^\\\\n\\\\r]*?(?=%%)|[^\\\\n\\\\r]*)/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"TITLE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*title(?:[\\\\t ][^\\\\n\\\\r]*?(?=%%)|[\\\\t ][^\\\\n\\\\r]*|)/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","hidden":true,"name":"WHITESPACE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]+/"},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"YAML","definition":{"$type":"RegexToken","regex":"/---[\\\\t ]*\\\\r?\\\\n(?:[\\\\S\\\\s]*?\\\\r?\\\\n)?---(?:\\\\r?\\\\n|(?!\\\\S))/"},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"DIRECTIVE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*%%{[\\\\S\\\\s]*?}%%(?:\\\\r?\\\\n|(?!\\\\S))/"},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"SINGLE_LINE_COMMENT","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*%%[^\\\\n\\\\r]*/"},"fragment":false},{"$type":"ParserRule","name":"GitGraph","entry":true,"definition":{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@2"},"arguments":[],"cardinality":"*"},{"$type":"Alternatives","elements":[{"$type":"Keyword","value":"gitGraph"},{"$type":"Group","elements":[{"$type":"Keyword","value":"gitGraph"},{"$type":"Keyword","value":":"}]},{"$type":"Keyword","value":"gitGraph:"},{"$type":"Group","elements":[{"$type":"Keyword","value":"gitGraph"},{"$type":"RuleCall","rule":{"$ref":"#/rules@12"},"arguments":[]},{"$type":"Keyword","value":":"}]}]},{"$type":"RuleCall","rule":{"$ref":"#/rules@2"},"arguments":[],"cardinality":"*"},{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@2"},"arguments":[],"cardinality":"*"},{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@0"},"arguments":[]},{"$type":"Assignment","feature":"statements","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@11"},"arguments":[]}},{"$type":"RuleCall","rule":{"$ref":"#/rules@2"},"arguments":[]}],"cardinality":"*"}]}]},"definesHiddenTokens":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"Statement","definition":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@13"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@14"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@15"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@16"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@17"},"arguments":[]}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"Direction","definition":{"$type":"Assignment","feature":"dir","operator":"=","terminal":{"$type":"Alternatives","elements":[{"$type":"Keyword","value":"LR"},{"$type":"Keyword","value":"TB"},{"$type":"Keyword","value":"BT"}]}},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"Commit","definition":{"$type":"Group","elements":[{"$type":"Keyword","value":"commit"},{"$type":"Alternatives","elements":[{"$type":"Group","elements":[{"$type":"Keyword","value":"id:"},{"$type":"Assignment","feature":"id","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@20"},"arguments":[]}}]},{"$type":"Group","elements":[{"$type":"Keyword","value":"msg:","cardinality":"?"},{"$type":"Assignment","feature":"message","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@20"},"arguments":[]}}]},{"$type":"Group","elements":[{"$type":"Keyword","value":"tag:"},{"$type":"Assignment","feature":"tags","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@20"},"arguments":[]}}]},{"$type":"Group","elements":[{"$type":"Keyword","value":"type:"},{"$type":"Assignment","feature":"type","operator":"=","terminal":{"$type":"Alternatives","elements":[{"$type":"Keyword","value":"NORMAL"},{"$type":"Keyword","value":"REVERSE"},{"$type":"Keyword","value":"HIGHLIGHT"}]}}]}],"cardinality":"*"},{"$type":"RuleCall","rule":{"$ref":"#/rules@1"},"arguments":[]}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"Branch","definition":{"$type":"Group","elements":[{"$type":"Keyword","value":"branch"},{"$type":"Assignment","feature":"name","operator":"=","terminal":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@19"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@20"},"arguments":[]}]}},{"$type":"Group","elements":[{"$type":"Keyword","value":"order:"},{"$type":"Assignment","feature":"order","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@18"},"arguments":[]}}],"cardinality":"?"},{"$type":"RuleCall","rule":{"$ref":"#/rules@1"},"arguments":[]}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"Merge","definition":{"$type":"Group","elements":[{"$type":"Keyword","value":"merge"},{"$type":"Assignment","feature":"branch","operator":"=","terminal":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@19"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@20"},"arguments":[]}]}},{"$type":"Alternatives","elements":[{"$type":"Group","elements":[{"$type":"Keyword","value":"id:"},{"$type":"Assignment","feature":"id","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@20"},"arguments":[]}}]},{"$type":"Group","elements":[{"$type":"Keyword","value":"tag:"},{"$type":"Assignment","feature":"tags","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@20"},"arguments":[]}}]},{"$type":"Group","elements":[{"$type":"Keyword","value":"type:"},{"$type":"Assignment","feature":"type","operator":"=","terminal":{"$type":"Alternatives","elements":[{"$type":"Keyword","value":"NORMAL"},{"$type":"Keyword","value":"REVERSE"},{"$type":"Keyword","value":"HIGHLIGHT"}]}}]}],"cardinality":"*"},{"$type":"RuleCall","rule":{"$ref":"#/rules@1"},"arguments":[]}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"Checkout","definition":{"$type":"Group","elements":[{"$type":"Alternatives","elements":[{"$type":"Keyword","value":"checkout"},{"$type":"Keyword","value":"switch"}]},{"$type":"Assignment","feature":"branch","operator":"=","terminal":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@19"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@20"},"arguments":[]}]}},{"$type":"RuleCall","rule":{"$ref":"#/rules@1"},"arguments":[]}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"CherryPicking","definition":{"$type":"Group","elements":[{"$type":"Keyword","value":"cherry-pick"},{"$type":"Alternatives","elements":[{"$type":"Group","elements":[{"$type":"Keyword","value":"id:"},{"$type":"Assignment","feature":"id","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@20"},"arguments":[]}}]},{"$type":"Group","elements":[{"$type":"Keyword","value":"tag:"},{"$type":"Assignment","feature":"tags","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@20"},"arguments":[]}}]},{"$type":"Group","elements":[{"$type":"Keyword","value":"parent:"},{"$type":"Assignment","feature":"parent","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@20"},"arguments":[]}}]}],"cardinality":"*"},{"$type":"RuleCall","rule":{"$ref":"#/rules@1"},"arguments":[]}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"TerminalRule","name":"INT","type":{"$type":"ReturnType","name":"number"},"definition":{"$type":"RegexToken","regex":"/[0-9]+(?=\\\\s)/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ID","type":{"$type":"ReturnType","name":"string"},"definition":{"$type":"RegexToken","regex":"/\\\\w([-\\\\./\\\\w]*[-\\\\w])?/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"STRING","definition":{"$type":"RegexToken","regex":"/\\"[^\\"]*\\"|'[^']*'/"},"fragment":false,"hidden":false}],"definesHiddenTokens":false,"hiddenTokens":[],"imports":[],"types":[],"usedGrammars":[]}`)),"GitGraphGrammar"),Fze={languageId:"info",fileExtensions:[".mmd",".mermaid"],caseInsensitive:!1},zze={languageId:"packet",fileExtensions:[".mmd",".mermaid"],caseInsensitive:!1},Gze={languageId:"pie",fileExtensions:[".mmd",".mermaid"],caseInsensitive:!1},$ze={languageId:"architecture",fileExtensions:[".mmd",".mermaid"],caseInsensitive:!1},Vze={languageId:"gitGraph",fileExtensions:[".mmd",".mermaid"],caseInsensitive:!1},Wl={AstReflection:Rt(()=>new cue,"AstReflection")},EI={Grammar:Rt(()=>Mze(),"Grammar"),LanguageMetaData:Rt(()=>Fze,"LanguageMetaData"),parser:{}},SI={Grammar:Rt(()=>Ize(),"Grammar"),LanguageMetaData:Rt(()=>zze,"LanguageMetaData"),parser:{}},CI={Grammar:Rt(()=>Oze(),"Grammar"),LanguageMetaData:Rt(()=>Gze,"LanguageMetaData"),parser:{}},AI={Grammar:Rt(()=>Pze(),"Grammar"),LanguageMetaData:Rt(()=>$ze,"LanguageMetaData"),parser:{}},_I={Grammar:Rt(()=>Bze(),"Grammar"),LanguageMetaData:Rt(()=>Vze,"LanguageMetaData"),parser:{}},Uze=/accDescr(?:[\t ]*:([^\n\r]*)|\s*{([^}]*)})/,Hze=/accTitle[\t ]*:([^\n\r]*)/,Wze=/title([\t ][^\n\r]*|)/,Yze={ACC_DESCR:Uze,ACC_TITLE:Hze,TITLE:Wze},Ug=class extends k0{static{o(this,"AbstractMermaidValueConverter")}static{Rt(this,"AbstractMermaidValueConverter")}runConverter(t,e,r){let n=this.runCommonConverter(t,e,r);return n===void 0&&(n=this.runCustomConverter(t,e,r)),n===void 0?super.runConverter(t,e,r):n}runCommonConverter(t,e,r){let n=Yze[t.name];if(n===void 0)return;let i=n.exec(e);if(i!==null){if(i[1]!==void 0)return i[1].trim().replace(/[\t ]{2,}/gm," ");if(i[2]!==void 0)return i[2].replace(/^\s*/gm,"").replace(/\s+$/gm,"").replace(/[\t ]{2,}/gm," ").replace(/[\n\r]{2,}/gm,` +`)}}},A0=class extends Ug{static{o(this,"CommonValueConverter")}static{Rt(this,"CommonValueConverter")}runCustomConverter(t,e,r){}},il=class extends T0{static{o(this,"AbstractMermaidTokenBuilder")}static{Rt(this,"AbstractMermaidTokenBuilder")}constructor(t){super(),this.keywords=new Set(t)}buildKeywordTokens(t,e,r){let n=super.buildKeywordTokens(t,e,r);return n.forEach(i=>{this.keywords.has(i.name)&&i.PATTERN!==void 0&&(i.PATTERN=new RegExp(i.PATTERN.toString()+"(?:(?=%%)|(?!\\S))"))}),n}},qze=class extends il{static{o(this,"CommonTokenBuilder")}static{Rt(this,"CommonTokenBuilder")}}});function nE(t=vo){let e=Wi(yo(t),Wl),r=Wi(go({shared:e}),_I,rE);return e.ServiceRegistry.register(r),{shared:e,GitGraph:r}}var Xze,rE,LI=M(()=>{"use strict";al();Wc();Xze=class extends il{static{o(this,"GitGraphTokenBuilder")}static{Rt(this,"GitGraphTokenBuilder")}constructor(){super(["gitGraph"])}},rE={parser:{TokenBuilder:Rt(()=>new Xze,"TokenBuilder"),ValueConverter:Rt(()=>new A0,"ValueConverter")}};o(nE,"createGitGraphServices");Rt(nE,"createGitGraphServices")});function aE(t=vo){let e=Wi(yo(t),Wl),r=Wi(go({shared:e}),EI,iE);return e.ServiceRegistry.register(r),{shared:e,Info:r}}var jze,iE,DI=M(()=>{"use strict";al();Wc();jze=class extends il{static{o(this,"InfoTokenBuilder")}static{Rt(this,"InfoTokenBuilder")}constructor(){super(["info","showInfo"])}},iE={parser:{TokenBuilder:Rt(()=>new jze,"TokenBuilder"),ValueConverter:Rt(()=>new A0,"ValueConverter")}};o(aE,"createInfoServices");Rt(aE,"createInfoServices")});function oE(t=vo){let e=Wi(yo(t),Wl),r=Wi(go({shared:e}),SI,sE);return e.ServiceRegistry.register(r),{shared:e,Packet:r}}var Kze,sE,NI=M(()=>{"use strict";al();Wc();Kze=class extends il{static{o(this,"PacketTokenBuilder")}static{Rt(this,"PacketTokenBuilder")}constructor(){super(["packet-beta"])}},sE={parser:{TokenBuilder:Rt(()=>new Kze,"TokenBuilder"),ValueConverter:Rt(()=>new A0,"ValueConverter")}};o(oE,"createPacketServices");Rt(oE,"createPacketServices")});function cE(t=vo){let e=Wi(yo(t),Wl),r=Wi(go({shared:e}),CI,lE);return e.ServiceRegistry.register(r),{shared:e,Pie:r}}var Qze,Zze,lE,RI=M(()=>{"use strict";al();Wc();Qze=class extends il{static{o(this,"PieTokenBuilder")}static{Rt(this,"PieTokenBuilder")}constructor(){super(["pie","showData"])}},Zze=class extends Ug{static{o(this,"PieValueConverter")}static{Rt(this,"PieValueConverter")}runCustomConverter(t,e,r){if(t.name==="PIE_SECTION_LABEL")return e.replace(/"/g,"").trim()}},lE={parser:{TokenBuilder:Rt(()=>new Qze,"TokenBuilder"),ValueConverter:Rt(()=>new Zze,"ValueConverter")}};o(cE,"createPieServices");Rt(cE,"createPieServices")});function hE(t=vo){let e=Wi(yo(t),Wl),r=Wi(go({shared:e}),AI,uE);return e.ServiceRegistry.register(r),{shared:e,Architecture:r}}var Jze,eGe,uE,MI=M(()=>{"use strict";al();Wc();Jze=class extends il{static{o(this,"ArchitectureTokenBuilder")}static{Rt(this,"ArchitectureTokenBuilder")}constructor(){super(["architecture"])}},eGe=class extends Ug{static{o(this,"ArchitectureValueConverter")}static{Rt(this,"ArchitectureValueConverter")}runCustomConverter(t,e,r){if(t.name==="ARCH_ICON")return e.replace(/[()]/g,"").trim();if(t.name==="ARCH_TEXT_ICON")return e.replace(/["()]/g,"");if(t.name==="ARCH_TITLE")return e.replace(/[[\]]/g,"").trim()}},uE={parser:{TokenBuilder:Rt(()=>new Jze,"TokenBuilder"),ValueConverter:Rt(()=>new eGe,"ValueConverter")}};o(hE,"createArchitectureServices");Rt(hE,"createArchitectureServices")});var uue={};vr(uue,{InfoModule:()=>iE,createInfoServices:()=>aE});var hue=M(()=>{"use strict";DI();al()});var fue={};vr(fue,{PacketModule:()=>sE,createPacketServices:()=>oE});var due=M(()=>{"use strict";NI();al()});var pue={};vr(pue,{PieModule:()=>lE,createPieServices:()=>cE});var mue=M(()=>{"use strict";RI();al()});var gue={};vr(gue,{ArchitectureModule:()=>uE,createArchitectureServices:()=>hE});var yue=M(()=>{"use strict";MI();al()});var vue={};vr(vue,{GitGraphModule:()=>rE,createGitGraphServices:()=>nE});var xue=M(()=>{"use strict";LI();al()});async function Yl(t,e){let r=tGe[t];if(!r)throw new Error(`Unknown diagram type: ${t}`);_0[t]||await r();let i=_0[t].parse(e);if(i.lexerErrors.length>0||i.parserErrors.length>0)throw new rGe(i);return i.value}var _0,tGe,rGe,Hg=M(()=>{"use strict";LI();DI();NI();RI();MI();al();_0={},tGe={info:Rt(async()=>{let{createInfoServices:t}=await Promise.resolve().then(()=>(hue(),uue)),e=t().Info.parser.LangiumParser;_0.info=e},"info"),packet:Rt(async()=>{let{createPacketServices:t}=await Promise.resolve().then(()=>(due(),fue)),e=t().Packet.parser.LangiumParser;_0.packet=e},"packet"),pie:Rt(async()=>{let{createPieServices:t}=await Promise.resolve().then(()=>(mue(),pue)),e=t().Pie.parser.LangiumParser;_0.pie=e},"pie"),architecture:Rt(async()=>{let{createArchitectureServices:t}=await Promise.resolve().then(()=>(yue(),gue)),e=t().Architecture.parser.LangiumParser;_0.architecture=e},"architecture"),gitGraph:Rt(async()=>{let{createGitGraphServices:t}=await Promise.resolve().then(()=>(xue(),vue)),e=t().GitGraph.parser.LangiumParser;_0.gitGraph=e},"gitGraph")};o(Yl,"parse");Rt(Yl,"parse");rGe=class extends Error{static{o(this,"MermaidParseError")}constructor(t){let e=t.lexerErrors.map(n=>n.message).join(` +`),r=t.parserErrors.map(n=>n.message).join(` +`);super(`Parsing failed: ${e} ${r}`),this.result=t}static{Rt(this,"MermaidParseError")}}});function yf(t,e){t.accDescr&&e.setAccDescription?.(t.accDescr),t.accTitle&&e.setAccTitle?.(t.accTitle),t.title&&e.setDiagramTitle?.(t.title)}var Tx=M(()=>{"use strict";o(yf,"populateCommonDb")});var jr,fE=M(()=>{"use strict";jr={NORMAL:0,REVERSE:1,HIGHLIGHT:2,MERGE:3,CHERRY_PICK:4}});var vf,dE=M(()=>{"use strict";vf=class{constructor(e){this.init=e;this.records=this.init()}static{o(this,"ImperativeState")}reset(){this.records=this.init()}}});function II(){return n9({length:7})}function iGe(t,e){let r=Object.create(null);return t.reduce((n,i)=>{let a=e(i);return r[a]||(r[a]=!0,n.push(i)),n},[])}function bue(t,e,r){let n=t.indexOf(e);n===-1?t.push(r):t.splice(n,1,r)}function Tue(t){let e=t.reduce((i,a)=>i.seq>a.seq?i:a,t[0]),r="";t.forEach(function(i){i===e?r+=" *":r+=" |"});let n=[r,e.id,e.seq];for(let i in Tt.records.branches)Tt.records.branches.get(i)===e.id&&n.push(i);if(Y.debug(n.join(" ")),e.parents&&e.parents.length==2&&e.parents[0]&&e.parents[1]){let i=Tt.records.commits.get(e.parents[0]);bue(t,e,i),e.parents[1]&&t.push(Tt.records.commits.get(e.parents[1]))}else{if(e.parents.length==0)return;if(e.parents[0]){let i=Tt.records.commits.get(e.parents[0]);bue(t,e,i)}}t=iGe(t,i=>i.id),Tue(t)}var nGe,L0,Tt,aGe,sGe,oGe,lGe,cGe,uGe,hGe,wue,fGe,dGe,pGe,mGe,gGe,kue,yGe,vGe,xGe,pE,OI=M(()=>{"use strict";ut();hr();Za();fr();Ai();fE();dE();bs();nGe=ur.gitGraph,L0=o(()=>Ds({...nGe,...Cr().gitGraph}),"getConfig"),Tt=new vf(()=>{let t=L0(),e=t.mainBranchName,r=t.mainBranchOrder;return{mainBranchName:e,commits:new Map,head:null,branchConfig:new Map([[e,{name:e,order:r}]]),branches:new Map([[e,null]]),currBranch:e,direction:"LR",seq:0,options:{}}});o(II,"getID");o(iGe,"uniqBy");aGe=o(function(t){Tt.records.direction=t},"setDirection"),sGe=o(function(t){Y.debug("options str",t),t=t?.trim(),t=t||"{}";try{Tt.records.options=JSON.parse(t)}catch(e){Y.error("error while parsing gitGraph options",e.message)}},"setOptions"),oGe=o(function(){return Tt.records.options},"getOptions"),lGe=o(function(t){let e=t.msg,r=t.id,n=t.type,i=t.tags;Y.info("commit",e,r,n,i),Y.debug("Entering commit:",e,r,n,i);let a=L0();r=qe.sanitizeText(r,a),e=qe.sanitizeText(e,a),i=i?.map(l=>qe.sanitizeText(l,a));let s={id:r||Tt.records.seq+"-"+II(),message:e,seq:Tt.records.seq++,type:n??jr.NORMAL,tags:i??[],parents:Tt.records.head==null?[]:[Tt.records.head.id],branch:Tt.records.currBranch};Tt.records.head=s,Y.info("main branch",a.mainBranchName),Tt.records.commits.set(s.id,s),Tt.records.branches.set(Tt.records.currBranch,s.id),Y.debug("in pushCommit "+s.id)},"commit"),cGe=o(function(t){let e=t.name,r=t.order;if(e=qe.sanitizeText(e,L0()),Tt.records.branches.has(e))throw new Error(`Trying to create an existing branch. (Help: Either use a new name if you want create a new branch or try using "checkout ${e}")`);Tt.records.branches.set(e,Tt.records.head!=null?Tt.records.head.id:null),Tt.records.branchConfig.set(e,{name:e,order:r}),wue(e),Y.debug("in createBranch")},"branch"),uGe=o(t=>{let e=t.branch,r=t.id,n=t.type,i=t.tags,a=L0();e=qe.sanitizeText(e,a),r&&(r=qe.sanitizeText(r,a));let s=Tt.records.branches.get(Tt.records.currBranch),l=Tt.records.branches.get(e),u=s?Tt.records.commits.get(s):void 0,h=l?Tt.records.commits.get(l):void 0;if(u&&h&&u.branch===e)throw new Error(`Cannot merge branch '${e}' into itself.`);if(Tt.records.currBranch===e){let p=new Error('Incorrect usage of "merge". Cannot merge a branch to itself');throw p.hash={text:`merge ${e}`,token:`merge ${e}`,expected:["branch abc"]},p}if(u===void 0||!u){let p=new Error(`Incorrect usage of "merge". Current branch (${Tt.records.currBranch})has no commits`);throw p.hash={text:`merge ${e}`,token:`merge ${e}`,expected:["commit"]},p}if(!Tt.records.branches.has(e)){let p=new Error('Incorrect usage of "merge". Branch to be merged ('+e+") does not exist");throw p.hash={text:`merge ${e}`,token:`merge ${e}`,expected:[`branch ${e}`]},p}if(h===void 0||!h){let p=new Error('Incorrect usage of "merge". Branch to be merged ('+e+") has no commits");throw p.hash={text:`merge ${e}`,token:`merge ${e}`,expected:['"commit"']},p}if(u===h){let p=new Error('Incorrect usage of "merge". Both branches have same head');throw p.hash={text:`merge ${e}`,token:`merge ${e}`,expected:["branch abc"]},p}if(r&&Tt.records.commits.has(r)){let p=new Error('Incorrect usage of "merge". Commit with id:'+r+" already exists, use different custom Id");throw p.hash={text:`merge ${e} ${r} ${n} ${i?.join(" ")}`,token:`merge ${e} ${r} ${n} ${i?.join(" ")}`,expected:[`merge ${e} ${r}_UNIQUE ${n} ${i?.join(" ")}`]},p}let f=l||"",d={id:r||`${Tt.records.seq}-${II()}`,message:`merged branch ${e} into ${Tt.records.currBranch}`,seq:Tt.records.seq++,parents:Tt.records.head==null?[]:[Tt.records.head.id,f],branch:Tt.records.currBranch,type:jr.MERGE,customType:n,customId:!!r,tags:i??[]};Tt.records.head=d,Tt.records.commits.set(d.id,d),Tt.records.branches.set(Tt.records.currBranch,d.id),Y.debug(Tt.records.branches),Y.debug("in mergeBranch")},"merge"),hGe=o(function(t){let e=t.id,r=t.targetId,n=t.tags,i=t.parent;Y.debug("Entering cherryPick:",e,r,n);let a=L0();if(e=qe.sanitizeText(e,a),r=qe.sanitizeText(r,a),n=n?.map(u=>qe.sanitizeText(u,a)),i=qe.sanitizeText(i,a),!e||!Tt.records.commits.has(e)){let u=new Error('Incorrect usage of "cherryPick". Source commit id should exist and provided');throw u.hash={text:`cherryPick ${e} ${r}`,token:`cherryPick ${e} ${r}`,expected:["cherry-pick abc"]},u}let s=Tt.records.commits.get(e);if(s===void 0||!s)throw new Error('Incorrect usage of "cherryPick". Source commit id should exist and provided');if(i&&!(Array.isArray(s.parents)&&s.parents.includes(i)))throw new Error("Invalid operation: The specified parent commit is not an immediate parent of the cherry-picked commit.");let l=s.branch;if(s.type===jr.MERGE&&!i)throw new Error("Incorrect usage of cherry-pick: If the source commit is a merge commit, an immediate parent commit must be specified.");if(!r||!Tt.records.commits.has(r)){if(l===Tt.records.currBranch){let d=new Error('Incorrect usage of "cherryPick". Source commit is already on current branch');throw d.hash={text:`cherryPick ${e} ${r}`,token:`cherryPick ${e} ${r}`,expected:["cherry-pick abc"]},d}let u=Tt.records.branches.get(Tt.records.currBranch);if(u===void 0||!u){let d=new Error(`Incorrect usage of "cherry-pick". Current branch (${Tt.records.currBranch})has no commits`);throw d.hash={text:`cherryPick ${e} ${r}`,token:`cherryPick ${e} ${r}`,expected:["cherry-pick abc"]},d}let h=Tt.records.commits.get(u);if(h===void 0||!h){let d=new Error(`Incorrect usage of "cherry-pick". Current branch (${Tt.records.currBranch})has no commits`);throw d.hash={text:`cherryPick ${e} ${r}`,token:`cherryPick ${e} ${r}`,expected:["cherry-pick abc"]},d}let f={id:Tt.records.seq+"-"+II(),message:`cherry-picked ${s?.message} into ${Tt.records.currBranch}`,seq:Tt.records.seq++,parents:Tt.records.head==null?[]:[Tt.records.head.id,s.id],branch:Tt.records.currBranch,type:jr.CHERRY_PICK,tags:n?n.filter(Boolean):[`cherry-pick:${s.id}${s.type===jr.MERGE?`|parent:${i}`:""}`]};Tt.records.head=f,Tt.records.commits.set(f.id,f),Tt.records.branches.set(Tt.records.currBranch,f.id),Y.debug(Tt.records.branches),Y.debug("in cherryPick")}},"cherryPick"),wue=o(function(t){if(t=qe.sanitizeText(t,L0()),Tt.records.branches.has(t)){Tt.records.currBranch=t;let e=Tt.records.branches.get(Tt.records.currBranch);e===void 0||!e?Tt.records.head=null:Tt.records.head=Tt.records.commits.get(e)??null}else{let e=new Error(`Trying to checkout branch which is not yet created. (Help try using "branch ${t}")`);throw e.hash={text:`checkout ${t}`,token:`checkout ${t}`,expected:[`branch ${t}`]},e}},"checkout");o(bue,"upsert");o(Tue,"prettyPrintCommitHistory");fGe=o(function(){Y.debug(Tt.records.commits);let t=kue()[0];Tue([t])},"prettyPrint"),dGe=o(function(){Tt.reset(),Lr()},"clear"),pGe=o(function(){return[...Tt.records.branchConfig.values()].map((e,r)=>e.order!==null&&e.order!==void 0?e:{...e,order:parseFloat(`0.${r}`)}).sort((e,r)=>(e.order??0)-(r.order??0)).map(({name:e})=>({name:e}))},"getBranchesAsObjArray"),mGe=o(function(){return Tt.records.branches},"getBranches"),gGe=o(function(){return Tt.records.commits},"getCommits"),kue=o(function(){let t=[...Tt.records.commits.values()];return t.forEach(function(e){Y.debug(e.id)}),t.sort((e,r)=>e.seq-r.seq),t},"getCommitsArray"),yGe=o(function(){return Tt.records.currBranch},"getCurrentBranch"),vGe=o(function(){return Tt.records.direction},"getDirection"),xGe=o(function(){return Tt.records.head},"getHead"),pE={commitType:jr,getConfig:L0,setDirection:aGe,setOptions:sGe,getOptions:oGe,commit:lGe,branch:cGe,merge:uGe,cherryPick:hGe,checkout:wue,prettyPrint:fGe,clear:dGe,getBranchesAsObjArray:pGe,getBranches:mGe,getCommits:gGe,getCommitsArray:kue,getCurrentBranch:yGe,getDirection:vGe,getHead:xGe,setAccTitle:Mr,getAccTitle:Br,getAccDescription:zr,setAccDescription:Fr,setDiagramTitle:cn,getDiagramTitle:Jr}});var bGe,wGe,TGe,kGe,EGe,SGe,CGe,Eue,Sue=M(()=>{"use strict";Hg();ut();Tx();OI();fE();bGe=o((t,e)=>{yf(t,e),t.dir&&e.setDirection(t.dir);for(let r of t.statements)wGe(r,e)},"populate"),wGe=o((t,e)=>{let n={Commit:o(i=>e.commit(TGe(i)),"Commit"),Branch:o(i=>e.branch(kGe(i)),"Branch"),Merge:o(i=>e.merge(EGe(i)),"Merge"),Checkout:o(i=>e.checkout(SGe(i)),"Checkout"),CherryPicking:o(i=>e.cherryPick(CGe(i)),"CherryPicking")}[t.$type];n?n(t):Y.error(`Unknown statement type: ${t.$type}`)},"parseStatement"),TGe=o(t=>({id:t.id,msg:t.message??"",type:t.type!==void 0?jr[t.type]:jr.NORMAL,tags:t.tags??void 0}),"parseCommit"),kGe=o(t=>({name:t.name,order:t.order??0}),"parseBranch"),EGe=o(t=>({branch:t.branch,id:t.id??"",type:t.type!==void 0?jr[t.type]:void 0,tags:t.tags??void 0}),"parseMerge"),SGe=o(t=>t.branch,"parseCheckout"),CGe=o(t=>({id:t.id,targetId:"",tags:t.tags?.length===0?void 0:t.tags,parent:t.parent}),"parseCherryPicking"),Eue={parse:o(async t=>{let e=await Yl("gitGraph",t);Y.debug(e),bGe(e,pE)},"parse")}});var AGe,sl,bf,wf,Yc,Zu,D0,Ws,Ys,mE,kx,gE,xf,Rr,_Ge,Aue,_ue,LGe,DGe,NGe,RGe,MGe,IGe,OGe,PGe,BGe,FGe,zGe,GGe,Cue,$Ge,Ex,VGe,UGe,HGe,WGe,YGe,Lue,Due=M(()=>{"use strict";pr();Vt();ut();hr();fE();AGe=pe(),sl=AGe?.gitGraph,bf=10,wf=40,Yc=4,Zu=2,D0=8,Ws=new Map,Ys=new Map,mE=30,kx=new Map,gE=[],xf=0,Rr="LR",_Ge=o(()=>{Ws.clear(),Ys.clear(),kx.clear(),xf=0,gE=[],Rr="LR"},"clear"),Aue=o(t=>{let e=document.createElementNS("http://www.w3.org/2000/svg","text");return(typeof t=="string"?t.split(/\\n|\n|/gi):t).forEach(n=>{let i=document.createElementNS("http://www.w3.org/2000/svg","tspan");i.setAttributeNS("http://www.w3.org/XML/1998/namespace","xml:space","preserve"),i.setAttribute("dy","1em"),i.setAttribute("x","0"),i.setAttribute("class","row"),i.textContent=n.trim(),e.appendChild(i)}),e},"drawText"),_ue=o(t=>{let e,r,n;return Rr==="BT"?(r=o((i,a)=>i<=a,"comparisonFunc"),n=1/0):(r=o((i,a)=>i>=a,"comparisonFunc"),n=0),t.forEach(i=>{let a=Rr==="TB"||Rr=="BT"?Ys.get(i)?.y:Ys.get(i)?.x;a!==void 0&&r(a,n)&&(e=i,n=a)}),e},"findClosestParent"),LGe=o(t=>{let e="",r=1/0;return t.forEach(n=>{let i=Ys.get(n).y;i<=r&&(e=n,r=i)}),e||void 0},"findClosestParentBT"),DGe=o((t,e,r)=>{let n=r,i=r,a=[];t.forEach(s=>{let l=e.get(s);if(!l)throw new Error(`Commit not found for key ${s}`);l.parents.length?(n=RGe(l),i=Math.max(n,i)):a.push(l),MGe(l,n)}),n=i,a.forEach(s=>{IGe(s,n,r)}),t.forEach(s=>{let l=e.get(s);if(l?.parents.length){let u=LGe(l.parents);n=Ys.get(u).y-wf,n<=i&&(i=n);let h=Ws.get(l.branch).pos,f=n-bf;Ys.set(l.id,{x:h,y:f})}})},"setParallelBTPos"),NGe=o(t=>{let e=_ue(t.parents.filter(n=>n!==null));if(!e)throw new Error(`Closest parent not found for commit ${t.id}`);let r=Ys.get(e)?.y;if(r===void 0)throw new Error(`Closest parent position not found for commit ${t.id}`);return r},"findClosestParentPos"),RGe=o(t=>NGe(t)+wf,"calculateCommitPosition"),MGe=o((t,e)=>{let r=Ws.get(t.branch);if(!r)throw new Error(`Branch not found for commit ${t.id}`);let n=r.pos,i=e+bf;return Ys.set(t.id,{x:n,y:i}),{x:n,y:i}},"setCommitPosition"),IGe=o((t,e,r)=>{let n=Ws.get(t.branch);if(!n)throw new Error(`Branch not found for commit ${t.id}`);let i=e+r,a=n.pos;Ys.set(t.id,{x:a,y:i})},"setRootPosition"),OGe=o((t,e,r,n,i,a)=>{if(a===jr.HIGHLIGHT)t.append("rect").attr("x",r.x-10).attr("y",r.y-10).attr("width",20).attr("height",20).attr("class",`commit ${e.id} commit-highlight${i%D0} ${n}-outer`),t.append("rect").attr("x",r.x-6).attr("y",r.y-6).attr("width",12).attr("height",12).attr("class",`commit ${e.id} commit${i%D0} ${n}-inner`);else if(a===jr.CHERRY_PICK)t.append("circle").attr("cx",r.x).attr("cy",r.y).attr("r",10).attr("class",`commit ${e.id} ${n}`),t.append("circle").attr("cx",r.x-3).attr("cy",r.y+2).attr("r",2.75).attr("fill","#fff").attr("class",`commit ${e.id} ${n}`),t.append("circle").attr("cx",r.x+3).attr("cy",r.y+2).attr("r",2.75).attr("fill","#fff").attr("class",`commit ${e.id} ${n}`),t.append("line").attr("x1",r.x+3).attr("y1",r.y+1).attr("x2",r.x).attr("y2",r.y-5).attr("stroke","#fff").attr("class",`commit ${e.id} ${n}`),t.append("line").attr("x1",r.x-3).attr("y1",r.y+1).attr("x2",r.x).attr("y2",r.y-5).attr("stroke","#fff").attr("class",`commit ${e.id} ${n}`);else{let s=t.append("circle");if(s.attr("cx",r.x),s.attr("cy",r.y),s.attr("r",e.type===jr.MERGE?9:10),s.attr("class",`commit ${e.id} commit${i%D0}`),a===jr.MERGE){let l=t.append("circle");l.attr("cx",r.x),l.attr("cy",r.y),l.attr("r",6),l.attr("class",`commit ${n} ${e.id} commit${i%D0}`)}a===jr.REVERSE&&t.append("path").attr("d",`M ${r.x-5},${r.y-5}L${r.x+5},${r.y+5}M${r.x-5},${r.y+5}L${r.x+5},${r.y-5}`).attr("class",`commit ${n} ${e.id} commit${i%D0}`)}},"drawCommitBullet"),PGe=o((t,e,r,n)=>{if(e.type!==jr.CHERRY_PICK&&(e.customId&&e.type===jr.MERGE||e.type!==jr.MERGE)&&sl?.showCommitLabel){let i=t.append("g"),a=i.insert("rect").attr("class","commit-label-bkg"),s=i.append("text").attr("x",n).attr("y",r.y+25).attr("class","commit-label").text(e.id),l=s.node()?.getBBox();if(l&&(a.attr("x",r.posWithOffset-l.width/2-Zu).attr("y",r.y+13.5).attr("width",l.width+2*Zu).attr("height",l.height+2*Zu),Rr==="TB"||Rr==="BT"?(a.attr("x",r.x-(l.width+4*Yc+5)).attr("y",r.y-12),s.attr("x",r.x-(l.width+4*Yc)).attr("y",r.y+l.height-12)):s.attr("x",r.posWithOffset-l.width/2),sl.rotateCommitLabel))if(Rr==="TB"||Rr==="BT")s.attr("transform","rotate(-45, "+r.x+", "+r.y+")"),a.attr("transform","rotate(-45, "+r.x+", "+r.y+")");else{let u=-7.5-(l.width+10)/25*9.5,h=10+l.width/25*8.5;i.attr("transform","translate("+u+", "+h+") rotate(-45, "+n+", "+r.y+")")}}},"drawCommitLabel"),BGe=o((t,e,r,n)=>{if(e.tags.length>0){let i=0,a=0,s=0,l=[];for(let u of e.tags.reverse()){let h=t.insert("polygon"),f=t.append("circle"),d=t.append("text").attr("y",r.y-16-i).attr("class","tag-label").text(u),p=d.node()?.getBBox();if(!p)throw new Error("Tag bbox not found");a=Math.max(a,p.width),s=Math.max(s,p.height),d.attr("x",r.posWithOffset-p.width/2),l.push({tag:d,hole:f,rect:h,yOffset:i}),i+=20}for(let{tag:u,hole:h,rect:f,yOffset:d}of l){let p=s/2,m=r.y-19.2-d;if(f.attr("class","tag-label-bkg").attr("points",` + ${n-a/2-Yc/2},${m+Zu} + ${n-a/2-Yc/2},${m-Zu} + ${r.posWithOffset-a/2-Yc},${m-p-Zu} + ${r.posWithOffset+a/2+Yc},${m-p-Zu} + ${r.posWithOffset+a/2+Yc},${m+p+Zu} + ${r.posWithOffset-a/2-Yc},${m+p+Zu}`),h.attr("cy",m).attr("cx",n-a/2+Yc/2).attr("r",1.5).attr("class","tag-hole"),Rr==="TB"||Rr==="BT"){let g=n+d;f.attr("class","tag-label-bkg").attr("points",` + ${r.x},${g+2} + ${r.x},${g-2} + ${r.x+bf},${g-p-2} + ${r.x+bf+a+4},${g-p-2} + ${r.x+bf+a+4},${g+p+2} + ${r.x+bf},${g+p+2}`).attr("transform","translate(12,12) rotate(45, "+r.x+","+n+")"),h.attr("cx",r.x+Yc/2).attr("cy",g).attr("transform","translate(12,12) rotate(45, "+r.x+","+n+")"),u.attr("x",r.x+5).attr("y",g+3).attr("transform","translate(14,14) rotate(45, "+r.x+","+n+")")}}}},"drawCommitTags"),FGe=o(t=>{switch(t.customType??t.type){case jr.NORMAL:return"commit-normal";case jr.REVERSE:return"commit-reverse";case jr.HIGHLIGHT:return"commit-highlight";case jr.MERGE:return"commit-merge";case jr.CHERRY_PICK:return"commit-cherry-pick";default:return"commit-normal"}},"getCommitClassType"),zGe=o((t,e,r,n)=>{let i={x:0,y:0};if(t.parents.length>0){let a=_ue(t.parents);if(a){let s=n.get(a)??i;return e==="TB"?s.y+wf:e==="BT"?(n.get(t.id)??i).y-wf:s.x+wf}}else return e==="TB"?mE:e==="BT"?(n.get(t.id)??i).y-wf:0;return 0},"calculatePosition"),GGe=o((t,e,r)=>{let n=Rr==="BT"&&r?e:e+bf,i=Rr==="TB"||Rr==="BT"?n:Ws.get(t.branch)?.pos,a=Rr==="TB"||Rr==="BT"?Ws.get(t.branch)?.pos:n;if(a===void 0||i===void 0)throw new Error(`Position were undefined for commit ${t.id}`);return{x:a,y:i,posWithOffset:n}},"getCommitPosition"),Cue=o((t,e,r)=>{if(!sl)throw new Error("GitGraph config not found");let n=t.append("g").attr("class","commit-bullets"),i=t.append("g").attr("class","commit-labels"),a=Rr==="TB"||Rr==="BT"?mE:0,s=[...e.keys()],l=sl?.parallelCommits??!1,u=o((f,d)=>{let p=e.get(f)?.seq,m=e.get(d)?.seq;return p!==void 0&&m!==void 0?p-m:0},"sortKeys"),h=s.sort(u);Rr==="BT"&&(l&&DGe(h,e,a),h=h.reverse()),h.forEach(f=>{let d=e.get(f);if(!d)throw new Error(`Commit not found for key ${f}`);l&&(a=zGe(d,Rr,a,Ys));let p=GGe(d,a,l);if(r){let m=FGe(d),g=d.customType??d.type,y=Ws.get(d.branch)?.index??0;OGe(n,d,p,m,y,g),PGe(i,d,p,a),BGe(i,d,p,a)}Rr==="TB"||Rr==="BT"?Ys.set(d.id,{x:p.x,y:p.posWithOffset}):Ys.set(d.id,{x:p.posWithOffset,y:p.y}),a=Rr==="BT"&&l?a+wf:a+wf+bf,a>xf&&(xf=a)})},"drawCommits"),$Ge=o((t,e,r,n,i)=>{let s=(Rr==="TB"||Rr==="BT"?r.xh.branch===s,"isOnBranchToGetCurve"),u=o(h=>h.seq>t.seq&&h.sequ(h)&&l(h))},"shouldRerouteArrow"),Ex=o((t,e,r=0)=>{let n=t+Math.abs(t-e)/2;if(r>5)return n;if(gE.every(s=>Math.abs(s-n)>=10))return gE.push(n),n;let a=Math.abs(t-e);return Ex(t,e-a/5,r+1)},"findLane"),VGe=o((t,e,r,n)=>{let i=Ys.get(e.id),a=Ys.get(r.id);if(i===void 0||a===void 0)throw new Error(`Commit positions not found for commits ${e.id} and ${r.id}`);let s=$Ge(e,r,i,a,n),l="",u="",h=0,f=0,d=Ws.get(r.branch)?.index;r.type===jr.MERGE&&e.id!==r.parents[0]&&(d=Ws.get(e.branch)?.index);let p;if(s){l="A 10 10, 0, 0, 0,",u="A 10 10, 0, 0, 1,",h=10,f=10;let m=i.ya.x&&(l="A 20 20, 0, 0, 0,",u="A 20 20, 0, 0, 1,",h=20,f=20,r.type===jr.MERGE&&e.id!==r.parents[0]?p=`M ${i.x} ${i.y} L ${i.x} ${a.y-h} ${u} ${i.x-f} ${a.y} L ${a.x} ${a.y}`:p=`M ${i.x} ${i.y} L ${a.x+h} ${i.y} ${l} ${a.x} ${i.y+f} L ${a.x} ${a.y}`),i.x===a.x&&(p=`M ${i.x} ${i.y} L ${a.x} ${a.y}`)):Rr==="BT"?(i.xa.x&&(l="A 20 20, 0, 0, 0,",u="A 20 20, 0, 0, 1,",h=20,f=20,r.type===jr.MERGE&&e.id!==r.parents[0]?p=`M ${i.x} ${i.y} L ${i.x} ${a.y+h} ${l} ${i.x-f} ${a.y} L ${a.x} ${a.y}`:p=`M ${i.x} ${i.y} L ${a.x-h} ${i.y} ${l} ${a.x} ${i.y-f} L ${a.x} ${a.y}`),i.x===a.x&&(p=`M ${i.x} ${i.y} L ${a.x} ${a.y}`)):(i.ya.y&&(r.type===jr.MERGE&&e.id!==r.parents[0]?p=`M ${i.x} ${i.y} L ${a.x-h} ${i.y} ${l} ${a.x} ${i.y-f} L ${a.x} ${a.y}`:p=`M ${i.x} ${i.y} L ${i.x} ${a.y+h} ${u} ${i.x+f} ${a.y} L ${a.x} ${a.y}`),i.y===a.y&&(p=`M ${i.x} ${i.y} L ${a.x} ${a.y}`));if(p===void 0)throw new Error("Line definition not found");t.append("path").attr("d",p).attr("class","arrow arrow"+d%D0)},"drawArrow"),UGe=o((t,e)=>{let r=t.append("g").attr("class","commit-arrows");[...e.keys()].forEach(n=>{let i=e.get(n);i.parents&&i.parents.length>0&&i.parents.forEach(a=>{VGe(r,e.get(a),i,e)})})},"drawArrows"),HGe=o((t,e)=>{let r=t.append("g");e.forEach((n,i)=>{let a=i%D0,s=Ws.get(n.name)?.pos;if(s===void 0)throw new Error(`Position not found for branch ${n.name}`);let l=r.append("line");l.attr("x1",0),l.attr("y1",s),l.attr("x2",xf),l.attr("y2",s),l.attr("class","branch branch"+a),Rr==="TB"?(l.attr("y1",mE),l.attr("x1",s),l.attr("y2",xf),l.attr("x2",s)):Rr==="BT"&&(l.attr("y1",xf),l.attr("x1",s),l.attr("y2",mE),l.attr("x2",s)),gE.push(s);let u=n.name,h=Aue(u),f=r.insert("rect"),p=r.insert("g").attr("class","branchLabel").insert("g").attr("class","label branch-label"+a);p.node().appendChild(h);let m=h.getBBox();f.attr("class","branchLabelBkg label"+a).attr("rx",4).attr("ry",4).attr("x",-m.width-4-(sl?.rotateCommitLabel===!0?30:0)).attr("y",-m.height/2+8).attr("width",m.width+18).attr("height",m.height+4),p.attr("transform","translate("+(-m.width-14-(sl?.rotateCommitLabel===!0?30:0))+", "+(s-m.height/2-1)+")"),Rr==="TB"?(f.attr("x",s-m.width/2-10).attr("y",0),p.attr("transform","translate("+(s-m.width/2-5)+", 0)")):Rr==="BT"?(f.attr("x",s-m.width/2-10).attr("y",xf),p.attr("transform","translate("+(s-m.width/2-5)+", "+xf+")")):f.attr("transform","translate(-19, "+(s-m.height/2)+")")})},"drawBranches"),WGe=o(function(t,e,r,n,i){return Ws.set(t,{pos:e,index:r}),e+=50+(i?40:0)+(Rr==="TB"||Rr==="BT"?n.width/2:0),e},"setBranchPosition"),YGe=o(function(t,e,r,n){if(_Ge(),Y.debug("in gitgraph renderer",t+` +`,"id:",e,r),!sl)throw new Error("GitGraph config not found");let i=sl.rotateCommitLabel??!1,a=n.db;kx=a.getCommits();let s=a.getBranchesAsObjArray();Rr=a.getDirection();let l=Ve(`[id="${e}"]`),u=0;s.forEach((h,f)=>{let d=Aue(h.name),p=l.append("g"),m=p.insert("g").attr("class","branchLabel"),g=m.insert("g").attr("class","label branch-label");g.node()?.appendChild(d);let y=d.getBBox();u=WGe(h.name,u,f,y,i),g.remove(),m.remove(),p.remove()}),Cue(l,kx,!1),sl.showBranches&&HGe(l,s),UGe(l,kx),Cue(l,kx,!0),Ut.insertTitle(l,"gitTitleText",sl.titleTopMargin??0,a.getDiagramTitle()),o7(void 0,l,sl.diagramPadding,sl.useMaxWidth)},"draw"),Lue={draw:YGe}});var qGe,Nue,Rue=M(()=>{"use strict";qGe=o(t=>` + .commit-id, + .commit-msg, + .branch-label { + fill: lightgrey; + color: lightgrey; + font-family: 'trebuchet ms', verdana, arial, sans-serif; + font-family: var(--mermaid-font-family); + } + ${[0,1,2,3,4,5,6,7].map(e=>` + .branch-label${e} { fill: ${t["gitBranchLabel"+e]}; } + .commit${e} { stroke: ${t["git"+e]}; fill: ${t["git"+e]}; } + .commit-highlight${e} { stroke: ${t["gitInv"+e]}; fill: ${t["gitInv"+e]}; } + .label${e} { fill: ${t["git"+e]}; } + .arrow${e} { stroke: ${t["git"+e]}; } + `).join(` +`)} + + .branch { + stroke-width: 1; + stroke: ${t.lineColor}; + stroke-dasharray: 2; + } + .commit-label { font-size: ${t.commitLabelFontSize}; fill: ${t.commitLabelColor};} + .commit-label-bkg { font-size: ${t.commitLabelFontSize}; fill: ${t.commitLabelBackground}; opacity: 0.5; } + .tag-label { font-size: ${t.tagLabelFontSize}; fill: ${t.tagLabelColor};} + .tag-label-bkg { fill: ${t.tagLabelBackground}; stroke: ${t.tagLabelBorder}; } + .tag-hole { fill: ${t.textColor}; } + + .commit-merge { + stroke: ${t.primaryColor}; + fill: ${t.primaryColor}; + } + .commit-reverse { + stroke: ${t.primaryColor}; + fill: ${t.primaryColor}; + stroke-width: 3; + } + .commit-highlight-outer { + } + .commit-highlight-inner { + stroke: ${t.primaryColor}; + fill: ${t.primaryColor}; + } + + .arrow { stroke-width: 8; stroke-linecap: round; fill: none} + .gitTitleText { + text-anchor: middle; + font-size: 18px; + fill: ${t.textColor}; + } +`,"getStyles"),Nue=qGe});var Mue={};vr(Mue,{diagram:()=>XGe});var XGe,Iue=M(()=>{"use strict";Sue();OI();Due();Rue();XGe={parser:Eue,db:pE,renderer:Lue,styles:Nue}});var PI,Bue,Fue=M(()=>{"use strict";PI=function(){var t=o(function(R,C,O,N){for(O=O||{},N=R.length;N--;O[R[N]]=C);return O},"o"),e=[6,8,10,12,13,14,15,16,17,18,20,21,22,23,24,25,26,27,28,29,30,31,33,35,36,38,40],r=[1,26],n=[1,27],i=[1,28],a=[1,29],s=[1,30],l=[1,31],u=[1,32],h=[1,33],f=[1,34],d=[1,9],p=[1,10],m=[1,11],g=[1,12],y=[1,13],v=[1,14],x=[1,15],b=[1,16],w=[1,19],_=[1,20],T=[1,21],E=[1,22],L=[1,23],S=[1,25],A=[1,35],I={trace:o(function(){},"trace"),yy:{},symbols_:{error:2,start:3,gantt:4,document:5,EOF:6,line:7,SPACE:8,statement:9,NL:10,weekday:11,weekday_monday:12,weekday_tuesday:13,weekday_wednesday:14,weekday_thursday:15,weekday_friday:16,weekday_saturday:17,weekday_sunday:18,weekend:19,weekend_friday:20,weekend_saturday:21,dateFormat:22,inclusiveEndDates:23,topAxis:24,axisFormat:25,tickInterval:26,excludes:27,includes:28,todayMarker:29,title:30,acc_title:31,acc_title_value:32,acc_descr:33,acc_descr_value:34,acc_descr_multiline_value:35,section:36,clickStatement:37,taskTxt:38,taskData:39,click:40,callbackname:41,callbackargs:42,href:43,clickStatementDebug:44,$accept:0,$end:1},terminals_:{2:"error",4:"gantt",6:"EOF",8:"SPACE",10:"NL",12:"weekday_monday",13:"weekday_tuesday",14:"weekday_wednesday",15:"weekday_thursday",16:"weekday_friday",17:"weekday_saturday",18:"weekday_sunday",20:"weekend_friday",21:"weekend_saturday",22:"dateFormat",23:"inclusiveEndDates",24:"topAxis",25:"axisFormat",26:"tickInterval",27:"excludes",28:"includes",29:"todayMarker",30:"title",31:"acc_title",32:"acc_title_value",33:"acc_descr",34:"acc_descr_value",35:"acc_descr_multiline_value",36:"section",38:"taskTxt",39:"taskData",40:"click",41:"callbackname",42:"callbackargs",43:"href"},productions_:[0,[3,3],[5,0],[5,2],[7,2],[7,1],[7,1],[7,1],[11,1],[11,1],[11,1],[11,1],[11,1],[11,1],[11,1],[19,1],[19,1],[9,1],[9,1],[9,1],[9,1],[9,1],[9,1],[9,1],[9,1],[9,1],[9,1],[9,1],[9,2],[9,2],[9,1],[9,1],[9,1],[9,2],[37,2],[37,3],[37,3],[37,4],[37,3],[37,4],[37,2],[44,2],[44,3],[44,3],[44,4],[44,3],[44,4],[44,2]],performAction:o(function(C,O,N,P,F,B,G){var z=B.length-1;switch(F){case 1:return B[z-1];case 2:this.$=[];break;case 3:B[z-1].push(B[z]),this.$=B[z-1];break;case 4:case 5:this.$=B[z];break;case 6:case 7:this.$=[];break;case 8:P.setWeekday("monday");break;case 9:P.setWeekday("tuesday");break;case 10:P.setWeekday("wednesday");break;case 11:P.setWeekday("thursday");break;case 12:P.setWeekday("friday");break;case 13:P.setWeekday("saturday");break;case 14:P.setWeekday("sunday");break;case 15:P.setWeekend("friday");break;case 16:P.setWeekend("saturday");break;case 17:P.setDateFormat(B[z].substr(11)),this.$=B[z].substr(11);break;case 18:P.enableInclusiveEndDates(),this.$=B[z].substr(18);break;case 19:P.TopAxis(),this.$=B[z].substr(8);break;case 20:P.setAxisFormat(B[z].substr(11)),this.$=B[z].substr(11);break;case 21:P.setTickInterval(B[z].substr(13)),this.$=B[z].substr(13);break;case 22:P.setExcludes(B[z].substr(9)),this.$=B[z].substr(9);break;case 23:P.setIncludes(B[z].substr(9)),this.$=B[z].substr(9);break;case 24:P.setTodayMarker(B[z].substr(12)),this.$=B[z].substr(12);break;case 27:P.setDiagramTitle(B[z].substr(6)),this.$=B[z].substr(6);break;case 28:this.$=B[z].trim(),P.setAccTitle(this.$);break;case 29:case 30:this.$=B[z].trim(),P.setAccDescription(this.$);break;case 31:P.addSection(B[z].substr(8)),this.$=B[z].substr(8);break;case 33:P.addTask(B[z-1],B[z]),this.$="task";break;case 34:this.$=B[z-1],P.setClickEvent(B[z-1],B[z],null);break;case 35:this.$=B[z-2],P.setClickEvent(B[z-2],B[z-1],B[z]);break;case 36:this.$=B[z-2],P.setClickEvent(B[z-2],B[z-1],null),P.setLink(B[z-2],B[z]);break;case 37:this.$=B[z-3],P.setClickEvent(B[z-3],B[z-2],B[z-1]),P.setLink(B[z-3],B[z]);break;case 38:this.$=B[z-2],P.setClickEvent(B[z-2],B[z],null),P.setLink(B[z-2],B[z-1]);break;case 39:this.$=B[z-3],P.setClickEvent(B[z-3],B[z-1],B[z]),P.setLink(B[z-3],B[z-2]);break;case 40:this.$=B[z-1],P.setLink(B[z-1],B[z]);break;case 41:case 47:this.$=B[z-1]+" "+B[z];break;case 42:case 43:case 45:this.$=B[z-2]+" "+B[z-1]+" "+B[z];break;case 44:case 46:this.$=B[z-3]+" "+B[z-2]+" "+B[z-1]+" "+B[z];break}},"anonymous"),table:[{3:1,4:[1,2]},{1:[3]},t(e,[2,2],{5:3}),{6:[1,4],7:5,8:[1,6],9:7,10:[1,8],11:17,12:r,13:n,14:i,15:a,16:s,17:l,18:u,19:18,20:h,21:f,22:d,23:p,24:m,25:g,26:y,27:v,28:x,29:b,30:w,31:_,33:T,35:E,36:L,37:24,38:S,40:A},t(e,[2,7],{1:[2,1]}),t(e,[2,3]),{9:36,11:17,12:r,13:n,14:i,15:a,16:s,17:l,18:u,19:18,20:h,21:f,22:d,23:p,24:m,25:g,26:y,27:v,28:x,29:b,30:w,31:_,33:T,35:E,36:L,37:24,38:S,40:A},t(e,[2,5]),t(e,[2,6]),t(e,[2,17]),t(e,[2,18]),t(e,[2,19]),t(e,[2,20]),t(e,[2,21]),t(e,[2,22]),t(e,[2,23]),t(e,[2,24]),t(e,[2,25]),t(e,[2,26]),t(e,[2,27]),{32:[1,37]},{34:[1,38]},t(e,[2,30]),t(e,[2,31]),t(e,[2,32]),{39:[1,39]},t(e,[2,8]),t(e,[2,9]),t(e,[2,10]),t(e,[2,11]),t(e,[2,12]),t(e,[2,13]),t(e,[2,14]),t(e,[2,15]),t(e,[2,16]),{41:[1,40],43:[1,41]},t(e,[2,4]),t(e,[2,28]),t(e,[2,29]),t(e,[2,33]),t(e,[2,34],{42:[1,42],43:[1,43]}),t(e,[2,40],{41:[1,44]}),t(e,[2,35],{43:[1,45]}),t(e,[2,36]),t(e,[2,38],{42:[1,46]}),t(e,[2,37]),t(e,[2,39])],defaultActions:{},parseError:o(function(C,O){if(O.recoverable)this.trace(C);else{var N=new Error(C);throw N.hash=O,N}},"parseError"),parse:o(function(C){var O=this,N=[0],P=[],F=[null],B=[],G=this.table,z="",W=0,Z=0,j=0,oe=2,K=1,ee=B.slice.call(arguments,1),J=Object.create(this.lexer),H={yy:{}};for(var q in this.yy)Object.prototype.hasOwnProperty.call(this.yy,q)&&(H.yy[q]=this.yy[q]);J.setInput(C,H.yy),H.yy.lexer=J,H.yy.parser=this,typeof J.yylloc>"u"&&(J.yylloc={});var Q=J.yylloc;B.push(Q);var ae=J.options&&J.options.ranges;typeof H.yy.parseError=="function"?this.parseError=H.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function ue(he){N.length=N.length-2*he,F.length=F.length-he,B.length=B.length-he}o(ue,"popStack");function ce(){var he;return he=P.pop()||J.lex()||K,typeof he!="number"&&(he instanceof Array&&(P=he,he=P.pop()),he=O.symbols_[he]||he),he}o(ce,"lex");for(var te,Ne,se,ke,Re,Ce,Pe={},Ie,$e,ye,X;;){if(se=N[N.length-1],this.defaultActions[se]?ke=this.defaultActions[se]:((te===null||typeof te>"u")&&(te=ce()),ke=G[se]&&G[se][te]),typeof ke>"u"||!ke.length||!ke[0]){var fe="";X=[];for(Ie in G[se])this.terminals_[Ie]&&Ie>oe&&X.push("'"+this.terminals_[Ie]+"'");J.showPosition?fe="Parse error on line "+(W+1)+`: +`+J.showPosition()+` +Expecting `+X.join(", ")+", got '"+(this.terminals_[te]||te)+"'":fe="Parse error on line "+(W+1)+": Unexpected "+(te==K?"end of input":"'"+(this.terminals_[te]||te)+"'"),this.parseError(fe,{text:J.match,token:this.terminals_[te]||te,line:J.yylineno,loc:Q,expected:X})}if(ke[0]instanceof Array&&ke.length>1)throw new Error("Parse Error: multiple actions possible at state: "+se+", token: "+te);switch(ke[0]){case 1:N.push(te),F.push(J.yytext),B.push(J.yylloc),N.push(ke[1]),te=null,Ne?(te=Ne,Ne=null):(Z=J.yyleng,z=J.yytext,W=J.yylineno,Q=J.yylloc,j>0&&j--);break;case 2:if($e=this.productions_[ke[1]][1],Pe.$=F[F.length-$e],Pe._$={first_line:B[B.length-($e||1)].first_line,last_line:B[B.length-1].last_line,first_column:B[B.length-($e||1)].first_column,last_column:B[B.length-1].last_column},ae&&(Pe._$.range=[B[B.length-($e||1)].range[0],B[B.length-1].range[1]]),Ce=this.performAction.apply(Pe,[z,Z,W,H.yy,ke[1],F,B].concat(ee)),typeof Ce<"u")return Ce;$e&&(N=N.slice(0,-1*$e*2),F=F.slice(0,-1*$e),B=B.slice(0,-1*$e)),N.push(this.productions_[ke[1]][0]),F.push(Pe.$),B.push(Pe._$),ye=G[N[N.length-2]][N[N.length-1]],N.push(ye);break;case 3:return!0}}return!0},"parse")},D=function(){var R={EOF:1,parseError:o(function(O,N){if(this.yy.parser)this.yy.parser.parseError(O,N);else throw new Error(O)},"parseError"),setInput:o(function(C,O){return this.yy=O||this.yy||{},this._input=C,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},"setInput"),input:o(function(){var C=this._input[0];this.yytext+=C,this.yyleng++,this.offset++,this.match+=C,this.matched+=C;var O=C.match(/(?:\r\n?|\n).*/g);return O?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),C},"input"),unput:o(function(C){var O=C.length,N=C.split(/(?:\r\n?|\n)/g);this._input=C+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-O),this.offset-=O;var P=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),N.length-1&&(this.yylineno-=N.length-1);var F=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:N?(N.length===P.length?this.yylloc.first_column:0)+P[P.length-N.length].length-N[0].length:this.yylloc.first_column-O},this.options.ranges&&(this.yylloc.range=[F[0],F[0]+this.yyleng-O]),this.yyleng=this.yytext.length,this},"unput"),more:o(function(){return this._more=!0,this},"more"),reject:o(function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true). +`+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},"reject"),less:o(function(C){this.unput(this.match.slice(C))},"less"),pastInput:o(function(){var C=this.matched.substr(0,this.matched.length-this.match.length);return(C.length>20?"...":"")+C.substr(-20).replace(/\n/g,"")},"pastInput"),upcomingInput:o(function(){var C=this.match;return C.length<20&&(C+=this._input.substr(0,20-C.length)),(C.substr(0,20)+(C.length>20?"...":"")).replace(/\n/g,"")},"upcomingInput"),showPosition:o(function(){var C=this.pastInput(),O=new Array(C.length+1).join("-");return C+this.upcomingInput()+` +`+O+"^"},"showPosition"),test_match:o(function(C,O){var N,P,F;if(this.options.backtrack_lexer&&(F={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(F.yylloc.range=this.yylloc.range.slice(0))),P=C[0].match(/(?:\r\n?|\n).*/g),P&&(this.yylineno+=P.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:P?P[P.length-1].length-P[P.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+C[0].length},this.yytext+=C[0],this.match+=C[0],this.matches=C,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(C[0].length),this.matched+=C[0],N=this.performAction.call(this,this.yy,this,O,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),N)return N;if(this._backtrack){for(var B in F)this[B]=F[B];return!1}return!1},"test_match"),next:o(function(){if(this.done)return this.EOF;this._input||(this.done=!0);var C,O,N,P;this._more||(this.yytext="",this.match="");for(var F=this._currentRules(),B=0;BO[0].length)){if(O=N,P=B,this.options.backtrack_lexer){if(C=this.test_match(N,F[B]),C!==!1)return C;if(this._backtrack){O=!1;continue}else return!1}else if(!this.options.flex)break}return O?(C=this.test_match(O,F[P]),C!==!1?C:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text. +`+this.showPosition(),{text:"",token:null,line:this.yylineno})},"next"),lex:o(function(){var O=this.next();return O||this.lex()},"lex"),begin:o(function(O){this.conditionStack.push(O)},"begin"),popState:o(function(){var O=this.conditionStack.length-1;return O>0?this.conditionStack.pop():this.conditionStack[0]},"popState"),_currentRules:o(function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},"_currentRules"),topState:o(function(O){return O=this.conditionStack.length-1-Math.abs(O||0),O>=0?this.conditionStack[O]:"INITIAL"},"topState"),pushState:o(function(O){this.begin(O)},"pushState"),stateStackSize:o(function(){return this.conditionStack.length},"stateStackSize"),options:{"case-insensitive":!0},performAction:o(function(O,N,P,F){var B=F;switch(P){case 0:return this.begin("open_directive"),"open_directive";break;case 1:return this.begin("acc_title"),31;break;case 2:return this.popState(),"acc_title_value";break;case 3:return this.begin("acc_descr"),33;break;case 4:return this.popState(),"acc_descr_value";break;case 5:this.begin("acc_descr_multiline");break;case 6:this.popState();break;case 7:return"acc_descr_multiline_value";case 8:break;case 9:break;case 10:break;case 11:return 10;case 12:break;case 13:break;case 14:this.begin("href");break;case 15:this.popState();break;case 16:return 43;case 17:this.begin("callbackname");break;case 18:this.popState();break;case 19:this.popState(),this.begin("callbackargs");break;case 20:return 41;case 21:this.popState();break;case 22:return 42;case 23:this.begin("click");break;case 24:this.popState();break;case 25:return 40;case 26:return 4;case 27:return 22;case 28:return 23;case 29:return 24;case 30:return 25;case 31:return 26;case 32:return 28;case 33:return 27;case 34:return 29;case 35:return 12;case 36:return 13;case 37:return 14;case 38:return 15;case 39:return 16;case 40:return 17;case 41:return 18;case 42:return 20;case 43:return 21;case 44:return"date";case 45:return 30;case 46:return"accDescription";case 47:return 36;case 48:return 38;case 49:return 39;case 50:return":";case 51:return 6;case 52:return"INVALID"}},"anonymous"),rules:[/^(?:%%\{)/i,/^(?:accTitle\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*\{\s*)/i,/^(?:[\}])/i,/^(?:[^\}]*)/i,/^(?:%%(?!\{)*[^\n]*)/i,/^(?:[^\}]%%*[^\n]*)/i,/^(?:%%*[^\n]*[\n]*)/i,/^(?:[\n]+)/i,/^(?:\s+)/i,/^(?:%[^\n]*)/i,/^(?:href[\s]+["])/i,/^(?:["])/i,/^(?:[^"]*)/i,/^(?:call[\s]+)/i,/^(?:\([\s]*\))/i,/^(?:\()/i,/^(?:[^(]*)/i,/^(?:\))/i,/^(?:[^)]*)/i,/^(?:click[\s]+)/i,/^(?:[\s\n])/i,/^(?:[^\s\n]*)/i,/^(?:gantt\b)/i,/^(?:dateFormat\s[^#\n;]+)/i,/^(?:inclusiveEndDates\b)/i,/^(?:topAxis\b)/i,/^(?:axisFormat\s[^#\n;]+)/i,/^(?:tickInterval\s[^#\n;]+)/i,/^(?:includes\s[^#\n;]+)/i,/^(?:excludes\s[^#\n;]+)/i,/^(?:todayMarker\s[^\n;]+)/i,/^(?:weekday\s+monday\b)/i,/^(?:weekday\s+tuesday\b)/i,/^(?:weekday\s+wednesday\b)/i,/^(?:weekday\s+thursday\b)/i,/^(?:weekday\s+friday\b)/i,/^(?:weekday\s+saturday\b)/i,/^(?:weekday\s+sunday\b)/i,/^(?:weekend\s+friday\b)/i,/^(?:weekend\s+saturday\b)/i,/^(?:\d\d\d\d-\d\d-\d\d\b)/i,/^(?:title\s[^\n]+)/i,/^(?:accDescription\s[^#\n;]+)/i,/^(?:section\s[^\n]+)/i,/^(?:[^:\n]+)/i,/^(?::[^#\n;]+)/i,/^(?::)/i,/^(?:$)/i,/^(?:.)/i],conditions:{acc_descr_multiline:{rules:[6,7],inclusive:!1},acc_descr:{rules:[4],inclusive:!1},acc_title:{rules:[2],inclusive:!1},callbackargs:{rules:[21,22],inclusive:!1},callbackname:{rules:[18,19,20],inclusive:!1},href:{rules:[15,16],inclusive:!1},click:{rules:[24,25],inclusive:!1},INITIAL:{rules:[0,1,3,5,8,9,10,11,12,13,14,17,23,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52],inclusive:!0}}};return R}();I.lexer=D;function k(){this.yy={}}return o(k,"Parser"),k.prototype=I,I.Parser=k,new k}();PI.parser=PI;Bue=PI});var zue=Ei((BI,FI)=>{"use strict";(function(t,e){typeof BI=="object"&&typeof FI<"u"?FI.exports=e():typeof define=="function"&&define.amd?define(e):(t=typeof globalThis<"u"?globalThis:t||self).dayjs_plugin_isoWeek=e()})(BI,function(){"use strict";var t="day";return function(e,r,n){var i=o(function(l){return l.add(4-l.isoWeekday(),t)},"a"),a=r.prototype;a.isoWeekYear=function(){return i(this).year()},a.isoWeek=function(l){if(!this.$utils().u(l))return this.add(7*(l-this.isoWeek()),t);var u,h,f,d,p=i(this),m=(u=this.isoWeekYear(),h=this.$u,f=(h?n.utc:n)().year(u).startOf("year"),d=4-f.isoWeekday(),f.isoWeekday()>4&&(d+=7),f.add(d,t));return p.diff(m,"week")+1},a.isoWeekday=function(l){return this.$utils().u(l)?this.day()||7:this.day(this.day()%7?l:l-7)};var s=a.startOf;a.startOf=function(l,u){var h=this.$utils(),f=!!h.u(u)||u;return h.p(l)==="isoweek"?f?this.date(this.date()-(this.isoWeekday()-1)).startOf("day"):this.date(this.date()-1-(this.isoWeekday()-1)+7).endOf("day"):s.bind(this)(l,u)}}})});var Gue=Ei((zI,GI)=>{"use strict";(function(t,e){typeof zI=="object"&&typeof GI<"u"?GI.exports=e():typeof define=="function"&&define.amd?define(e):(t=typeof globalThis<"u"?globalThis:t||self).dayjs_plugin_customParseFormat=e()})(zI,function(){"use strict";var t={LTS:"h:mm:ss A",LT:"h:mm A",L:"MM/DD/YYYY",LL:"MMMM D, YYYY",LLL:"MMMM D, YYYY h:mm A",LLLL:"dddd, MMMM D, YYYY h:mm A"},e=/(\[[^[]*\])|([-_:/.,()\s]+)|(A|a|Q|YYYY|YY?|ww?|MM?M?M?|Do|DD?|hh?|HH?|mm?|ss?|S{1,3}|z|ZZ?)/g,r=/\d/,n=/\d\d/,i=/\d\d?/,a=/\d*[^-_:/,()\s\d]+/,s={},l=o(function(g){return(g=+g)+(g>68?1900:2e3)},"a"),u=o(function(g){return function(y){this[g]=+y}},"f"),h=[/[+-]\d\d:?(\d\d)?|Z/,function(g){(this.zone||(this.zone={})).offset=function(y){if(!y||y==="Z")return 0;var v=y.match(/([+-]|\d\d)/g),x=60*v[1]+(+v[2]||0);return x===0?0:v[0]==="+"?-x:x}(g)}],f=o(function(g){var y=s[g];return y&&(y.indexOf?y:y.s.concat(y.f))},"u"),d=o(function(g,y){var v,x=s.meridiem;if(x){for(var b=1;b<=24;b+=1)if(g.indexOf(x(b,0,y))>-1){v=b>12;break}}else v=g===(y?"pm":"PM");return v},"d"),p={A:[a,function(g){this.afternoon=d(g,!1)}],a:[a,function(g){this.afternoon=d(g,!0)}],Q:[r,function(g){this.month=3*(g-1)+1}],S:[r,function(g){this.milliseconds=100*+g}],SS:[n,function(g){this.milliseconds=10*+g}],SSS:[/\d{3}/,function(g){this.milliseconds=+g}],s:[i,u("seconds")],ss:[i,u("seconds")],m:[i,u("minutes")],mm:[i,u("minutes")],H:[i,u("hours")],h:[i,u("hours")],HH:[i,u("hours")],hh:[i,u("hours")],D:[i,u("day")],DD:[n,u("day")],Do:[a,function(g){var y=s.ordinal,v=g.match(/\d+/);if(this.day=v[0],y)for(var x=1;x<=31;x+=1)y(x).replace(/\[|\]/g,"")===g&&(this.day=x)}],w:[i,u("week")],ww:[n,u("week")],M:[i,u("month")],MM:[n,u("month")],MMM:[a,function(g){var y=f("months"),v=(f("monthsShort")||y.map(function(x){return x.slice(0,3)})).indexOf(g)+1;if(v<1)throw new Error;this.month=v%12||v}],MMMM:[a,function(g){var y=f("months").indexOf(g)+1;if(y<1)throw new Error;this.month=y%12||y}],Y:[/[+-]?\d+/,u("year")],YY:[n,function(g){this.year=l(g)}],YYYY:[/\d{4}/,u("year")],Z:h,ZZ:h};function m(g){var y,v;y=g,v=s&&s.formats;for(var x=(g=y.replace(/(\[[^\]]+])|(LTS?|l{1,4}|L{1,4})/g,function(S,A,I){var D=I&&I.toUpperCase();return A||v[I]||t[I]||v[D].replace(/(\[[^\]]+])|(MMMM|MM|DD|dddd)/g,function(k,R,C){return R||C.slice(1)})})).match(e),b=x.length,w=0;w-1)return new Date((N==="X"?1e3:1)*O);var B=m(N)(O),G=B.year,z=B.month,W=B.day,Z=B.hours,j=B.minutes,oe=B.seconds,K=B.milliseconds,ee=B.zone,J=B.week,H=new Date,q=W||(G||z?1:H.getDate()),Q=G||H.getFullYear(),ae=0;G&&!z||(ae=z>0?z-1:H.getMonth());var ue,ce=Z||0,te=j||0,Ne=oe||0,se=K||0;return ee?new Date(Date.UTC(Q,ae,q,ce,te,Ne,se+60*ee.offset*1e3)):P?new Date(Date.UTC(Q,ae,q,ce,te,Ne,se)):(ue=new Date(Q,ae,q,ce,te,Ne,se),J&&(ue=F(ue).week(J).toDate()),ue)}catch{return new Date("")}}(_,L,T,v),this.init(),D&&D!==!0&&(this.$L=this.locale(D).$L),I&&_!=this.format(L)&&(this.$d=new Date("")),s={}}else if(L instanceof Array)for(var k=L.length,R=1;R<=k;R+=1){E[1]=L[R-1];var C=v.apply(this,E);if(C.isValid()){this.$d=C.$d,this.$L=C.$L,this.init();break}R===k&&(this.$d=new Date(""))}else b.call(this,w)}}})});var $ue=Ei(($I,VI)=>{"use strict";(function(t,e){typeof $I=="object"&&typeof VI<"u"?VI.exports=e():typeof define=="function"&&define.amd?define(e):(t=typeof globalThis<"u"?globalThis:t||self).dayjs_plugin_advancedFormat=e()})($I,function(){"use strict";return function(t,e){var r=e.prototype,n=r.format;r.format=function(i){var a=this,s=this.$locale();if(!this.isValid())return n.bind(this)(i);var l=this.$utils(),u=(i||"YYYY-MM-DDTHH:mm:ssZ").replace(/\[([^\]]+)]|Q|wo|ww|w|WW|W|zzz|z|gggg|GGGG|Do|X|x|k{1,2}|S/g,function(h){switch(h){case"Q":return Math.ceil((a.$M+1)/3);case"Do":return s.ordinal(a.$D);case"gggg":return a.weekYear();case"GGGG":return a.isoWeekYear();case"wo":return s.ordinal(a.week(),"W");case"w":case"ww":return l.s(a.week(),h==="w"?1:2,"0");case"W":case"WW":return l.s(a.isoWeek(),h==="W"?1:2,"0");case"k":case"kk":return l.s(String(a.$H===0?24:a.$H),h==="k"?1:2,"0");case"X":return Math.floor(a.$d.getTime()/1e3);case"x":return a.$d.getTime();case"z":return"["+a.offsetName()+"]";case"zzz":return"["+a.offsetName("long")+"]";default:return h}});return n.bind(this)(u)}}})});function nhe(t,e,r){let n=!0;for(;n;)n=!1,r.forEach(function(i){let a="^\\s*"+i+"\\s*$",s=new RegExp(a);t[0].match(s)&&(e[i]=!0,t.shift(1),n=!0)})}var Hue,xo,Wue,Yue,que,Vue,qc,YI,qI,XI,Sx,Cx,jI,KI,xE,Yg,QI,Xue,ZI,Ax,JI,eO,bE,UI,ZGe,JGe,e$e,t$e,r$e,n$e,i$e,a$e,s$e,o$e,l$e,c$e,u$e,h$e,f$e,d$e,p$e,m$e,g$e,y$e,v$e,x$e,b$e,jue,w$e,T$e,k$e,Kue,E$e,HI,Que,Zue,yE,Wg,S$e,C$e,WI,vE,Yi,Jue,A$e,N0,_$e,Uue,L$e,ehe,D$e,the,N$e,R$e,rhe,ihe=M(()=>{"use strict";Hue=Ji(Qp(),1),xo=Ji(Vb(),1),Wue=Ji(zue(),1),Yue=Ji(Gue(),1),que=Ji($ue(),1);ut();Vt();hr();Ai();xo.default.extend(Wue.default);xo.default.extend(Yue.default);xo.default.extend(que.default);Vue={friday:5,saturday:6},qc="",YI="",XI="",Sx=[],Cx=[],jI=new Map,KI=[],xE=[],Yg="",QI="",Xue=["active","done","crit","milestone"],ZI=[],Ax=!1,JI=!1,eO="sunday",bE="saturday",UI=0,ZGe=o(function(){KI=[],xE=[],Yg="",ZI=[],yE=0,WI=void 0,vE=void 0,Yi=[],qc="",YI="",QI="",qI=void 0,XI="",Sx=[],Cx=[],Ax=!1,JI=!1,UI=0,jI=new Map,Lr(),eO="sunday",bE="saturday"},"clear"),JGe=o(function(t){YI=t},"setAxisFormat"),e$e=o(function(){return YI},"getAxisFormat"),t$e=o(function(t){qI=t},"setTickInterval"),r$e=o(function(){return qI},"getTickInterval"),n$e=o(function(t){XI=t},"setTodayMarker"),i$e=o(function(){return XI},"getTodayMarker"),a$e=o(function(t){qc=t},"setDateFormat"),s$e=o(function(){Ax=!0},"enableInclusiveEndDates"),o$e=o(function(){return Ax},"endDatesAreInclusive"),l$e=o(function(){JI=!0},"enableTopAxis"),c$e=o(function(){return JI},"topAxisEnabled"),u$e=o(function(t){QI=t},"setDisplayMode"),h$e=o(function(){return QI},"getDisplayMode"),f$e=o(function(){return qc},"getDateFormat"),d$e=o(function(t){Sx=t.toLowerCase().split(/[\s,]+/)},"setIncludes"),p$e=o(function(){return Sx},"getIncludes"),m$e=o(function(t){Cx=t.toLowerCase().split(/[\s,]+/)},"setExcludes"),g$e=o(function(){return Cx},"getExcludes"),y$e=o(function(){return jI},"getLinks"),v$e=o(function(t){Yg=t,KI.push(t)},"addSection"),x$e=o(function(){return KI},"getSections"),b$e=o(function(){let t=Uue(),e=10,r=0;for(;!t&&r[\d\w- ]+)/.exec(r);if(i!==null){let s=null;for(let u of i.groups.ids.split(" ")){let h=N0(u);h!==void 0&&(!s||h.endTime>s.endTime)&&(s=h)}if(s)return s.endTime;let l=new Date;return l.setHours(0,0,0,0),l}let a=(0,xo.default)(r,e.trim(),!0);if(a.isValid())return a.toDate();{Y.debug("Invalid date:"+r),Y.debug("With date format:"+e.trim());let s=new Date(r);if(s===void 0||isNaN(s.getTime())||s.getFullYear()<-1e4||s.getFullYear()>1e4)throw new Error("Invalid date:"+r);return s}},"getStartDate"),Que=o(function(t){let e=/^(\d+(?:\.\d+)?)([Mdhmswy]|ms)$/.exec(t.trim());return e!==null?[Number.parseFloat(e[1]),e[2]]:[NaN,"ms"]},"parseDuration"),Zue=o(function(t,e,r,n=!1){r=r.trim();let a=/^until\s+(?[\d\w- ]+)/.exec(r);if(a!==null){let f=null;for(let p of a.groups.ids.split(" ")){let m=N0(p);m!==void 0&&(!f||m.startTime{window.open(r,"_self")}),jI.set(n,r))}),ehe(t,"clickable")},"setLink"),ehe=o(function(t,e){t.split(",").forEach(function(r){let n=N0(r);n!==void 0&&n.classes.push(e)})},"setClass"),D$e=o(function(t,e,r){if(pe().securityLevel!=="loose"||e===void 0)return;let n=[];if(typeof r=="string"){n=r.split(/,(?=(?:(?:[^"]*"){2})*[^"]*$)/);for(let a=0;a{Ut.runFunc(e,...n)})},"setClickFun"),the=o(function(t,e){ZI.push(function(){let r=document.querySelector(`[id="${t}"]`);r!==null&&r.addEventListener("click",function(){e()})},function(){let r=document.querySelector(`[id="${t}-text"]`);r!==null&&r.addEventListener("click",function(){e()})})},"pushFun"),N$e=o(function(t,e,r){t.split(",").forEach(function(n){D$e(n,e,r)}),ehe(t,"clickable")},"setClickEvent"),R$e=o(function(t){ZI.forEach(function(e){e(t)})},"bindFunctions"),rhe={getConfig:o(()=>pe().gantt,"getConfig"),clear:ZGe,setDateFormat:a$e,getDateFormat:f$e,enableInclusiveEndDates:s$e,endDatesAreInclusive:o$e,enableTopAxis:l$e,topAxisEnabled:c$e,setAxisFormat:JGe,getAxisFormat:e$e,setTickInterval:t$e,getTickInterval:r$e,setTodayMarker:n$e,getTodayMarker:i$e,setAccTitle:Mr,getAccTitle:Br,setDiagramTitle:cn,getDiagramTitle:Jr,setDisplayMode:u$e,getDisplayMode:h$e,setAccDescription:Fr,getAccDescription:zr,addSection:v$e,getSections:x$e,getTasks:b$e,addTask:A$e,findTaskById:N0,addTaskOrg:_$e,setIncludes:d$e,getIncludes:p$e,setExcludes:m$e,getExcludes:g$e,setClickEvent:N$e,setLink:L$e,getLinks:y$e,bindFunctions:R$e,parseDuration:Que,isInvalidDate:jue,setWeekday:w$e,getWeekday:T$e,setWeekend:k$e};o(nhe,"getTaskTags")});var wE,M$e,ahe,I$e,Ju,O$e,she,ohe=M(()=>{"use strict";wE=Ji(Vb(),1);ut();pr();fr();Vt();ai();M$e=o(function(){Y.debug("Something is calling, setConf, remove the call")},"setConf"),ahe={monday:Nh,tuesday:R3,wednesday:M3,thursday:xc,friday:I3,saturday:O3,sunday:Al},I$e=o((t,e)=>{let r=[...t].map(()=>-1/0),n=[...t].sort((a,s)=>a.startTime-s.startTime||a.order-s.order),i=0;for(let a of n)for(let s=0;s=r[s]){r[s]=a.endTime,a.order=s+e,s>i&&(i=s);break}return i},"getMaxIntersections"),O$e=o(function(t,e,r,n){let i=pe().gantt,a=pe().securityLevel,s;a==="sandbox"&&(s=Ve("#i"+e));let l=a==="sandbox"?Ve(s.nodes()[0].contentDocument.body):Ve("body"),u=a==="sandbox"?s.nodes()[0].contentDocument:document,h=u.getElementById(e);Ju=h.parentElement.offsetWidth,Ju===void 0&&(Ju=1200),i.useWidth!==void 0&&(Ju=i.useWidth);let f=n.db.getTasks(),d=[];for(let S of f)d.push(S.type);d=L(d);let p={},m=2*i.topPadding;if(n.db.getDisplayMode()==="compact"||i.displayMode==="compact"){let S={};for(let I of f)S[I.section]===void 0?S[I.section]=[I]:S[I.section].push(I);let A=0;for(let I of Object.keys(S)){let D=I$e(S[I],A)+1;A+=D,m+=D*(i.barHeight+i.barGap),p[I]=D}}else{m+=f.length*(i.barHeight+i.barGap);for(let S of d)p[S]=f.filter(A=>A.type===S).length}h.setAttribute("viewBox","0 0 "+Ju+" "+m);let g=l.select(`[id="${e}"]`),y=F3().domain([U4(f,function(S){return S.startTime}),V4(f,function(S){return S.endTime})]).rangeRound([0,Ju-i.leftPadding-i.rightPadding]);function v(S,A){let I=S.startTime,D=A.startTime,k=0;return I>D?k=1:IG.order))].map(G=>S.find(z=>z.order===G));g.append("g").selectAll("rect").data(N).enter().append("rect").attr("x",0).attr("y",function(G,z){return z=G.order,z*A+I-2}).attr("width",function(){return C-i.rightPadding/2}).attr("height",A).attr("class",function(G){for(let[z,W]of d.entries())if(G.type===W)return"section section"+z%i.numberSectionStyles;return"section section0"});let P=g.append("g").selectAll("rect").data(S).enter(),F=n.db.getLinks();if(P.append("rect").attr("id",function(G){return G.id}).attr("rx",3).attr("ry",3).attr("x",function(G){return G.milestone?y(G.startTime)+D+.5*(y(G.endTime)-y(G.startTime))-.5*k:y(G.startTime)+D}).attr("y",function(G,z){return z=G.order,z*A+I}).attr("width",function(G){return G.milestone?k:y(G.renderEndTime||G.endTime)-y(G.startTime)}).attr("height",k).attr("transform-origin",function(G,z){return z=G.order,(y(G.startTime)+D+.5*(y(G.endTime)-y(G.startTime))).toString()+"px "+(z*A+I+.5*k).toString()+"px"}).attr("class",function(G){let z="task",W="";G.classes.length>0&&(W=G.classes.join(" "));let Z=0;for(let[oe,K]of d.entries())G.type===K&&(Z=oe%i.numberSectionStyles);let j="";return G.active?G.crit?j+=" activeCrit":j=" active":G.done?G.crit?j=" doneCrit":j=" done":G.crit&&(j+=" crit"),j.length===0&&(j=" task"),G.milestone&&(j=" milestone "+j),j+=Z,j+=" "+W,z+j}),P.append("text").attr("id",function(G){return G.id+"-text"}).text(function(G){return G.task}).attr("font-size",i.fontSize).attr("x",function(G){let z=y(G.startTime),W=y(G.renderEndTime||G.endTime);G.milestone&&(z+=.5*(y(G.endTime)-y(G.startTime))-.5*k),G.milestone&&(W=z+k);let Z=this.getBBox().width;return Z>W-z?W+Z+1.5*i.leftPadding>C?z+D-5:W+D+5:(W-z)/2+z+D}).attr("y",function(G,z){return z=G.order,z*A+i.barHeight/2+(i.fontSize/2-2)+I}).attr("text-height",k).attr("class",function(G){let z=y(G.startTime),W=y(G.endTime);G.milestone&&(W=z+k);let Z=this.getBBox().width,j="";G.classes.length>0&&(j=G.classes.join(" "));let oe=0;for(let[ee,J]of d.entries())G.type===J&&(oe=ee%i.numberSectionStyles);let K="";return G.active&&(G.crit?K="activeCritText"+oe:K="activeText"+oe),G.done?G.crit?K=K+" doneCritText"+oe:K=K+" doneText"+oe:G.crit&&(K=K+" critText"+oe),G.milestone&&(K+=" milestoneText"),Z>W-z?W+Z+1.5*i.leftPadding>C?j+" taskTextOutsideLeft taskTextOutside"+oe+" "+K:j+" taskTextOutsideRight taskTextOutside"+oe+" "+K+" width-"+Z:j+" taskText taskText"+oe+" "+K+" width-"+Z}),pe().securityLevel==="sandbox"){let G;G=Ve("#i"+e);let z=G.nodes()[0].contentDocument;P.filter(function(W){return F.has(W.id)}).each(function(W){var Z=z.querySelector("#"+W.id),j=z.querySelector("#"+W.id+"-text");let oe=Z.parentNode;var K=z.createElement("a");K.setAttribute("xlink:href",F.get(W.id)),K.setAttribute("target","_top"),oe.appendChild(K),K.appendChild(Z),K.appendChild(j)})}}o(b,"drawRects");function w(S,A,I,D,k,R,C,O){if(C.length===0&&O.length===0)return;let N,P;for(let{startTime:Z,endTime:j}of R)(N===void 0||ZP)&&(P=j);if(!N||!P)return;if((0,wE.default)(P).diff((0,wE.default)(N),"year")>5){Y.warn("The difference between the min and max time is more than 5 years. This will cause performance issues. Skipping drawing exclude days.");return}let F=n.db.getDateFormat(),B=[],G=null,z=(0,wE.default)(N);for(;z.valueOf()<=P;)n.db.isInvalidDate(z,F,C,O)?G?G.end=z:G={start:z,end:z}:G&&(B.push(G),G=null),z=z.add(1,"d");g.append("g").selectAll("rect").data(B).enter().append("rect").attr("id",function(Z){return"exclude-"+Z.start.format("YYYY-MM-DD")}).attr("x",function(Z){return y(Z.start)+I}).attr("y",i.gridLineStartPadding).attr("width",function(Z){let j=Z.end.add(1,"day");return y(j)-y(Z.start)}).attr("height",k-A-i.gridLineStartPadding).attr("transform-origin",function(Z,j){return(y(Z.start)+I+.5*(y(Z.end)-y(Z.start))).toString()+"px "+(j*S+.5*k).toString()+"px"}).attr("class","exclude-range")}o(w,"drawExcludeDays");function _(S,A,I,D){let k=b7(y).tickSize(-D+A+i.gridLineStartPadding).tickFormat(kd(n.db.getAxisFormat()||i.axisFormat||"%Y-%m-%d")),C=/^([1-9]\d*)(millisecond|second|minute|hour|day|week|month)$/.exec(n.db.getTickInterval()||i.tickInterval);if(C!==null){let O=C[1],N=C[2],P=n.db.getWeekday()||i.weekday;switch(N){case"millisecond":k.ticks(yc.every(O));break;case"second":k.ticks(to.every(O));break;case"minute":k.ticks(Su.every(O));break;case"hour":k.ticks(Cu.every(O));break;case"day":k.ticks(Oo.every(O));break;case"week":k.ticks(ahe[P].every(O));break;case"month":k.ticks(Au.every(O));break}}if(g.append("g").attr("class","grid").attr("transform","translate("+S+", "+(D-50)+")").call(k).selectAll("text").style("text-anchor","middle").attr("fill","#000").attr("stroke","none").attr("font-size",10).attr("dy","1em"),n.db.topAxisEnabled()||i.topAxis){let O=x7(y).tickSize(-D+A+i.gridLineStartPadding).tickFormat(kd(n.db.getAxisFormat()||i.axisFormat||"%Y-%m-%d"));if(C!==null){let N=C[1],P=C[2],F=n.db.getWeekday()||i.weekday;switch(P){case"millisecond":O.ticks(yc.every(N));break;case"second":O.ticks(to.every(N));break;case"minute":O.ticks(Su.every(N));break;case"hour":O.ticks(Cu.every(N));break;case"day":O.ticks(Oo.every(N));break;case"week":O.ticks(ahe[F].every(N));break;case"month":O.ticks(Au.every(N));break}}g.append("g").attr("class","grid").attr("transform","translate("+S+", "+A+")").call(O).selectAll("text").style("text-anchor","middle").attr("fill","#000").attr("stroke","none").attr("font-size",10)}}o(_,"makeGrid");function T(S,A){let I=0,D=Object.keys(p).map(k=>[k,p[k]]);g.append("g").selectAll("text").data(D).enter().append(function(k){let R=k[0].split(qe.lineBreakRegex),C=-(R.length-1)/2,O=u.createElementNS("http://www.w3.org/2000/svg","text");O.setAttribute("dy",C+"em");for(let[N,P]of R.entries()){let F=u.createElementNS("http://www.w3.org/2000/svg","tspan");F.setAttribute("alignment-baseline","central"),F.setAttribute("x","10"),N>0&&F.setAttribute("dy","1em"),F.textContent=P,O.appendChild(F)}return O}).attr("x",10).attr("y",function(k,R){if(R>0)for(let C=0;C{"use strict";P$e=o(t=>` + .mermaid-main-font { + font-family: var(--mermaid-font-family, "trebuchet ms", verdana, arial, sans-serif); + } + + .exclude-range { + fill: ${t.excludeBkgColor}; + } + + .section { + stroke: none; + opacity: 0.2; + } + + .section0 { + fill: ${t.sectionBkgColor}; + } + + .section2 { + fill: ${t.sectionBkgColor2}; + } + + .section1, + .section3 { + fill: ${t.altSectionBkgColor}; + opacity: 0.2; + } + + .sectionTitle0 { + fill: ${t.titleColor}; + } + + .sectionTitle1 { + fill: ${t.titleColor}; + } + + .sectionTitle2 { + fill: ${t.titleColor}; + } + + .sectionTitle3 { + fill: ${t.titleColor}; + } + + .sectionTitle { + text-anchor: start; + font-family: var(--mermaid-font-family, "trebuchet ms", verdana, arial, sans-serif); + } + + + /* Grid and axis */ + + .grid .tick { + stroke: ${t.gridColor}; + opacity: 0.8; + shape-rendering: crispEdges; + } + + .grid .tick text { + font-family: ${t.fontFamily}; + fill: ${t.textColor}; + } + + .grid path { + stroke-width: 0; + } + + + /* Today line */ + + .today { + fill: none; + stroke: ${t.todayLineColor}; + stroke-width: 2px; + } + + + /* Task styling */ + + /* Default task */ + + .task { + stroke-width: 2; + } + + .taskText { + text-anchor: middle; + font-family: var(--mermaid-font-family, "trebuchet ms", verdana, arial, sans-serif); + } + + .taskTextOutsideRight { + fill: ${t.taskTextDarkColor}; + text-anchor: start; + font-family: var(--mermaid-font-family, "trebuchet ms", verdana, arial, sans-serif); + } + + .taskTextOutsideLeft { + fill: ${t.taskTextDarkColor}; + text-anchor: end; + } + + + /* Special case clickable */ + + .task.clickable { + cursor: pointer; + } + + .taskText.clickable { + cursor: pointer; + fill: ${t.taskTextClickableColor} !important; + font-weight: bold; + } + + .taskTextOutsideLeft.clickable { + cursor: pointer; + fill: ${t.taskTextClickableColor} !important; + font-weight: bold; + } + + .taskTextOutsideRight.clickable { + cursor: pointer; + fill: ${t.taskTextClickableColor} !important; + font-weight: bold; + } + + + /* Specific task settings for the sections*/ + + .taskText0, + .taskText1, + .taskText2, + .taskText3 { + fill: ${t.taskTextColor}; + } + + .task0, + .task1, + .task2, + .task3 { + fill: ${t.taskBkgColor}; + stroke: ${t.taskBorderColor}; + } + + .taskTextOutside0, + .taskTextOutside2 + { + fill: ${t.taskTextOutsideColor}; + } + + .taskTextOutside1, + .taskTextOutside3 { + fill: ${t.taskTextOutsideColor}; + } + + + /* Active task */ + + .active0, + .active1, + .active2, + .active3 { + fill: ${t.activeTaskBkgColor}; + stroke: ${t.activeTaskBorderColor}; + } + + .activeText0, + .activeText1, + .activeText2, + .activeText3 { + fill: ${t.taskTextDarkColor} !important; + } + + + /* Completed task */ + + .done0, + .done1, + .done2, + .done3 { + stroke: ${t.doneTaskBorderColor}; + fill: ${t.doneTaskBkgColor}; + stroke-width: 2; + } + + .doneText0, + .doneText1, + .doneText2, + .doneText3 { + fill: ${t.taskTextDarkColor} !important; + } + + + /* Tasks on the critical line */ + + .crit0, + .crit1, + .crit2, + .crit3 { + stroke: ${t.critBorderColor}; + fill: ${t.critBkgColor}; + stroke-width: 2; + } + + .activeCrit0, + .activeCrit1, + .activeCrit2, + .activeCrit3 { + stroke: ${t.critBorderColor}; + fill: ${t.activeTaskBkgColor}; + stroke-width: 2; + } + + .doneCrit0, + .doneCrit1, + .doneCrit2, + .doneCrit3 { + stroke: ${t.critBorderColor}; + fill: ${t.doneTaskBkgColor}; + stroke-width: 2; + cursor: pointer; + shape-rendering: crispEdges; + } + + .milestone { + transform: rotate(45deg) scale(0.8,0.8); + } + + .milestoneText { + font-style: italic; + } + .doneCritText0, + .doneCritText1, + .doneCritText2, + .doneCritText3 { + fill: ${t.taskTextDarkColor} !important; + } + + .activeCritText0, + .activeCritText1, + .activeCritText2, + .activeCritText3 { + fill: ${t.taskTextDarkColor} !important; + } + + .titleText { + text-anchor: middle; + font-size: 18px; + fill: ${t.titleColor||t.textColor}; + font-family: var(--mermaid-font-family, "trebuchet ms", verdana, arial, sans-serif); + } +`,"getStyles"),lhe=P$e});var uhe={};vr(uhe,{diagram:()=>B$e});var B$e,hhe=M(()=>{"use strict";Fue();ihe();ohe();che();B$e={parser:Bue,db:rhe,renderer:she,styles:lhe}});var phe,mhe=M(()=>{"use strict";Hg();ut();phe={parse:o(async t=>{let e=await Yl("info",t);Y.debug(e)},"parse")}});var _x,tO=M(()=>{_x="11.4.0"});var V$e,U$e,ghe,yhe=M(()=>{"use strict";tO();V$e={version:_x},U$e=o(()=>V$e.version,"getVersion"),ghe={getVersion:U$e}});var Va,eh=M(()=>{"use strict";pr();Vt();Va=o(t=>{let{securityLevel:e}=pe(),r=Ve("body");if(e==="sandbox"){let a=Ve(`#i${t}`).node()?.contentDocument??document;r=Ve(a.body)}return r.select(`#${t}`)},"selectSvgElement")});var H$e,vhe,xhe=M(()=>{"use strict";ut();eh();ai();H$e=o((t,e,r)=>{Y.debug(`rendering info diagram +`+t);let n=Va(e);Zr(n,100,400,!0),n.append("g").append("text").attr("x",100).attr("y",40).attr("class","version").attr("font-size",32).style("text-anchor","middle").text(`v${r}`)},"draw"),vhe={draw:H$e}});var bhe={};vr(bhe,{diagram:()=>W$e});var W$e,whe=M(()=>{"use strict";mhe();yhe();xhe();W$e={parser:phe,db:ghe,renderer:vhe}});var Ehe,rO,TE,nO,X$e,j$e,K$e,Q$e,Z$e,J$e,eVe,kE,iO=M(()=>{"use strict";ut();Ai();bs();Ehe=ur.pie,rO={sections:new Map,showData:!1,config:Ehe},TE=rO.sections,nO=rO.showData,X$e=structuredClone(Ehe),j$e=o(()=>structuredClone(X$e),"getConfig"),K$e=o(()=>{TE=new Map,nO=rO.showData,Lr()},"clear"),Q$e=o(({label:t,value:e})=>{TE.has(t)||(TE.set(t,e),Y.debug(`added new section: ${t}, with value: ${e}`))},"addSection"),Z$e=o(()=>TE,"getSections"),J$e=o(t=>{nO=t},"setShowData"),eVe=o(()=>nO,"getShowData"),kE={getConfig:j$e,clear:K$e,setDiagramTitle:cn,getDiagramTitle:Jr,setAccTitle:Mr,getAccTitle:Br,setAccDescription:Fr,getAccDescription:zr,addSection:Q$e,getSections:Z$e,setShowData:J$e,getShowData:eVe}});var tVe,She,Che=M(()=>{"use strict";Hg();ut();Tx();iO();tVe=o((t,e)=>{yf(t,e),e.setShowData(t.showData),t.sections.map(e.addSection)},"populateDb"),She={parse:o(async t=>{let e=await Yl("pie",t);Y.debug(e),tVe(e,kE)},"parse")}});var rVe,Ahe,_he=M(()=>{"use strict";rVe=o(t=>` + .pieCircle{ + stroke: ${t.pieStrokeColor}; + stroke-width : ${t.pieStrokeWidth}; + opacity : ${t.pieOpacity}; + } + .pieOuterCircle{ + stroke: ${t.pieOuterStrokeColor}; + stroke-width: ${t.pieOuterStrokeWidth}; + fill: none; + } + .pieTitleText { + text-anchor: middle; + font-size: ${t.pieTitleTextSize}; + fill: ${t.pieTitleTextColor}; + font-family: ${t.fontFamily}; + } + .slice { + font-family: ${t.fontFamily}; + fill: ${t.pieSectionTextColor}; + font-size:${t.pieSectionTextSize}; + // fill: white; + } + .legend text { + fill: ${t.pieLegendTextColor}; + font-family: ${t.fontFamily}; + font-size: ${t.pieLegendTextSize}; + } +`,"getStyles"),Ahe=rVe});var nVe,iVe,Lhe,Dhe=M(()=>{"use strict";pr();Vt();ut();eh();ai();hr();nVe=o(t=>{let e=[...t.entries()].map(n=>({label:n[0],value:n[1]})).sort((n,i)=>i.value-n.value);return H3().value(n=>n.value)(e)},"createPieArcs"),iVe=o((t,e,r,n)=>{Y.debug(`rendering pie chart +`+t);let i=n.db,a=pe(),s=Ds(i.getConfig(),a.pie),l=40,u=18,h=4,f=450,d=f,p=Va(e),m=p.append("g");m.attr("transform","translate("+d/2+","+f/2+")");let{themeVariables:g}=a,[y]=Ho(g.pieOuterStrokeWidth);y??=2;let v=s.textPosition,x=Math.min(d,f)/2-l,b=Dl().innerRadius(0).outerRadius(x),w=Dl().innerRadius(x*v).outerRadius(x*v);m.append("circle").attr("cx",0).attr("cy",0).attr("r",x+y/2).attr("class","pieOuterCircle");let _=i.getSections(),T=nVe(_),E=[g.pie1,g.pie2,g.pie3,g.pie4,g.pie5,g.pie6,g.pie7,g.pie8,g.pie9,g.pie10,g.pie11,g.pie12],L=ku(E);m.selectAll("mySlices").data(T).enter().append("path").attr("d",b).attr("fill",k=>L(k.data.label)).attr("class","pieCircle");let S=0;_.forEach(k=>{S+=k}),m.selectAll("mySlices").data(T).enter().append("text").text(k=>(k.data.value/S*100).toFixed(0)+"%").attr("transform",k=>"translate("+w.centroid(k)+")").style("text-anchor","middle").attr("class","slice"),m.append("text").text(i.getDiagramTitle()).attr("x",0).attr("y",-(f-50)/2).attr("class","pieTitleText");let A=m.selectAll(".legend").data(L.domain()).enter().append("g").attr("class","legend").attr("transform",(k,R)=>{let C=u+h,O=C*L.domain().length/2,N=12*u,P=R*C-O;return"translate("+N+","+P+")"});A.append("rect").attr("width",u).attr("height",u).style("fill",L).style("stroke",L),A.data(T).append("text").attr("x",u+h).attr("y",u-h).text(k=>{let{label:R,value:C}=k.data;return i.getShowData()?`${R} [${C}]`:R});let I=Math.max(...A.selectAll("text").nodes().map(k=>k?.getBoundingClientRect().width??0)),D=d+l+u+h+I;p.attr("viewBox",`0 0 ${D} ${f}`),Zr(p,f,D,s.useMaxWidth)},"draw"),Lhe={draw:iVe}});var Nhe={};vr(Nhe,{diagram:()=>aVe});var aVe,Rhe=M(()=>{"use strict";Che();iO();_he();Dhe();aVe={parser:She,db:kE,renderer:Lhe,styles:Ahe}});var aO,Ohe,Phe=M(()=>{"use strict";aO=function(){var t=o(function(Te,ie,Ee,Ae){for(Ee=Ee||{},Ae=Te.length;Ae--;Ee[Te[Ae]]=ie);return Ee},"o"),e=[1,3],r=[1,4],n=[1,5],i=[1,6],a=[1,7],s=[1,4,5,10,12,13,14,18,25,35,37,39,41,42,48,50,51,52,53,54,55,56,57,60,61,63,64,65,66,67],l=[1,4,5,10,12,13,14,18,25,28,35,37,39,41,42,48,50,51,52,53,54,55,56,57,60,61,63,64,65,66,67],u=[55,56,57],h=[2,36],f=[1,37],d=[1,36],p=[1,38],m=[1,35],g=[1,43],y=[1,41],v=[1,14],x=[1,23],b=[1,18],w=[1,19],_=[1,20],T=[1,21],E=[1,22],L=[1,24],S=[1,25],A=[1,26],I=[1,27],D=[1,28],k=[1,29],R=[1,32],C=[1,33],O=[1,34],N=[1,39],P=[1,40],F=[1,42],B=[1,44],G=[1,62],z=[1,61],W=[4,5,8,10,12,13,14,18,44,47,49,55,56,57,63,64,65,66,67],Z=[1,65],j=[1,66],oe=[1,67],K=[1,68],ee=[1,69],J=[1,70],H=[1,71],q=[1,72],Q=[1,73],ae=[1,74],ue=[1,75],ce=[1,76],te=[4,5,6,7,8,9,10,11,12,13,14,15,18],Ne=[1,90],se=[1,91],ke=[1,92],Re=[1,99],Ce=[1,93],Pe=[1,96],Ie=[1,94],$e=[1,95],ye=[1,97],X=[1,98],fe=[1,102],he=[10,55,56,57],ge=[4,5,6,8,10,11,13,17,18,19,20,55,56,57],ne={trace:o(function(){},"trace"),yy:{},symbols_:{error:2,idStringToken:3,ALPHA:4,NUM:5,NODE_STRING:6,DOWN:7,MINUS:8,DEFAULT:9,COMMA:10,COLON:11,AMP:12,BRKT:13,MULT:14,UNICODE_TEXT:15,styleComponent:16,UNIT:17,SPACE:18,STYLE:19,PCT:20,idString:21,style:22,stylesOpt:23,classDefStatement:24,CLASSDEF:25,start:26,eol:27,QUADRANT:28,document:29,line:30,statement:31,axisDetails:32,quadrantDetails:33,points:34,title:35,title_value:36,acc_title:37,acc_title_value:38,acc_descr:39,acc_descr_value:40,acc_descr_multiline_value:41,section:42,text:43,point_start:44,point_x:45,point_y:46,class_name:47,"X-AXIS":48,"AXIS-TEXT-DELIMITER":49,"Y-AXIS":50,QUADRANT_1:51,QUADRANT_2:52,QUADRANT_3:53,QUADRANT_4:54,NEWLINE:55,SEMI:56,EOF:57,alphaNumToken:58,textNoTagsToken:59,STR:60,MD_STR:61,alphaNum:62,PUNCTUATION:63,PLUS:64,EQUALS:65,DOT:66,UNDERSCORE:67,$accept:0,$end:1},terminals_:{2:"error",4:"ALPHA",5:"NUM",6:"NODE_STRING",7:"DOWN",8:"MINUS",9:"DEFAULT",10:"COMMA",11:"COLON",12:"AMP",13:"BRKT",14:"MULT",15:"UNICODE_TEXT",17:"UNIT",18:"SPACE",19:"STYLE",20:"PCT",25:"CLASSDEF",28:"QUADRANT",35:"title",36:"title_value",37:"acc_title",38:"acc_title_value",39:"acc_descr",40:"acc_descr_value",41:"acc_descr_multiline_value",42:"section",44:"point_start",45:"point_x",46:"point_y",47:"class_name",48:"X-AXIS",49:"AXIS-TEXT-DELIMITER",50:"Y-AXIS",51:"QUADRANT_1",52:"QUADRANT_2",53:"QUADRANT_3",54:"QUADRANT_4",55:"NEWLINE",56:"SEMI",57:"EOF",60:"STR",61:"MD_STR",63:"PUNCTUATION",64:"PLUS",65:"EQUALS",66:"DOT",67:"UNDERSCORE"},productions_:[0,[3,1],[3,1],[3,1],[3,1],[3,1],[3,1],[3,1],[3,1],[3,1],[3,1],[3,1],[3,1],[16,1],[16,1],[16,1],[16,1],[16,1],[16,1],[16,1],[16,1],[16,1],[16,1],[21,1],[21,2],[22,1],[22,2],[23,1],[23,3],[24,5],[26,2],[26,2],[26,2],[29,0],[29,2],[30,2],[31,0],[31,1],[31,2],[31,1],[31,1],[31,1],[31,2],[31,2],[31,2],[31,1],[31,1],[34,4],[34,5],[34,5],[34,6],[32,4],[32,3],[32,2],[32,4],[32,3],[32,2],[33,2],[33,2],[33,2],[33,2],[27,1],[27,1],[27,1],[43,1],[43,2],[43,1],[43,1],[62,1],[62,2],[58,1],[58,1],[58,1],[58,1],[58,1],[58,1],[58,1],[58,1],[58,1],[58,1],[58,1],[59,1],[59,1],[59,1]],performAction:o(function(ie,Ee,Ae,Ge,Be,me,He){var Oe=me.length-1;switch(Be){case 23:this.$=me[Oe];break;case 24:this.$=me[Oe-1]+""+me[Oe];break;case 26:this.$=me[Oe-1]+me[Oe];break;case 27:this.$=[me[Oe].trim()];break;case 28:me[Oe-2].push(me[Oe].trim()),this.$=me[Oe-2];break;case 29:this.$=me[Oe-4],Ge.addClass(me[Oe-2],me[Oe]);break;case 37:this.$=[];break;case 42:this.$=me[Oe].trim(),Ge.setDiagramTitle(this.$);break;case 43:this.$=me[Oe].trim(),Ge.setAccTitle(this.$);break;case 44:case 45:this.$=me[Oe].trim(),Ge.setAccDescription(this.$);break;case 46:Ge.addSection(me[Oe].substr(8)),this.$=me[Oe].substr(8);break;case 47:Ge.addPoint(me[Oe-3],"",me[Oe-1],me[Oe],[]);break;case 48:Ge.addPoint(me[Oe-4],me[Oe-3],me[Oe-1],me[Oe],[]);break;case 49:Ge.addPoint(me[Oe-4],"",me[Oe-2],me[Oe-1],me[Oe]);break;case 50:Ge.addPoint(me[Oe-5],me[Oe-4],me[Oe-2],me[Oe-1],me[Oe]);break;case 51:Ge.setXAxisLeftText(me[Oe-2]),Ge.setXAxisRightText(me[Oe]);break;case 52:me[Oe-1].text+=" \u27F6 ",Ge.setXAxisLeftText(me[Oe-1]);break;case 53:Ge.setXAxisLeftText(me[Oe]);break;case 54:Ge.setYAxisBottomText(me[Oe-2]),Ge.setYAxisTopText(me[Oe]);break;case 55:me[Oe-1].text+=" \u27F6 ",Ge.setYAxisBottomText(me[Oe-1]);break;case 56:Ge.setYAxisBottomText(me[Oe]);break;case 57:Ge.setQuadrant1Text(me[Oe]);break;case 58:Ge.setQuadrant2Text(me[Oe]);break;case 59:Ge.setQuadrant3Text(me[Oe]);break;case 60:Ge.setQuadrant4Text(me[Oe]);break;case 64:this.$={text:me[Oe],type:"text"};break;case 65:this.$={text:me[Oe-1].text+""+me[Oe],type:me[Oe-1].type};break;case 66:this.$={text:me[Oe],type:"text"};break;case 67:this.$={text:me[Oe],type:"markdown"};break;case 68:this.$=me[Oe];break;case 69:this.$=me[Oe-1]+""+me[Oe];break}},"anonymous"),table:[{18:e,26:1,27:2,28:r,55:n,56:i,57:a},{1:[3]},{18:e,26:8,27:2,28:r,55:n,56:i,57:a},{18:e,26:9,27:2,28:r,55:n,56:i,57:a},t(s,[2,33],{29:10}),t(l,[2,61]),t(l,[2,62]),t(l,[2,63]),{1:[2,30]},{1:[2,31]},t(u,h,{30:11,31:12,24:13,32:15,33:16,34:17,43:30,58:31,1:[2,32],4:f,5:d,10:p,12:m,13:g,14:y,18:v,25:x,35:b,37:w,39:_,41:T,42:E,48:L,50:S,51:A,52:I,53:D,54:k,60:R,61:C,63:O,64:N,65:P,66:F,67:B}),t(s,[2,34]),{27:45,55:n,56:i,57:a},t(u,[2,37]),t(u,h,{24:13,32:15,33:16,34:17,43:30,58:31,31:46,4:f,5:d,10:p,12:m,13:g,14:y,18:v,25:x,35:b,37:w,39:_,41:T,42:E,48:L,50:S,51:A,52:I,53:D,54:k,60:R,61:C,63:O,64:N,65:P,66:F,67:B}),t(u,[2,39]),t(u,[2,40]),t(u,[2,41]),{36:[1,47]},{38:[1,48]},{40:[1,49]},t(u,[2,45]),t(u,[2,46]),{18:[1,50]},{4:f,5:d,10:p,12:m,13:g,14:y,43:51,58:31,60:R,61:C,63:O,64:N,65:P,66:F,67:B},{4:f,5:d,10:p,12:m,13:g,14:y,43:52,58:31,60:R,61:C,63:O,64:N,65:P,66:F,67:B},{4:f,5:d,10:p,12:m,13:g,14:y,43:53,58:31,60:R,61:C,63:O,64:N,65:P,66:F,67:B},{4:f,5:d,10:p,12:m,13:g,14:y,43:54,58:31,60:R,61:C,63:O,64:N,65:P,66:F,67:B},{4:f,5:d,10:p,12:m,13:g,14:y,43:55,58:31,60:R,61:C,63:O,64:N,65:P,66:F,67:B},{4:f,5:d,10:p,12:m,13:g,14:y,43:56,58:31,60:R,61:C,63:O,64:N,65:P,66:F,67:B},{4:f,5:d,8:G,10:p,12:m,13:g,14:y,18:z,44:[1,57],47:[1,58],58:60,59:59,63:O,64:N,65:P,66:F,67:B},t(W,[2,64]),t(W,[2,66]),t(W,[2,67]),t(W,[2,70]),t(W,[2,71]),t(W,[2,72]),t(W,[2,73]),t(W,[2,74]),t(W,[2,75]),t(W,[2,76]),t(W,[2,77]),t(W,[2,78]),t(W,[2,79]),t(W,[2,80]),t(s,[2,35]),t(u,[2,38]),t(u,[2,42]),t(u,[2,43]),t(u,[2,44]),{3:64,4:Z,5:j,6:oe,7:K,8:ee,9:J,10:H,11:q,12:Q,13:ae,14:ue,15:ce,21:63},t(u,[2,53],{59:59,58:60,4:f,5:d,8:G,10:p,12:m,13:g,14:y,18:z,49:[1,77],63:O,64:N,65:P,66:F,67:B}),t(u,[2,56],{59:59,58:60,4:f,5:d,8:G,10:p,12:m,13:g,14:y,18:z,49:[1,78],63:O,64:N,65:P,66:F,67:B}),t(u,[2,57],{59:59,58:60,4:f,5:d,8:G,10:p,12:m,13:g,14:y,18:z,63:O,64:N,65:P,66:F,67:B}),t(u,[2,58],{59:59,58:60,4:f,5:d,8:G,10:p,12:m,13:g,14:y,18:z,63:O,64:N,65:P,66:F,67:B}),t(u,[2,59],{59:59,58:60,4:f,5:d,8:G,10:p,12:m,13:g,14:y,18:z,63:O,64:N,65:P,66:F,67:B}),t(u,[2,60],{59:59,58:60,4:f,5:d,8:G,10:p,12:m,13:g,14:y,18:z,63:O,64:N,65:P,66:F,67:B}),{45:[1,79]},{44:[1,80]},t(W,[2,65]),t(W,[2,81]),t(W,[2,82]),t(W,[2,83]),{3:82,4:Z,5:j,6:oe,7:K,8:ee,9:J,10:H,11:q,12:Q,13:ae,14:ue,15:ce,18:[1,81]},t(te,[2,23]),t(te,[2,1]),t(te,[2,2]),t(te,[2,3]),t(te,[2,4]),t(te,[2,5]),t(te,[2,6]),t(te,[2,7]),t(te,[2,8]),t(te,[2,9]),t(te,[2,10]),t(te,[2,11]),t(te,[2,12]),t(u,[2,52],{58:31,43:83,4:f,5:d,10:p,12:m,13:g,14:y,60:R,61:C,63:O,64:N,65:P,66:F,67:B}),t(u,[2,55],{58:31,43:84,4:f,5:d,10:p,12:m,13:g,14:y,60:R,61:C,63:O,64:N,65:P,66:F,67:B}),{46:[1,85]},{45:[1,86]},{4:Ne,5:se,6:ke,8:Re,11:Ce,13:Pe,16:89,17:Ie,18:$e,19:ye,20:X,22:88,23:87},t(te,[2,24]),t(u,[2,51],{59:59,58:60,4:f,5:d,8:G,10:p,12:m,13:g,14:y,18:z,63:O,64:N,65:P,66:F,67:B}),t(u,[2,54],{59:59,58:60,4:f,5:d,8:G,10:p,12:m,13:g,14:y,18:z,63:O,64:N,65:P,66:F,67:B}),t(u,[2,47],{22:88,16:89,23:100,4:Ne,5:se,6:ke,8:Re,11:Ce,13:Pe,17:Ie,18:$e,19:ye,20:X}),{46:[1,101]},t(u,[2,29],{10:fe}),t(he,[2,27],{16:103,4:Ne,5:se,6:ke,8:Re,11:Ce,13:Pe,17:Ie,18:$e,19:ye,20:X}),t(ge,[2,25]),t(ge,[2,13]),t(ge,[2,14]),t(ge,[2,15]),t(ge,[2,16]),t(ge,[2,17]),t(ge,[2,18]),t(ge,[2,19]),t(ge,[2,20]),t(ge,[2,21]),t(ge,[2,22]),t(u,[2,49],{10:fe}),t(u,[2,48],{22:88,16:89,23:104,4:Ne,5:se,6:ke,8:Re,11:Ce,13:Pe,17:Ie,18:$e,19:ye,20:X}),{4:Ne,5:se,6:ke,8:Re,11:Ce,13:Pe,16:89,17:Ie,18:$e,19:ye,20:X,22:105},t(ge,[2,26]),t(u,[2,50],{10:fe}),t(he,[2,28],{16:103,4:Ne,5:se,6:ke,8:Re,11:Ce,13:Pe,17:Ie,18:$e,19:ye,20:X})],defaultActions:{8:[2,30],9:[2,31]},parseError:o(function(ie,Ee){if(Ee.recoverable)this.trace(ie);else{var Ae=new Error(ie);throw Ae.hash=Ee,Ae}},"parseError"),parse:o(function(ie){var Ee=this,Ae=[0],Ge=[],Be=[null],me=[],He=this.table,Oe="",et=0,bt=0,kt=0,vt=2,rt=1,yt=me.slice.call(arguments,1),Ue=Object.create(this.lexer),tt={yy:{}};for(var ht in this.yy)Object.prototype.hasOwnProperty.call(this.yy,ht)&&(tt.yy[ht]=this.yy[ht]);Ue.setInput(ie,tt.yy),tt.yy.lexer=Ue,tt.yy.parser=this,typeof Ue.yylloc>"u"&&(Ue.yylloc={});var Et=Ue.yylloc;me.push(Et);var er=Ue.options&&Ue.options.ranges;typeof tt.yy.parseError=="function"?this.parseError=tt.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function dt(_r){Ae.length=Ae.length-2*_r,Be.length=Be.length-_r,me.length=me.length-_r}o(dt,"popStack");function Je(){var _r;return _r=Ge.pop()||Ue.lex()||rt,typeof _r!="number"&&(_r instanceof Array&&(Ge=_r,_r=Ge.pop()),_r=Ee.symbols_[_r]||_r),_r}o(Je,"lex");for(var ct,Ct,pt,Bt,Tr,yr,or={},ln,Or,ii,mn;;){if(pt=Ae[Ae.length-1],this.defaultActions[pt]?Bt=this.defaultActions[pt]:((ct===null||typeof ct>"u")&&(ct=Je()),Bt=He[pt]&&He[pt][ct]),typeof Bt>"u"||!Bt.length||!Bt[0]){var On="";mn=[];for(ln in He[pt])this.terminals_[ln]&&ln>vt&&mn.push("'"+this.terminals_[ln]+"'");Ue.showPosition?On="Parse error on line "+(et+1)+`: +`+Ue.showPosition()+` +Expecting `+mn.join(", ")+", got '"+(this.terminals_[ct]||ct)+"'":On="Parse error on line "+(et+1)+": Unexpected "+(ct==rt?"end of input":"'"+(this.terminals_[ct]||ct)+"'"),this.parseError(On,{text:Ue.match,token:this.terminals_[ct]||ct,line:Ue.yylineno,loc:Et,expected:mn})}if(Bt[0]instanceof Array&&Bt.length>1)throw new Error("Parse Error: multiple actions possible at state: "+pt+", token: "+ct);switch(Bt[0]){case 1:Ae.push(ct),Be.push(Ue.yytext),me.push(Ue.yylloc),Ae.push(Bt[1]),ct=null,Ct?(ct=Ct,Ct=null):(bt=Ue.yyleng,Oe=Ue.yytext,et=Ue.yylineno,Et=Ue.yylloc,kt>0&&kt--);break;case 2:if(Or=this.productions_[Bt[1]][1],or.$=Be[Be.length-Or],or._$={first_line:me[me.length-(Or||1)].first_line,last_line:me[me.length-1].last_line,first_column:me[me.length-(Or||1)].first_column,last_column:me[me.length-1].last_column},er&&(or._$.range=[me[me.length-(Or||1)].range[0],me[me.length-1].range[1]]),yr=this.performAction.apply(or,[Oe,bt,et,tt.yy,Bt[1],Be,me].concat(yt)),typeof yr<"u")return yr;Or&&(Ae=Ae.slice(0,-1*Or*2),Be=Be.slice(0,-1*Or),me=me.slice(0,-1*Or)),Ae.push(this.productions_[Bt[1]][0]),Be.push(or.$),me.push(or._$),ii=He[Ae[Ae.length-2]][Ae[Ae.length-1]],Ae.push(ii);break;case 3:return!0}}return!0},"parse")},ve=function(){var Te={EOF:1,parseError:o(function(Ee,Ae){if(this.yy.parser)this.yy.parser.parseError(Ee,Ae);else throw new Error(Ee)},"parseError"),setInput:o(function(ie,Ee){return this.yy=Ee||this.yy||{},this._input=ie,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},"setInput"),input:o(function(){var ie=this._input[0];this.yytext+=ie,this.yyleng++,this.offset++,this.match+=ie,this.matched+=ie;var Ee=ie.match(/(?:\r\n?|\n).*/g);return Ee?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),ie},"input"),unput:o(function(ie){var Ee=ie.length,Ae=ie.split(/(?:\r\n?|\n)/g);this._input=ie+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-Ee),this.offset-=Ee;var Ge=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),Ae.length-1&&(this.yylineno-=Ae.length-1);var Be=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:Ae?(Ae.length===Ge.length?this.yylloc.first_column:0)+Ge[Ge.length-Ae.length].length-Ae[0].length:this.yylloc.first_column-Ee},this.options.ranges&&(this.yylloc.range=[Be[0],Be[0]+this.yyleng-Ee]),this.yyleng=this.yytext.length,this},"unput"),more:o(function(){return this._more=!0,this},"more"),reject:o(function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true). +`+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},"reject"),less:o(function(ie){this.unput(this.match.slice(ie))},"less"),pastInput:o(function(){var ie=this.matched.substr(0,this.matched.length-this.match.length);return(ie.length>20?"...":"")+ie.substr(-20).replace(/\n/g,"")},"pastInput"),upcomingInput:o(function(){var ie=this.match;return ie.length<20&&(ie+=this._input.substr(0,20-ie.length)),(ie.substr(0,20)+(ie.length>20?"...":"")).replace(/\n/g,"")},"upcomingInput"),showPosition:o(function(){var ie=this.pastInput(),Ee=new Array(ie.length+1).join("-");return ie+this.upcomingInput()+` +`+Ee+"^"},"showPosition"),test_match:o(function(ie,Ee){var Ae,Ge,Be;if(this.options.backtrack_lexer&&(Be={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(Be.yylloc.range=this.yylloc.range.slice(0))),Ge=ie[0].match(/(?:\r\n?|\n).*/g),Ge&&(this.yylineno+=Ge.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:Ge?Ge[Ge.length-1].length-Ge[Ge.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+ie[0].length},this.yytext+=ie[0],this.match+=ie[0],this.matches=ie,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(ie[0].length),this.matched+=ie[0],Ae=this.performAction.call(this,this.yy,this,Ee,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),Ae)return Ae;if(this._backtrack){for(var me in Be)this[me]=Be[me];return!1}return!1},"test_match"),next:o(function(){if(this.done)return this.EOF;this._input||(this.done=!0);var ie,Ee,Ae,Ge;this._more||(this.yytext="",this.match="");for(var Be=this._currentRules(),me=0;meEe[0].length)){if(Ee=Ae,Ge=me,this.options.backtrack_lexer){if(ie=this.test_match(Ae,Be[me]),ie!==!1)return ie;if(this._backtrack){Ee=!1;continue}else return!1}else if(!this.options.flex)break}return Ee?(ie=this.test_match(Ee,Be[Ge]),ie!==!1?ie:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text. +`+this.showPosition(),{text:"",token:null,line:this.yylineno})},"next"),lex:o(function(){var Ee=this.next();return Ee||this.lex()},"lex"),begin:o(function(Ee){this.conditionStack.push(Ee)},"begin"),popState:o(function(){var Ee=this.conditionStack.length-1;return Ee>0?this.conditionStack.pop():this.conditionStack[0]},"popState"),_currentRules:o(function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},"_currentRules"),topState:o(function(Ee){return Ee=this.conditionStack.length-1-Math.abs(Ee||0),Ee>=0?this.conditionStack[Ee]:"INITIAL"},"topState"),pushState:o(function(Ee){this.begin(Ee)},"pushState"),stateStackSize:o(function(){return this.conditionStack.length},"stateStackSize"),options:{"case-insensitive":!0},performAction:o(function(Ee,Ae,Ge,Be){var me=Be;switch(Ge){case 0:break;case 1:break;case 2:return 55;case 3:break;case 4:return this.begin("title"),35;break;case 5:return this.popState(),"title_value";break;case 6:return this.begin("acc_title"),37;break;case 7:return this.popState(),"acc_title_value";break;case 8:return this.begin("acc_descr"),39;break;case 9:return this.popState(),"acc_descr_value";break;case 10:this.begin("acc_descr_multiline");break;case 11:this.popState();break;case 12:return"acc_descr_multiline_value";case 13:return 48;case 14:return 50;case 15:return 49;case 16:return 51;case 17:return 52;case 18:return 53;case 19:return 54;case 20:return 25;case 21:this.begin("md_string");break;case 22:return"MD_STR";case 23:this.popState();break;case 24:this.begin("string");break;case 25:this.popState();break;case 26:return"STR";case 27:this.begin("class_name");break;case 28:return this.popState(),47;break;case 29:return this.begin("point_start"),44;break;case 30:return this.begin("point_x"),45;break;case 31:this.popState();break;case 32:this.popState(),this.begin("point_y");break;case 33:return this.popState(),46;break;case 34:return 28;case 35:return 4;case 36:return 11;case 37:return 64;case 38:return 10;case 39:return 65;case 40:return 65;case 41:return 14;case 42:return 13;case 43:return 67;case 44:return 66;case 45:return 12;case 46:return 8;case 47:return 5;case 48:return 18;case 49:return 56;case 50:return 63;case 51:return 57}},"anonymous"),rules:[/^(?:%%(?!\{)[^\n]*)/i,/^(?:[^\}]%%[^\n]*)/i,/^(?:[\n\r]+)/i,/^(?:%%[^\n]*)/i,/^(?:title\b)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accTitle\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*\{\s*)/i,/^(?:[\}])/i,/^(?:[^\}]*)/i,/^(?: *x-axis *)/i,/^(?: *y-axis *)/i,/^(?: *--+> *)/i,/^(?: *quadrant-1 *)/i,/^(?: *quadrant-2 *)/i,/^(?: *quadrant-3 *)/i,/^(?: *quadrant-4 *)/i,/^(?:classDef\b)/i,/^(?:["][`])/i,/^(?:[^`"]+)/i,/^(?:[`]["])/i,/^(?:["])/i,/^(?:["])/i,/^(?:[^"]*)/i,/^(?::::)/i,/^(?:^\w+)/i,/^(?:\s*:\s*\[\s*)/i,/^(?:(1)|(0(.\d+)?))/i,/^(?:\s*\] *)/i,/^(?:\s*,\s*)/i,/^(?:(1)|(0(.\d+)?))/i,/^(?: *quadrantChart *)/i,/^(?:[A-Za-z]+)/i,/^(?::)/i,/^(?:\+)/i,/^(?:,)/i,/^(?:=)/i,/^(?:=)/i,/^(?:\*)/i,/^(?:#)/i,/^(?:[\_])/i,/^(?:\.)/i,/^(?:&)/i,/^(?:-)/i,/^(?:[0-9]+)/i,/^(?:\s)/i,/^(?:;)/i,/^(?:[!"#$%&'*+,-.`?\\_/])/i,/^(?:$)/i],conditions:{class_name:{rules:[28],inclusive:!1},point_y:{rules:[33],inclusive:!1},point_x:{rules:[32],inclusive:!1},point_start:{rules:[30,31],inclusive:!1},acc_descr_multiline:{rules:[11,12],inclusive:!1},acc_descr:{rules:[9],inclusive:!1},acc_title:{rules:[7],inclusive:!1},title:{rules:[5],inclusive:!1},md_string:{rules:[22,23],inclusive:!1},string:{rules:[25,26],inclusive:!1},INITIAL:{rules:[0,1,2,3,4,6,8,10,13,14,15,16,17,18,19,20,21,24,27,29,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51],inclusive:!0}}};return Te}();ne.lexer=ve;function U(){this.yy={}}return o(U,"Parser"),U.prototype=ne,ne.Parser=U,new U}();aO.parser=aO;Ohe=aO});var ps,EE,Bhe=M(()=>{"use strict";pr();bs();ut();i4();ps=vp(),EE=class{constructor(){this.classes=new Map;this.config=this.getDefaultConfig(),this.themeConfig=this.getDefaultThemeConfig(),this.data=this.getDefaultData()}static{o(this,"QuadrantBuilder")}getDefaultData(){return{titleText:"",quadrant1Text:"",quadrant2Text:"",quadrant3Text:"",quadrant4Text:"",xAxisLeftText:"",xAxisRightText:"",yAxisBottomText:"",yAxisTopText:"",points:[]}}getDefaultConfig(){return{showXAxis:!0,showYAxis:!0,showTitle:!0,chartHeight:ur.quadrantChart?.chartWidth||500,chartWidth:ur.quadrantChart?.chartHeight||500,titlePadding:ur.quadrantChart?.titlePadding||10,titleFontSize:ur.quadrantChart?.titleFontSize||20,quadrantPadding:ur.quadrantChart?.quadrantPadding||5,xAxisLabelPadding:ur.quadrantChart?.xAxisLabelPadding||5,yAxisLabelPadding:ur.quadrantChart?.yAxisLabelPadding||5,xAxisLabelFontSize:ur.quadrantChart?.xAxisLabelFontSize||16,yAxisLabelFontSize:ur.quadrantChart?.yAxisLabelFontSize||16,quadrantLabelFontSize:ur.quadrantChart?.quadrantLabelFontSize||16,quadrantTextTopPadding:ur.quadrantChart?.quadrantTextTopPadding||5,pointTextPadding:ur.quadrantChart?.pointTextPadding||5,pointLabelFontSize:ur.quadrantChart?.pointLabelFontSize||12,pointRadius:ur.quadrantChart?.pointRadius||5,xAxisPosition:ur.quadrantChart?.xAxisPosition||"top",yAxisPosition:ur.quadrantChart?.yAxisPosition||"left",quadrantInternalBorderStrokeWidth:ur.quadrantChart?.quadrantInternalBorderStrokeWidth||1,quadrantExternalBorderStrokeWidth:ur.quadrantChart?.quadrantExternalBorderStrokeWidth||2}}getDefaultThemeConfig(){return{quadrant1Fill:ps.quadrant1Fill,quadrant2Fill:ps.quadrant2Fill,quadrant3Fill:ps.quadrant3Fill,quadrant4Fill:ps.quadrant4Fill,quadrant1TextFill:ps.quadrant1TextFill,quadrant2TextFill:ps.quadrant2TextFill,quadrant3TextFill:ps.quadrant3TextFill,quadrant4TextFill:ps.quadrant4TextFill,quadrantPointFill:ps.quadrantPointFill,quadrantPointTextFill:ps.quadrantPointTextFill,quadrantXAxisTextFill:ps.quadrantXAxisTextFill,quadrantYAxisTextFill:ps.quadrantYAxisTextFill,quadrantTitleFill:ps.quadrantTitleFill,quadrantInternalBorderStrokeFill:ps.quadrantInternalBorderStrokeFill,quadrantExternalBorderStrokeFill:ps.quadrantExternalBorderStrokeFill}}clear(){this.config=this.getDefaultConfig(),this.themeConfig=this.getDefaultThemeConfig(),this.data=this.getDefaultData(),this.classes=new Map,Y.info("clear called")}setData(e){this.data={...this.data,...e}}addPoints(e){this.data.points=[...e,...this.data.points]}addClass(e,r){this.classes.set(e,r)}setConfig(e){Y.trace("setConfig called with: ",e),this.config={...this.config,...e}}setThemeConfig(e){Y.trace("setThemeConfig called with: ",e),this.themeConfig={...this.themeConfig,...e}}calculateSpace(e,r,n,i){let a=this.config.xAxisLabelPadding*2+this.config.xAxisLabelFontSize,s={top:e==="top"&&r?a:0,bottom:e==="bottom"&&r?a:0},l=this.config.yAxisLabelPadding*2+this.config.yAxisLabelFontSize,u={left:this.config.yAxisPosition==="left"&&n?l:0,right:this.config.yAxisPosition==="right"&&n?l:0},h=this.config.titleFontSize+this.config.titlePadding*2,f={top:i?h:0},d=this.config.quadrantPadding+u.left,p=this.config.quadrantPadding+s.top+f.top,m=this.config.chartWidth-this.config.quadrantPadding*2-u.left-u.right,g=this.config.chartHeight-this.config.quadrantPadding*2-s.top-s.bottom-f.top,y=m/2,v=g/2;return{xAxisSpace:s,yAxisSpace:u,titleSpace:f,quadrantSpace:{quadrantLeft:d,quadrantTop:p,quadrantWidth:m,quadrantHalfWidth:y,quadrantHeight:g,quadrantHalfHeight:v}}}getAxisLabels(e,r,n,i){let{quadrantSpace:a,titleSpace:s}=i,{quadrantHalfHeight:l,quadrantHeight:u,quadrantLeft:h,quadrantHalfWidth:f,quadrantTop:d,quadrantWidth:p}=a,m=!!this.data.xAxisRightText,g=!!this.data.yAxisTopText,y=[];return this.data.xAxisLeftText&&r&&y.push({text:this.data.xAxisLeftText,fill:this.themeConfig.quadrantXAxisTextFill,x:h+(m?f/2:0),y:e==="top"?this.config.xAxisLabelPadding+s.top:this.config.xAxisLabelPadding+d+u+this.config.quadrantPadding,fontSize:this.config.xAxisLabelFontSize,verticalPos:m?"center":"left",horizontalPos:"top",rotation:0}),this.data.xAxisRightText&&r&&y.push({text:this.data.xAxisRightText,fill:this.themeConfig.quadrantXAxisTextFill,x:h+f+(m?f/2:0),y:e==="top"?this.config.xAxisLabelPadding+s.top:this.config.xAxisLabelPadding+d+u+this.config.quadrantPadding,fontSize:this.config.xAxisLabelFontSize,verticalPos:m?"center":"left",horizontalPos:"top",rotation:0}),this.data.yAxisBottomText&&n&&y.push({text:this.data.yAxisBottomText,fill:this.themeConfig.quadrantYAxisTextFill,x:this.config.yAxisPosition==="left"?this.config.yAxisLabelPadding:this.config.yAxisLabelPadding+h+p+this.config.quadrantPadding,y:d+u-(g?l/2:0),fontSize:this.config.yAxisLabelFontSize,verticalPos:g?"center":"left",horizontalPos:"top",rotation:-90}),this.data.yAxisTopText&&n&&y.push({text:this.data.yAxisTopText,fill:this.themeConfig.quadrantYAxisTextFill,x:this.config.yAxisPosition==="left"?this.config.yAxisLabelPadding:this.config.yAxisLabelPadding+h+p+this.config.quadrantPadding,y:d+l-(g?l/2:0),fontSize:this.config.yAxisLabelFontSize,verticalPos:g?"center":"left",horizontalPos:"top",rotation:-90}),y}getQuadrants(e){let{quadrantSpace:r}=e,{quadrantHalfHeight:n,quadrantLeft:i,quadrantHalfWidth:a,quadrantTop:s}=r,l=[{text:{text:this.data.quadrant1Text,fill:this.themeConfig.quadrant1TextFill,x:0,y:0,fontSize:this.config.quadrantLabelFontSize,verticalPos:"center",horizontalPos:"middle",rotation:0},x:i+a,y:s,width:a,height:n,fill:this.themeConfig.quadrant1Fill},{text:{text:this.data.quadrant2Text,fill:this.themeConfig.quadrant2TextFill,x:0,y:0,fontSize:this.config.quadrantLabelFontSize,verticalPos:"center",horizontalPos:"middle",rotation:0},x:i,y:s,width:a,height:n,fill:this.themeConfig.quadrant2Fill},{text:{text:this.data.quadrant3Text,fill:this.themeConfig.quadrant3TextFill,x:0,y:0,fontSize:this.config.quadrantLabelFontSize,verticalPos:"center",horizontalPos:"middle",rotation:0},x:i,y:s+n,width:a,height:n,fill:this.themeConfig.quadrant3Fill},{text:{text:this.data.quadrant4Text,fill:this.themeConfig.quadrant4TextFill,x:0,y:0,fontSize:this.config.quadrantLabelFontSize,verticalPos:"center",horizontalPos:"middle",rotation:0},x:i+a,y:s+n,width:a,height:n,fill:this.themeConfig.quadrant4Fill}];for(let u of l)u.text.x=u.x+u.width/2,this.data.points.length===0?(u.text.y=u.y+u.height/2,u.text.horizontalPos="middle"):(u.text.y=u.y+this.config.quadrantTextTopPadding,u.text.horizontalPos="top");return l}getQuadrantPoints(e){let{quadrantSpace:r}=e,{quadrantHeight:n,quadrantLeft:i,quadrantTop:a,quadrantWidth:s}=r,l=Cl().domain([0,1]).range([i,s+i]),u=Cl().domain([0,1]).range([n+a,a]);return this.data.points.map(f=>{let d=this.classes.get(f.className);return d&&(f={...d,...f}),{x:l(f.x),y:u(f.y),fill:f.color??this.themeConfig.quadrantPointFill,radius:f.radius??this.config.pointRadius,text:{text:f.text,fill:this.themeConfig.quadrantPointTextFill,x:l(f.x),y:u(f.y)+this.config.pointTextPadding,verticalPos:"center",horizontalPos:"top",fontSize:this.config.pointLabelFontSize,rotation:0},strokeColor:f.strokeColor??this.themeConfig.quadrantPointFill,strokeWidth:f.strokeWidth??"0px"}})}getBorders(e){let r=this.config.quadrantExternalBorderStrokeWidth/2,{quadrantSpace:n}=e,{quadrantHalfHeight:i,quadrantHeight:a,quadrantLeft:s,quadrantHalfWidth:l,quadrantTop:u,quadrantWidth:h}=n;return[{strokeFill:this.themeConfig.quadrantExternalBorderStrokeFill,strokeWidth:this.config.quadrantExternalBorderStrokeWidth,x1:s-r,y1:u,x2:s+h+r,y2:u},{strokeFill:this.themeConfig.quadrantExternalBorderStrokeFill,strokeWidth:this.config.quadrantExternalBorderStrokeWidth,x1:s+h,y1:u+r,x2:s+h,y2:u+a-r},{strokeFill:this.themeConfig.quadrantExternalBorderStrokeFill,strokeWidth:this.config.quadrantExternalBorderStrokeWidth,x1:s-r,y1:u+a,x2:s+h+r,y2:u+a},{strokeFill:this.themeConfig.quadrantExternalBorderStrokeFill,strokeWidth:this.config.quadrantExternalBorderStrokeWidth,x1:s,y1:u+r,x2:s,y2:u+a-r},{strokeFill:this.themeConfig.quadrantInternalBorderStrokeFill,strokeWidth:this.config.quadrantInternalBorderStrokeWidth,x1:s+l,y1:u+r,x2:s+l,y2:u+a-r},{strokeFill:this.themeConfig.quadrantInternalBorderStrokeFill,strokeWidth:this.config.quadrantInternalBorderStrokeWidth,x1:s+r,y1:u+i,x2:s+h-r,y2:u+i}]}getTitle(e){if(e)return{text:this.data.titleText,fill:this.themeConfig.quadrantTitleFill,fontSize:this.config.titleFontSize,horizontalPos:"top",verticalPos:"center",rotation:0,y:this.config.titlePadding,x:this.config.chartWidth/2}}build(){let e=this.config.showXAxis&&!!(this.data.xAxisLeftText||this.data.xAxisRightText),r=this.config.showYAxis&&!!(this.data.yAxisTopText||this.data.yAxisBottomText),n=this.config.showTitle&&!!this.data.titleText,i=this.data.points.length>0?"bottom":this.config.xAxisPosition,a=this.calculateSpace(i,e,r,n);return{points:this.getQuadrantPoints(a),quadrants:this.getQuadrants(a),axisLabels:this.getAxisLabels(i,e,r,a),borderLines:this.getBorders(a),title:this.getTitle(n)}}}});function sO(t){return!/^#?([\dA-Fa-f]{6}|[\dA-Fa-f]{3})$/.test(t)}function Fhe(t){return!/^\d+$/.test(t)}function zhe(t){return!/^\d+px$/.test(t)}var R0,Ghe=M(()=>{"use strict";R0=class extends Error{static{o(this,"InvalidStyleError")}constructor(e,r,n){super(`value for ${e} ${r} is invalid, please use a valid ${n}`),this.name="InvalidStyleError"}};o(sO,"validateHexCode");o(Fhe,"validateNumber");o(zhe,"validateSizeInPixels")});function th(t){return kr(t.trim(),lVe)}function cVe(t){Ea.setData({quadrant1Text:th(t.text)})}function uVe(t){Ea.setData({quadrant2Text:th(t.text)})}function hVe(t){Ea.setData({quadrant3Text:th(t.text)})}function fVe(t){Ea.setData({quadrant4Text:th(t.text)})}function dVe(t){Ea.setData({xAxisLeftText:th(t.text)})}function pVe(t){Ea.setData({xAxisRightText:th(t.text)})}function mVe(t){Ea.setData({yAxisTopText:th(t.text)})}function gVe(t){Ea.setData({yAxisBottomText:th(t.text)})}function oO(t){let e={};for(let r of t){let[n,i]=r.trim().split(/\s*:\s*/);if(n==="radius"){if(Fhe(i))throw new R0(n,i,"number");e.radius=parseInt(i)}else if(n==="color"){if(sO(i))throw new R0(n,i,"hex code");e.color=i}else if(n==="stroke-color"){if(sO(i))throw new R0(n,i,"hex code");e.strokeColor=i}else if(n==="stroke-width"){if(zhe(i))throw new R0(n,i,"number of pixels (eg. 10px)");e.strokeWidth=i}else throw new Error(`style named ${n} is not supported.`)}return e}function yVe(t,e,r,n,i){let a=oO(i);Ea.addPoints([{x:r,y:n,text:th(t.text),className:e,...a}])}function vVe(t,e){Ea.addClass(t,oO(e))}function xVe(t){Ea.setConfig({chartWidth:t})}function bVe(t){Ea.setConfig({chartHeight:t})}function wVe(){let t=pe(),{themeVariables:e,quadrantChart:r}=t;return r&&Ea.setConfig(r),Ea.setThemeConfig({quadrant1Fill:e.quadrant1Fill,quadrant2Fill:e.quadrant2Fill,quadrant3Fill:e.quadrant3Fill,quadrant4Fill:e.quadrant4Fill,quadrant1TextFill:e.quadrant1TextFill,quadrant2TextFill:e.quadrant2TextFill,quadrant3TextFill:e.quadrant3TextFill,quadrant4TextFill:e.quadrant4TextFill,quadrantPointFill:e.quadrantPointFill,quadrantPointTextFill:e.quadrantPointTextFill,quadrantXAxisTextFill:e.quadrantXAxisTextFill,quadrantYAxisTextFill:e.quadrantYAxisTextFill,quadrantExternalBorderStrokeFill:e.quadrantExternalBorderStrokeFill,quadrantInternalBorderStrokeFill:e.quadrantInternalBorderStrokeFill,quadrantTitleFill:e.quadrantTitleFill}),Ea.setData({titleText:Jr()}),Ea.build()}var lVe,Ea,TVe,$he,Vhe=M(()=>{"use strict";Vt();fr();Ai();Bhe();Ghe();lVe=pe();o(th,"textSanitizer");Ea=new EE;o(cVe,"setQuadrant1Text");o(uVe,"setQuadrant2Text");o(hVe,"setQuadrant3Text");o(fVe,"setQuadrant4Text");o(dVe,"setXAxisLeftText");o(pVe,"setXAxisRightText");o(mVe,"setYAxisTopText");o(gVe,"setYAxisBottomText");o(oO,"parseStyles");o(yVe,"addPoint");o(vVe,"addClass");o(xVe,"setWidth");o(bVe,"setHeight");o(wVe,"getQuadrantData");TVe=o(function(){Ea.clear(),Lr()},"clear"),$he={setWidth:xVe,setHeight:bVe,setQuadrant1Text:cVe,setQuadrant2Text:uVe,setQuadrant3Text:hVe,setQuadrant4Text:fVe,setXAxisLeftText:dVe,setXAxisRightText:pVe,setYAxisTopText:mVe,setYAxisBottomText:gVe,parseStyles:oO,addPoint:yVe,addClass:vVe,getQuadrantData:wVe,clear:TVe,setAccTitle:Mr,getAccTitle:Br,setDiagramTitle:cn,getDiagramTitle:Jr,getAccDescription:zr,setAccDescription:Fr}});var kVe,Uhe,Hhe=M(()=>{"use strict";pr();Vt();ut();ai();kVe=o((t,e,r,n)=>{function i(S){return S==="top"?"hanging":"middle"}o(i,"getDominantBaseLine");function a(S){return S==="left"?"start":"middle"}o(a,"getTextAnchor");function s(S){return`translate(${S.x}, ${S.y}) rotate(${S.rotation||0})`}o(s,"getTransformation");let l=pe();Y.debug(`Rendering quadrant chart +`+t);let u=l.securityLevel,h;u==="sandbox"&&(h=Ve("#i"+e));let d=(u==="sandbox"?Ve(h.nodes()[0].contentDocument.body):Ve("body")).select(`[id="${e}"]`),p=d.append("g").attr("class","main"),m=l.quadrantChart?.chartWidth??500,g=l.quadrantChart?.chartHeight??500;Zr(d,g,m,l.quadrantChart?.useMaxWidth??!0),d.attr("viewBox","0 0 "+m+" "+g),n.db.setHeight(g),n.db.setWidth(m);let y=n.db.getQuadrantData(),v=p.append("g").attr("class","quadrants"),x=p.append("g").attr("class","border"),b=p.append("g").attr("class","data-points"),w=p.append("g").attr("class","labels"),_=p.append("g").attr("class","title");y.title&&_.append("text").attr("x",0).attr("y",0).attr("fill",y.title.fill).attr("font-size",y.title.fontSize).attr("dominant-baseline",i(y.title.horizontalPos)).attr("text-anchor",a(y.title.verticalPos)).attr("transform",s(y.title)).text(y.title.text),y.borderLines&&x.selectAll("line").data(y.borderLines).enter().append("line").attr("x1",S=>S.x1).attr("y1",S=>S.y1).attr("x2",S=>S.x2).attr("y2",S=>S.y2).style("stroke",S=>S.strokeFill).style("stroke-width",S=>S.strokeWidth);let T=v.selectAll("g.quadrant").data(y.quadrants).enter().append("g").attr("class","quadrant");T.append("rect").attr("x",S=>S.x).attr("y",S=>S.y).attr("width",S=>S.width).attr("height",S=>S.height).attr("fill",S=>S.fill),T.append("text").attr("x",0).attr("y",0).attr("fill",S=>S.text.fill).attr("font-size",S=>S.text.fontSize).attr("dominant-baseline",S=>i(S.text.horizontalPos)).attr("text-anchor",S=>a(S.text.verticalPos)).attr("transform",S=>s(S.text)).text(S=>S.text.text),w.selectAll("g.label").data(y.axisLabels).enter().append("g").attr("class","label").append("text").attr("x",0).attr("y",0).text(S=>S.text).attr("fill",S=>S.fill).attr("font-size",S=>S.fontSize).attr("dominant-baseline",S=>i(S.horizontalPos)).attr("text-anchor",S=>a(S.verticalPos)).attr("transform",S=>s(S));let L=b.selectAll("g.data-point").data(y.points).enter().append("g").attr("class","data-point");L.append("circle").attr("cx",S=>S.x).attr("cy",S=>S.y).attr("r",S=>S.radius).attr("fill",S=>S.fill).attr("stroke",S=>S.strokeColor).attr("stroke-width",S=>S.strokeWidth),L.append("text").attr("x",0).attr("y",0).text(S=>S.text.text).attr("fill",S=>S.text.fill).attr("font-size",S=>S.text.fontSize).attr("dominant-baseline",S=>i(S.text.horizontalPos)).attr("text-anchor",S=>a(S.text.verticalPos)).attr("transform",S=>s(S.text))},"draw"),Uhe={draw:kVe}});var Whe={};vr(Whe,{diagram:()=>EVe});var EVe,Yhe=M(()=>{"use strict";Phe();Vhe();Hhe();EVe={parser:Ohe,db:$he,renderer:Uhe,styles:o(()=>"","styles")}});var lO,jhe,Khe=M(()=>{"use strict";lO=function(){var t=o(function(O,N,P,F){for(P=P||{},F=O.length;F--;P[O[F]]=N);return P},"o"),e=[1,10,12,14,16,18,19,21,23],r=[2,6],n=[1,3],i=[1,5],a=[1,6],s=[1,7],l=[1,5,10,12,14,16,18,19,21,23,34,35,36],u=[1,25],h=[1,26],f=[1,28],d=[1,29],p=[1,30],m=[1,31],g=[1,32],y=[1,33],v=[1,34],x=[1,35],b=[1,36],w=[1,37],_=[1,43],T=[1,42],E=[1,47],L=[1,50],S=[1,10,12,14,16,18,19,21,23,34,35,36],A=[1,10,12,14,16,18,19,21,23,24,26,27,28,34,35,36],I=[1,10,12,14,16,18,19,21,23,24,26,27,28,34,35,36,41,42,43,44,45,46,47,48,49,50],D=[1,64],k={trace:o(function(){},"trace"),yy:{},symbols_:{error:2,start:3,eol:4,XYCHART:5,chartConfig:6,document:7,CHART_ORIENTATION:8,statement:9,title:10,text:11,X_AXIS:12,parseXAxis:13,Y_AXIS:14,parseYAxis:15,LINE:16,plotData:17,BAR:18,acc_title:19,acc_title_value:20,acc_descr:21,acc_descr_value:22,acc_descr_multiline_value:23,SQUARE_BRACES_START:24,commaSeparatedNumbers:25,SQUARE_BRACES_END:26,NUMBER_WITH_DECIMAL:27,COMMA:28,xAxisData:29,bandData:30,ARROW_DELIMITER:31,commaSeparatedTexts:32,yAxisData:33,NEWLINE:34,SEMI:35,EOF:36,alphaNum:37,STR:38,MD_STR:39,alphaNumToken:40,AMP:41,NUM:42,ALPHA:43,PLUS:44,EQUALS:45,MULT:46,DOT:47,BRKT:48,MINUS:49,UNDERSCORE:50,$accept:0,$end:1},terminals_:{2:"error",5:"XYCHART",8:"CHART_ORIENTATION",10:"title",12:"X_AXIS",14:"Y_AXIS",16:"LINE",18:"BAR",19:"acc_title",20:"acc_title_value",21:"acc_descr",22:"acc_descr_value",23:"acc_descr_multiline_value",24:"SQUARE_BRACES_START",26:"SQUARE_BRACES_END",27:"NUMBER_WITH_DECIMAL",28:"COMMA",31:"ARROW_DELIMITER",34:"NEWLINE",35:"SEMI",36:"EOF",38:"STR",39:"MD_STR",41:"AMP",42:"NUM",43:"ALPHA",44:"PLUS",45:"EQUALS",46:"MULT",47:"DOT",48:"BRKT",49:"MINUS",50:"UNDERSCORE"},productions_:[0,[3,2],[3,3],[3,2],[3,1],[6,1],[7,0],[7,2],[9,2],[9,2],[9,2],[9,2],[9,2],[9,3],[9,2],[9,3],[9,2],[9,2],[9,1],[17,3],[25,3],[25,1],[13,1],[13,2],[13,1],[29,1],[29,3],[30,3],[32,3],[32,1],[15,1],[15,2],[15,1],[33,3],[4,1],[4,1],[4,1],[11,1],[11,1],[11,1],[37,1],[37,2],[40,1],[40,1],[40,1],[40,1],[40,1],[40,1],[40,1],[40,1],[40,1],[40,1]],performAction:o(function(N,P,F,B,G,z,W){var Z=z.length-1;switch(G){case 5:B.setOrientation(z[Z]);break;case 9:B.setDiagramTitle(z[Z].text.trim());break;case 12:B.setLineData({text:"",type:"text"},z[Z]);break;case 13:B.setLineData(z[Z-1],z[Z]);break;case 14:B.setBarData({text:"",type:"text"},z[Z]);break;case 15:B.setBarData(z[Z-1],z[Z]);break;case 16:this.$=z[Z].trim(),B.setAccTitle(this.$);break;case 17:case 18:this.$=z[Z].trim(),B.setAccDescription(this.$);break;case 19:this.$=z[Z-1];break;case 20:this.$=[Number(z[Z-2]),...z[Z]];break;case 21:this.$=[Number(z[Z])];break;case 22:B.setXAxisTitle(z[Z]);break;case 23:B.setXAxisTitle(z[Z-1]);break;case 24:B.setXAxisTitle({type:"text",text:""});break;case 25:B.setXAxisBand(z[Z]);break;case 26:B.setXAxisRangeData(Number(z[Z-2]),Number(z[Z]));break;case 27:this.$=z[Z-1];break;case 28:this.$=[z[Z-2],...z[Z]];break;case 29:this.$=[z[Z]];break;case 30:B.setYAxisTitle(z[Z]);break;case 31:B.setYAxisTitle(z[Z-1]);break;case 32:B.setYAxisTitle({type:"text",text:""});break;case 33:B.setYAxisRangeData(Number(z[Z-2]),Number(z[Z]));break;case 37:this.$={text:z[Z],type:"text"};break;case 38:this.$={text:z[Z],type:"text"};break;case 39:this.$={text:z[Z],type:"markdown"};break;case 40:this.$=z[Z];break;case 41:this.$=z[Z-1]+""+z[Z];break}},"anonymous"),table:[t(e,r,{3:1,4:2,7:4,5:n,34:i,35:a,36:s}),{1:[3]},t(e,r,{4:2,7:4,3:8,5:n,34:i,35:a,36:s}),t(e,r,{4:2,7:4,6:9,3:10,5:n,8:[1,11],34:i,35:a,36:s}),{1:[2,4],9:12,10:[1,13],12:[1,14],14:[1,15],16:[1,16],18:[1,17],19:[1,18],21:[1,19],23:[1,20]},t(l,[2,34]),t(l,[2,35]),t(l,[2,36]),{1:[2,1]},t(e,r,{4:2,7:4,3:21,5:n,34:i,35:a,36:s}),{1:[2,3]},t(l,[2,5]),t(e,[2,7],{4:22,34:i,35:a,36:s}),{11:23,37:24,38:u,39:h,40:27,41:f,42:d,43:p,44:m,45:g,46:y,47:v,48:x,49:b,50:w},{11:39,13:38,24:_,27:T,29:40,30:41,37:24,38:u,39:h,40:27,41:f,42:d,43:p,44:m,45:g,46:y,47:v,48:x,49:b,50:w},{11:45,15:44,27:E,33:46,37:24,38:u,39:h,40:27,41:f,42:d,43:p,44:m,45:g,46:y,47:v,48:x,49:b,50:w},{11:49,17:48,24:L,37:24,38:u,39:h,40:27,41:f,42:d,43:p,44:m,45:g,46:y,47:v,48:x,49:b,50:w},{11:52,17:51,24:L,37:24,38:u,39:h,40:27,41:f,42:d,43:p,44:m,45:g,46:y,47:v,48:x,49:b,50:w},{20:[1,53]},{22:[1,54]},t(S,[2,18]),{1:[2,2]},t(S,[2,8]),t(S,[2,9]),t(A,[2,37],{40:55,41:f,42:d,43:p,44:m,45:g,46:y,47:v,48:x,49:b,50:w}),t(A,[2,38]),t(A,[2,39]),t(I,[2,40]),t(I,[2,42]),t(I,[2,43]),t(I,[2,44]),t(I,[2,45]),t(I,[2,46]),t(I,[2,47]),t(I,[2,48]),t(I,[2,49]),t(I,[2,50]),t(I,[2,51]),t(S,[2,10]),t(S,[2,22],{30:41,29:56,24:_,27:T}),t(S,[2,24]),t(S,[2,25]),{31:[1,57]},{11:59,32:58,37:24,38:u,39:h,40:27,41:f,42:d,43:p,44:m,45:g,46:y,47:v,48:x,49:b,50:w},t(S,[2,11]),t(S,[2,30],{33:60,27:E}),t(S,[2,32]),{31:[1,61]},t(S,[2,12]),{17:62,24:L},{25:63,27:D},t(S,[2,14]),{17:65,24:L},t(S,[2,16]),t(S,[2,17]),t(I,[2,41]),t(S,[2,23]),{27:[1,66]},{26:[1,67]},{26:[2,29],28:[1,68]},t(S,[2,31]),{27:[1,69]},t(S,[2,13]),{26:[1,70]},{26:[2,21],28:[1,71]},t(S,[2,15]),t(S,[2,26]),t(S,[2,27]),{11:59,32:72,37:24,38:u,39:h,40:27,41:f,42:d,43:p,44:m,45:g,46:y,47:v,48:x,49:b,50:w},t(S,[2,33]),t(S,[2,19]),{25:73,27:D},{26:[2,28]},{26:[2,20]}],defaultActions:{8:[2,1],10:[2,3],21:[2,2],72:[2,28],73:[2,20]},parseError:o(function(N,P){if(P.recoverable)this.trace(N);else{var F=new Error(N);throw F.hash=P,F}},"parseError"),parse:o(function(N){var P=this,F=[0],B=[],G=[null],z=[],W=this.table,Z="",j=0,oe=0,K=0,ee=2,J=1,H=z.slice.call(arguments,1),q=Object.create(this.lexer),Q={yy:{}};for(var ae in this.yy)Object.prototype.hasOwnProperty.call(this.yy,ae)&&(Q.yy[ae]=this.yy[ae]);q.setInput(N,Q.yy),Q.yy.lexer=q,Q.yy.parser=this,typeof q.yylloc>"u"&&(q.yylloc={});var ue=q.yylloc;z.push(ue);var ce=q.options&&q.options.ranges;typeof Q.yy.parseError=="function"?this.parseError=Q.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function te(ne){F.length=F.length-2*ne,G.length=G.length-ne,z.length=z.length-ne}o(te,"popStack");function Ne(){var ne;return ne=B.pop()||q.lex()||J,typeof ne!="number"&&(ne instanceof Array&&(B=ne,ne=B.pop()),ne=P.symbols_[ne]||ne),ne}o(Ne,"lex");for(var se,ke,Re,Ce,Pe,Ie,$e={},ye,X,fe,he;;){if(Re=F[F.length-1],this.defaultActions[Re]?Ce=this.defaultActions[Re]:((se===null||typeof se>"u")&&(se=Ne()),Ce=W[Re]&&W[Re][se]),typeof Ce>"u"||!Ce.length||!Ce[0]){var ge="";he=[];for(ye in W[Re])this.terminals_[ye]&&ye>ee&&he.push("'"+this.terminals_[ye]+"'");q.showPosition?ge="Parse error on line "+(j+1)+`: +`+q.showPosition()+` +Expecting `+he.join(", ")+", got '"+(this.terminals_[se]||se)+"'":ge="Parse error on line "+(j+1)+": Unexpected "+(se==J?"end of input":"'"+(this.terminals_[se]||se)+"'"),this.parseError(ge,{text:q.match,token:this.terminals_[se]||se,line:q.yylineno,loc:ue,expected:he})}if(Ce[0]instanceof Array&&Ce.length>1)throw new Error("Parse Error: multiple actions possible at state: "+Re+", token: "+se);switch(Ce[0]){case 1:F.push(se),G.push(q.yytext),z.push(q.yylloc),F.push(Ce[1]),se=null,ke?(se=ke,ke=null):(oe=q.yyleng,Z=q.yytext,j=q.yylineno,ue=q.yylloc,K>0&&K--);break;case 2:if(X=this.productions_[Ce[1]][1],$e.$=G[G.length-X],$e._$={first_line:z[z.length-(X||1)].first_line,last_line:z[z.length-1].last_line,first_column:z[z.length-(X||1)].first_column,last_column:z[z.length-1].last_column},ce&&($e._$.range=[z[z.length-(X||1)].range[0],z[z.length-1].range[1]]),Ie=this.performAction.apply($e,[Z,oe,j,Q.yy,Ce[1],G,z].concat(H)),typeof Ie<"u")return Ie;X&&(F=F.slice(0,-1*X*2),G=G.slice(0,-1*X),z=z.slice(0,-1*X)),F.push(this.productions_[Ce[1]][0]),G.push($e.$),z.push($e._$),fe=W[F[F.length-2]][F[F.length-1]],F.push(fe);break;case 3:return!0}}return!0},"parse")},R=function(){var O={EOF:1,parseError:o(function(P,F){if(this.yy.parser)this.yy.parser.parseError(P,F);else throw new Error(P)},"parseError"),setInput:o(function(N,P){return this.yy=P||this.yy||{},this._input=N,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},"setInput"),input:o(function(){var N=this._input[0];this.yytext+=N,this.yyleng++,this.offset++,this.match+=N,this.matched+=N;var P=N.match(/(?:\r\n?|\n).*/g);return P?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),N},"input"),unput:o(function(N){var P=N.length,F=N.split(/(?:\r\n?|\n)/g);this._input=N+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-P),this.offset-=P;var B=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),F.length-1&&(this.yylineno-=F.length-1);var G=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:F?(F.length===B.length?this.yylloc.first_column:0)+B[B.length-F.length].length-F[0].length:this.yylloc.first_column-P},this.options.ranges&&(this.yylloc.range=[G[0],G[0]+this.yyleng-P]),this.yyleng=this.yytext.length,this},"unput"),more:o(function(){return this._more=!0,this},"more"),reject:o(function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true). +`+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},"reject"),less:o(function(N){this.unput(this.match.slice(N))},"less"),pastInput:o(function(){var N=this.matched.substr(0,this.matched.length-this.match.length);return(N.length>20?"...":"")+N.substr(-20).replace(/\n/g,"")},"pastInput"),upcomingInput:o(function(){var N=this.match;return N.length<20&&(N+=this._input.substr(0,20-N.length)),(N.substr(0,20)+(N.length>20?"...":"")).replace(/\n/g,"")},"upcomingInput"),showPosition:o(function(){var N=this.pastInput(),P=new Array(N.length+1).join("-");return N+this.upcomingInput()+` +`+P+"^"},"showPosition"),test_match:o(function(N,P){var F,B,G;if(this.options.backtrack_lexer&&(G={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(G.yylloc.range=this.yylloc.range.slice(0))),B=N[0].match(/(?:\r\n?|\n).*/g),B&&(this.yylineno+=B.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:B?B[B.length-1].length-B[B.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+N[0].length},this.yytext+=N[0],this.match+=N[0],this.matches=N,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(N[0].length),this.matched+=N[0],F=this.performAction.call(this,this.yy,this,P,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),F)return F;if(this._backtrack){for(var z in G)this[z]=G[z];return!1}return!1},"test_match"),next:o(function(){if(this.done)return this.EOF;this._input||(this.done=!0);var N,P,F,B;this._more||(this.yytext="",this.match="");for(var G=this._currentRules(),z=0;zP[0].length)){if(P=F,B=z,this.options.backtrack_lexer){if(N=this.test_match(F,G[z]),N!==!1)return N;if(this._backtrack){P=!1;continue}else return!1}else if(!this.options.flex)break}return P?(N=this.test_match(P,G[B]),N!==!1?N:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text. +`+this.showPosition(),{text:"",token:null,line:this.yylineno})},"next"),lex:o(function(){var P=this.next();return P||this.lex()},"lex"),begin:o(function(P){this.conditionStack.push(P)},"begin"),popState:o(function(){var P=this.conditionStack.length-1;return P>0?this.conditionStack.pop():this.conditionStack[0]},"popState"),_currentRules:o(function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},"_currentRules"),topState:o(function(P){return P=this.conditionStack.length-1-Math.abs(P||0),P>=0?this.conditionStack[P]:"INITIAL"},"topState"),pushState:o(function(P){this.begin(P)},"pushState"),stateStackSize:o(function(){return this.conditionStack.length},"stateStackSize"),options:{"case-insensitive":!0},performAction:o(function(P,F,B,G){var z=G;switch(B){case 0:break;case 1:break;case 2:return this.popState(),34;break;case 3:return this.popState(),34;break;case 4:return 34;case 5:break;case 6:return 10;case 7:return this.pushState("acc_title"),19;break;case 8:return this.popState(),"acc_title_value";break;case 9:return this.pushState("acc_descr"),21;break;case 10:return this.popState(),"acc_descr_value";break;case 11:this.pushState("acc_descr_multiline");break;case 12:this.popState();break;case 13:return"acc_descr_multiline_value";case 14:return 5;case 15:return 8;case 16:return this.pushState("axis_data"),"X_AXIS";break;case 17:return this.pushState("axis_data"),"Y_AXIS";break;case 18:return this.pushState("axis_band_data"),24;break;case 19:return 31;case 20:return this.pushState("data"),16;break;case 21:return this.pushState("data"),18;break;case 22:return this.pushState("data_inner"),24;break;case 23:return 27;case 24:return this.popState(),26;break;case 25:this.popState();break;case 26:this.pushState("string");break;case 27:this.popState();break;case 28:return"STR";case 29:return 24;case 30:return 26;case 31:return 43;case 32:return"COLON";case 33:return 44;case 34:return 28;case 35:return 45;case 36:return 46;case 37:return 48;case 38:return 50;case 39:return 47;case 40:return 41;case 41:return 49;case 42:return 42;case 43:break;case 44:return 35;case 45:return 36}},"anonymous"),rules:[/^(?:%%(?!\{)[^\n]*)/i,/^(?:[^\}]%%[^\n]*)/i,/^(?:(\r?\n))/i,/^(?:(\r?\n))/i,/^(?:[\n\r]+)/i,/^(?:%%[^\n]*)/i,/^(?:title\b)/i,/^(?:accTitle\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*\{\s*)/i,/^(?:\{)/i,/^(?:[^\}]*)/i,/^(?:xychart-beta\b)/i,/^(?:(?:vertical|horizontal))/i,/^(?:x-axis\b)/i,/^(?:y-axis\b)/i,/^(?:\[)/i,/^(?:-->)/i,/^(?:line\b)/i,/^(?:bar\b)/i,/^(?:\[)/i,/^(?:[+-]?(?:\d+(?:\.\d+)?|\.\d+))/i,/^(?:\])/i,/^(?:(?:`\) \{ this\.pushState\(md_string\); \}\n\(\?:\(\?!`"\)\.\)\+ \{ return MD_STR; \}\n\(\?:`))/i,/^(?:["])/i,/^(?:["])/i,/^(?:[^"]*)/i,/^(?:\[)/i,/^(?:\])/i,/^(?:[A-Za-z]+)/i,/^(?::)/i,/^(?:\+)/i,/^(?:,)/i,/^(?:=)/i,/^(?:\*)/i,/^(?:#)/i,/^(?:[\_])/i,/^(?:\.)/i,/^(?:&)/i,/^(?:-)/i,/^(?:[0-9]+)/i,/^(?:\s+)/i,/^(?:;)/i,/^(?:$)/i],conditions:{data_inner:{rules:[0,1,4,5,6,7,9,11,14,15,16,17,20,21,23,24,25,26,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45],inclusive:!0},data:{rules:[0,1,3,4,5,6,7,9,11,14,15,16,17,20,21,22,25,26,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45],inclusive:!0},axis_band_data:{rules:[0,1,4,5,6,7,9,11,14,15,16,17,20,21,24,25,26,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45],inclusive:!0},axis_data:{rules:[0,1,2,4,5,6,7,9,11,14,15,16,17,18,19,20,21,23,25,26,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45],inclusive:!0},acc_descr_multiline:{rules:[12,13],inclusive:!1},acc_descr:{rules:[10],inclusive:!1},acc_title:{rules:[8],inclusive:!1},title:{rules:[],inclusive:!1},md_string:{rules:[],inclusive:!1},string:{rules:[27,28],inclusive:!1},INITIAL:{rules:[0,1,4,5,6,7,9,11,14,15,16,17,20,21,25,26,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45],inclusive:!0}}};return O}();k.lexer=R;function C(){this.yy={}}return o(C,"Parser"),C.prototype=k,k.Parser=C,new C}();lO.parser=lO;jhe=lO});function cO(t){return t.type==="bar"}function SE(t){return t.type==="band"}function qg(t){return t.type==="linear"}var CE=M(()=>{"use strict";o(cO,"isBarPlot");o(SE,"isBandAxisData");o(qg,"isLinearAxisData")});var Xg,uO=M(()=>{"use strict";Pl();Xg=class{constructor(e){this.parentGroup=e}static{o(this,"TextDimensionCalculatorWithFont")}getMaxDimension(e,r){if(!this.parentGroup)return{width:e.reduce((a,s)=>Math.max(s.length,a),0)*r,height:r};let n={width:0,height:0},i=this.parentGroup.append("g").attr("visibility","hidden").attr("font-size",r);for(let a of e){let s=dj(i,1,a),l=s?s.width:a.length*r,u=s?s.height:r;n.width=Math.max(n.width,l),n.height=Math.max(n.height,u)}return i.remove(),n}}});var jg,hO=M(()=>{"use strict";jg=class{constructor(e,r,n,i){this.axisConfig=e;this.title=r;this.textDimensionCalculator=n;this.axisThemeConfig=i;this.boundingRect={x:0,y:0,width:0,height:0};this.axisPosition="left";this.showTitle=!1;this.showLabel=!1;this.showTick=!1;this.showAxisLine=!1;this.outerPadding=0;this.titleTextHeight=0;this.labelTextHeight=0;this.range=[0,10],this.boundingRect={x:0,y:0,width:0,height:0},this.axisPosition="left"}static{o(this,"BaseAxis")}setRange(e){this.range=e,this.axisPosition==="left"||this.axisPosition==="right"?this.boundingRect.height=e[1]-e[0]:this.boundingRect.width=e[1]-e[0],this.recalculateScale()}getRange(){return[this.range[0]+this.outerPadding,this.range[1]-this.outerPadding]}setAxisPosition(e){this.axisPosition=e,this.setRange(this.range)}getTickDistance(){let e=this.getRange();return Math.abs(e[0]-e[1])/this.getTickValues().length}getAxisOuterPadding(){return this.outerPadding}getLabelDimension(){return this.textDimensionCalculator.getMaxDimension(this.getTickValues().map(e=>e.toString()),this.axisConfig.labelFontSize)}recalculateOuterPaddingToDrawBar(){.7*this.getTickDistance()>this.outerPadding*2&&(this.outerPadding=Math.floor(.7*this.getTickDistance()/2)),this.recalculateScale()}calculateSpaceIfDrawnHorizontally(e){let r=e.height;if(this.axisConfig.showAxisLine&&r>this.axisConfig.axisLineWidth&&(r-=this.axisConfig.axisLineWidth,this.showAxisLine=!0),this.axisConfig.showLabel){let n=this.getLabelDimension(),i=.2*e.width;this.outerPadding=Math.min(n.width/2,i);let a=n.height+this.axisConfig.labelPadding*2;this.labelTextHeight=n.height,a<=r&&(r-=a,this.showLabel=!0)}if(this.axisConfig.showTick&&r>=this.axisConfig.tickLength&&(this.showTick=!0,r-=this.axisConfig.tickLength),this.axisConfig.showTitle&&this.title){let n=this.textDimensionCalculator.getMaxDimension([this.title],this.axisConfig.titleFontSize),i=n.height+this.axisConfig.titlePadding*2;this.titleTextHeight=n.height,i<=r&&(r-=i,this.showTitle=!0)}this.boundingRect.width=e.width,this.boundingRect.height=e.height-r}calculateSpaceIfDrawnVertical(e){let r=e.width;if(this.axisConfig.showAxisLine&&r>this.axisConfig.axisLineWidth&&(r-=this.axisConfig.axisLineWidth,this.showAxisLine=!0),this.axisConfig.showLabel){let n=this.getLabelDimension(),i=.2*e.height;this.outerPadding=Math.min(n.height/2,i);let a=n.width+this.axisConfig.labelPadding*2;a<=r&&(r-=a,this.showLabel=!0)}if(this.axisConfig.showTick&&r>=this.axisConfig.tickLength&&(this.showTick=!0,r-=this.axisConfig.tickLength),this.axisConfig.showTitle&&this.title){let n=this.textDimensionCalculator.getMaxDimension([this.title],this.axisConfig.titleFontSize),i=n.height+this.axisConfig.titlePadding*2;this.titleTextHeight=n.height,i<=r&&(r-=i,this.showTitle=!0)}this.boundingRect.width=e.width-r,this.boundingRect.height=e.height}calculateSpace(e){return this.axisPosition==="left"||this.axisPosition==="right"?this.calculateSpaceIfDrawnVertical(e):this.calculateSpaceIfDrawnHorizontally(e),this.recalculateScale(),{width:this.boundingRect.width,height:this.boundingRect.height}}setBoundingBoxXY(e){this.boundingRect.x=e.x,this.boundingRect.y=e.y}getDrawableElementsForLeftAxis(){let e=[];if(this.showAxisLine){let r=this.boundingRect.x+this.boundingRect.width-this.axisConfig.axisLineWidth/2;e.push({type:"path",groupTexts:["left-axis","axisl-line"],data:[{path:`M ${r},${this.boundingRect.y} L ${r},${this.boundingRect.y+this.boundingRect.height} `,strokeFill:this.axisThemeConfig.axisLineColor,strokeWidth:this.axisConfig.axisLineWidth}]})}if(this.showLabel&&e.push({type:"text",groupTexts:["left-axis","label"],data:this.getTickValues().map(r=>({text:r.toString(),x:this.boundingRect.x+this.boundingRect.width-(this.showLabel?this.axisConfig.labelPadding:0)-(this.showTick?this.axisConfig.tickLength:0)-(this.showAxisLine?this.axisConfig.axisLineWidth:0),y:this.getScaleValue(r),fill:this.axisThemeConfig.labelColor,fontSize:this.axisConfig.labelFontSize,rotation:0,verticalPos:"middle",horizontalPos:"right"}))}),this.showTick){let r=this.boundingRect.x+this.boundingRect.width-(this.showAxisLine?this.axisConfig.axisLineWidth:0);e.push({type:"path",groupTexts:["left-axis","ticks"],data:this.getTickValues().map(n=>({path:`M ${r},${this.getScaleValue(n)} L ${r-this.axisConfig.tickLength},${this.getScaleValue(n)}`,strokeFill:this.axisThemeConfig.tickColor,strokeWidth:this.axisConfig.tickWidth}))})}return this.showTitle&&e.push({type:"text",groupTexts:["left-axis","title"],data:[{text:this.title,x:this.boundingRect.x+this.axisConfig.titlePadding,y:this.boundingRect.y+this.boundingRect.height/2,fill:this.axisThemeConfig.titleColor,fontSize:this.axisConfig.titleFontSize,rotation:270,verticalPos:"top",horizontalPos:"center"}]}),e}getDrawableElementsForBottomAxis(){let e=[];if(this.showAxisLine){let r=this.boundingRect.y+this.axisConfig.axisLineWidth/2;e.push({type:"path",groupTexts:["bottom-axis","axis-line"],data:[{path:`M ${this.boundingRect.x},${r} L ${this.boundingRect.x+this.boundingRect.width},${r}`,strokeFill:this.axisThemeConfig.axisLineColor,strokeWidth:this.axisConfig.axisLineWidth}]})}if(this.showLabel&&e.push({type:"text",groupTexts:["bottom-axis","label"],data:this.getTickValues().map(r=>({text:r.toString(),x:this.getScaleValue(r),y:this.boundingRect.y+this.axisConfig.labelPadding+(this.showTick?this.axisConfig.tickLength:0)+(this.showAxisLine?this.axisConfig.axisLineWidth:0),fill:this.axisThemeConfig.labelColor,fontSize:this.axisConfig.labelFontSize,rotation:0,verticalPos:"top",horizontalPos:"center"}))}),this.showTick){let r=this.boundingRect.y+(this.showAxisLine?this.axisConfig.axisLineWidth:0);e.push({type:"path",groupTexts:["bottom-axis","ticks"],data:this.getTickValues().map(n=>({path:`M ${this.getScaleValue(n)},${r} L ${this.getScaleValue(n)},${r+this.axisConfig.tickLength}`,strokeFill:this.axisThemeConfig.tickColor,strokeWidth:this.axisConfig.tickWidth}))})}return this.showTitle&&e.push({type:"text",groupTexts:["bottom-axis","title"],data:[{text:this.title,x:this.range[0]+(this.range[1]-this.range[0])/2,y:this.boundingRect.y+this.boundingRect.height-this.axisConfig.titlePadding-this.titleTextHeight,fill:this.axisThemeConfig.titleColor,fontSize:this.axisConfig.titleFontSize,rotation:0,verticalPos:"top",horizontalPos:"center"}]}),e}getDrawableElementsForTopAxis(){let e=[];if(this.showAxisLine){let r=this.boundingRect.y+this.boundingRect.height-this.axisConfig.axisLineWidth/2;e.push({type:"path",groupTexts:["top-axis","axis-line"],data:[{path:`M ${this.boundingRect.x},${r} L ${this.boundingRect.x+this.boundingRect.width},${r}`,strokeFill:this.axisThemeConfig.axisLineColor,strokeWidth:this.axisConfig.axisLineWidth}]})}if(this.showLabel&&e.push({type:"text",groupTexts:["top-axis","label"],data:this.getTickValues().map(r=>({text:r.toString(),x:this.getScaleValue(r),y:this.boundingRect.y+(this.showTitle?this.titleTextHeight+this.axisConfig.titlePadding*2:0)+this.axisConfig.labelPadding,fill:this.axisThemeConfig.labelColor,fontSize:this.axisConfig.labelFontSize,rotation:0,verticalPos:"top",horizontalPos:"center"}))}),this.showTick){let r=this.boundingRect.y;e.push({type:"path",groupTexts:["top-axis","ticks"],data:this.getTickValues().map(n=>({path:`M ${this.getScaleValue(n)},${r+this.boundingRect.height-(this.showAxisLine?this.axisConfig.axisLineWidth:0)} L ${this.getScaleValue(n)},${r+this.boundingRect.height-this.axisConfig.tickLength-(this.showAxisLine?this.axisConfig.axisLineWidth:0)}`,strokeFill:this.axisThemeConfig.tickColor,strokeWidth:this.axisConfig.tickWidth}))})}return this.showTitle&&e.push({type:"text",groupTexts:["top-axis","title"],data:[{text:this.title,x:this.boundingRect.x+this.boundingRect.width/2,y:this.boundingRect.y+this.axisConfig.titlePadding,fill:this.axisThemeConfig.titleColor,fontSize:this.axisConfig.titleFontSize,rotation:0,verticalPos:"top",horizontalPos:"center"}]}),e}getDrawableElements(){if(this.axisPosition==="left")return this.getDrawableElementsForLeftAxis();if(this.axisPosition==="right")throw Error("Drawing of right axis is not implemented");return this.axisPosition==="bottom"?this.getDrawableElementsForBottomAxis():this.axisPosition==="top"?this.getDrawableElementsForTopAxis():[]}}});var AE,Qhe=M(()=>{"use strict";pr();ut();hO();AE=class extends jg{static{o(this,"BandAxis")}constructor(e,r,n,i,a){super(e,i,a,r),this.categories=n,this.scale=Vp().domain(this.categories).range(this.getRange())}setRange(e){super.setRange(e)}recalculateScale(){this.scale=Vp().domain(this.categories).range(this.getRange()).paddingInner(1).paddingOuter(0).align(.5),Y.trace("BandAxis axis final categories, range: ",this.categories,this.getRange())}getTickValues(){return this.categories}getScaleValue(e){return this.scale(e)??this.getRange()[0]}}});var _E,Zhe=M(()=>{"use strict";pr();hO();_E=class extends jg{static{o(this,"LinearAxis")}constructor(e,r,n,i,a){super(e,i,a,r),this.domain=n,this.scale=Cl().domain(this.domain).range(this.getRange())}getTickValues(){return this.scale.ticks()}recalculateScale(){let e=[...this.domain];this.axisPosition==="left"&&e.reverse(),this.scale=Cl().domain(e).range(this.getRange())}getScaleValue(e){return this.scale(e)}}});function fO(t,e,r,n){let i=new Xg(n);return SE(t)?new AE(e,r,t.categories,t.title,i):new _E(e,r,[t.min,t.max],t.title,i)}var Jhe=M(()=>{"use strict";CE();uO();Qhe();Zhe();o(fO,"getAxis")});function efe(t,e,r,n){let i=new Xg(n);return new dO(i,t,e,r)}var dO,tfe=M(()=>{"use strict";uO();dO=class{constructor(e,r,n,i){this.textDimensionCalculator=e;this.chartConfig=r;this.chartData=n;this.chartThemeConfig=i;this.boundingRect={x:0,y:0,width:0,height:0},this.showChartTitle=!1}static{o(this,"ChartTitle")}setBoundingBoxXY(e){this.boundingRect.x=e.x,this.boundingRect.y=e.y}calculateSpace(e){let r=this.textDimensionCalculator.getMaxDimension([this.chartData.title],this.chartConfig.titleFontSize),n=Math.max(r.width,e.width),i=r.height+2*this.chartConfig.titlePadding;return r.width<=n&&r.height<=i&&this.chartConfig.showTitle&&this.chartData.title&&(this.boundingRect.width=n,this.boundingRect.height=i,this.showChartTitle=!0),{width:this.boundingRect.width,height:this.boundingRect.height}}getDrawableElements(){let e=[];return this.showChartTitle&&e.push({groupTexts:["chart-title"],type:"text",data:[{fontSize:this.chartConfig.titleFontSize,text:this.chartData.title,verticalPos:"middle",horizontalPos:"center",x:this.boundingRect.x+this.boundingRect.width/2,y:this.boundingRect.y+this.boundingRect.height/2,fill:this.chartThemeConfig.titleColor,rotation:0}]}),e}};o(efe,"getChartTitleComponent")});var LE,rfe=M(()=>{"use strict";pr();LE=class{constructor(e,r,n,i,a){this.plotData=e;this.xAxis=r;this.yAxis=n;this.orientation=i;this.plotIndex=a}static{o(this,"LinePlot")}getDrawableElement(){let e=this.plotData.data.map(n=>[this.xAxis.getScaleValue(n[0]),this.yAxis.getScaleValue(n[1])]),r;return this.orientation==="horizontal"?r=ns().y(n=>n[0]).x(n=>n[1])(e):r=ns().x(n=>n[0]).y(n=>n[1])(e),r?[{groupTexts:["plot",`line-plot-${this.plotIndex}`],type:"path",data:[{path:r,strokeFill:this.plotData.strokeFill,strokeWidth:this.plotData.strokeWidth}]}]:[]}}});var DE,nfe=M(()=>{"use strict";DE=class{constructor(e,r,n,i,a,s){this.barData=e;this.boundingRect=r;this.xAxis=n;this.yAxis=i;this.orientation=a;this.plotIndex=s}static{o(this,"BarPlot")}getDrawableElement(){let e=this.barData.data.map(a=>[this.xAxis.getScaleValue(a[0]),this.yAxis.getScaleValue(a[1])]),n=Math.min(this.xAxis.getAxisOuterPadding()*2,this.xAxis.getTickDistance())*(1-.05),i=n/2;return this.orientation==="horizontal"?[{groupTexts:["plot",`bar-plot-${this.plotIndex}`],type:"rect",data:e.map(a=>({x:this.boundingRect.x,y:a[0]-i,height:n,width:a[1]-this.boundingRect.x,fill:this.barData.fill,strokeWidth:0,strokeFill:this.barData.fill}))}]:[{groupTexts:["plot",`bar-plot-${this.plotIndex}`],type:"rect",data:e.map(a=>({x:a[0]-i,y:a[1],width:n,height:this.boundingRect.y+this.boundingRect.height-a[1],fill:this.barData.fill,strokeWidth:0,strokeFill:this.barData.fill}))}]}}});function ife(t,e,r){return new pO(t,e,r)}var pO,afe=M(()=>{"use strict";rfe();nfe();pO=class{constructor(e,r,n){this.chartConfig=e;this.chartData=r;this.chartThemeConfig=n;this.boundingRect={x:0,y:0,width:0,height:0}}static{o(this,"BasePlot")}setAxes(e,r){this.xAxis=e,this.yAxis=r}setBoundingBoxXY(e){this.boundingRect.x=e.x,this.boundingRect.y=e.y}calculateSpace(e){return this.boundingRect.width=e.width,this.boundingRect.height=e.height,{width:this.boundingRect.width,height:this.boundingRect.height}}getDrawableElements(){if(!(this.xAxis&&this.yAxis))throw Error("Axes must be passed to render Plots");let e=[];for(let[r,n]of this.chartData.plots.entries())switch(n.type){case"line":{let i=new LE(n,this.xAxis,this.yAxis,this.chartConfig.chartOrientation,r);e.push(...i.getDrawableElement())}break;case"bar":{let i=new DE(n,this.boundingRect,this.xAxis,this.yAxis,this.chartConfig.chartOrientation,r);e.push(...i.getDrawableElement())}break}return e}};o(ife,"getPlotComponent")});var NE,sfe=M(()=>{"use strict";Jhe();tfe();afe();CE();NE=class{constructor(e,r,n,i){this.chartConfig=e;this.chartData=r;this.componentStore={title:efe(e,r,n,i),plot:ife(e,r,n),xAxis:fO(r.xAxis,e.xAxis,{titleColor:n.xAxisTitleColor,labelColor:n.xAxisLabelColor,tickColor:n.xAxisTickColor,axisLineColor:n.xAxisLineColor},i),yAxis:fO(r.yAxis,e.yAxis,{titleColor:n.yAxisTitleColor,labelColor:n.yAxisLabelColor,tickColor:n.yAxisTickColor,axisLineColor:n.yAxisLineColor},i)}}static{o(this,"Orchestrator")}calculateVerticalSpace(){let e=this.chartConfig.width,r=this.chartConfig.height,n=0,i=0,a=Math.floor(e*this.chartConfig.plotReservedSpacePercent/100),s=Math.floor(r*this.chartConfig.plotReservedSpacePercent/100),l=this.componentStore.plot.calculateSpace({width:a,height:s});e-=l.width,r-=l.height,l=this.componentStore.title.calculateSpace({width:this.chartConfig.width,height:r}),i=l.height,r-=l.height,this.componentStore.xAxis.setAxisPosition("bottom"),l=this.componentStore.xAxis.calculateSpace({width:e,height:r}),r-=l.height,this.componentStore.yAxis.setAxisPosition("left"),l=this.componentStore.yAxis.calculateSpace({width:e,height:r}),n=l.width,e-=l.width,e>0&&(a+=e,e=0),r>0&&(s+=r,r=0),this.componentStore.plot.calculateSpace({width:a,height:s}),this.componentStore.plot.setBoundingBoxXY({x:n,y:i}),this.componentStore.xAxis.setRange([n,n+a]),this.componentStore.xAxis.setBoundingBoxXY({x:n,y:i+s}),this.componentStore.yAxis.setRange([i,i+s]),this.componentStore.yAxis.setBoundingBoxXY({x:0,y:i}),this.chartData.plots.some(u=>cO(u))&&this.componentStore.xAxis.recalculateOuterPaddingToDrawBar()}calculateHorizontalSpace(){let e=this.chartConfig.width,r=this.chartConfig.height,n=0,i=0,a=0,s=Math.floor(e*this.chartConfig.plotReservedSpacePercent/100),l=Math.floor(r*this.chartConfig.plotReservedSpacePercent/100),u=this.componentStore.plot.calculateSpace({width:s,height:l});e-=u.width,r-=u.height,u=this.componentStore.title.calculateSpace({width:this.chartConfig.width,height:r}),n=u.height,r-=u.height,this.componentStore.xAxis.setAxisPosition("left"),u=this.componentStore.xAxis.calculateSpace({width:e,height:r}),e-=u.width,i=u.width,this.componentStore.yAxis.setAxisPosition("top"),u=this.componentStore.yAxis.calculateSpace({width:e,height:r}),r-=u.height,a=n+u.height,e>0&&(s+=e,e=0),r>0&&(l+=r,r=0),this.componentStore.plot.calculateSpace({width:s,height:l}),this.componentStore.plot.setBoundingBoxXY({x:i,y:a}),this.componentStore.yAxis.setRange([i,i+s]),this.componentStore.yAxis.setBoundingBoxXY({x:i,y:n}),this.componentStore.xAxis.setRange([a,a+l]),this.componentStore.xAxis.setBoundingBoxXY({x:0,y:a}),this.chartData.plots.some(h=>cO(h))&&this.componentStore.xAxis.recalculateOuterPaddingToDrawBar()}calculateSpace(){this.chartConfig.chartOrientation==="horizontal"?this.calculateHorizontalSpace():this.calculateVerticalSpace()}getDrawableElement(){this.calculateSpace();let e=[];this.componentStore.plot.setAxes(this.componentStore.xAxis,this.componentStore.yAxis);for(let r of Object.values(this.componentStore))e.push(...r.getDrawableElements());return e}}});var RE,ofe=M(()=>{"use strict";sfe();RE=class{static{o(this,"XYChartBuilder")}static build(e,r,n,i){return new NE(e,r,n,i).getDrawableElement()}}});function cfe(){let t=vp(),e=Cr();return Ds(t.xyChart,e.themeVariables.xyChart)}function ufe(){let t=Cr();return Ds(ur.xyChart,t.xyChart)}function hfe(){return{yAxis:{type:"linear",title:"",min:1/0,max:-1/0},xAxis:{type:"band",title:"",categories:[]},title:"",plots:[]}}function yO(t){let e=Cr();return kr(t.trim(),e)}function _Ve(t){lfe=t}function LVe(t){t==="horizontal"?Dx.chartOrientation="horizontal":Dx.chartOrientation="vertical"}function DVe(t){hn.xAxis.title=yO(t.text)}function ffe(t,e){hn.xAxis={type:"linear",title:hn.xAxis.title,min:t,max:e},ME=!0}function NVe(t){hn.xAxis={type:"band",title:hn.xAxis.title,categories:t.map(e=>yO(e.text))},ME=!0}function RVe(t){hn.yAxis.title=yO(t.text)}function MVe(t,e){hn.yAxis={type:"linear",title:hn.yAxis.title,min:t,max:e},gO=!0}function IVe(t){let e=Math.min(...t),r=Math.max(...t),n=qg(hn.yAxis)?hn.yAxis.min:1/0,i=qg(hn.yAxis)?hn.yAxis.max:-1/0;hn.yAxis={type:"linear",title:hn.yAxis.title,min:Math.min(n,e),max:Math.max(i,r)}}function dfe(t){let e=[];if(t.length===0)return e;if(!ME){let r=qg(hn.xAxis)?hn.xAxis.min:1/0,n=qg(hn.xAxis)?hn.xAxis.max:-1/0;ffe(Math.min(r,1),Math.max(n,t.length))}if(gO||IVe(t),SE(hn.xAxis)&&(e=hn.xAxis.categories.map((r,n)=>[r,t[n]])),qg(hn.xAxis)){let r=hn.xAxis.min,n=hn.xAxis.max,i=(n-r)/(t.length-1),a=[];for(let s=r;s<=n;s+=i)a.push(`${s}`);e=a.map((s,l)=>[s,t[l]])}return e}function pfe(t){return mO[t===0?0:t%mO.length]}function OVe(t,e){let r=dfe(e);hn.plots.push({type:"line",strokeFill:pfe(Lx),strokeWidth:2,data:r}),Lx++}function PVe(t,e){let r=dfe(e);hn.plots.push({type:"bar",fill:pfe(Lx),data:r}),Lx++}function BVe(){if(hn.plots.length===0)throw Error("No Plot to render, please provide a plot with some data");return hn.title=Jr(),RE.build(Dx,hn,Nx,lfe)}function FVe(){return Nx}function zVe(){return Dx}var Lx,lfe,Dx,Nx,hn,mO,ME,gO,GVe,mfe,gfe=M(()=>{"use strict";Za();bs();i4();hr();fr();Ai();ofe();CE();Lx=0,Dx=ufe(),Nx=cfe(),hn=hfe(),mO=Nx.plotColorPalette.split(",").map(t=>t.trim()),ME=!1,gO=!1;o(cfe,"getChartDefaultThemeConfig");o(ufe,"getChartDefaultConfig");o(hfe,"getChartDefaultData");o(yO,"textSanitizer");o(_Ve,"setTmpSVGG");o(LVe,"setOrientation");o(DVe,"setXAxisTitle");o(ffe,"setXAxisRangeData");o(NVe,"setXAxisBand");o(RVe,"setYAxisTitle");o(MVe,"setYAxisRangeData");o(IVe,"setYAxisRangeFromPlotData");o(dfe,"transformDataWithoutCategory");o(pfe,"getPlotColorFromPalette");o(OVe,"setLineData");o(PVe,"setBarData");o(BVe,"getDrawableElem");o(FVe,"getChartThemeConfig");o(zVe,"getChartConfig");GVe=o(function(){Lr(),Lx=0,Dx=ufe(),hn=hfe(),Nx=cfe(),mO=Nx.plotColorPalette.split(",").map(t=>t.trim()),ME=!1,gO=!1},"clear"),mfe={getDrawableElem:BVe,clear:GVe,setAccTitle:Mr,getAccTitle:Br,setDiagramTitle:cn,getDiagramTitle:Jr,getAccDescription:zr,setAccDescription:Fr,setOrientation:LVe,setXAxisTitle:DVe,setXAxisRangeData:ffe,setXAxisBand:NVe,setYAxisTitle:RVe,setYAxisRangeData:MVe,setLineData:OVe,setBarData:PVe,setTmpSVGG:_Ve,getChartThemeConfig:FVe,getChartConfig:zVe}});var $Ve,yfe,vfe=M(()=>{"use strict";ut();eh();ai();$Ve=o((t,e,r,n)=>{let i=n.db,a=i.getChartThemeConfig(),s=i.getChartConfig();function l(v){return v==="top"?"text-before-edge":"middle"}o(l,"getDominantBaseLine");function u(v){return v==="left"?"start":v==="right"?"end":"middle"}o(u,"getTextAnchor");function h(v){return`translate(${v.x}, ${v.y}) rotate(${v.rotation||0})`}o(h,"getTextTransformation"),Y.debug(`Rendering xychart chart +`+t);let f=Va(e),d=f.append("g").attr("class","main"),p=d.append("rect").attr("width",s.width).attr("height",s.height).attr("class","background");Zr(f,s.height,s.width,!0),f.attr("viewBox",`0 0 ${s.width} ${s.height}`),p.attr("fill",a.backgroundColor),i.setTmpSVGG(f.append("g").attr("class","mermaid-tmp-group"));let m=i.getDrawableElem(),g={};function y(v){let x=d,b="";for(let[w]of v.entries()){let _=d;w>0&&g[b]&&(_=g[b]),b+=v[w],x=g[b],x||(x=g[b]=_.append("g").attr("class",v[w]))}return x}o(y,"getGroup");for(let v of m){if(v.data.length===0)continue;let x=y(v.groupTexts);switch(v.type){case"rect":x.selectAll("rect").data(v.data).enter().append("rect").attr("x",b=>b.x).attr("y",b=>b.y).attr("width",b=>b.width).attr("height",b=>b.height).attr("fill",b=>b.fill).attr("stroke",b=>b.strokeFill).attr("stroke-width",b=>b.strokeWidth);break;case"text":x.selectAll("text").data(v.data).enter().append("text").attr("x",0).attr("y",0).attr("fill",b=>b.fill).attr("font-size",b=>b.fontSize).attr("dominant-baseline",b=>l(b.verticalPos)).attr("text-anchor",b=>u(b.horizontalPos)).attr("transform",b=>h(b)).text(b=>b.text);break;case"path":x.selectAll("path").data(v.data).enter().append("path").attr("d",b=>b.path).attr("fill",b=>b.fill?b.fill:"none").attr("stroke",b=>b.strokeFill).attr("stroke-width",b=>b.strokeWidth);break}}},"draw"),yfe={draw:$Ve}});var xfe={};vr(xfe,{diagram:()=>VVe});var VVe,bfe=M(()=>{"use strict";Khe();gfe();vfe();VVe={parser:jhe,db:mfe,renderer:yfe}});var vO,kfe,Efe=M(()=>{"use strict";vO=function(){var t=o(function(oe,K,ee,J){for(ee=ee||{},J=oe.length;J--;ee[oe[J]]=K);return ee},"o"),e=[1,3],r=[1,4],n=[1,5],i=[1,6],a=[5,6,8,9,11,13,31,32,33,34,35,36,44,62,63],s=[1,18],l=[2,7],u=[1,22],h=[1,23],f=[1,24],d=[1,25],p=[1,26],m=[1,27],g=[1,20],y=[1,28],v=[1,29],x=[62,63],b=[5,8,9,11,13,31,32,33,34,35,36,44,51,53,62,63],w=[1,47],_=[1,48],T=[1,49],E=[1,50],L=[1,51],S=[1,52],A=[1,53],I=[53,54],D=[1,64],k=[1,60],R=[1,61],C=[1,62],O=[1,63],N=[1,65],P=[1,69],F=[1,70],B=[1,67],G=[1,68],z=[5,8,9,11,13,31,32,33,34,35,36,44,62,63],W={trace:o(function(){},"trace"),yy:{},symbols_:{error:2,start:3,directive:4,NEWLINE:5,RD:6,diagram:7,EOF:8,acc_title:9,acc_title_value:10,acc_descr:11,acc_descr_value:12,acc_descr_multiline_value:13,requirementDef:14,elementDef:15,relationshipDef:16,requirementType:17,requirementName:18,STRUCT_START:19,requirementBody:20,ID:21,COLONSEP:22,id:23,TEXT:24,text:25,RISK:26,riskLevel:27,VERIFYMTHD:28,verifyType:29,STRUCT_STOP:30,REQUIREMENT:31,FUNCTIONAL_REQUIREMENT:32,INTERFACE_REQUIREMENT:33,PERFORMANCE_REQUIREMENT:34,PHYSICAL_REQUIREMENT:35,DESIGN_CONSTRAINT:36,LOW_RISK:37,MED_RISK:38,HIGH_RISK:39,VERIFY_ANALYSIS:40,VERIFY_DEMONSTRATION:41,VERIFY_INSPECTION:42,VERIFY_TEST:43,ELEMENT:44,elementName:45,elementBody:46,TYPE:47,type:48,DOCREF:49,ref:50,END_ARROW_L:51,relationship:52,LINE:53,END_ARROW_R:54,CONTAINS:55,COPIES:56,DERIVES:57,SATISFIES:58,VERIFIES:59,REFINES:60,TRACES:61,unqString:62,qString:63,$accept:0,$end:1},terminals_:{2:"error",5:"NEWLINE",6:"RD",8:"EOF",9:"acc_title",10:"acc_title_value",11:"acc_descr",12:"acc_descr_value",13:"acc_descr_multiline_value",19:"STRUCT_START",21:"ID",22:"COLONSEP",24:"TEXT",26:"RISK",28:"VERIFYMTHD",30:"STRUCT_STOP",31:"REQUIREMENT",32:"FUNCTIONAL_REQUIREMENT",33:"INTERFACE_REQUIREMENT",34:"PERFORMANCE_REQUIREMENT",35:"PHYSICAL_REQUIREMENT",36:"DESIGN_CONSTRAINT",37:"LOW_RISK",38:"MED_RISK",39:"HIGH_RISK",40:"VERIFY_ANALYSIS",41:"VERIFY_DEMONSTRATION",42:"VERIFY_INSPECTION",43:"VERIFY_TEST",44:"ELEMENT",47:"TYPE",49:"DOCREF",51:"END_ARROW_L",53:"LINE",54:"END_ARROW_R",55:"CONTAINS",56:"COPIES",57:"DERIVES",58:"SATISFIES",59:"VERIFIES",60:"REFINES",61:"TRACES",62:"unqString",63:"qString"},productions_:[0,[3,3],[3,2],[3,4],[4,2],[4,2],[4,1],[7,0],[7,2],[7,2],[7,2],[7,2],[7,2],[14,5],[20,5],[20,5],[20,5],[20,5],[20,2],[20,1],[17,1],[17,1],[17,1],[17,1],[17,1],[17,1],[27,1],[27,1],[27,1],[29,1],[29,1],[29,1],[29,1],[15,5],[46,5],[46,5],[46,2],[46,1],[16,5],[16,5],[52,1],[52,1],[52,1],[52,1],[52,1],[52,1],[52,1],[18,1],[18,1],[23,1],[23,1],[25,1],[25,1],[45,1],[45,1],[48,1],[48,1],[50,1],[50,1]],performAction:o(function(K,ee,J,H,q,Q,ae){var ue=Q.length-1;switch(q){case 4:this.$=Q[ue].trim(),H.setAccTitle(this.$);break;case 5:case 6:this.$=Q[ue].trim(),H.setAccDescription(this.$);break;case 7:this.$=[];break;case 13:H.addRequirement(Q[ue-3],Q[ue-4]);break;case 14:H.setNewReqId(Q[ue-2]);break;case 15:H.setNewReqText(Q[ue-2]);break;case 16:H.setNewReqRisk(Q[ue-2]);break;case 17:H.setNewReqVerifyMethod(Q[ue-2]);break;case 20:this.$=H.RequirementType.REQUIREMENT;break;case 21:this.$=H.RequirementType.FUNCTIONAL_REQUIREMENT;break;case 22:this.$=H.RequirementType.INTERFACE_REQUIREMENT;break;case 23:this.$=H.RequirementType.PERFORMANCE_REQUIREMENT;break;case 24:this.$=H.RequirementType.PHYSICAL_REQUIREMENT;break;case 25:this.$=H.RequirementType.DESIGN_CONSTRAINT;break;case 26:this.$=H.RiskLevel.LOW_RISK;break;case 27:this.$=H.RiskLevel.MED_RISK;break;case 28:this.$=H.RiskLevel.HIGH_RISK;break;case 29:this.$=H.VerifyType.VERIFY_ANALYSIS;break;case 30:this.$=H.VerifyType.VERIFY_DEMONSTRATION;break;case 31:this.$=H.VerifyType.VERIFY_INSPECTION;break;case 32:this.$=H.VerifyType.VERIFY_TEST;break;case 33:H.addElement(Q[ue-3]);break;case 34:H.setNewElementType(Q[ue-2]);break;case 35:H.setNewElementDocRef(Q[ue-2]);break;case 38:H.addRelationship(Q[ue-2],Q[ue],Q[ue-4]);break;case 39:H.addRelationship(Q[ue-2],Q[ue-4],Q[ue]);break;case 40:this.$=H.Relationships.CONTAINS;break;case 41:this.$=H.Relationships.COPIES;break;case 42:this.$=H.Relationships.DERIVES;break;case 43:this.$=H.Relationships.SATISFIES;break;case 44:this.$=H.Relationships.VERIFIES;break;case 45:this.$=H.Relationships.REFINES;break;case 46:this.$=H.Relationships.TRACES;break}},"anonymous"),table:[{3:1,4:2,6:e,9:r,11:n,13:i},{1:[3]},{3:8,4:2,5:[1,7],6:e,9:r,11:n,13:i},{5:[1,9]},{10:[1,10]},{12:[1,11]},t(a,[2,6]),{3:12,4:2,6:e,9:r,11:n,13:i},{1:[2,2]},{4:17,5:s,7:13,8:l,9:r,11:n,13:i,14:14,15:15,16:16,17:19,23:21,31:u,32:h,33:f,34:d,35:p,36:m,44:g,62:y,63:v},t(a,[2,4]),t(a,[2,5]),{1:[2,1]},{8:[1,30]},{4:17,5:s,7:31,8:l,9:r,11:n,13:i,14:14,15:15,16:16,17:19,23:21,31:u,32:h,33:f,34:d,35:p,36:m,44:g,62:y,63:v},{4:17,5:s,7:32,8:l,9:r,11:n,13:i,14:14,15:15,16:16,17:19,23:21,31:u,32:h,33:f,34:d,35:p,36:m,44:g,62:y,63:v},{4:17,5:s,7:33,8:l,9:r,11:n,13:i,14:14,15:15,16:16,17:19,23:21,31:u,32:h,33:f,34:d,35:p,36:m,44:g,62:y,63:v},{4:17,5:s,7:34,8:l,9:r,11:n,13:i,14:14,15:15,16:16,17:19,23:21,31:u,32:h,33:f,34:d,35:p,36:m,44:g,62:y,63:v},{4:17,5:s,7:35,8:l,9:r,11:n,13:i,14:14,15:15,16:16,17:19,23:21,31:u,32:h,33:f,34:d,35:p,36:m,44:g,62:y,63:v},{18:36,62:[1,37],63:[1,38]},{45:39,62:[1,40],63:[1,41]},{51:[1,42],53:[1,43]},t(x,[2,20]),t(x,[2,21]),t(x,[2,22]),t(x,[2,23]),t(x,[2,24]),t(x,[2,25]),t(b,[2,49]),t(b,[2,50]),{1:[2,3]},{8:[2,8]},{8:[2,9]},{8:[2,10]},{8:[2,11]},{8:[2,12]},{19:[1,44]},{19:[2,47]},{19:[2,48]},{19:[1,45]},{19:[2,53]},{19:[2,54]},{52:46,55:w,56:_,57:T,58:E,59:L,60:S,61:A},{52:54,55:w,56:_,57:T,58:E,59:L,60:S,61:A},{5:[1,55]},{5:[1,56]},{53:[1,57]},t(I,[2,40]),t(I,[2,41]),t(I,[2,42]),t(I,[2,43]),t(I,[2,44]),t(I,[2,45]),t(I,[2,46]),{54:[1,58]},{5:D,20:59,21:k,24:R,26:C,28:O,30:N},{5:P,30:F,46:66,47:B,49:G},{23:71,62:y,63:v},{23:72,62:y,63:v},t(z,[2,13]),{22:[1,73]},{22:[1,74]},{22:[1,75]},{22:[1,76]},{5:D,20:77,21:k,24:R,26:C,28:O,30:N},t(z,[2,19]),t(z,[2,33]),{22:[1,78]},{22:[1,79]},{5:P,30:F,46:80,47:B,49:G},t(z,[2,37]),t(z,[2,38]),t(z,[2,39]),{23:81,62:y,63:v},{25:82,62:[1,83],63:[1,84]},{27:85,37:[1,86],38:[1,87],39:[1,88]},{29:89,40:[1,90],41:[1,91],42:[1,92],43:[1,93]},t(z,[2,18]),{48:94,62:[1,95],63:[1,96]},{50:97,62:[1,98],63:[1,99]},t(z,[2,36]),{5:[1,100]},{5:[1,101]},{5:[2,51]},{5:[2,52]},{5:[1,102]},{5:[2,26]},{5:[2,27]},{5:[2,28]},{5:[1,103]},{5:[2,29]},{5:[2,30]},{5:[2,31]},{5:[2,32]},{5:[1,104]},{5:[2,55]},{5:[2,56]},{5:[1,105]},{5:[2,57]},{5:[2,58]},{5:D,20:106,21:k,24:R,26:C,28:O,30:N},{5:D,20:107,21:k,24:R,26:C,28:O,30:N},{5:D,20:108,21:k,24:R,26:C,28:O,30:N},{5:D,20:109,21:k,24:R,26:C,28:O,30:N},{5:P,30:F,46:110,47:B,49:G},{5:P,30:F,46:111,47:B,49:G},t(z,[2,14]),t(z,[2,15]),t(z,[2,16]),t(z,[2,17]),t(z,[2,34]),t(z,[2,35])],defaultActions:{8:[2,2],12:[2,1],30:[2,3],31:[2,8],32:[2,9],33:[2,10],34:[2,11],35:[2,12],37:[2,47],38:[2,48],40:[2,53],41:[2,54],83:[2,51],84:[2,52],86:[2,26],87:[2,27],88:[2,28],90:[2,29],91:[2,30],92:[2,31],93:[2,32],95:[2,55],96:[2,56],98:[2,57],99:[2,58]},parseError:o(function(K,ee){if(ee.recoverable)this.trace(K);else{var J=new Error(K);throw J.hash=ee,J}},"parseError"),parse:o(function(K){var ee=this,J=[0],H=[],q=[null],Q=[],ae=this.table,ue="",ce=0,te=0,Ne=0,se=2,ke=1,Re=Q.slice.call(arguments,1),Ce=Object.create(this.lexer),Pe={yy:{}};for(var Ie in this.yy)Object.prototype.hasOwnProperty.call(this.yy,Ie)&&(Pe.yy[Ie]=this.yy[Ie]);Ce.setInput(K,Pe.yy),Pe.yy.lexer=Ce,Pe.yy.parser=this,typeof Ce.yylloc>"u"&&(Ce.yylloc={});var $e=Ce.yylloc;Q.push($e);var ye=Ce.options&&Ce.options.ranges;typeof Pe.yy.parseError=="function"?this.parseError=Pe.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function X(He){J.length=J.length-2*He,q.length=q.length-He,Q.length=Q.length-He}o(X,"popStack");function fe(){var He;return He=H.pop()||Ce.lex()||ke,typeof He!="number"&&(He instanceof Array&&(H=He,He=H.pop()),He=ee.symbols_[He]||He),He}o(fe,"lex");for(var he,ge,ne,ve,U,Te,ie={},Ee,Ae,Ge,Be;;){if(ne=J[J.length-1],this.defaultActions[ne]?ve=this.defaultActions[ne]:((he===null||typeof he>"u")&&(he=fe()),ve=ae[ne]&&ae[ne][he]),typeof ve>"u"||!ve.length||!ve[0]){var me="";Be=[];for(Ee in ae[ne])this.terminals_[Ee]&&Ee>se&&Be.push("'"+this.terminals_[Ee]+"'");Ce.showPosition?me="Parse error on line "+(ce+1)+`: +`+Ce.showPosition()+` +Expecting `+Be.join(", ")+", got '"+(this.terminals_[he]||he)+"'":me="Parse error on line "+(ce+1)+": Unexpected "+(he==ke?"end of input":"'"+(this.terminals_[he]||he)+"'"),this.parseError(me,{text:Ce.match,token:this.terminals_[he]||he,line:Ce.yylineno,loc:$e,expected:Be})}if(ve[0]instanceof Array&&ve.length>1)throw new Error("Parse Error: multiple actions possible at state: "+ne+", token: "+he);switch(ve[0]){case 1:J.push(he),q.push(Ce.yytext),Q.push(Ce.yylloc),J.push(ve[1]),he=null,ge?(he=ge,ge=null):(te=Ce.yyleng,ue=Ce.yytext,ce=Ce.yylineno,$e=Ce.yylloc,Ne>0&&Ne--);break;case 2:if(Ae=this.productions_[ve[1]][1],ie.$=q[q.length-Ae],ie._$={first_line:Q[Q.length-(Ae||1)].first_line,last_line:Q[Q.length-1].last_line,first_column:Q[Q.length-(Ae||1)].first_column,last_column:Q[Q.length-1].last_column},ye&&(ie._$.range=[Q[Q.length-(Ae||1)].range[0],Q[Q.length-1].range[1]]),Te=this.performAction.apply(ie,[ue,te,ce,Pe.yy,ve[1],q,Q].concat(Re)),typeof Te<"u")return Te;Ae&&(J=J.slice(0,-1*Ae*2),q=q.slice(0,-1*Ae),Q=Q.slice(0,-1*Ae)),J.push(this.productions_[ve[1]][0]),q.push(ie.$),Q.push(ie._$),Ge=ae[J[J.length-2]][J[J.length-1]],J.push(Ge);break;case 3:return!0}}return!0},"parse")},Z=function(){var oe={EOF:1,parseError:o(function(ee,J){if(this.yy.parser)this.yy.parser.parseError(ee,J);else throw new Error(ee)},"parseError"),setInput:o(function(K,ee){return this.yy=ee||this.yy||{},this._input=K,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},"setInput"),input:o(function(){var K=this._input[0];this.yytext+=K,this.yyleng++,this.offset++,this.match+=K,this.matched+=K;var ee=K.match(/(?:\r\n?|\n).*/g);return ee?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),K},"input"),unput:o(function(K){var ee=K.length,J=K.split(/(?:\r\n?|\n)/g);this._input=K+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-ee),this.offset-=ee;var H=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),J.length-1&&(this.yylineno-=J.length-1);var q=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:J?(J.length===H.length?this.yylloc.first_column:0)+H[H.length-J.length].length-J[0].length:this.yylloc.first_column-ee},this.options.ranges&&(this.yylloc.range=[q[0],q[0]+this.yyleng-ee]),this.yyleng=this.yytext.length,this},"unput"),more:o(function(){return this._more=!0,this},"more"),reject:o(function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true). +`+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},"reject"),less:o(function(K){this.unput(this.match.slice(K))},"less"),pastInput:o(function(){var K=this.matched.substr(0,this.matched.length-this.match.length);return(K.length>20?"...":"")+K.substr(-20).replace(/\n/g,"")},"pastInput"),upcomingInput:o(function(){var K=this.match;return K.length<20&&(K+=this._input.substr(0,20-K.length)),(K.substr(0,20)+(K.length>20?"...":"")).replace(/\n/g,"")},"upcomingInput"),showPosition:o(function(){var K=this.pastInput(),ee=new Array(K.length+1).join("-");return K+this.upcomingInput()+` +`+ee+"^"},"showPosition"),test_match:o(function(K,ee){var J,H,q;if(this.options.backtrack_lexer&&(q={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(q.yylloc.range=this.yylloc.range.slice(0))),H=K[0].match(/(?:\r\n?|\n).*/g),H&&(this.yylineno+=H.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:H?H[H.length-1].length-H[H.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+K[0].length},this.yytext+=K[0],this.match+=K[0],this.matches=K,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(K[0].length),this.matched+=K[0],J=this.performAction.call(this,this.yy,this,ee,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),J)return J;if(this._backtrack){for(var Q in q)this[Q]=q[Q];return!1}return!1},"test_match"),next:o(function(){if(this.done)return this.EOF;this._input||(this.done=!0);var K,ee,J,H;this._more||(this.yytext="",this.match="");for(var q=this._currentRules(),Q=0;Qee[0].length)){if(ee=J,H=Q,this.options.backtrack_lexer){if(K=this.test_match(J,q[Q]),K!==!1)return K;if(this._backtrack){ee=!1;continue}else return!1}else if(!this.options.flex)break}return ee?(K=this.test_match(ee,q[H]),K!==!1?K:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text. +`+this.showPosition(),{text:"",token:null,line:this.yylineno})},"next"),lex:o(function(){var ee=this.next();return ee||this.lex()},"lex"),begin:o(function(ee){this.conditionStack.push(ee)},"begin"),popState:o(function(){var ee=this.conditionStack.length-1;return ee>0?this.conditionStack.pop():this.conditionStack[0]},"popState"),_currentRules:o(function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},"_currentRules"),topState:o(function(ee){return ee=this.conditionStack.length-1-Math.abs(ee||0),ee>=0?this.conditionStack[ee]:"INITIAL"},"topState"),pushState:o(function(ee){this.begin(ee)},"pushState"),stateStackSize:o(function(){return this.conditionStack.length},"stateStackSize"),options:{"case-insensitive":!0},performAction:o(function(ee,J,H,q){var Q=q;switch(H){case 0:return"title";case 1:return this.begin("acc_title"),9;break;case 2:return this.popState(),"acc_title_value";break;case 3:return this.begin("acc_descr"),11;break;case 4:return this.popState(),"acc_descr_value";break;case 5:this.begin("acc_descr_multiline");break;case 6:this.popState();break;case 7:return"acc_descr_multiline_value";case 8:return 5;case 9:break;case 10:break;case 11:break;case 12:return 8;case 13:return 6;case 14:return 19;case 15:return 30;case 16:return 22;case 17:return 21;case 18:return 24;case 19:return 26;case 20:return 28;case 21:return 31;case 22:return 32;case 23:return 33;case 24:return 34;case 25:return 35;case 26:return 36;case 27:return 37;case 28:return 38;case 29:return 39;case 30:return 40;case 31:return 41;case 32:return 42;case 33:return 43;case 34:return 44;case 35:return 55;case 36:return 56;case 37:return 57;case 38:return 58;case 39:return 59;case 40:return 60;case 41:return 61;case 42:return 47;case 43:return 49;case 44:return 51;case 45:return 54;case 46:return 53;case 47:this.begin("string");break;case 48:this.popState();break;case 49:return"qString";case 50:return J.yytext=J.yytext.trim(),62;break}},"anonymous"),rules:[/^(?:title\s[^#\n;]+)/i,/^(?:accTitle\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*\{\s*)/i,/^(?:[\}])/i,/^(?:[^\}]*)/i,/^(?:(\r?\n)+)/i,/^(?:\s+)/i,/^(?:#[^\n]*)/i,/^(?:%[^\n]*)/i,/^(?:$)/i,/^(?:requirementDiagram\b)/i,/^(?:\{)/i,/^(?:\})/i,/^(?::)/i,/^(?:id\b)/i,/^(?:text\b)/i,/^(?:risk\b)/i,/^(?:verifyMethod\b)/i,/^(?:requirement\b)/i,/^(?:functionalRequirement\b)/i,/^(?:interfaceRequirement\b)/i,/^(?:performanceRequirement\b)/i,/^(?:physicalRequirement\b)/i,/^(?:designConstraint\b)/i,/^(?:low\b)/i,/^(?:medium\b)/i,/^(?:high\b)/i,/^(?:analysis\b)/i,/^(?:demonstration\b)/i,/^(?:inspection\b)/i,/^(?:test\b)/i,/^(?:element\b)/i,/^(?:contains\b)/i,/^(?:copies\b)/i,/^(?:derives\b)/i,/^(?:satisfies\b)/i,/^(?:verifies\b)/i,/^(?:refines\b)/i,/^(?:traces\b)/i,/^(?:type\b)/i,/^(?:docref\b)/i,/^(?:<-)/i,/^(?:->)/i,/^(?:-)/i,/^(?:["])/i,/^(?:["])/i,/^(?:[^"]*)/i,/^(?:[\w][^\r\n\{\<\>\-\=]*)/i],conditions:{acc_descr_multiline:{rules:[6,7],inclusive:!1},acc_descr:{rules:[4],inclusive:!1},acc_title:{rules:[2],inclusive:!1},unqString:{rules:[],inclusive:!1},token:{rules:[],inclusive:!1},string:{rules:[48,49],inclusive:!1},INITIAL:{rules:[0,1,3,5,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,50],inclusive:!0}}};return oe}();W.lexer=Z;function j(){this.yy={}}return o(j,"Parser"),j.prototype=W,W.Parser=j,new j}();vO.parser=vO;kfe=vO});var xO,qs,Rx,Tf,Mx,YVe,qVe,XVe,jVe,KVe,QVe,ZVe,JVe,eUe,tUe,rUe,nUe,iUe,aUe,sUe,oUe,lUe,Sfe,Cfe=M(()=>{"use strict";Vt();ut();Ai();xO=[],qs={},Rx=new Map,Tf={},Mx=new Map,YVe={REQUIREMENT:"Requirement",FUNCTIONAL_REQUIREMENT:"Functional Requirement",INTERFACE_REQUIREMENT:"Interface Requirement",PERFORMANCE_REQUIREMENT:"Performance Requirement",PHYSICAL_REQUIREMENT:"Physical Requirement",DESIGN_CONSTRAINT:"Design Constraint"},qVe={LOW_RISK:"Low",MED_RISK:"Medium",HIGH_RISK:"High"},XVe={VERIFY_ANALYSIS:"Analysis",VERIFY_DEMONSTRATION:"Demonstration",VERIFY_INSPECTION:"Inspection",VERIFY_TEST:"Test"},jVe={CONTAINS:"contains",COPIES:"copies",DERIVES:"derives",SATISFIES:"satisfies",VERIFIES:"verifies",REFINES:"refines",TRACES:"traces"},KVe=o((t,e)=>(Rx.has(t)||Rx.set(t,{name:t,type:e,id:qs.id,text:qs.text,risk:qs.risk,verifyMethod:qs.verifyMethod}),qs={},Rx.get(t)),"addRequirement"),QVe=o(()=>Rx,"getRequirements"),ZVe=o(t=>{qs!==void 0&&(qs.id=t)},"setNewReqId"),JVe=o(t=>{qs!==void 0&&(qs.text=t)},"setNewReqText"),eUe=o(t=>{qs!==void 0&&(qs.risk=t)},"setNewReqRisk"),tUe=o(t=>{qs!==void 0&&(qs.verifyMethod=t)},"setNewReqVerifyMethod"),rUe=o(t=>(Mx.has(t)||(Mx.set(t,{name:t,type:Tf.type,docRef:Tf.docRef}),Y.info("Added new requirement: ",t)),Tf={},Mx.get(t)),"addElement"),nUe=o(()=>Mx,"getElements"),iUe=o(t=>{Tf!==void 0&&(Tf.type=t)},"setNewElementType"),aUe=o(t=>{Tf!==void 0&&(Tf.docRef=t)},"setNewElementDocRef"),sUe=o((t,e,r)=>{xO.push({type:t,src:e,dst:r})},"addRelationship"),oUe=o(()=>xO,"getRelationships"),lUe=o(()=>{xO=[],qs={},Rx=new Map,Tf={},Mx=new Map,Lr()},"clear"),Sfe={RequirementType:YVe,RiskLevel:qVe,VerifyType:XVe,Relationships:jVe,getConfig:o(()=>pe().req,"getConfig"),addRequirement:KVe,getRequirements:QVe,setNewReqId:ZVe,setNewReqText:JVe,setNewReqRisk:eUe,setNewReqVerifyMethod:tUe,setAccTitle:Mr,getAccTitle:Br,setAccDescription:Fr,getAccDescription:zr,addElement:rUe,getElements:nUe,setNewElementType:iUe,setNewElementDocRef:aUe,addRelationship:sUe,getRelationships:oUe,clear:lUe}});var cUe,Afe,_fe=M(()=>{"use strict";cUe=o(t=>` + + marker { + fill: ${t.relationColor}; + stroke: ${t.relationColor}; + } + + marker.cross { + stroke: ${t.lineColor}; + } + + svg { + font-family: ${t.fontFamily}; + font-size: ${t.fontSize}; + } + + .reqBox { + fill: ${t.requirementBackground}; + fill-opacity: 1.0; + stroke: ${t.requirementBorderColor}; + stroke-width: ${t.requirementBorderSize}; + } + + .reqTitle, .reqLabel{ + fill: ${t.requirementTextColor}; + } + .reqLabelBox { + fill: ${t.relationLabelBackground}; + fill-opacity: 1.0; + } + + .req-title-line { + stroke: ${t.requirementBorderColor}; + stroke-width: ${t.requirementBorderSize}; + } + .relationshipLine { + stroke: ${t.relationColor}; + stroke-width: 1; + } + .relationshipLabel { + fill: ${t.relationLabelColor}; + } + +`,"getStyles"),Afe=cUe});var bO,uUe,wO,Lfe=M(()=>{"use strict";bO={CONTAINS:"contains",ARROW:"arrow"},uUe=o((t,e)=>{let r=t.append("defs").append("marker").attr("id",bO.CONTAINS+"_line_ending").attr("refX",0).attr("refY",e.line_height/2).attr("markerWidth",e.line_height).attr("markerHeight",e.line_height).attr("orient","auto").append("g");r.append("circle").attr("cx",e.line_height/2).attr("cy",e.line_height/2).attr("r",e.line_height/2).attr("fill","none"),r.append("line").attr("x1",0).attr("x2",e.line_height).attr("y1",e.line_height/2).attr("y2",e.line_height/2).attr("stroke-width",1),r.append("line").attr("y1",0).attr("y2",e.line_height).attr("x1",e.line_height/2).attr("x2",e.line_height/2).attr("stroke-width",1),t.append("defs").append("marker").attr("id",bO.ARROW+"_line_ending").attr("refX",e.line_height).attr("refY",.5*e.line_height).attr("markerWidth",e.line_height).attr("markerHeight",e.line_height).attr("orient","auto").append("path").attr("d",`M0,0 + L${e.line_height},${e.line_height/2} + M${e.line_height},${e.line_height/2} + L0,${e.line_height}`).attr("stroke-width",1)},"insertLineEndings"),wO={ReqMarkers:bO,insertLineEndings:uUe}});var hi,Dfe,Nfe,Rfe,Mfe,hUe,fUe,dUe,pUe,mUe,gUe,Kg,yUe,Ife,Ofe=M(()=>{"use strict";pr();Qv();Gs();Vt();ut();ai();fr();Lfe();hi={},Dfe=0,Nfe=o((t,e)=>t.insert("rect","#"+e).attr("class","req reqBox").attr("x",0).attr("y",0).attr("width",hi.rect_min_width+"px").attr("height",hi.rect_min_height+"px"),"newRectNode"),Rfe=o((t,e,r)=>{let n=hi.rect_min_width/2,i=t.append("text").attr("class","req reqLabel reqTitle").attr("id",e).attr("x",n).attr("y",hi.rect_padding).attr("dominant-baseline","hanging"),a=0;r.forEach(h=>{a==0?i.append("tspan").attr("text-anchor","middle").attr("x",hi.rect_min_width/2).attr("dy",0).text(h):i.append("tspan").attr("text-anchor","middle").attr("x",hi.rect_min_width/2).attr("dy",hi.line_height*.75).text(h),a++});let s=1.5*hi.rect_padding,l=a*hi.line_height*.75,u=s+l;return t.append("line").attr("class","req-title-line").attr("x1","0").attr("x2",hi.rect_min_width).attr("y1",u).attr("y2",u),{titleNode:i,y:u}},"newTitleNode"),Mfe=o((t,e,r,n)=>{let i=t.append("text").attr("class","req reqLabel").attr("id",e).attr("x",hi.rect_padding).attr("y",n).attr("dominant-baseline","hanging"),a=0,s=30,l=[];return r.forEach(u=>{let h=u.length;for(;h>s&&a<3;){let f=u.substring(0,s);u=u.substring(s,u.length),h=u.length,l[l.length]=f,a++}if(a==3){let f=l[l.length-1];l[l.length-1]=f.substring(0,f.length-4)+"..."}else l[l.length]=u;a=0}),l.forEach(u=>{i.append("tspan").attr("x",hi.rect_padding).attr("dy",hi.line_height).text(u)}),i},"newBodyNode"),hUe=o((t,e,r,n)=>{let i=e.node().getTotalLength(),a=e.node().getPointAtLength(i*.5),s="rel"+Dfe;Dfe++;let u=t.append("text").attr("class","req relationshipLabel").attr("id",s).attr("x",a.x).attr("y",a.y).attr("text-anchor","middle").attr("dominant-baseline","middle").text(n).node().getBBox();t.insert("rect","#"+s).attr("class","req reqLabelBox").attr("x",a.x-u.width/2).attr("y",a.y-u.height/2).attr("width",u.width).attr("height",u.height).attr("fill","white").attr("fill-opacity","85%")},"addEdgeLabel"),fUe=o(function(t,e,r,n,i){let a=r.edge(Kg(e.src),Kg(e.dst)),s=ns().x(function(u){return u.x}).y(function(u){return u.y}),l=t.insert("path","#"+n).attr("class","er relationshipLine").attr("d",s(a.points)).attr("fill","none");e.type==i.db.Relationships.CONTAINS?l.attr("marker-start","url("+qe.getUrl(hi.arrowMarkerAbsolute)+"#"+e.type+"_line_ending)"):(l.attr("stroke-dasharray","10,7"),l.attr("marker-end","url("+qe.getUrl(hi.arrowMarkerAbsolute)+"#"+wO.ReqMarkers.ARROW+"_line_ending)")),hUe(t,l,hi,`<<${e.type}>>`)},"drawRelationshipFromLayout"),dUe=o((t,e,r)=>{t.forEach((n,i)=>{i=Kg(i),Y.info("Added new requirement: ",i);let a=r.append("g").attr("id",i),s="req-"+i,l=Nfe(a,s),u=[],h=Rfe(a,i+"_title",[`<<${n.type}>>`,`${n.name}`]);u.push(h.titleNode);let f=Mfe(a,i+"_body",[`Id: ${n.id}`,`Text: ${n.text}`,`Risk: ${n.risk}`,`Verification: ${n.verifyMethod}`],h.y);u.push(f);let d=l.node().getBBox();e.setNode(i,{width:d.width,height:d.height,shape:"rect",id:i})})},"drawReqs"),pUe=o((t,e,r)=>{t.forEach((n,i)=>{let a=Kg(i),s=r.append("g").attr("id",a),l="element-"+a,u=Nfe(s,l),h=[],f=Rfe(s,l+"_title",["<>",`${i}`]);h.push(f.titleNode);let d=Mfe(s,l+"_body",[`Type: ${n.type||"Not Specified"}`,`Doc Ref: ${n.docRef||"None"}`],f.y);h.push(d);let p=u.node().getBBox();e.setNode(a,{width:p.width,height:p.height,shape:"rect",id:a})})},"drawElements"),mUe=o((t,e)=>(t.forEach(function(r){let n=Kg(r.src),i=Kg(r.dst);e.setEdge(n,i,{relationship:r})}),t),"addRelationships"),gUe=o(function(t,e){e.nodes().forEach(function(r){r!==void 0&&e.node(r)!==void 0&&(t.select("#"+r),t.select("#"+r).attr("transform","translate("+(e.node(r).x-e.node(r).width/2)+","+(e.node(r).y-e.node(r).height/2)+" )"))})},"adjustEntities"),Kg=o(t=>t.replace(/\s/g,"").replace(/\./g,"_"),"elementString"),yUe=o((t,e,r,n)=>{hi=pe().requirement;let i=hi.securityLevel,a;i==="sandbox"&&(a=Ve("#i"+e));let l=(i==="sandbox"?Ve(a.nodes()[0].contentDocument.body):Ve("body")).select(`[id='${e}']`);wO.insertLineEndings(l,hi);let u=new Ir({multigraph:!1,compound:!1,directed:!0}).setGraph({rankdir:hi.layoutDirection,marginx:20,marginy:20,nodesep:100,edgesep:100,ranksep:100}).setDefaultEdgeLabel(function(){return{}}),h=n.db.getRequirements(),f=n.db.getElements(),d=n.db.getRelationships();dUe(h,u,l),pUe(f,u,l),mUe(d,u),Gu(u),gUe(l,u),d.forEach(function(v){fUe(l,v,u,e,n)});let p=hi.rect_padding,m=l.node().getBBox(),g=m.width+p*2,y=m.height+p*2;Zr(l,y,g,hi.useMaxWidth),l.attr("viewBox",`${m.x-p} ${m.y-p} ${g} ${y}`)},"draw"),Ife={draw:yUe}});var Pfe={};vr(Pfe,{diagram:()=>vUe});var vUe,Bfe=M(()=>{"use strict";Efe();Cfe();_fe();Ofe();vUe={parser:kfe,db:Sfe,renderer:Ife,styles:Afe}});var TO,Gfe,$fe=M(()=>{"use strict";TO=function(){var t=o(function(H,q,Q,ae){for(Q=Q||{},ae=H.length;ae--;Q[H[ae]]=q);return Q},"o"),e=[1,2],r=[1,3],n=[1,4],i=[2,4],a=[1,9],s=[1,11],l=[1,13],u=[1,14],h=[1,16],f=[1,17],d=[1,18],p=[1,24],m=[1,25],g=[1,26],y=[1,27],v=[1,28],x=[1,29],b=[1,30],w=[1,31],_=[1,32],T=[1,33],E=[1,34],L=[1,35],S=[1,36],A=[1,37],I=[1,38],D=[1,39],k=[1,41],R=[1,42],C=[1,43],O=[1,44],N=[1,45],P=[1,46],F=[1,4,5,13,14,16,18,21,23,29,30,31,33,35,36,37,38,39,41,43,44,46,47,48,49,50,52,53,54,59,60,61,62,70],B=[4,5,16,50,52,53],G=[4,5,13,14,16,18,21,23,29,30,31,33,35,36,37,38,39,41,43,44,46,50,52,53,54,59,60,61,62,70],z=[4,5,13,14,16,18,21,23,29,30,31,33,35,36,37,38,39,41,43,44,46,49,50,52,53,54,59,60,61,62,70],W=[4,5,13,14,16,18,21,23,29,30,31,33,35,36,37,38,39,41,43,44,46,48,50,52,53,54,59,60,61,62,70],Z=[4,5,13,14,16,18,21,23,29,30,31,33,35,36,37,38,39,41,43,44,46,47,50,52,53,54,59,60,61,62,70],j=[68,69,70],oe=[1,122],K={trace:o(function(){},"trace"),yy:{},symbols_:{error:2,start:3,SPACE:4,NEWLINE:5,SD:6,document:7,line:8,statement:9,box_section:10,box_line:11,participant_statement:12,create:13,box:14,restOfLine:15,end:16,signal:17,autonumber:18,NUM:19,off:20,activate:21,actor:22,deactivate:23,note_statement:24,links_statement:25,link_statement:26,properties_statement:27,details_statement:28,title:29,legacy_title:30,acc_title:31,acc_title_value:32,acc_descr:33,acc_descr_value:34,acc_descr_multiline_value:35,loop:36,rect:37,opt:38,alt:39,else_sections:40,par:41,par_sections:42,par_over:43,critical:44,option_sections:45,break:46,option:47,and:48,else:49,participant:50,AS:51,participant_actor:52,destroy:53,note:54,placement:55,text2:56,over:57,actor_pair:58,links:59,link:60,properties:61,details:62,spaceList:63,",":64,left_of:65,right_of:66,signaltype:67,"+":68,"-":69,ACTOR:70,SOLID_OPEN_ARROW:71,DOTTED_OPEN_ARROW:72,SOLID_ARROW:73,BIDIRECTIONAL_SOLID_ARROW:74,DOTTED_ARROW:75,BIDIRECTIONAL_DOTTED_ARROW:76,SOLID_CROSS:77,DOTTED_CROSS:78,SOLID_POINT:79,DOTTED_POINT:80,TXT:81,$accept:0,$end:1},terminals_:{2:"error",4:"SPACE",5:"NEWLINE",6:"SD",13:"create",14:"box",15:"restOfLine",16:"end",18:"autonumber",19:"NUM",20:"off",21:"activate",23:"deactivate",29:"title",30:"legacy_title",31:"acc_title",32:"acc_title_value",33:"acc_descr",34:"acc_descr_value",35:"acc_descr_multiline_value",36:"loop",37:"rect",38:"opt",39:"alt",41:"par",43:"par_over",44:"critical",46:"break",47:"option",48:"and",49:"else",50:"participant",51:"AS",52:"participant_actor",53:"destroy",54:"note",57:"over",59:"links",60:"link",61:"properties",62:"details",64:",",65:"left_of",66:"right_of",68:"+",69:"-",70:"ACTOR",71:"SOLID_OPEN_ARROW",72:"DOTTED_OPEN_ARROW",73:"SOLID_ARROW",74:"BIDIRECTIONAL_SOLID_ARROW",75:"DOTTED_ARROW",76:"BIDIRECTIONAL_DOTTED_ARROW",77:"SOLID_CROSS",78:"DOTTED_CROSS",79:"SOLID_POINT",80:"DOTTED_POINT",81:"TXT"},productions_:[0,[3,2],[3,2],[3,2],[7,0],[7,2],[8,2],[8,1],[8,1],[10,0],[10,2],[11,2],[11,1],[11,1],[9,1],[9,2],[9,4],[9,2],[9,4],[9,3],[9,3],[9,2],[9,3],[9,3],[9,2],[9,2],[9,2],[9,2],[9,2],[9,1],[9,1],[9,2],[9,2],[9,1],[9,4],[9,4],[9,4],[9,4],[9,4],[9,4],[9,4],[9,4],[45,1],[45,4],[42,1],[42,4],[40,1],[40,4],[12,5],[12,3],[12,5],[12,3],[12,3],[24,4],[24,4],[25,3],[26,3],[27,3],[28,3],[63,2],[63,1],[58,3],[58,1],[55,1],[55,1],[17,5],[17,5],[17,4],[22,1],[67,1],[67,1],[67,1],[67,1],[67,1],[67,1],[67,1],[67,1],[67,1],[67,1],[56,1]],performAction:o(function(q,Q,ae,ue,ce,te,Ne){var se=te.length-1;switch(ce){case 3:return ue.apply(te[se]),te[se];break;case 4:case 9:this.$=[];break;case 5:case 10:te[se-1].push(te[se]),this.$=te[se-1];break;case 6:case 7:case 11:case 12:this.$=te[se];break;case 8:case 13:this.$=[];break;case 15:te[se].type="createParticipant",this.$=te[se];break;case 16:te[se-1].unshift({type:"boxStart",boxData:ue.parseBoxData(te[se-2])}),te[se-1].push({type:"boxEnd",boxText:te[se-2]}),this.$=te[se-1];break;case 18:this.$={type:"sequenceIndex",sequenceIndex:Number(te[se-2]),sequenceIndexStep:Number(te[se-1]),sequenceVisible:!0,signalType:ue.LINETYPE.AUTONUMBER};break;case 19:this.$={type:"sequenceIndex",sequenceIndex:Number(te[se-1]),sequenceIndexStep:1,sequenceVisible:!0,signalType:ue.LINETYPE.AUTONUMBER};break;case 20:this.$={type:"sequenceIndex",sequenceVisible:!1,signalType:ue.LINETYPE.AUTONUMBER};break;case 21:this.$={type:"sequenceIndex",sequenceVisible:!0,signalType:ue.LINETYPE.AUTONUMBER};break;case 22:this.$={type:"activeStart",signalType:ue.LINETYPE.ACTIVE_START,actor:te[se-1].actor};break;case 23:this.$={type:"activeEnd",signalType:ue.LINETYPE.ACTIVE_END,actor:te[se-1].actor};break;case 29:ue.setDiagramTitle(te[se].substring(6)),this.$=te[se].substring(6);break;case 30:ue.setDiagramTitle(te[se].substring(7)),this.$=te[se].substring(7);break;case 31:this.$=te[se].trim(),ue.setAccTitle(this.$);break;case 32:case 33:this.$=te[se].trim(),ue.setAccDescription(this.$);break;case 34:te[se-1].unshift({type:"loopStart",loopText:ue.parseMessage(te[se-2]),signalType:ue.LINETYPE.LOOP_START}),te[se-1].push({type:"loopEnd",loopText:te[se-2],signalType:ue.LINETYPE.LOOP_END}),this.$=te[se-1];break;case 35:te[se-1].unshift({type:"rectStart",color:ue.parseMessage(te[se-2]),signalType:ue.LINETYPE.RECT_START}),te[se-1].push({type:"rectEnd",color:ue.parseMessage(te[se-2]),signalType:ue.LINETYPE.RECT_END}),this.$=te[se-1];break;case 36:te[se-1].unshift({type:"optStart",optText:ue.parseMessage(te[se-2]),signalType:ue.LINETYPE.OPT_START}),te[se-1].push({type:"optEnd",optText:ue.parseMessage(te[se-2]),signalType:ue.LINETYPE.OPT_END}),this.$=te[se-1];break;case 37:te[se-1].unshift({type:"altStart",altText:ue.parseMessage(te[se-2]),signalType:ue.LINETYPE.ALT_START}),te[se-1].push({type:"altEnd",signalType:ue.LINETYPE.ALT_END}),this.$=te[se-1];break;case 38:te[se-1].unshift({type:"parStart",parText:ue.parseMessage(te[se-2]),signalType:ue.LINETYPE.PAR_START}),te[se-1].push({type:"parEnd",signalType:ue.LINETYPE.PAR_END}),this.$=te[se-1];break;case 39:te[se-1].unshift({type:"parStart",parText:ue.parseMessage(te[se-2]),signalType:ue.LINETYPE.PAR_OVER_START}),te[se-1].push({type:"parEnd",signalType:ue.LINETYPE.PAR_END}),this.$=te[se-1];break;case 40:te[se-1].unshift({type:"criticalStart",criticalText:ue.parseMessage(te[se-2]),signalType:ue.LINETYPE.CRITICAL_START}),te[se-1].push({type:"criticalEnd",signalType:ue.LINETYPE.CRITICAL_END}),this.$=te[se-1];break;case 41:te[se-1].unshift({type:"breakStart",breakText:ue.parseMessage(te[se-2]),signalType:ue.LINETYPE.BREAK_START}),te[se-1].push({type:"breakEnd",optText:ue.parseMessage(te[se-2]),signalType:ue.LINETYPE.BREAK_END}),this.$=te[se-1];break;case 43:this.$=te[se-3].concat([{type:"option",optionText:ue.parseMessage(te[se-1]),signalType:ue.LINETYPE.CRITICAL_OPTION},te[se]]);break;case 45:this.$=te[se-3].concat([{type:"and",parText:ue.parseMessage(te[se-1]),signalType:ue.LINETYPE.PAR_AND},te[se]]);break;case 47:this.$=te[se-3].concat([{type:"else",altText:ue.parseMessage(te[se-1]),signalType:ue.LINETYPE.ALT_ELSE},te[se]]);break;case 48:te[se-3].draw="participant",te[se-3].type="addParticipant",te[se-3].description=ue.parseMessage(te[se-1]),this.$=te[se-3];break;case 49:te[se-1].draw="participant",te[se-1].type="addParticipant",this.$=te[se-1];break;case 50:te[se-3].draw="actor",te[se-3].type="addParticipant",te[se-3].description=ue.parseMessage(te[se-1]),this.$=te[se-3];break;case 51:te[se-1].draw="actor",te[se-1].type="addParticipant",this.$=te[se-1];break;case 52:te[se-1].type="destroyParticipant",this.$=te[se-1];break;case 53:this.$=[te[se-1],{type:"addNote",placement:te[se-2],actor:te[se-1].actor,text:te[se]}];break;case 54:te[se-2]=[].concat(te[se-1],te[se-1]).slice(0,2),te[se-2][0]=te[se-2][0].actor,te[se-2][1]=te[se-2][1].actor,this.$=[te[se-1],{type:"addNote",placement:ue.PLACEMENT.OVER,actor:te[se-2].slice(0,2),text:te[se]}];break;case 55:this.$=[te[se-1],{type:"addLinks",actor:te[se-1].actor,text:te[se]}];break;case 56:this.$=[te[se-1],{type:"addALink",actor:te[se-1].actor,text:te[se]}];break;case 57:this.$=[te[se-1],{type:"addProperties",actor:te[se-1].actor,text:te[se]}];break;case 58:this.$=[te[se-1],{type:"addDetails",actor:te[se-1].actor,text:te[se]}];break;case 61:this.$=[te[se-2],te[se]];break;case 62:this.$=te[se];break;case 63:this.$=ue.PLACEMENT.LEFTOF;break;case 64:this.$=ue.PLACEMENT.RIGHTOF;break;case 65:this.$=[te[se-4],te[se-1],{type:"addMessage",from:te[se-4].actor,to:te[se-1].actor,signalType:te[se-3],msg:te[se],activate:!0},{type:"activeStart",signalType:ue.LINETYPE.ACTIVE_START,actor:te[se-1].actor}];break;case 66:this.$=[te[se-4],te[se-1],{type:"addMessage",from:te[se-4].actor,to:te[se-1].actor,signalType:te[se-3],msg:te[se]},{type:"activeEnd",signalType:ue.LINETYPE.ACTIVE_END,actor:te[se-4].actor}];break;case 67:this.$=[te[se-3],te[se-1],{type:"addMessage",from:te[se-3].actor,to:te[se-1].actor,signalType:te[se-2],msg:te[se]}];break;case 68:this.$={type:"addParticipant",actor:te[se]};break;case 69:this.$=ue.LINETYPE.SOLID_OPEN;break;case 70:this.$=ue.LINETYPE.DOTTED_OPEN;break;case 71:this.$=ue.LINETYPE.SOLID;break;case 72:this.$=ue.LINETYPE.BIDIRECTIONAL_SOLID;break;case 73:this.$=ue.LINETYPE.DOTTED;break;case 74:this.$=ue.LINETYPE.BIDIRECTIONAL_DOTTED;break;case 75:this.$=ue.LINETYPE.SOLID_CROSS;break;case 76:this.$=ue.LINETYPE.DOTTED_CROSS;break;case 77:this.$=ue.LINETYPE.SOLID_POINT;break;case 78:this.$=ue.LINETYPE.DOTTED_POINT;break;case 79:this.$=ue.parseMessage(te[se].trim().substring(1));break}},"anonymous"),table:[{3:1,4:e,5:r,6:n},{1:[3]},{3:5,4:e,5:r,6:n},{3:6,4:e,5:r,6:n},t([1,4,5,13,14,18,21,23,29,30,31,33,35,36,37,38,39,41,43,44,46,50,52,53,54,59,60,61,62,70],i,{7:7}),{1:[2,1]},{1:[2,2]},{1:[2,3],4:a,5:s,8:8,9:10,12:12,13:l,14:u,17:15,18:h,21:f,22:40,23:d,24:19,25:20,26:21,27:22,28:23,29:p,30:m,31:g,33:y,35:v,36:x,37:b,38:w,39:_,41:T,43:E,44:L,46:S,50:A,52:I,53:D,54:k,59:R,60:C,61:O,62:N,70:P},t(F,[2,5]),{9:47,12:12,13:l,14:u,17:15,18:h,21:f,22:40,23:d,24:19,25:20,26:21,27:22,28:23,29:p,30:m,31:g,33:y,35:v,36:x,37:b,38:w,39:_,41:T,43:E,44:L,46:S,50:A,52:I,53:D,54:k,59:R,60:C,61:O,62:N,70:P},t(F,[2,7]),t(F,[2,8]),t(F,[2,14]),{12:48,50:A,52:I,53:D},{15:[1,49]},{5:[1,50]},{5:[1,53],19:[1,51],20:[1,52]},{22:54,70:P},{22:55,70:P},{5:[1,56]},{5:[1,57]},{5:[1,58]},{5:[1,59]},{5:[1,60]},t(F,[2,29]),t(F,[2,30]),{32:[1,61]},{34:[1,62]},t(F,[2,33]),{15:[1,63]},{15:[1,64]},{15:[1,65]},{15:[1,66]},{15:[1,67]},{15:[1,68]},{15:[1,69]},{15:[1,70]},{22:71,70:P},{22:72,70:P},{22:73,70:P},{67:74,71:[1,75],72:[1,76],73:[1,77],74:[1,78],75:[1,79],76:[1,80],77:[1,81],78:[1,82],79:[1,83],80:[1,84]},{55:85,57:[1,86],65:[1,87],66:[1,88]},{22:89,70:P},{22:90,70:P},{22:91,70:P},{22:92,70:P},t([5,51,64,71,72,73,74,75,76,77,78,79,80,81],[2,68]),t(F,[2,6]),t(F,[2,15]),t(B,[2,9],{10:93}),t(F,[2,17]),{5:[1,95],19:[1,94]},{5:[1,96]},t(F,[2,21]),{5:[1,97]},{5:[1,98]},t(F,[2,24]),t(F,[2,25]),t(F,[2,26]),t(F,[2,27]),t(F,[2,28]),t(F,[2,31]),t(F,[2,32]),t(G,i,{7:99}),t(G,i,{7:100}),t(G,i,{7:101}),t(z,i,{40:102,7:103}),t(W,i,{42:104,7:105}),t(W,i,{7:105,42:106}),t(Z,i,{45:107,7:108}),t(G,i,{7:109}),{5:[1,111],51:[1,110]},{5:[1,113],51:[1,112]},{5:[1,114]},{22:117,68:[1,115],69:[1,116],70:P},t(j,[2,69]),t(j,[2,70]),t(j,[2,71]),t(j,[2,72]),t(j,[2,73]),t(j,[2,74]),t(j,[2,75]),t(j,[2,76]),t(j,[2,77]),t(j,[2,78]),{22:118,70:P},{22:120,58:119,70:P},{70:[2,63]},{70:[2,64]},{56:121,81:oe},{56:123,81:oe},{56:124,81:oe},{56:125,81:oe},{4:[1,128],5:[1,130],11:127,12:129,16:[1,126],50:A,52:I,53:D},{5:[1,131]},t(F,[2,19]),t(F,[2,20]),t(F,[2,22]),t(F,[2,23]),{4:a,5:s,8:8,9:10,12:12,13:l,14:u,16:[1,132],17:15,18:h,21:f,22:40,23:d,24:19,25:20,26:21,27:22,28:23,29:p,30:m,31:g,33:y,35:v,36:x,37:b,38:w,39:_,41:T,43:E,44:L,46:S,50:A,52:I,53:D,54:k,59:R,60:C,61:O,62:N,70:P},{4:a,5:s,8:8,9:10,12:12,13:l,14:u,16:[1,133],17:15,18:h,21:f,22:40,23:d,24:19,25:20,26:21,27:22,28:23,29:p,30:m,31:g,33:y,35:v,36:x,37:b,38:w,39:_,41:T,43:E,44:L,46:S,50:A,52:I,53:D,54:k,59:R,60:C,61:O,62:N,70:P},{4:a,5:s,8:8,9:10,12:12,13:l,14:u,16:[1,134],17:15,18:h,21:f,22:40,23:d,24:19,25:20,26:21,27:22,28:23,29:p,30:m,31:g,33:y,35:v,36:x,37:b,38:w,39:_,41:T,43:E,44:L,46:S,50:A,52:I,53:D,54:k,59:R,60:C,61:O,62:N,70:P},{16:[1,135]},{4:a,5:s,8:8,9:10,12:12,13:l,14:u,16:[2,46],17:15,18:h,21:f,22:40,23:d,24:19,25:20,26:21,27:22,28:23,29:p,30:m,31:g,33:y,35:v,36:x,37:b,38:w,39:_,41:T,43:E,44:L,46:S,49:[1,136],50:A,52:I,53:D,54:k,59:R,60:C,61:O,62:N,70:P},{16:[1,137]},{4:a,5:s,8:8,9:10,12:12,13:l,14:u,16:[2,44],17:15,18:h,21:f,22:40,23:d,24:19,25:20,26:21,27:22,28:23,29:p,30:m,31:g,33:y,35:v,36:x,37:b,38:w,39:_,41:T,43:E,44:L,46:S,48:[1,138],50:A,52:I,53:D,54:k,59:R,60:C,61:O,62:N,70:P},{16:[1,139]},{16:[1,140]},{4:a,5:s,8:8,9:10,12:12,13:l,14:u,16:[2,42],17:15,18:h,21:f,22:40,23:d,24:19,25:20,26:21,27:22,28:23,29:p,30:m,31:g,33:y,35:v,36:x,37:b,38:w,39:_,41:T,43:E,44:L,46:S,47:[1,141],50:A,52:I,53:D,54:k,59:R,60:C,61:O,62:N,70:P},{4:a,5:s,8:8,9:10,12:12,13:l,14:u,16:[1,142],17:15,18:h,21:f,22:40,23:d,24:19,25:20,26:21,27:22,28:23,29:p,30:m,31:g,33:y,35:v,36:x,37:b,38:w,39:_,41:T,43:E,44:L,46:S,50:A,52:I,53:D,54:k,59:R,60:C,61:O,62:N,70:P},{15:[1,143]},t(F,[2,49]),{15:[1,144]},t(F,[2,51]),t(F,[2,52]),{22:145,70:P},{22:146,70:P},{56:147,81:oe},{56:148,81:oe},{56:149,81:oe},{64:[1,150],81:[2,62]},{5:[2,55]},{5:[2,79]},{5:[2,56]},{5:[2,57]},{5:[2,58]},t(F,[2,16]),t(B,[2,10]),{12:151,50:A,52:I,53:D},t(B,[2,12]),t(B,[2,13]),t(F,[2,18]),t(F,[2,34]),t(F,[2,35]),t(F,[2,36]),t(F,[2,37]),{15:[1,152]},t(F,[2,38]),{15:[1,153]},t(F,[2,39]),t(F,[2,40]),{15:[1,154]},t(F,[2,41]),{5:[1,155]},{5:[1,156]},{56:157,81:oe},{56:158,81:oe},{5:[2,67]},{5:[2,53]},{5:[2,54]},{22:159,70:P},t(B,[2,11]),t(z,i,{7:103,40:160}),t(W,i,{7:105,42:161}),t(Z,i,{7:108,45:162}),t(F,[2,48]),t(F,[2,50]),{5:[2,65]},{5:[2,66]},{81:[2,61]},{16:[2,47]},{16:[2,45]},{16:[2,43]}],defaultActions:{5:[2,1],6:[2,2],87:[2,63],88:[2,64],121:[2,55],122:[2,79],123:[2,56],124:[2,57],125:[2,58],147:[2,67],148:[2,53],149:[2,54],157:[2,65],158:[2,66],159:[2,61],160:[2,47],161:[2,45],162:[2,43]},parseError:o(function(q,Q){if(Q.recoverable)this.trace(q);else{var ae=new Error(q);throw ae.hash=Q,ae}},"parseError"),parse:o(function(q){var Q=this,ae=[0],ue=[],ce=[null],te=[],Ne=this.table,se="",ke=0,Re=0,Ce=0,Pe=2,Ie=1,$e=te.slice.call(arguments,1),ye=Object.create(this.lexer),X={yy:{}};for(var fe in this.yy)Object.prototype.hasOwnProperty.call(this.yy,fe)&&(X.yy[fe]=this.yy[fe]);ye.setInput(q,X.yy),X.yy.lexer=ye,X.yy.parser=this,typeof ye.yylloc>"u"&&(ye.yylloc={});var he=ye.yylloc;te.push(he);var ge=ye.options&&ye.options.ranges;typeof X.yy.parseError=="function"?this.parseError=X.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function ne(kt){ae.length=ae.length-2*kt,ce.length=ce.length-kt,te.length=te.length-kt}o(ne,"popStack");function ve(){var kt;return kt=ue.pop()||ye.lex()||Ie,typeof kt!="number"&&(kt instanceof Array&&(ue=kt,kt=ue.pop()),kt=Q.symbols_[kt]||kt),kt}o(ve,"lex");for(var U,Te,ie,Ee,Ae,Ge,Be={},me,He,Oe,et;;){if(ie=ae[ae.length-1],this.defaultActions[ie]?Ee=this.defaultActions[ie]:((U===null||typeof U>"u")&&(U=ve()),Ee=Ne[ie]&&Ne[ie][U]),typeof Ee>"u"||!Ee.length||!Ee[0]){var bt="";et=[];for(me in Ne[ie])this.terminals_[me]&&me>Pe&&et.push("'"+this.terminals_[me]+"'");ye.showPosition?bt="Parse error on line "+(ke+1)+`: +`+ye.showPosition()+` +Expecting `+et.join(", ")+", got '"+(this.terminals_[U]||U)+"'":bt="Parse error on line "+(ke+1)+": Unexpected "+(U==Ie?"end of input":"'"+(this.terminals_[U]||U)+"'"),this.parseError(bt,{text:ye.match,token:this.terminals_[U]||U,line:ye.yylineno,loc:he,expected:et})}if(Ee[0]instanceof Array&&Ee.length>1)throw new Error("Parse Error: multiple actions possible at state: "+ie+", token: "+U);switch(Ee[0]){case 1:ae.push(U),ce.push(ye.yytext),te.push(ye.yylloc),ae.push(Ee[1]),U=null,Te?(U=Te,Te=null):(Re=ye.yyleng,se=ye.yytext,ke=ye.yylineno,he=ye.yylloc,Ce>0&&Ce--);break;case 2:if(He=this.productions_[Ee[1]][1],Be.$=ce[ce.length-He],Be._$={first_line:te[te.length-(He||1)].first_line,last_line:te[te.length-1].last_line,first_column:te[te.length-(He||1)].first_column,last_column:te[te.length-1].last_column},ge&&(Be._$.range=[te[te.length-(He||1)].range[0],te[te.length-1].range[1]]),Ge=this.performAction.apply(Be,[se,Re,ke,X.yy,Ee[1],ce,te].concat($e)),typeof Ge<"u")return Ge;He&&(ae=ae.slice(0,-1*He*2),ce=ce.slice(0,-1*He),te=te.slice(0,-1*He)),ae.push(this.productions_[Ee[1]][0]),ce.push(Be.$),te.push(Be._$),Oe=Ne[ae[ae.length-2]][ae[ae.length-1]],ae.push(Oe);break;case 3:return!0}}return!0},"parse")},ee=function(){var H={EOF:1,parseError:o(function(Q,ae){if(this.yy.parser)this.yy.parser.parseError(Q,ae);else throw new Error(Q)},"parseError"),setInput:o(function(q,Q){return this.yy=Q||this.yy||{},this._input=q,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},"setInput"),input:o(function(){var q=this._input[0];this.yytext+=q,this.yyleng++,this.offset++,this.match+=q,this.matched+=q;var Q=q.match(/(?:\r\n?|\n).*/g);return Q?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),q},"input"),unput:o(function(q){var Q=q.length,ae=q.split(/(?:\r\n?|\n)/g);this._input=q+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-Q),this.offset-=Q;var ue=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),ae.length-1&&(this.yylineno-=ae.length-1);var ce=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:ae?(ae.length===ue.length?this.yylloc.first_column:0)+ue[ue.length-ae.length].length-ae[0].length:this.yylloc.first_column-Q},this.options.ranges&&(this.yylloc.range=[ce[0],ce[0]+this.yyleng-Q]),this.yyleng=this.yytext.length,this},"unput"),more:o(function(){return this._more=!0,this},"more"),reject:o(function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true). +`+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},"reject"),less:o(function(q){this.unput(this.match.slice(q))},"less"),pastInput:o(function(){var q=this.matched.substr(0,this.matched.length-this.match.length);return(q.length>20?"...":"")+q.substr(-20).replace(/\n/g,"")},"pastInput"),upcomingInput:o(function(){var q=this.match;return q.length<20&&(q+=this._input.substr(0,20-q.length)),(q.substr(0,20)+(q.length>20?"...":"")).replace(/\n/g,"")},"upcomingInput"),showPosition:o(function(){var q=this.pastInput(),Q=new Array(q.length+1).join("-");return q+this.upcomingInput()+` +`+Q+"^"},"showPosition"),test_match:o(function(q,Q){var ae,ue,ce;if(this.options.backtrack_lexer&&(ce={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(ce.yylloc.range=this.yylloc.range.slice(0))),ue=q[0].match(/(?:\r\n?|\n).*/g),ue&&(this.yylineno+=ue.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:ue?ue[ue.length-1].length-ue[ue.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+q[0].length},this.yytext+=q[0],this.match+=q[0],this.matches=q,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(q[0].length),this.matched+=q[0],ae=this.performAction.call(this,this.yy,this,Q,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),ae)return ae;if(this._backtrack){for(var te in ce)this[te]=ce[te];return!1}return!1},"test_match"),next:o(function(){if(this.done)return this.EOF;this._input||(this.done=!0);var q,Q,ae,ue;this._more||(this.yytext="",this.match="");for(var ce=this._currentRules(),te=0;teQ[0].length)){if(Q=ae,ue=te,this.options.backtrack_lexer){if(q=this.test_match(ae,ce[te]),q!==!1)return q;if(this._backtrack){Q=!1;continue}else return!1}else if(!this.options.flex)break}return Q?(q=this.test_match(Q,ce[ue]),q!==!1?q:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text. +`+this.showPosition(),{text:"",token:null,line:this.yylineno})},"next"),lex:o(function(){var Q=this.next();return Q||this.lex()},"lex"),begin:o(function(Q){this.conditionStack.push(Q)},"begin"),popState:o(function(){var Q=this.conditionStack.length-1;return Q>0?this.conditionStack.pop():this.conditionStack[0]},"popState"),_currentRules:o(function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},"_currentRules"),topState:o(function(Q){return Q=this.conditionStack.length-1-Math.abs(Q||0),Q>=0?this.conditionStack[Q]:"INITIAL"},"topState"),pushState:o(function(Q){this.begin(Q)},"pushState"),stateStackSize:o(function(){return this.conditionStack.length},"stateStackSize"),options:{"case-insensitive":!0},performAction:o(function(Q,ae,ue,ce){var te=ce;switch(ue){case 0:return 5;case 1:break;case 2:break;case 3:break;case 4:break;case 5:break;case 6:return 19;case 7:return this.begin("LINE"),14;break;case 8:return this.begin("ID"),50;break;case 9:return this.begin("ID"),52;break;case 10:return 13;case 11:return this.begin("ID"),53;break;case 12:return ae.yytext=ae.yytext.trim(),this.begin("ALIAS"),70;break;case 13:return this.popState(),this.popState(),this.begin("LINE"),51;break;case 14:return this.popState(),this.popState(),5;break;case 15:return this.begin("LINE"),36;break;case 16:return this.begin("LINE"),37;break;case 17:return this.begin("LINE"),38;break;case 18:return this.begin("LINE"),39;break;case 19:return this.begin("LINE"),49;break;case 20:return this.begin("LINE"),41;break;case 21:return this.begin("LINE"),43;break;case 22:return this.begin("LINE"),48;break;case 23:return this.begin("LINE"),44;break;case 24:return this.begin("LINE"),47;break;case 25:return this.begin("LINE"),46;break;case 26:return this.popState(),15;break;case 27:return 16;case 28:return 65;case 29:return 66;case 30:return 59;case 31:return 60;case 32:return 61;case 33:return 62;case 34:return 57;case 35:return 54;case 36:return this.begin("ID"),21;break;case 37:return this.begin("ID"),23;break;case 38:return 29;case 39:return 30;case 40:return this.begin("acc_title"),31;break;case 41:return this.popState(),"acc_title_value";break;case 42:return this.begin("acc_descr"),33;break;case 43:return this.popState(),"acc_descr_value";break;case 44:this.begin("acc_descr_multiline");break;case 45:this.popState();break;case 46:return"acc_descr_multiline_value";case 47:return 6;case 48:return 18;case 49:return 20;case 50:return 64;case 51:return 5;case 52:return ae.yytext=ae.yytext.trim(),70;break;case 53:return 73;case 54:return 74;case 55:return 75;case 56:return 76;case 57:return 71;case 58:return 72;case 59:return 77;case 60:return 78;case 61:return 79;case 62:return 80;case 63:return 81;case 64:return 68;case 65:return 69;case 66:return 5;case 67:return"INVALID"}},"anonymous"),rules:[/^(?:[\n]+)/i,/^(?:\s+)/i,/^(?:((?!\n)\s)+)/i,/^(?:#[^\n]*)/i,/^(?:%(?!\{)[^\n]*)/i,/^(?:[^\}]%%[^\n]*)/i,/^(?:[0-9]+(?=[ \n]+))/i,/^(?:box\b)/i,/^(?:participant\b)/i,/^(?:actor\b)/i,/^(?:create\b)/i,/^(?:destroy\b)/i,/^(?:[^\<->\->:\n,;]+?([\-]*[^\<->\->:\n,;]+?)*?(?=((?!\n)\s)+as(?!\n)\s|[#\n;]|$))/i,/^(?:as\b)/i,/^(?:(?:))/i,/^(?:loop\b)/i,/^(?:rect\b)/i,/^(?:opt\b)/i,/^(?:alt\b)/i,/^(?:else\b)/i,/^(?:par\b)/i,/^(?:par_over\b)/i,/^(?:and\b)/i,/^(?:critical\b)/i,/^(?:option\b)/i,/^(?:break\b)/i,/^(?:(?:[:]?(?:no)?wrap)?[^#\n;]*)/i,/^(?:end\b)/i,/^(?:left of\b)/i,/^(?:right of\b)/i,/^(?:links\b)/i,/^(?:link\b)/i,/^(?:properties\b)/i,/^(?:details\b)/i,/^(?:over\b)/i,/^(?:note\b)/i,/^(?:activate\b)/i,/^(?:deactivate\b)/i,/^(?:title\s[^#\n;]+)/i,/^(?:title:\s[^#\n;]+)/i,/^(?:accTitle\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*\{\s*)/i,/^(?:[\}])/i,/^(?:[^\}]*)/i,/^(?:sequenceDiagram\b)/i,/^(?:autonumber\b)/i,/^(?:off\b)/i,/^(?:,)/i,/^(?:;)/i,/^(?:[^\+\<->\->:\n,;]+((?!(-x|--x|-\)|--\)))[\-]*[^\+\<->\->:\n,;]+)*)/i,/^(?:->>)/i,/^(?:<<->>)/i,/^(?:-->>)/i,/^(?:<<-->>)/i,/^(?:->)/i,/^(?:-->)/i,/^(?:-[x])/i,/^(?:--[x])/i,/^(?:-[\)])/i,/^(?:--[\)])/i,/^(?::(?:(?:no)?wrap)?[^#\n;]+)/i,/^(?:\+)/i,/^(?:-)/i,/^(?:$)/i,/^(?:.)/i],conditions:{acc_descr_multiline:{rules:[45,46],inclusive:!1},acc_descr:{rules:[43],inclusive:!1},acc_title:{rules:[41],inclusive:!1},ID:{rules:[2,3,12],inclusive:!1},ALIAS:{rules:[2,3,13,14],inclusive:!1},LINE:{rules:[2,3,26],inclusive:!1},INITIAL:{rules:[0,1,3,4,5,6,7,8,9,10,11,15,16,17,18,19,20,21,22,23,24,25,27,28,29,30,31,32,33,34,35,36,37,38,39,40,42,44,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67],inclusive:!0}}};return H}();K.lexer=ee;function J(){this.yy={}}return o(J,"Parser"),J.prototype=K,K.Parser=J,new J}();TO.parser=TO;Gfe=TO});function EO(t,e){if(t.links==null)t.links=e;else for(let r in e)t.links[r]=e[r]}function Yfe(t,e){if(t.properties==null)t.properties=e;else for(let r in e)t.properties[r]=e[r]}function UUe(){$t.records.currentBox=void 0}var $t,TUe,kO,kUe,EUe,wi,SUe,CUe,AUe,_Ue,LUe,DUe,NUe,Ox,RUe,MUe,IUe,OUe,PUe,Vfe,M0,BUe,FUe,zUe,Ix,GUe,$Ue,Ufe,Hfe,VUe,Wfe,qfe,HUe,Xfe,SO,jfe=M(()=>{"use strict";Vt();ut();dE();fr();Ai();$t=new vf(()=>({prevActor:void 0,actors:new Map,createdActors:new Map,destroyedActors:new Map,boxes:[],messages:[],notes:[],sequenceNumbersEnabled:!1,wrapEnabled:void 0,currentBox:void 0,lastCreated:void 0,lastDestroyed:void 0})),TUe=o(function(t){$t.records.boxes.push({name:t.text,wrap:t.wrap??M0(),fill:t.color,actorKeys:[]}),$t.records.currentBox=$t.records.boxes.slice(-1)[0]},"addBox"),kO=o(function(t,e,r,n){let i=$t.records.currentBox,a=$t.records.actors.get(t);if(a){if($t.records.currentBox&&a.box&&$t.records.currentBox!==a.box)throw new Error(`A same participant should only be defined in one Box: ${a.name} can't be in '${a.box.name}' and in '${$t.records.currentBox.name}' at the same time.`);if(i=a.box?a.box:$t.records.currentBox,a.box=i,a&&e===a.name&&r==null)return}if(r?.text==null&&(r={text:e,type:n}),(n==null||r.text==null)&&(r={text:e,type:n}),$t.records.actors.set(t,{box:i,name:e,description:r.text,wrap:r.wrap??M0(),prevActor:$t.records.prevActor,links:{},properties:{},actorCnt:null,rectData:null,type:n??"participant"}),$t.records.prevActor){let s=$t.records.actors.get($t.records.prevActor);s&&(s.nextActor=t)}$t.records.currentBox&&$t.records.currentBox.actorKeys.push(t),$t.records.prevActor=t},"addActor"),kUe=o(t=>{let e,r=0;if(!t)return 0;for(e=0;e<$t.records.messages.length;e++)$t.records.messages[e].type===Ix.ACTIVE_START&&$t.records.messages[e].from===t&&r++,$t.records.messages[e].type===Ix.ACTIVE_END&&$t.records.messages[e].from===t&&r--;return r},"activationCount"),EUe=o(function(t,e,r,n){$t.records.messages.push({from:t,to:e,message:r.text,wrap:r.wrap??M0(),answer:n})},"addMessage"),wi=o(function(t,e,r,n,i=!1){if(n===Ix.ACTIVE_END&&kUe(t??"")<1){let s=new Error("Trying to inactivate an inactive participant ("+t+")");throw s.hash={text:"->>-",token:"->>-",line:"1",loc:{first_line:1,last_line:1,first_column:1,last_column:1},expected:["'ACTIVE_PARTICIPANT'"]},s}return $t.records.messages.push({from:t,to:e,message:r?.text??"",wrap:r?.wrap??M0(),type:n,activate:i}),!0},"addSignal"),SUe=o(function(){return $t.records.boxes.length>0},"hasAtLeastOneBox"),CUe=o(function(){return $t.records.boxes.some(t=>t.name)},"hasAtLeastOneBoxWithTitle"),AUe=o(function(){return $t.records.messages},"getMessages"),_Ue=o(function(){return $t.records.boxes},"getBoxes"),LUe=o(function(){return $t.records.actors},"getActors"),DUe=o(function(){return $t.records.createdActors},"getCreatedActors"),NUe=o(function(){return $t.records.destroyedActors},"getDestroyedActors"),Ox=o(function(t){return $t.records.actors.get(t)},"getActor"),RUe=o(function(){return[...$t.records.actors.keys()]},"getActorKeys"),MUe=o(function(){$t.records.sequenceNumbersEnabled=!0},"enableSequenceNumbers"),IUe=o(function(){$t.records.sequenceNumbersEnabled=!1},"disableSequenceNumbers"),OUe=o(()=>$t.records.sequenceNumbersEnabled,"showSequenceNumbers"),PUe=o(function(t){$t.records.wrapEnabled=t},"setWrap"),Vfe=o(t=>{if(t===void 0)return{};t=t.trim();let e=/^:?wrap:/.exec(t)!==null?!0:/^:?nowrap:/.exec(t)!==null?!1:void 0;return{cleanedText:(e===void 0?t:t.replace(/^:?(?:no)?wrap:/,"")).trim(),wrap:e}},"extractWrap"),M0=o(()=>$t.records.wrapEnabled!==void 0?$t.records.wrapEnabled:pe().sequence?.wrap??!1,"autoWrap"),BUe=o(function(){$t.reset(),Lr()},"clear"),FUe=o(function(t){let e=t.trim(),{wrap:r,cleanedText:n}=Vfe(e),i={text:n,wrap:r};return Y.debug(`parseMessage: ${JSON.stringify(i)}`),i},"parseMessage"),zUe=o(function(t){let e=/^((?:rgba?|hsla?)\s*\(.*\)|\w*)(.*)$/.exec(t),r=e?.[1]?e[1].trim():"transparent",n=e?.[2]?e[2].trim():void 0;if(window?.CSS)window.CSS.supports("color",r)||(r="transparent",n=t.trim());else{let s=new Option().style;s.color=r,s.color!==r&&(r="transparent",n=t.trim())}let{wrap:i,cleanedText:a}=Vfe(n);return{text:a?kr(a,pe()):void 0,color:r,wrap:i}},"parseBoxData"),Ix={SOLID:0,DOTTED:1,NOTE:2,SOLID_CROSS:3,DOTTED_CROSS:4,SOLID_OPEN:5,DOTTED_OPEN:6,LOOP_START:10,LOOP_END:11,ALT_START:12,ALT_ELSE:13,ALT_END:14,OPT_START:15,OPT_END:16,ACTIVE_START:17,ACTIVE_END:18,PAR_START:19,PAR_AND:20,PAR_END:21,RECT_START:22,RECT_END:23,SOLID_POINT:24,DOTTED_POINT:25,AUTONUMBER:26,CRITICAL_START:27,CRITICAL_OPTION:28,CRITICAL_END:29,BREAK_START:30,BREAK_END:31,PAR_OVER_START:32,BIDIRECTIONAL_SOLID:33,BIDIRECTIONAL_DOTTED:34},GUe={FILLED:0,OPEN:1},$Ue={LEFTOF:0,RIGHTOF:1,OVER:2},Ufe=o(function(t,e,r){let n={actor:t,placement:e,message:r.text,wrap:r.wrap??M0()},i=[].concat(t,t);$t.records.notes.push(n),$t.records.messages.push({from:i[0],to:i[1],message:r.text,wrap:r.wrap??M0(),type:Ix.NOTE,placement:e})},"addNote"),Hfe=o(function(t,e){let r=Ox(t);try{let n=kr(e.text,pe());n=n.replace(/&/g,"&"),n=n.replace(/=/g,"=");let i=JSON.parse(n);EO(r,i)}catch(n){Y.error("error while parsing actor link text",n)}},"addLinks"),VUe=o(function(t,e){let r=Ox(t);try{let n={},i=kr(e.text,pe()),a=i.indexOf("@");i=i.replace(/&/g,"&"),i=i.replace(/=/g,"=");let s=i.slice(0,a-1).trim(),l=i.slice(a+1).trim();n[s]=l,EO(r,n)}catch(n){Y.error("error while parsing actor link text",n)}},"addALink");o(EO,"insertLinks");Wfe=o(function(t,e){let r=Ox(t);try{let n=kr(e.text,pe()),i=JSON.parse(n);Yfe(r,i)}catch(n){Y.error("error while parsing actor properties text",n)}},"addProperties");o(Yfe,"insertProperties");o(UUe,"boxEnd");qfe=o(function(t,e){let r=Ox(t),n=document.getElementById(e.text);try{let i=n.innerHTML,a=JSON.parse(i);a.properties&&Yfe(r,a.properties),a.links&&EO(r,a.links)}catch(i){Y.error("error while parsing actor details text",i)}},"addDetails"),HUe=o(function(t,e){if(t?.properties!==void 0)return t.properties[e]},"getActorProperty"),Xfe=o(function(t){if(Array.isArray(t))t.forEach(function(e){Xfe(e)});else switch(t.type){case"sequenceIndex":$t.records.messages.push({from:void 0,to:void 0,message:{start:t.sequenceIndex,step:t.sequenceIndexStep,visible:t.sequenceVisible},wrap:!1,type:t.signalType});break;case"addParticipant":kO(t.actor,t.actor,t.description,t.draw);break;case"createParticipant":if($t.records.actors.has(t.actor))throw new Error("It is not possible to have actors with the same id, even if one is destroyed before the next is created. Use 'AS' aliases to simulate the behavior");$t.records.lastCreated=t.actor,kO(t.actor,t.actor,t.description,t.draw),$t.records.createdActors.set(t.actor,$t.records.messages.length);break;case"destroyParticipant":$t.records.lastDestroyed=t.actor,$t.records.destroyedActors.set(t.actor,$t.records.messages.length);break;case"activeStart":wi(t.actor,void 0,void 0,t.signalType);break;case"activeEnd":wi(t.actor,void 0,void 0,t.signalType);break;case"addNote":Ufe(t.actor,t.placement,t.text);break;case"addLinks":Hfe(t.actor,t.text);break;case"addALink":VUe(t.actor,t.text);break;case"addProperties":Wfe(t.actor,t.text);break;case"addDetails":qfe(t.actor,t.text);break;case"addMessage":if($t.records.lastCreated){if(t.to!==$t.records.lastCreated)throw new Error("The created participant "+$t.records.lastCreated.name+" does not have an associated creating message after its declaration. Please check the sequence diagram.");$t.records.lastCreated=void 0}else if($t.records.lastDestroyed){if(t.to!==$t.records.lastDestroyed&&t.from!==$t.records.lastDestroyed)throw new Error("The destroyed participant "+$t.records.lastDestroyed.name+" does not have an associated destroying message after its declaration. Please check the sequence diagram.");$t.records.lastDestroyed=void 0}wi(t.from,t.to,t.msg,t.signalType,t.activate);break;case"boxStart":TUe(t.boxData);break;case"boxEnd":UUe();break;case"loopStart":wi(void 0,void 0,t.loopText,t.signalType);break;case"loopEnd":wi(void 0,void 0,void 0,t.signalType);break;case"rectStart":wi(void 0,void 0,t.color,t.signalType);break;case"rectEnd":wi(void 0,void 0,void 0,t.signalType);break;case"optStart":wi(void 0,void 0,t.optText,t.signalType);break;case"optEnd":wi(void 0,void 0,void 0,t.signalType);break;case"altStart":wi(void 0,void 0,t.altText,t.signalType);break;case"else":wi(void 0,void 0,t.altText,t.signalType);break;case"altEnd":wi(void 0,void 0,void 0,t.signalType);break;case"setAccTitle":Mr(t.text);break;case"parStart":wi(void 0,void 0,t.parText,t.signalType);break;case"and":wi(void 0,void 0,t.parText,t.signalType);break;case"parEnd":wi(void 0,void 0,void 0,t.signalType);break;case"criticalStart":wi(void 0,void 0,t.criticalText,t.signalType);break;case"option":wi(void 0,void 0,t.optionText,t.signalType);break;case"criticalEnd":wi(void 0,void 0,void 0,t.signalType);break;case"breakStart":wi(void 0,void 0,t.breakText,t.signalType);break;case"breakEnd":wi(void 0,void 0,void 0,t.signalType);break}},"apply"),SO={addActor:kO,addMessage:EUe,addSignal:wi,addLinks:Hfe,addDetails:qfe,addProperties:Wfe,autoWrap:M0,setWrap:PUe,enableSequenceNumbers:MUe,disableSequenceNumbers:IUe,showSequenceNumbers:OUe,getMessages:AUe,getActors:LUe,getCreatedActors:DUe,getDestroyedActors:NUe,getActor:Ox,getActorKeys:RUe,getActorProperty:HUe,getAccTitle:Br,getBoxes:_Ue,getDiagramTitle:Jr,setDiagramTitle:cn,getConfig:o(()=>pe().sequence,"getConfig"),clear:BUe,parseMessage:FUe,parseBoxData:zUe,LINETYPE:Ix,ARROWTYPE:GUe,PLACEMENT:$Ue,addNote:Ufe,setAccTitle:Mr,apply:Xfe,setAccDescription:Fr,getAccDescription:zr,hasAtLeastOneBox:SUe,hasAtLeastOneBoxWithTitle:CUe}});var WUe,Kfe,Qfe=M(()=>{"use strict";WUe=o(t=>`.actor { + stroke: ${t.actorBorder}; + fill: ${t.actorBkg}; + } + + text.actor > tspan { + fill: ${t.actorTextColor}; + stroke: none; + } + + .actor-line { + stroke: ${t.actorLineColor}; + } + + .messageLine0 { + stroke-width: 1.5; + stroke-dasharray: none; + stroke: ${t.signalColor}; + } + + .messageLine1 { + stroke-width: 1.5; + stroke-dasharray: 2, 2; + stroke: ${t.signalColor}; + } + + #arrowhead path { + fill: ${t.signalColor}; + stroke: ${t.signalColor}; + } + + .sequenceNumber { + fill: ${t.sequenceNumberColor}; + } + + #sequencenumber { + fill: ${t.signalColor}; + } + + #crosshead path { + fill: ${t.signalColor}; + stroke: ${t.signalColor}; + } + + .messageText { + fill: ${t.signalTextColor}; + stroke: none; + } + + .labelBox { + stroke: ${t.labelBoxBorderColor}; + fill: ${t.labelBoxBkgColor}; + } + + .labelText, .labelText > tspan { + fill: ${t.labelTextColor}; + stroke: none; + } + + .loopText, .loopText > tspan { + fill: ${t.loopTextColor}; + stroke: none; + } + + .loopLine { + stroke-width: 2px; + stroke-dasharray: 2, 2; + stroke: ${t.labelBoxBorderColor}; + fill: ${t.labelBoxBorderColor}; + } + + .note { + //stroke: #decc93; + stroke: ${t.noteBorderColor}; + fill: ${t.noteBkgColor}; + } + + .noteText, .noteText > tspan { + fill: ${t.noteTextColor}; + stroke: none; + } + + .activation0 { + fill: ${t.activationBkgColor}; + stroke: ${t.activationBorderColor}; + } + + .activation1 { + fill: ${t.activationBkgColor}; + stroke: ${t.activationBorderColor}; + } + + .activation2 { + fill: ${t.activationBkgColor}; + stroke: ${t.activationBorderColor}; + } + + .actorPopupMenu { + position: absolute; + } + + .actorPopupMenuPanel { + position: absolute; + fill: ${t.actorBkg}; + box-shadow: 0px 8px 16px 0px rgba(0,0,0,0.2); + filter: drop-shadow(3px 5px 2px rgb(0 0 0 / 0.4)); +} + .actor-man line { + stroke: ${t.actorBorder}; + fill: ${t.actorBkg}; + } + .actor-man circle, line { + stroke: ${t.actorBorder}; + fill: ${t.actorBkg}; + stroke-width: 2px; + } +`,"getStyles"),Kfe=WUe});var CO,kf,Jfe,ede,YUe,Zfe,AO,qUe,XUe,Px,I0,tde,Xc,_O,jUe,KUe,QUe,ZUe,JUe,eHe,tHe,rde,rHe,nHe,iHe,aHe,sHe,oHe,lHe,nde,cHe,LO,uHe,fi,ide=M(()=>{"use strict";fr();lv();hr();CO=Ji(Qp(),1);Za();kf=18*2,Jfe="actor-top",ede="actor-bottom",YUe="actor-box",Zfe="actor-man",AO=o(function(t,e){return Sd(t,e)},"drawRect"),qUe=o(function(t,e,r,n,i){if(e.links===void 0||e.links===null||Object.keys(e.links).length===0)return{height:0,width:0};let a=e.links,s=e.actorCnt,l=e.rectData;var u="none";i&&(u="block !important");let h=t.append("g");h.attr("id","actor"+s+"_popup"),h.attr("class","actorPopupMenu"),h.attr("display",u);var f="";l.class!==void 0&&(f=" "+l.class);let d=l.width>r?l.width:r,p=h.append("rect");if(p.attr("class","actorPopupMenuPanel"+f),p.attr("x",l.x),p.attr("y",l.height),p.attr("fill",l.fill),p.attr("stroke",l.stroke),p.attr("width",d),p.attr("height",l.height),p.attr("rx",l.rx),p.attr("ry",l.ry),a!=null){var m=20;for(let v in a){var g=h.append("a"),y=(0,CO.sanitizeUrl)(a[v]);g.attr("xlink:href",y),g.attr("target","_blank"),uHe(n)(v,g,l.x+10,l.height+m,d,20,{class:"actor"},n),m+=30}}return p.attr("height",m),{height:l.height+m,width:d}},"drawPopup"),XUe=o(function(t){return"var pu = document.getElementById('"+t+"'); if (pu != null) { pu.style.display = pu.style.display == 'block' ? 'none' : 'block'; }"},"popupMenuToggle"),Px=o(async function(t,e,r=null){let n=t.append("foreignObject"),i=await bh(e.text,Cr()),s=n.append("xhtml:div").attr("style","width: fit-content;").attr("xmlns","http://www.w3.org/1999/xhtml").html(i).node().getBoundingClientRect();if(n.attr("height",Math.round(s.height)).attr("width",Math.round(s.width)),e.class==="noteText"){let l=t.node().firstChild;l.setAttribute("height",s.height+2*e.textMargin);let u=l.getBBox();n.attr("x",Math.round(u.x+u.width/2-s.width/2)).attr("y",Math.round(u.y+u.height/2-s.height/2))}else if(r){let{startx:l,stopx:u,starty:h}=r;if(l>u){let f=l;l=u,u=f}n.attr("x",Math.round(l+Math.abs(l-u)/2-s.width/2)),e.class==="loopText"?n.attr("y",Math.round(h)):n.attr("y",Math.round(h-s.height))}return[n]},"drawKatex"),I0=o(function(t,e){let r=0,n=0,i=e.text.split(qe.lineBreakRegex),[a,s]=Ho(e.fontSize),l=[],u=0,h=o(()=>e.y,"yfunc");if(e.valign!==void 0&&e.textMargin!==void 0&&e.textMargin>0)switch(e.valign){case"top":case"start":h=o(()=>Math.round(e.y+e.textMargin),"yfunc");break;case"middle":case"center":h=o(()=>Math.round(e.y+(r+n+e.textMargin)/2),"yfunc");break;case"bottom":case"end":h=o(()=>Math.round(e.y+(r+n+2*e.textMargin)-e.textMargin),"yfunc");break}if(e.anchor!==void 0&&e.textMargin!==void 0&&e.width!==void 0)switch(e.anchor){case"left":case"start":e.x=Math.round(e.x+e.textMargin),e.anchor="start",e.dominantBaseline="middle",e.alignmentBaseline="middle";break;case"middle":case"center":e.x=Math.round(e.x+e.width/2),e.anchor="middle",e.dominantBaseline="middle",e.alignmentBaseline="middle";break;case"right":case"end":e.x=Math.round(e.x+e.width-e.textMargin),e.anchor="end",e.dominantBaseline="middle",e.alignmentBaseline="middle";break}for(let[f,d]of i.entries()){e.textMargin!==void 0&&e.textMargin===0&&a!==void 0&&(u=f*a);let p=t.append("text");p.attr("x",e.x),p.attr("y",h()),e.anchor!==void 0&&p.attr("text-anchor",e.anchor).attr("dominant-baseline",e.dominantBaseline).attr("alignment-baseline",e.alignmentBaseline),e.fontFamily!==void 0&&p.style("font-family",e.fontFamily),s!==void 0&&p.style("font-size",s),e.fontWeight!==void 0&&p.style("font-weight",e.fontWeight),e.fill!==void 0&&p.attr("fill",e.fill),e.class!==void 0&&p.attr("class",e.class),e.dy!==void 0?p.attr("dy",e.dy):u!==0&&p.attr("dy",u);let m=d||Z_;if(e.tspan){let g=p.append("tspan");g.attr("x",e.x),e.fill!==void 0&&g.attr("fill",e.fill),g.text(m)}else p.text(m);e.valign!==void 0&&e.textMargin!==void 0&&e.textMargin>0&&(n+=(p._groups||p)[0][0].getBBox().height,r=n),l.push(p)}return l},"drawText"),tde=o(function(t,e){function r(i,a,s,l,u){return i+","+a+" "+(i+s)+","+a+" "+(i+s)+","+(a+l-u)+" "+(i+s-u*1.2)+","+(a+l)+" "+i+","+(a+l)}o(r,"genPoints");let n=t.append("polygon");return n.attr("points",r(e.x,e.y,e.width,e.height,7)),n.attr("class","labelBox"),e.y=e.y+e.height/2,I0(t,e),n},"drawLabel"),Xc=-1,_O=o((t,e,r,n)=>{t.select&&r.forEach(i=>{let a=e.get(i),s=t.select("#actor"+a.actorCnt);!n.mirrorActors&&a.stopy?s.attr("y2",a.stopy+a.height/2):n.mirrorActors&&s.attr("y2",a.stopy)})},"fixLifeLineHeights"),jUe=o(function(t,e,r,n){let i=n?e.stopy:e.starty,a=e.x+e.width/2,s=i+e.height,l=t.append("g").lower();var u=l;n||(Xc++,Object.keys(e.links||{}).length&&!r.forceMenus&&u.attr("onclick",XUe(`actor${Xc}_popup`)).attr("cursor","pointer"),u.append("line").attr("id","actor"+Xc).attr("x1",a).attr("y1",s).attr("x2",a).attr("y2",2e3).attr("class","actor-line 200").attr("stroke-width","0.5px").attr("stroke","#999").attr("name",e.name),u=l.append("g"),e.actorCnt=Xc,e.links!=null&&u.attr("id","root-"+Xc));let h=Nl();var f="actor";e.properties?.class?f=e.properties.class:h.fill="#eaeaea",n?f+=` ${ede}`:f+=` ${Jfe}`,h.x=e.x,h.y=i,h.width=e.width,h.height=e.height,h.class=f,h.rx=3,h.ry=3,h.name=e.name;let d=AO(u,h);if(e.rectData=h,e.properties?.icon){let m=e.properties.icon.trim();m.charAt(0)==="@"?LY(u,h.x+h.width-20,h.y+10,m.substr(1)):_Y(u,h.x+h.width-20,h.y+10,m)}LO(r,yi(e.description))(e.description,u,h.x,h.y,h.width,h.height,{class:`actor ${YUe}`},r);let p=e.height;if(d.node){let m=d.node().getBBox();e.height=m.height,p=m.height}return p},"drawActorTypeParticipant"),KUe=o(function(t,e,r,n){let i=n?e.stopy:e.starty,a=e.x+e.width/2,s=i+80,l=t.append("g").lower();n||(Xc++,l.append("line").attr("id","actor"+Xc).attr("x1",a).attr("y1",s).attr("x2",a).attr("y2",2e3).attr("class","actor-line 200").attr("stroke-width","0.5px").attr("stroke","#999").attr("name",e.name),e.actorCnt=Xc);let u=t.append("g"),h=Zfe;n?h+=` ${ede}`:h+=` ${Jfe}`,u.attr("class",h),u.attr("name",e.name);let f=Nl();f.x=e.x,f.y=i,f.fill="#eaeaea",f.width=e.width,f.height=e.height,f.class="actor",f.rx=3,f.ry=3,u.append("line").attr("id","actor-man-torso"+Xc).attr("x1",a).attr("y1",i+25).attr("x2",a).attr("y2",i+45),u.append("line").attr("id","actor-man-arms"+Xc).attr("x1",a-kf/2).attr("y1",i+33).attr("x2",a+kf/2).attr("y2",i+33),u.append("line").attr("x1",a-kf/2).attr("y1",i+60).attr("x2",a).attr("y2",i+45),u.append("line").attr("x1",a).attr("y1",i+45).attr("x2",a+kf/2-2).attr("y2",i+60);let d=u.append("circle");d.attr("cx",e.x+e.width/2),d.attr("cy",i+10),d.attr("r",15),d.attr("width",e.width),d.attr("height",e.height);let p=u.node().getBBox();return e.height=p.height,LO(r,yi(e.description))(e.description,u,f.x,f.y+35,f.width,f.height,{class:`actor ${Zfe}`},r),e.height},"drawActorTypeActor"),QUe=o(async function(t,e,r,n){switch(e.type){case"actor":return await KUe(t,e,r,n);case"participant":return await jUe(t,e,r,n)}},"drawActor"),ZUe=o(function(t,e,r){let i=t.append("g");rde(i,e),e.name&&LO(r)(e.name,i,e.x,e.y+(e.textMaxHeight||0)/2,e.width,0,{class:"text"},r),i.lower()},"drawBox"),JUe=o(function(t){return t.append("g")},"anchorElement"),eHe=o(function(t,e,r,n,i){let a=Nl(),s=e.anchored;a.x=e.startx,a.y=e.starty,a.class="activation"+i%3,a.width=e.stopx-e.startx,a.height=r-e.starty,AO(s,a)},"drawActivation"),tHe=o(async function(t,e,r,n){let{boxMargin:i,boxTextMargin:a,labelBoxHeight:s,labelBoxWidth:l,messageFontFamily:u,messageFontSize:h,messageFontWeight:f}=n,d=t.append("g"),p=o(function(y,v,x,b){return d.append("line").attr("x1",y).attr("y1",v).attr("x2",x).attr("y2",b).attr("class","loopLine")},"drawLoopLine");p(e.startx,e.starty,e.stopx,e.starty),p(e.stopx,e.starty,e.stopx,e.stopy),p(e.startx,e.stopy,e.stopx,e.stopy),p(e.startx,e.starty,e.startx,e.stopy),e.sections!==void 0&&e.sections.forEach(function(y){p(e.startx,y.y,e.stopx,y.y).style("stroke-dasharray","3, 3")});let m=ov();m.text=r,m.x=e.startx,m.y=e.starty,m.fontFamily=u,m.fontSize=h,m.fontWeight=f,m.anchor="middle",m.valign="middle",m.tspan=!1,m.width=l||50,m.height=s||20,m.textMargin=a,m.class="labelText",tde(d,m),m=nde(),m.text=e.title,m.x=e.startx+l/2+(e.stopx-e.startx)/2,m.y=e.starty+i+a,m.anchor="middle",m.valign="middle",m.textMargin=a,m.class="loopText",m.fontFamily=u,m.fontSize=h,m.fontWeight=f,m.wrap=!0;let g=yi(m.text)?await Px(d,m,e):I0(d,m);if(e.sectionTitles!==void 0){for(let[y,v]of Object.entries(e.sectionTitles))if(v.message){m.text=v.message,m.x=e.startx+(e.stopx-e.startx)/2,m.y=e.sections[y].y+i+a,m.class="loopText",m.anchor="middle",m.valign="middle",m.tspan=!1,m.fontFamily=u,m.fontSize=h,m.fontWeight=f,m.wrap=e.wrap,yi(m.text)?(e.starty=e.sections[y].y,await Px(d,m,e)):I0(d,m);let x=Math.round(g.map(b=>(b._groups||b)[0][0].getBBox().height).reduce((b,w)=>b+w));e.sections[y].height+=x-(i+a)}}return e.height=Math.round(e.stopy-e.starty),d},"drawLoop"),rde=o(function(t,e){i5(t,e)},"drawBackgroundRect"),rHe=o(function(t){t.append("defs").append("symbol").attr("id","database").attr("fill-rule","evenodd").attr("clip-rule","evenodd").append("path").attr("transform","scale(.5)").attr("d","M12.258.001l.256.004.255.005.253.008.251.01.249.012.247.015.246.016.242.019.241.02.239.023.236.024.233.027.231.028.229.031.225.032.223.034.22.036.217.038.214.04.211.041.208.043.205.045.201.046.198.048.194.05.191.051.187.053.183.054.18.056.175.057.172.059.168.06.163.061.16.063.155.064.15.066.074.033.073.033.071.034.07.034.069.035.068.035.067.035.066.035.064.036.064.036.062.036.06.036.06.037.058.037.058.037.055.038.055.038.053.038.052.038.051.039.05.039.048.039.047.039.045.04.044.04.043.04.041.04.04.041.039.041.037.041.036.041.034.041.033.042.032.042.03.042.029.042.027.042.026.043.024.043.023.043.021.043.02.043.018.044.017.043.015.044.013.044.012.044.011.045.009.044.007.045.006.045.004.045.002.045.001.045v17l-.001.045-.002.045-.004.045-.006.045-.007.045-.009.044-.011.045-.012.044-.013.044-.015.044-.017.043-.018.044-.02.043-.021.043-.023.043-.024.043-.026.043-.027.042-.029.042-.03.042-.032.042-.033.042-.034.041-.036.041-.037.041-.039.041-.04.041-.041.04-.043.04-.044.04-.045.04-.047.039-.048.039-.05.039-.051.039-.052.038-.053.038-.055.038-.055.038-.058.037-.058.037-.06.037-.06.036-.062.036-.064.036-.064.036-.066.035-.067.035-.068.035-.069.035-.07.034-.071.034-.073.033-.074.033-.15.066-.155.064-.16.063-.163.061-.168.06-.172.059-.175.057-.18.056-.183.054-.187.053-.191.051-.194.05-.198.048-.201.046-.205.045-.208.043-.211.041-.214.04-.217.038-.22.036-.223.034-.225.032-.229.031-.231.028-.233.027-.236.024-.239.023-.241.02-.242.019-.246.016-.247.015-.249.012-.251.01-.253.008-.255.005-.256.004-.258.001-.258-.001-.256-.004-.255-.005-.253-.008-.251-.01-.249-.012-.247-.015-.245-.016-.243-.019-.241-.02-.238-.023-.236-.024-.234-.027-.231-.028-.228-.031-.226-.032-.223-.034-.22-.036-.217-.038-.214-.04-.211-.041-.208-.043-.204-.045-.201-.046-.198-.048-.195-.05-.19-.051-.187-.053-.184-.054-.179-.056-.176-.057-.172-.059-.167-.06-.164-.061-.159-.063-.155-.064-.151-.066-.074-.033-.072-.033-.072-.034-.07-.034-.069-.035-.068-.035-.067-.035-.066-.035-.064-.036-.063-.036-.062-.036-.061-.036-.06-.037-.058-.037-.057-.037-.056-.038-.055-.038-.053-.038-.052-.038-.051-.039-.049-.039-.049-.039-.046-.039-.046-.04-.044-.04-.043-.04-.041-.04-.04-.041-.039-.041-.037-.041-.036-.041-.034-.041-.033-.042-.032-.042-.03-.042-.029-.042-.027-.042-.026-.043-.024-.043-.023-.043-.021-.043-.02-.043-.018-.044-.017-.043-.015-.044-.013-.044-.012-.044-.011-.045-.009-.044-.007-.045-.006-.045-.004-.045-.002-.045-.001-.045v-17l.001-.045.002-.045.004-.045.006-.045.007-.045.009-.044.011-.045.012-.044.013-.044.015-.044.017-.043.018-.044.02-.043.021-.043.023-.043.024-.043.026-.043.027-.042.029-.042.03-.042.032-.042.033-.042.034-.041.036-.041.037-.041.039-.041.04-.041.041-.04.043-.04.044-.04.046-.04.046-.039.049-.039.049-.039.051-.039.052-.038.053-.038.055-.038.056-.038.057-.037.058-.037.06-.037.061-.036.062-.036.063-.036.064-.036.066-.035.067-.035.068-.035.069-.035.07-.034.072-.034.072-.033.074-.033.151-.066.155-.064.159-.063.164-.061.167-.06.172-.059.176-.057.179-.056.184-.054.187-.053.19-.051.195-.05.198-.048.201-.046.204-.045.208-.043.211-.041.214-.04.217-.038.22-.036.223-.034.226-.032.228-.031.231-.028.234-.027.236-.024.238-.023.241-.02.243-.019.245-.016.247-.015.249-.012.251-.01.253-.008.255-.005.256-.004.258-.001.258.001zm-9.258 20.499v.01l.001.021.003.021.004.022.005.021.006.022.007.022.009.023.01.022.011.023.012.023.013.023.015.023.016.024.017.023.018.024.019.024.021.024.022.025.023.024.024.025.052.049.056.05.061.051.066.051.07.051.075.051.079.052.084.052.088.052.092.052.097.052.102.051.105.052.11.052.114.051.119.051.123.051.127.05.131.05.135.05.139.048.144.049.147.047.152.047.155.047.16.045.163.045.167.043.171.043.176.041.178.041.183.039.187.039.19.037.194.035.197.035.202.033.204.031.209.03.212.029.216.027.219.025.222.024.226.021.23.02.233.018.236.016.24.015.243.012.246.01.249.008.253.005.256.004.259.001.26-.001.257-.004.254-.005.25-.008.247-.011.244-.012.241-.014.237-.016.233-.018.231-.021.226-.021.224-.024.22-.026.216-.027.212-.028.21-.031.205-.031.202-.034.198-.034.194-.036.191-.037.187-.039.183-.04.179-.04.175-.042.172-.043.168-.044.163-.045.16-.046.155-.046.152-.047.148-.048.143-.049.139-.049.136-.05.131-.05.126-.05.123-.051.118-.052.114-.051.11-.052.106-.052.101-.052.096-.052.092-.052.088-.053.083-.051.079-.052.074-.052.07-.051.065-.051.06-.051.056-.05.051-.05.023-.024.023-.025.021-.024.02-.024.019-.024.018-.024.017-.024.015-.023.014-.024.013-.023.012-.023.01-.023.01-.022.008-.022.006-.022.006-.022.004-.022.004-.021.001-.021.001-.021v-4.127l-.077.055-.08.053-.083.054-.085.053-.087.052-.09.052-.093.051-.095.05-.097.05-.1.049-.102.049-.105.048-.106.047-.109.047-.111.046-.114.045-.115.045-.118.044-.12.043-.122.042-.124.042-.126.041-.128.04-.13.04-.132.038-.134.038-.135.037-.138.037-.139.035-.142.035-.143.034-.144.033-.147.032-.148.031-.15.03-.151.03-.153.029-.154.027-.156.027-.158.026-.159.025-.161.024-.162.023-.163.022-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.011-.178.01-.179.008-.179.008-.181.006-.182.005-.182.004-.184.003-.184.002h-.37l-.184-.002-.184-.003-.182-.004-.182-.005-.181-.006-.179-.008-.179-.008-.178-.01-.176-.011-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.022-.162-.023-.161-.024-.159-.025-.157-.026-.156-.027-.155-.027-.153-.029-.151-.03-.15-.03-.148-.031-.146-.032-.145-.033-.143-.034-.141-.035-.14-.035-.137-.037-.136-.037-.134-.038-.132-.038-.13-.04-.128-.04-.126-.041-.124-.042-.122-.042-.12-.044-.117-.043-.116-.045-.113-.045-.112-.046-.109-.047-.106-.047-.105-.048-.102-.049-.1-.049-.097-.05-.095-.05-.093-.052-.09-.051-.087-.052-.085-.053-.083-.054-.08-.054-.077-.054v4.127zm0-5.654v.011l.001.021.003.021.004.021.005.022.006.022.007.022.009.022.01.022.011.023.012.023.013.023.015.024.016.023.017.024.018.024.019.024.021.024.022.024.023.025.024.024.052.05.056.05.061.05.066.051.07.051.075.052.079.051.084.052.088.052.092.052.097.052.102.052.105.052.11.051.114.051.119.052.123.05.127.051.131.05.135.049.139.049.144.048.147.048.152.047.155.046.16.045.163.045.167.044.171.042.176.042.178.04.183.04.187.038.19.037.194.036.197.034.202.033.204.032.209.03.212.028.216.027.219.025.222.024.226.022.23.02.233.018.236.016.24.014.243.012.246.01.249.008.253.006.256.003.259.001.26-.001.257-.003.254-.006.25-.008.247-.01.244-.012.241-.015.237-.016.233-.018.231-.02.226-.022.224-.024.22-.025.216-.027.212-.029.21-.03.205-.032.202-.033.198-.035.194-.036.191-.037.187-.039.183-.039.179-.041.175-.042.172-.043.168-.044.163-.045.16-.045.155-.047.152-.047.148-.048.143-.048.139-.05.136-.049.131-.05.126-.051.123-.051.118-.051.114-.052.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.051.07-.052.065-.051.06-.05.056-.051.051-.049.023-.025.023-.024.021-.025.02-.024.019-.024.018-.024.017-.024.015-.023.014-.023.013-.024.012-.022.01-.023.01-.023.008-.022.006-.022.006-.022.004-.021.004-.022.001-.021.001-.021v-4.139l-.077.054-.08.054-.083.054-.085.052-.087.053-.09.051-.093.051-.095.051-.097.05-.1.049-.102.049-.105.048-.106.047-.109.047-.111.046-.114.045-.115.044-.118.044-.12.044-.122.042-.124.042-.126.041-.128.04-.13.039-.132.039-.134.038-.135.037-.138.036-.139.036-.142.035-.143.033-.144.033-.147.033-.148.031-.15.03-.151.03-.153.028-.154.028-.156.027-.158.026-.159.025-.161.024-.162.023-.163.022-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.011-.178.009-.179.009-.179.007-.181.007-.182.005-.182.004-.184.003-.184.002h-.37l-.184-.002-.184-.003-.182-.004-.182-.005-.181-.007-.179-.007-.179-.009-.178-.009-.176-.011-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.022-.162-.023-.161-.024-.159-.025-.157-.026-.156-.027-.155-.028-.153-.028-.151-.03-.15-.03-.148-.031-.146-.033-.145-.033-.143-.033-.141-.035-.14-.036-.137-.036-.136-.037-.134-.038-.132-.039-.13-.039-.128-.04-.126-.041-.124-.042-.122-.043-.12-.043-.117-.044-.116-.044-.113-.046-.112-.046-.109-.046-.106-.047-.105-.048-.102-.049-.1-.049-.097-.05-.095-.051-.093-.051-.09-.051-.087-.053-.085-.052-.083-.054-.08-.054-.077-.054v4.139zm0-5.666v.011l.001.02.003.022.004.021.005.022.006.021.007.022.009.023.01.022.011.023.012.023.013.023.015.023.016.024.017.024.018.023.019.024.021.025.022.024.023.024.024.025.052.05.056.05.061.05.066.051.07.051.075.052.079.051.084.052.088.052.092.052.097.052.102.052.105.051.11.052.114.051.119.051.123.051.127.05.131.05.135.05.139.049.144.048.147.048.152.047.155.046.16.045.163.045.167.043.171.043.176.042.178.04.183.04.187.038.19.037.194.036.197.034.202.033.204.032.209.03.212.028.216.027.219.025.222.024.226.021.23.02.233.018.236.017.24.014.243.012.246.01.249.008.253.006.256.003.259.001.26-.001.257-.003.254-.006.25-.008.247-.01.244-.013.241-.014.237-.016.233-.018.231-.02.226-.022.224-.024.22-.025.216-.027.212-.029.21-.03.205-.032.202-.033.198-.035.194-.036.191-.037.187-.039.183-.039.179-.041.175-.042.172-.043.168-.044.163-.045.16-.045.155-.047.152-.047.148-.048.143-.049.139-.049.136-.049.131-.051.126-.05.123-.051.118-.052.114-.051.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.052.07-.051.065-.051.06-.051.056-.05.051-.049.023-.025.023-.025.021-.024.02-.024.019-.024.018-.024.017-.024.015-.023.014-.024.013-.023.012-.023.01-.022.01-.023.008-.022.006-.022.006-.022.004-.022.004-.021.001-.021.001-.021v-4.153l-.077.054-.08.054-.083.053-.085.053-.087.053-.09.051-.093.051-.095.051-.097.05-.1.049-.102.048-.105.048-.106.048-.109.046-.111.046-.114.046-.115.044-.118.044-.12.043-.122.043-.124.042-.126.041-.128.04-.13.039-.132.039-.134.038-.135.037-.138.036-.139.036-.142.034-.143.034-.144.033-.147.032-.148.032-.15.03-.151.03-.153.028-.154.028-.156.027-.158.026-.159.024-.161.024-.162.023-.163.023-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.01-.178.01-.179.009-.179.007-.181.006-.182.006-.182.004-.184.003-.184.001-.185.001-.185-.001-.184-.001-.184-.003-.182-.004-.182-.006-.181-.006-.179-.007-.179-.009-.178-.01-.176-.01-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.023-.162-.023-.161-.024-.159-.024-.157-.026-.156-.027-.155-.028-.153-.028-.151-.03-.15-.03-.148-.032-.146-.032-.145-.033-.143-.034-.141-.034-.14-.036-.137-.036-.136-.037-.134-.038-.132-.039-.13-.039-.128-.041-.126-.041-.124-.041-.122-.043-.12-.043-.117-.044-.116-.044-.113-.046-.112-.046-.109-.046-.106-.048-.105-.048-.102-.048-.1-.05-.097-.049-.095-.051-.093-.051-.09-.052-.087-.052-.085-.053-.083-.053-.08-.054-.077-.054v4.153zm8.74-8.179l-.257.004-.254.005-.25.008-.247.011-.244.012-.241.014-.237.016-.233.018-.231.021-.226.022-.224.023-.22.026-.216.027-.212.028-.21.031-.205.032-.202.033-.198.034-.194.036-.191.038-.187.038-.183.04-.179.041-.175.042-.172.043-.168.043-.163.045-.16.046-.155.046-.152.048-.148.048-.143.048-.139.049-.136.05-.131.05-.126.051-.123.051-.118.051-.114.052-.11.052-.106.052-.101.052-.096.052-.092.052-.088.052-.083.052-.079.052-.074.051-.07.052-.065.051-.06.05-.056.05-.051.05-.023.025-.023.024-.021.024-.02.025-.019.024-.018.024-.017.023-.015.024-.014.023-.013.023-.012.023-.01.023-.01.022-.008.022-.006.023-.006.021-.004.022-.004.021-.001.021-.001.021.001.021.001.021.004.021.004.022.006.021.006.023.008.022.01.022.01.023.012.023.013.023.014.023.015.024.017.023.018.024.019.024.02.025.021.024.023.024.023.025.051.05.056.05.06.05.065.051.07.052.074.051.079.052.083.052.088.052.092.052.096.052.101.052.106.052.11.052.114.052.118.051.123.051.126.051.131.05.136.05.139.049.143.048.148.048.152.048.155.046.16.046.163.045.168.043.172.043.175.042.179.041.183.04.187.038.191.038.194.036.198.034.202.033.205.032.21.031.212.028.216.027.22.026.224.023.226.022.231.021.233.018.237.016.241.014.244.012.247.011.25.008.254.005.257.004.26.001.26-.001.257-.004.254-.005.25-.008.247-.011.244-.012.241-.014.237-.016.233-.018.231-.021.226-.022.224-.023.22-.026.216-.027.212-.028.21-.031.205-.032.202-.033.198-.034.194-.036.191-.038.187-.038.183-.04.179-.041.175-.042.172-.043.168-.043.163-.045.16-.046.155-.046.152-.048.148-.048.143-.048.139-.049.136-.05.131-.05.126-.051.123-.051.118-.051.114-.052.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.051.07-.052.065-.051.06-.05.056-.05.051-.05.023-.025.023-.024.021-.024.02-.025.019-.024.018-.024.017-.023.015-.024.014-.023.013-.023.012-.023.01-.023.01-.022.008-.022.006-.023.006-.021.004-.022.004-.021.001-.021.001-.021-.001-.021-.001-.021-.004-.021-.004-.022-.006-.021-.006-.023-.008-.022-.01-.022-.01-.023-.012-.023-.013-.023-.014-.023-.015-.024-.017-.023-.018-.024-.019-.024-.02-.025-.021-.024-.023-.024-.023-.025-.051-.05-.056-.05-.06-.05-.065-.051-.07-.052-.074-.051-.079-.052-.083-.052-.088-.052-.092-.052-.096-.052-.101-.052-.106-.052-.11-.052-.114-.052-.118-.051-.123-.051-.126-.051-.131-.05-.136-.05-.139-.049-.143-.048-.148-.048-.152-.048-.155-.046-.16-.046-.163-.045-.168-.043-.172-.043-.175-.042-.179-.041-.183-.04-.187-.038-.191-.038-.194-.036-.198-.034-.202-.033-.205-.032-.21-.031-.212-.028-.216-.027-.22-.026-.224-.023-.226-.022-.231-.021-.233-.018-.237-.016-.241-.014-.244-.012-.247-.011-.25-.008-.254-.005-.257-.004-.26-.001-.26.001z")},"insertDatabaseIcon"),nHe=o(function(t){t.append("defs").append("symbol").attr("id","computer").attr("width","24").attr("height","24").append("path").attr("transform","scale(.5)").attr("d","M2 2v13h20v-13h-20zm18 11h-16v-9h16v9zm-10.228 6l.466-1h3.524l.467 1h-4.457zm14.228 3h-24l2-6h2.104l-1.33 4h18.45l-1.297-4h2.073l2 6zm-5-10h-14v-7h14v7z")},"insertComputerIcon"),iHe=o(function(t){t.append("defs").append("symbol").attr("id","clock").attr("width","24").attr("height","24").append("path").attr("transform","scale(.5)").attr("d","M12 2c5.514 0 10 4.486 10 10s-4.486 10-10 10-10-4.486-10-10 4.486-10 10-10zm0-2c-6.627 0-12 5.373-12 12s5.373 12 12 12 12-5.373 12-12-5.373-12-12-12zm5.848 12.459c.202.038.202.333.001.372-1.907.361-6.045 1.111-6.547 1.111-.719 0-1.301-.582-1.301-1.301 0-.512.77-5.447 1.125-7.445.034-.192.312-.181.343.014l.985 6.238 5.394 1.011z")},"insertClockIcon"),aHe=o(function(t){t.append("defs").append("marker").attr("id","arrowhead").attr("refX",7.9).attr("refY",5).attr("markerUnits","userSpaceOnUse").attr("markerWidth",12).attr("markerHeight",12).attr("orient","auto-start-reverse").append("path").attr("d","M -1 0 L 10 5 L 0 10 z")},"insertArrowHead"),sHe=o(function(t){t.append("defs").append("marker").attr("id","filled-head").attr("refX",15.5).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L14,7 L9,1 Z")},"insertArrowFilledHead"),oHe=o(function(t){t.append("defs").append("marker").attr("id","sequencenumber").attr("refX",15).attr("refY",15).attr("markerWidth",60).attr("markerHeight",40).attr("orient","auto").append("circle").attr("cx",15).attr("cy",15).attr("r",6)},"insertSequenceNumber"),lHe=o(function(t){t.append("defs").append("marker").attr("id","crosshead").attr("markerWidth",15).attr("markerHeight",8).attr("orient","auto").attr("refX",4).attr("refY",4.5).append("path").attr("fill","none").attr("stroke","#000000").style("stroke-dasharray","0, 0").attr("stroke-width","1pt").attr("d","M 1,2 L 6,7 M 6,2 L 1,7")},"insertArrowCrossHead"),nde=o(function(){return{x:0,y:0,fill:void 0,anchor:void 0,style:"#666",width:void 0,height:void 0,textMargin:0,rx:0,ry:0,tspan:!0,valign:void 0}},"getTextObj"),cHe=o(function(){return{x:0,y:0,fill:"#EDF2AE",stroke:"#666",width:100,anchor:"start",height:100,rx:0,ry:0}},"getNoteRect"),LO=function(){function t(a,s,l,u,h,f,d){let p=s.append("text").attr("x",l+h/2).attr("y",u+f/2+5).style("text-anchor","middle").text(a);i(p,d)}o(t,"byText");function e(a,s,l,u,h,f,d,p){let{actorFontSize:m,actorFontFamily:g,actorFontWeight:y}=p,[v,x]=Ho(m),b=a.split(qe.lineBreakRegex);for(let w=0;w{let s=O0(De),l=a.actorKeys.reduce((f,d)=>f+=t.get(d).width+(t.get(d).margin||0),0);l-=2*De.boxTextMargin,a.wrap&&(a.name=Ut.wrapLabel(a.name,l-2*De.wrapPadding,s));let u=Ut.calculateTextDimensions(a.name,s);i=qe.getMax(u.height,i);let h=qe.getMax(l,u.width+2*De.wrapPadding);if(a.margin=De.boxTextMargin,la.textMaxHeight=i),qe.getMax(n,De.height)}var De,nt,hHe,O0,Qg,DO,dHe,pHe,NO,sde,ode,IE,ade,gHe,vHe,bHe,wHe,THe,lde,cde=M(()=>{"use strict";pr();ide();ut();fr();lv();Vt();gp();hr();ai();De={},nt={data:{startx:void 0,stopx:void 0,starty:void 0,stopy:void 0},verticalPos:0,sequenceItems:[],activations:[],models:{getHeight:o(function(){return Math.max.apply(null,this.actors.length===0?[0]:this.actors.map(t=>t.height||0))+(this.loops.length===0?0:this.loops.map(t=>t.height||0).reduce((t,e)=>t+e))+(this.messages.length===0?0:this.messages.map(t=>t.height||0).reduce((t,e)=>t+e))+(this.notes.length===0?0:this.notes.map(t=>t.height||0).reduce((t,e)=>t+e))},"getHeight"),clear:o(function(){this.actors=[],this.boxes=[],this.loops=[],this.messages=[],this.notes=[]},"clear"),addBox:o(function(t){this.boxes.push(t)},"addBox"),addActor:o(function(t){this.actors.push(t)},"addActor"),addLoop:o(function(t){this.loops.push(t)},"addLoop"),addMessage:o(function(t){this.messages.push(t)},"addMessage"),addNote:o(function(t){this.notes.push(t)},"addNote"),lastActor:o(function(){return this.actors[this.actors.length-1]},"lastActor"),lastLoop:o(function(){return this.loops[this.loops.length-1]},"lastLoop"),lastMessage:o(function(){return this.messages[this.messages.length-1]},"lastMessage"),lastNote:o(function(){return this.notes[this.notes.length-1]},"lastNote"),actors:[],boxes:[],loops:[],messages:[],notes:[]},init:o(function(){this.sequenceItems=[],this.activations=[],this.models.clear(),this.data={startx:void 0,stopx:void 0,starty:void 0,stopy:void 0},this.verticalPos=0,ode(pe())},"init"),updateVal:o(function(t,e,r,n){t[e]===void 0?t[e]=r:t[e]=n(r,t[e])},"updateVal"),updateBounds:o(function(t,e,r,n){let i=this,a=0;function s(l){return o(function(h){a++;let f=i.sequenceItems.length-a+1;i.updateVal(h,"starty",e-f*De.boxMargin,Math.min),i.updateVal(h,"stopy",n+f*De.boxMargin,Math.max),i.updateVal(nt.data,"startx",t-f*De.boxMargin,Math.min),i.updateVal(nt.data,"stopx",r+f*De.boxMargin,Math.max),l!=="activation"&&(i.updateVal(h,"startx",t-f*De.boxMargin,Math.min),i.updateVal(h,"stopx",r+f*De.boxMargin,Math.max),i.updateVal(nt.data,"starty",e-f*De.boxMargin,Math.min),i.updateVal(nt.data,"stopy",n+f*De.boxMargin,Math.max))},"updateItemBounds")}o(s,"updateFn"),this.sequenceItems.forEach(s()),this.activations.forEach(s("activation"))},"updateBounds"),insert:o(function(t,e,r,n){let i=qe.getMin(t,r),a=qe.getMax(t,r),s=qe.getMin(e,n),l=qe.getMax(e,n);this.updateVal(nt.data,"startx",i,Math.min),this.updateVal(nt.data,"starty",s,Math.min),this.updateVal(nt.data,"stopx",a,Math.max),this.updateVal(nt.data,"stopy",l,Math.max),this.updateBounds(i,s,a,l)},"insert"),newActivation:o(function(t,e,r){let n=r.get(t.from),i=IE(t.from).length||0,a=n.x+n.width/2+(i-1)*De.activationWidth/2;this.activations.push({startx:a,starty:this.verticalPos+2,stopx:a+De.activationWidth,stopy:void 0,actor:t.from,anchored:fi.anchorElement(e)})},"newActivation"),endActivation:o(function(t){let e=this.activations.map(function(r){return r.actor}).lastIndexOf(t.from);return this.activations.splice(e,1)[0]},"endActivation"),createLoop:o(function(t={message:void 0,wrap:!1,width:void 0},e){return{startx:void 0,starty:this.verticalPos,stopx:void 0,stopy:void 0,title:t.message,wrap:t.wrap,width:t.width,height:0,fill:e}},"createLoop"),newLoop:o(function(t={message:void 0,wrap:!1,width:void 0},e){this.sequenceItems.push(this.createLoop(t,e))},"newLoop"),endLoop:o(function(){return this.sequenceItems.pop()},"endLoop"),isLoopOverlap:o(function(){return this.sequenceItems.length?this.sequenceItems[this.sequenceItems.length-1].overlap:!1},"isLoopOverlap"),addSectionToLoop:o(function(t){let e=this.sequenceItems.pop();e.sections=e.sections||[],e.sectionTitles=e.sectionTitles||[],e.sections.push({y:nt.getVerticalPos(),height:0}),e.sectionTitles.push(t),this.sequenceItems.push(e)},"addSectionToLoop"),saveVerticalPos:o(function(){this.isLoopOverlap()&&(this.savedVerticalPos=this.verticalPos)},"saveVerticalPos"),resetVerticalPos:o(function(){this.isLoopOverlap()&&(this.verticalPos=this.savedVerticalPos)},"resetVerticalPos"),bumpVerticalPos:o(function(t){this.verticalPos=this.verticalPos+t,this.data.stopy=qe.getMax(this.data.stopy,this.verticalPos)},"bumpVerticalPos"),getVerticalPos:o(function(){return this.verticalPos},"getVerticalPos"),getBounds:o(function(){return{bounds:this.data,models:this.models}},"getBounds")},hHe=o(async function(t,e){nt.bumpVerticalPos(De.boxMargin),e.height=De.boxMargin,e.starty=nt.getVerticalPos();let r=Nl();r.x=e.startx,r.y=e.starty,r.width=e.width||De.width,r.class="note";let n=t.append("g"),i=fi.drawRect(n,r),a=ov();a.x=e.startx,a.y=e.starty,a.width=r.width,a.dy="1em",a.text=e.message,a.class="noteText",a.fontFamily=De.noteFontFamily,a.fontSize=De.noteFontSize,a.fontWeight=De.noteFontWeight,a.anchor=De.noteAlign,a.textMargin=De.noteMargin,a.valign="center";let s=yi(a.text)?await Px(n,a):I0(n,a),l=Math.round(s.map(u=>(u._groups||u)[0][0].getBBox().height).reduce((u,h)=>u+h));i.attr("height",l+2*De.noteMargin),e.height+=l+2*De.noteMargin,nt.bumpVerticalPos(l+2*De.noteMargin),e.stopy=e.starty+l+2*De.noteMargin,e.stopx=e.startx+r.width,nt.insert(e.startx,e.starty,e.stopx,e.stopy),nt.models.addNote(e)},"drawNote"),O0=o(t=>({fontFamily:t.messageFontFamily,fontSize:t.messageFontSize,fontWeight:t.messageFontWeight}),"messageFont"),Qg=o(t=>({fontFamily:t.noteFontFamily,fontSize:t.noteFontSize,fontWeight:t.noteFontWeight}),"noteFont"),DO=o(t=>({fontFamily:t.actorFontFamily,fontSize:t.actorFontSize,fontWeight:t.actorFontWeight}),"actorFont");o(fHe,"boundMessage");dHe=o(async function(t,e,r,n){let{startx:i,stopx:a,starty:s,message:l,type:u,sequenceIndex:h,sequenceVisible:f}=e,d=Ut.calculateTextDimensions(l,O0(De)),p=ov();p.x=i,p.y=s+10,p.width=a-i,p.class="messageText",p.dy="1em",p.text=l,p.fontFamily=De.messageFontFamily,p.fontSize=De.messageFontSize,p.fontWeight=De.messageFontWeight,p.anchor=De.messageAlign,p.valign="center",p.textMargin=De.wrapPadding,p.tspan=!1,yi(p.text)?await Px(t,p,{startx:i,stopx:a,starty:r}):I0(t,p);let m=d.width,g;i===a?De.rightAngles?g=t.append("path").attr("d",`M ${i},${r} H ${i+qe.getMax(De.width/2,m/2)} V ${r+25} H ${i}`):g=t.append("path").attr("d","M "+i+","+r+" C "+(i+60)+","+(r-10)+" "+(i+60)+","+(r+30)+" "+i+","+(r+20)):(g=t.append("line"),g.attr("x1",i),g.attr("y1",r),g.attr("x2",a),g.attr("y2",r)),u===n.db.LINETYPE.DOTTED||u===n.db.LINETYPE.DOTTED_CROSS||u===n.db.LINETYPE.DOTTED_POINT||u===n.db.LINETYPE.DOTTED_OPEN||u===n.db.LINETYPE.BIDIRECTIONAL_DOTTED?(g.style("stroke-dasharray","3, 3"),g.attr("class","messageLine1")):g.attr("class","messageLine0");let y="";De.arrowMarkerAbsolute&&(y=window.location.protocol+"//"+window.location.host+window.location.pathname+window.location.search,y=y.replace(/\(/g,"\\("),y=y.replace(/\)/g,"\\)")),g.attr("stroke-width",2),g.attr("stroke","none"),g.style("fill","none"),(u===n.db.LINETYPE.SOLID||u===n.db.LINETYPE.DOTTED)&&g.attr("marker-end","url("+y+"#arrowhead)"),(u===n.db.LINETYPE.BIDIRECTIONAL_SOLID||u===n.db.LINETYPE.BIDIRECTIONAL_DOTTED)&&(g.attr("marker-start","url("+y+"#arrowhead)"),g.attr("marker-end","url("+y+"#arrowhead)")),(u===n.db.LINETYPE.SOLID_POINT||u===n.db.LINETYPE.DOTTED_POINT)&&g.attr("marker-end","url("+y+"#filled-head)"),(u===n.db.LINETYPE.SOLID_CROSS||u===n.db.LINETYPE.DOTTED_CROSS)&&g.attr("marker-end","url("+y+"#crosshead)"),(f||De.showSequenceNumbers)&&(g.attr("marker-start","url("+y+"#sequencenumber)"),t.append("text").attr("x",i).attr("y",r+4).attr("font-family","sans-serif").attr("font-size","12px").attr("text-anchor","middle").attr("class","sequenceNumber").text(h))},"drawMessage"),pHe=o(function(t,e,r,n,i,a,s){let l=0,u=0,h,f=0;for(let d of n){let p=e.get(d),m=p.box;h&&h!=m&&(s||nt.models.addBox(h),u+=De.boxMargin+h.margin),m&&m!=h&&(s||(m.x=l+u,m.y=i),u+=m.margin),p.width=p.width||De.width,p.height=qe.getMax(p.height||De.height,De.height),p.margin=p.margin||De.actorMargin,f=qe.getMax(f,p.height),r.get(p.name)&&(u+=p.width/2),p.x=l+u,p.starty=nt.getVerticalPos(),nt.insert(p.x,i,p.x+p.width,p.height),l+=p.width+u,p.box&&(p.box.width=l+m.margin-p.box.x),u=p.margin,h=p.box,nt.models.addActor(p)}h&&!s&&nt.models.addBox(h),nt.bumpVerticalPos(f)},"addActorRenderingData"),NO=o(async function(t,e,r,n){if(n){let i=0;nt.bumpVerticalPos(De.boxMargin*2);for(let a of r){let s=e.get(a);s.stopy||(s.stopy=nt.getVerticalPos());let l=await fi.drawActor(t,s,De,!0);i=qe.getMax(i,l)}nt.bumpVerticalPos(i+De.boxMargin)}else for(let i of r){let a=e.get(i);await fi.drawActor(t,a,De,!1)}},"drawActors"),sde=o(function(t,e,r,n){let i=0,a=0;for(let s of r){let l=e.get(s),u=vHe(l),h=fi.drawPopup(t,l,u,De,De.forceMenus,n);h.height>i&&(i=h.height),h.width+l.x>a&&(a=h.width+l.x)}return{maxHeight:i,maxWidth:a}},"drawActorsPopup"),ode=o(function(t){Vn(De,t),t.fontFamily&&(De.actorFontFamily=De.noteFontFamily=De.messageFontFamily=t.fontFamily),t.fontSize&&(De.actorFontSize=De.noteFontSize=De.messageFontSize=t.fontSize),t.fontWeight&&(De.actorFontWeight=De.noteFontWeight=De.messageFontWeight=t.fontWeight)},"setConf"),IE=o(function(t){return nt.activations.filter(function(e){return e.actor===t})},"actorActivations"),ade=o(function(t,e){let r=e.get(t),n=IE(t),i=n.reduce(function(s,l){return qe.getMin(s,l.startx)},r.x+r.width/2-1),a=n.reduce(function(s,l){return qe.getMax(s,l.stopx)},r.x+r.width/2+1);return[i,a]},"activationBounds");o(jc,"adjustLoopHeightForWrap");o(mHe,"adjustCreatedDestroyedData");gHe=o(async function(t,e,r,n){let{securityLevel:i,sequence:a}=pe();De=a;let s;i==="sandbox"&&(s=Ve("#i"+e));let l=i==="sandbox"?Ve(s.nodes()[0].contentDocument.body):Ve("body"),u=i==="sandbox"?s.nodes()[0].contentDocument:document;nt.init(),Y.debug(n.db);let h=i==="sandbox"?l.select(`[id="${e}"]`):Ve(`[id="${e}"]`),f=n.db.getActors(),d=n.db.getCreatedActors(),p=n.db.getDestroyedActors(),m=n.db.getBoxes(),g=n.db.getActorKeys(),y=n.db.getMessages(),v=n.db.getDiagramTitle(),x=n.db.hasAtLeastOneBox(),b=n.db.hasAtLeastOneBoxWithTitle(),w=await yHe(f,y,n);if(De.height=await xHe(f,w,m),fi.insertComputerIcon(h),fi.insertDatabaseIcon(h),fi.insertClockIcon(h),x&&(nt.bumpVerticalPos(De.boxMargin),b&&nt.bumpVerticalPos(m[0].textMaxHeight)),De.hideUnusedParticipants===!0){let F=new Set;y.forEach(B=>{F.add(B.from),F.add(B.to)}),g=g.filter(B=>F.has(B))}pHe(h,f,d,g,0,y,!1);let _=await THe(y,f,w,n);fi.insertArrowHead(h),fi.insertArrowCrossHead(h),fi.insertArrowFilledHead(h),fi.insertSequenceNumber(h);function T(F,B){let G=nt.endActivation(F);G.starty+18>B&&(G.starty=B-6,B+=12),fi.drawActivation(h,G,B,De,IE(F.from).length),nt.insert(G.startx,B-10,G.stopx,B)}o(T,"activeEnd");let E=1,L=1,S=[],A=[],I=0;for(let F of y){let B,G,z;switch(F.type){case n.db.LINETYPE.NOTE:nt.resetVerticalPos(),G=F.noteModel,await hHe(h,G);break;case n.db.LINETYPE.ACTIVE_START:nt.newActivation(F,h,f);break;case n.db.LINETYPE.ACTIVE_END:T(F,nt.getVerticalPos());break;case n.db.LINETYPE.LOOP_START:jc(_,F,De.boxMargin,De.boxMargin+De.boxTextMargin,W=>nt.newLoop(W));break;case n.db.LINETYPE.LOOP_END:B=nt.endLoop(),await fi.drawLoop(h,B,"loop",De),nt.bumpVerticalPos(B.stopy-nt.getVerticalPos()),nt.models.addLoop(B);break;case n.db.LINETYPE.RECT_START:jc(_,F,De.boxMargin,De.boxMargin,W=>nt.newLoop(void 0,W.message));break;case n.db.LINETYPE.RECT_END:B=nt.endLoop(),A.push(B),nt.models.addLoop(B),nt.bumpVerticalPos(B.stopy-nt.getVerticalPos());break;case n.db.LINETYPE.OPT_START:jc(_,F,De.boxMargin,De.boxMargin+De.boxTextMargin,W=>nt.newLoop(W));break;case n.db.LINETYPE.OPT_END:B=nt.endLoop(),await fi.drawLoop(h,B,"opt",De),nt.bumpVerticalPos(B.stopy-nt.getVerticalPos()),nt.models.addLoop(B);break;case n.db.LINETYPE.ALT_START:jc(_,F,De.boxMargin,De.boxMargin+De.boxTextMargin,W=>nt.newLoop(W));break;case n.db.LINETYPE.ALT_ELSE:jc(_,F,De.boxMargin+De.boxTextMargin,De.boxMargin,W=>nt.addSectionToLoop(W));break;case n.db.LINETYPE.ALT_END:B=nt.endLoop(),await fi.drawLoop(h,B,"alt",De),nt.bumpVerticalPos(B.stopy-nt.getVerticalPos()),nt.models.addLoop(B);break;case n.db.LINETYPE.PAR_START:case n.db.LINETYPE.PAR_OVER_START:jc(_,F,De.boxMargin,De.boxMargin+De.boxTextMargin,W=>nt.newLoop(W)),nt.saveVerticalPos();break;case n.db.LINETYPE.PAR_AND:jc(_,F,De.boxMargin+De.boxTextMargin,De.boxMargin,W=>nt.addSectionToLoop(W));break;case n.db.LINETYPE.PAR_END:B=nt.endLoop(),await fi.drawLoop(h,B,"par",De),nt.bumpVerticalPos(B.stopy-nt.getVerticalPos()),nt.models.addLoop(B);break;case n.db.LINETYPE.AUTONUMBER:E=F.message.start||E,L=F.message.step||L,F.message.visible?n.db.enableSequenceNumbers():n.db.disableSequenceNumbers();break;case n.db.LINETYPE.CRITICAL_START:jc(_,F,De.boxMargin,De.boxMargin+De.boxTextMargin,W=>nt.newLoop(W));break;case n.db.LINETYPE.CRITICAL_OPTION:jc(_,F,De.boxMargin+De.boxTextMargin,De.boxMargin,W=>nt.addSectionToLoop(W));break;case n.db.LINETYPE.CRITICAL_END:B=nt.endLoop(),await fi.drawLoop(h,B,"critical",De),nt.bumpVerticalPos(B.stopy-nt.getVerticalPos()),nt.models.addLoop(B);break;case n.db.LINETYPE.BREAK_START:jc(_,F,De.boxMargin,De.boxMargin+De.boxTextMargin,W=>nt.newLoop(W));break;case n.db.LINETYPE.BREAK_END:B=nt.endLoop(),await fi.drawLoop(h,B,"break",De),nt.bumpVerticalPos(B.stopy-nt.getVerticalPos()),nt.models.addLoop(B);break;default:try{z=F.msgModel,z.starty=nt.getVerticalPos(),z.sequenceIndex=E,z.sequenceVisible=n.db.showSequenceNumbers();let W=await fHe(h,z);mHe(F,z,W,I,f,d,p),S.push({messageModel:z,lineStartY:W}),nt.models.addMessage(z)}catch(W){Y.error("error while drawing message",W)}}[n.db.LINETYPE.SOLID_OPEN,n.db.LINETYPE.DOTTED_OPEN,n.db.LINETYPE.SOLID,n.db.LINETYPE.DOTTED,n.db.LINETYPE.SOLID_CROSS,n.db.LINETYPE.DOTTED_CROSS,n.db.LINETYPE.SOLID_POINT,n.db.LINETYPE.DOTTED_POINT,n.db.LINETYPE.BIDIRECTIONAL_SOLID,n.db.LINETYPE.BIDIRECTIONAL_DOTTED].includes(F.type)&&(E=E+L),I++}Y.debug("createdActors",d),Y.debug("destroyedActors",p),await NO(h,f,g,!1);for(let F of S)await dHe(h,F.messageModel,F.lineStartY,n);De.mirrorActors&&await NO(h,f,g,!0),A.forEach(F=>fi.drawBackgroundRect(h,F)),_O(h,f,g,De);for(let F of nt.models.boxes)F.height=nt.getVerticalPos()-F.y,nt.insert(F.x,F.y,F.x+F.width,F.height),F.startx=F.x,F.starty=F.y,F.stopx=F.startx+F.width,F.stopy=F.starty+F.height,F.stroke="rgb(0,0,0, 0.5)",fi.drawBox(h,F,De);x&&nt.bumpVerticalPos(De.boxMargin);let D=sde(h,f,g,u),{bounds:k}=nt.getBounds();k.startx===void 0&&(k.startx=0),k.starty===void 0&&(k.starty=0),k.stopx===void 0&&(k.stopx=0),k.stopy===void 0&&(k.stopy=0);let R=k.stopy-k.starty;R2,d=o(y=>l?-y:y,"adjustValue");t.from===t.to?h=u:(t.activate&&!f&&(h+=d(De.activationWidth/2-1)),[r.db.LINETYPE.SOLID_OPEN,r.db.LINETYPE.DOTTED_OPEN].includes(t.type)||(h+=d(3)),[r.db.LINETYPE.BIDIRECTIONAL_SOLID,r.db.LINETYPE.BIDIRECTIONAL_DOTTED].includes(t.type)&&(u-=d(3)));let p=[n,i,a,s],m=Math.abs(u-h);t.wrap&&t.message&&(t.message=Ut.wrapLabel(t.message,qe.getMax(m+2*De.wrapPadding,De.width),O0(De)));let g=Ut.calculateTextDimensions(t.message,O0(De));return{width:qe.getMax(t.wrap?0:g.width+2*De.wrapPadding,m+2*De.wrapPadding,De.width),height:0,startx:u,stopx:h,starty:0,stopy:0,message:t.message,type:t.type,wrap:t.wrap,fromBounds:Math.min.apply(null,p),toBounds:Math.max.apply(null,p)}},"buildMessageModel"),THe=o(async function(t,e,r,n){let i={},a=[],s,l,u;for(let h of t){switch(h.id=Ut.random({length:10}),h.type){case n.db.LINETYPE.LOOP_START:case n.db.LINETYPE.ALT_START:case n.db.LINETYPE.OPT_START:case n.db.LINETYPE.PAR_START:case n.db.LINETYPE.PAR_OVER_START:case n.db.LINETYPE.CRITICAL_START:case n.db.LINETYPE.BREAK_START:a.push({id:h.id,msg:h.message,from:Number.MAX_SAFE_INTEGER,to:Number.MIN_SAFE_INTEGER,width:0});break;case n.db.LINETYPE.ALT_ELSE:case n.db.LINETYPE.PAR_AND:case n.db.LINETYPE.CRITICAL_OPTION:h.message&&(s=a.pop(),i[s.id]=s,i[h.id]=s,a.push(s));break;case n.db.LINETYPE.LOOP_END:case n.db.LINETYPE.ALT_END:case n.db.LINETYPE.OPT_END:case n.db.LINETYPE.PAR_END:case n.db.LINETYPE.CRITICAL_END:case n.db.LINETYPE.BREAK_END:s=a.pop(),i[s.id]=s;break;case n.db.LINETYPE.ACTIVE_START:{let d=e.get(h.from?h.from:h.to.actor),p=IE(h.from?h.from:h.to.actor).length,m=d.x+d.width/2+(p-1)*De.activationWidth/2,g={startx:m,stopx:m+De.activationWidth,actor:h.from,enabled:!0};nt.activations.push(g)}break;case n.db.LINETYPE.ACTIVE_END:{let d=nt.activations.map(p=>p.actor).lastIndexOf(h.from);nt.activations.splice(d,1).splice(0,1)}break}h.placement!==void 0?(l=await bHe(h,e,n),h.noteModel=l,a.forEach(d=>{s=d,s.from=qe.getMin(s.from,l.startx),s.to=qe.getMax(s.to,l.startx+l.width),s.width=qe.getMax(s.width,Math.abs(s.from-s.to))-De.labelBoxWidth})):(u=wHe(h,e,n),h.msgModel=u,u.startx&&u.stopx&&a.length>0&&a.forEach(d=>{if(s=d,u.startx===u.stopx){let p=e.get(h.from),m=e.get(h.to);s.from=qe.getMin(p.x-u.width/2,p.x-p.width/2,s.from),s.to=qe.getMax(m.x+u.width/2,m.x+p.width/2,s.to),s.width=qe.getMax(s.width,Math.abs(s.to-s.from))-De.labelBoxWidth}else s.from=qe.getMin(u.startx,s.from),s.to=qe.getMax(u.stopx,s.to),s.width=qe.getMax(s.width,u.width)-De.labelBoxWidth}))}return nt.activations=[],Y.debug("Loop type widths:",i),i},"calculateLoopBounds"),lde={bounds:nt,drawActors:NO,drawActorsPopup:sde,setConf:ode,draw:gHe}});var ude={};vr(ude,{diagram:()=>kHe});var kHe,hde=M(()=>{"use strict";$fe();jfe();Qfe();cde();kHe={parser:Gfe,db:SO,renderer:lde,styles:Kfe,init:o(({wrap:t})=>{SO.setWrap(t)},"init")}});var RO,OE,MO=M(()=>{"use strict";RO=function(){var t=o(function(X,fe,he,ge){for(he=he||{},ge=X.length;ge--;he[X[ge]]=fe);return he},"o"),e=[1,18],r=[1,19],n=[1,20],i=[1,41],a=[1,42],s=[1,26],l=[1,24],u=[1,25],h=[1,32],f=[1,33],d=[1,34],p=[1,45],m=[1,35],g=[1,36],y=[1,37],v=[1,38],x=[1,27],b=[1,28],w=[1,29],_=[1,30],T=[1,31],E=[1,44],L=[1,46],S=[1,43],A=[1,47],I=[1,9],D=[1,8,9],k=[1,58],R=[1,59],C=[1,60],O=[1,61],N=[1,62],P=[1,63],F=[1,64],B=[1,8,9,41],G=[1,76],z=[1,8,9,12,13,22,39,41,44,66,67,68,69,70,71,72,77,79],W=[1,8,9,12,13,17,20,22,39,41,44,48,58,66,67,68,69,70,71,72,77,79,84,99,101,102],Z=[13,58,84,99,101,102],j=[13,58,71,72,84,99,101,102],oe=[13,58,66,67,68,69,70,84,99,101,102],K=[1,98],ee=[1,115],J=[1,107],H=[1,113],q=[1,108],Q=[1,109],ae=[1,110],ue=[1,111],ce=[1,112],te=[1,114],Ne=[22,58,59,80,84,85,86,87,88,89],se=[1,8,9,39,41,44],ke=[1,8,9,22],Re=[1,143],Ce=[1,8,9,59],Pe=[1,8,9,22,58,59,80,84,85,86,87,88,89],Ie={trace:o(function(){},"trace"),yy:{},symbols_:{error:2,start:3,mermaidDoc:4,statements:5,graphConfig:6,CLASS_DIAGRAM:7,NEWLINE:8,EOF:9,statement:10,classLabel:11,SQS:12,STR:13,SQE:14,namespaceName:15,alphaNumToken:16,DOT:17,className:18,classLiteralName:19,GENERICTYPE:20,relationStatement:21,LABEL:22,namespaceStatement:23,classStatement:24,memberStatement:25,annotationStatement:26,clickStatement:27,styleStatement:28,cssClassStatement:29,noteStatement:30,classDefStatement:31,direction:32,acc_title:33,acc_title_value:34,acc_descr:35,acc_descr_value:36,acc_descr_multiline_value:37,namespaceIdentifier:38,STRUCT_START:39,classStatements:40,STRUCT_STOP:41,NAMESPACE:42,classIdentifier:43,STYLE_SEPARATOR:44,members:45,CLASS:46,ANNOTATION_START:47,ANNOTATION_END:48,MEMBER:49,SEPARATOR:50,relation:51,NOTE_FOR:52,noteText:53,NOTE:54,CLASSDEF:55,classList:56,stylesOpt:57,ALPHA:58,COMMA:59,direction_tb:60,direction_bt:61,direction_rl:62,direction_lr:63,relationType:64,lineType:65,AGGREGATION:66,EXTENSION:67,COMPOSITION:68,DEPENDENCY:69,LOLLIPOP:70,LINE:71,DOTTED_LINE:72,CALLBACK:73,LINK:74,LINK_TARGET:75,CLICK:76,CALLBACK_NAME:77,CALLBACK_ARGS:78,HREF:79,STYLE:80,CSSCLASS:81,style:82,styleComponent:83,NUM:84,COLON:85,UNIT:86,SPACE:87,BRKT:88,PCT:89,commentToken:90,textToken:91,graphCodeTokens:92,textNoTagsToken:93,TAGSTART:94,TAGEND:95,"==":96,"--":97,DEFAULT:98,MINUS:99,keywords:100,UNICODE_TEXT:101,BQUOTE_STR:102,$accept:0,$end:1},terminals_:{2:"error",7:"CLASS_DIAGRAM",8:"NEWLINE",9:"EOF",12:"SQS",13:"STR",14:"SQE",17:"DOT",20:"GENERICTYPE",22:"LABEL",33:"acc_title",34:"acc_title_value",35:"acc_descr",36:"acc_descr_value",37:"acc_descr_multiline_value",39:"STRUCT_START",41:"STRUCT_STOP",42:"NAMESPACE",44:"STYLE_SEPARATOR",46:"CLASS",47:"ANNOTATION_START",48:"ANNOTATION_END",49:"MEMBER",50:"SEPARATOR",52:"NOTE_FOR",54:"NOTE",55:"CLASSDEF",58:"ALPHA",59:"COMMA",60:"direction_tb",61:"direction_bt",62:"direction_rl",63:"direction_lr",66:"AGGREGATION",67:"EXTENSION",68:"COMPOSITION",69:"DEPENDENCY",70:"LOLLIPOP",71:"LINE",72:"DOTTED_LINE",73:"CALLBACK",74:"LINK",75:"LINK_TARGET",76:"CLICK",77:"CALLBACK_NAME",78:"CALLBACK_ARGS",79:"HREF",80:"STYLE",81:"CSSCLASS",84:"NUM",85:"COLON",86:"UNIT",87:"SPACE",88:"BRKT",89:"PCT",92:"graphCodeTokens",94:"TAGSTART",95:"TAGEND",96:"==",97:"--",98:"DEFAULT",99:"MINUS",100:"keywords",101:"UNICODE_TEXT",102:"BQUOTE_STR"},productions_:[0,[3,1],[3,1],[4,1],[6,4],[5,1],[5,2],[5,3],[11,3],[15,1],[15,3],[15,2],[18,1],[18,3],[18,1],[18,2],[18,2],[18,2],[10,1],[10,2],[10,1],[10,1],[10,1],[10,1],[10,1],[10,1],[10,1],[10,1],[10,1],[10,1],[10,2],[10,2],[10,1],[23,4],[23,5],[38,2],[40,1],[40,2],[40,3],[24,1],[24,3],[24,4],[24,6],[43,2],[43,3],[26,4],[45,1],[45,2],[25,1],[25,2],[25,1],[25,1],[21,3],[21,4],[21,4],[21,5],[30,3],[30,2],[31,3],[56,1],[56,3],[32,1],[32,1],[32,1],[32,1],[51,3],[51,2],[51,2],[51,1],[64,1],[64,1],[64,1],[64,1],[64,1],[65,1],[65,1],[27,3],[27,4],[27,3],[27,4],[27,4],[27,5],[27,3],[27,4],[27,4],[27,5],[27,4],[27,5],[27,5],[27,6],[28,3],[29,3],[57,1],[57,3],[82,1],[82,2],[83,1],[83,1],[83,1],[83,1],[83,1],[83,1],[83,1],[83,1],[83,1],[90,1],[90,1],[91,1],[91,1],[91,1],[91,1],[91,1],[91,1],[91,1],[93,1],[93,1],[93,1],[93,1],[16,1],[16,1],[16,1],[16,1],[19,1],[53,1]],performAction:o(function(fe,he,ge,ne,ve,U,Te){var ie=U.length-1;switch(ve){case 8:this.$=U[ie-1];break;case 9:case 12:case 14:this.$=U[ie];break;case 10:case 13:this.$=U[ie-2]+"."+U[ie];break;case 11:case 15:this.$=U[ie-1]+U[ie];break;case 16:case 17:this.$=U[ie-1]+"~"+U[ie]+"~";break;case 18:ne.addRelation(U[ie]);break;case 19:U[ie-1].title=ne.cleanupLabel(U[ie]),ne.addRelation(U[ie-1]);break;case 30:this.$=U[ie].trim(),ne.setAccTitle(this.$);break;case 31:case 32:this.$=U[ie].trim(),ne.setAccDescription(this.$);break;case 33:ne.addClassesToNamespace(U[ie-3],U[ie-1]);break;case 34:ne.addClassesToNamespace(U[ie-4],U[ie-1]);break;case 35:this.$=U[ie],ne.addNamespace(U[ie]);break;case 36:this.$=[U[ie]];break;case 37:this.$=[U[ie-1]];break;case 38:U[ie].unshift(U[ie-2]),this.$=U[ie];break;case 40:ne.setCssClass(U[ie-2],U[ie]);break;case 41:ne.addMembers(U[ie-3],U[ie-1]);break;case 42:ne.setCssClass(U[ie-5],U[ie-3]),ne.addMembers(U[ie-5],U[ie-1]);break;case 43:this.$=U[ie],ne.addClass(U[ie]);break;case 44:this.$=U[ie-1],ne.addClass(U[ie-1]),ne.setClassLabel(U[ie-1],U[ie]);break;case 45:ne.addAnnotation(U[ie],U[ie-2]);break;case 46:case 59:this.$=[U[ie]];break;case 47:U[ie].push(U[ie-1]),this.$=U[ie];break;case 48:break;case 49:ne.addMember(U[ie-1],ne.cleanupLabel(U[ie]));break;case 50:break;case 51:break;case 52:this.$={id1:U[ie-2],id2:U[ie],relation:U[ie-1],relationTitle1:"none",relationTitle2:"none"};break;case 53:this.$={id1:U[ie-3],id2:U[ie],relation:U[ie-1],relationTitle1:U[ie-2],relationTitle2:"none"};break;case 54:this.$={id1:U[ie-3],id2:U[ie],relation:U[ie-2],relationTitle1:"none",relationTitle2:U[ie-1]};break;case 55:this.$={id1:U[ie-4],id2:U[ie],relation:U[ie-2],relationTitle1:U[ie-3],relationTitle2:U[ie-1]};break;case 56:ne.addNote(U[ie],U[ie-1]);break;case 57:ne.addNote(U[ie]);break;case 58:this.$=U[ie-2],ne.defineClass(U[ie-1],U[ie]);break;case 60:this.$=U[ie-2].concat([U[ie]]);break;case 61:ne.setDirection("TB");break;case 62:ne.setDirection("BT");break;case 63:ne.setDirection("RL");break;case 64:ne.setDirection("LR");break;case 65:this.$={type1:U[ie-2],type2:U[ie],lineType:U[ie-1]};break;case 66:this.$={type1:"none",type2:U[ie],lineType:U[ie-1]};break;case 67:this.$={type1:U[ie-1],type2:"none",lineType:U[ie]};break;case 68:this.$={type1:"none",type2:"none",lineType:U[ie]};break;case 69:this.$=ne.relationType.AGGREGATION;break;case 70:this.$=ne.relationType.EXTENSION;break;case 71:this.$=ne.relationType.COMPOSITION;break;case 72:this.$=ne.relationType.DEPENDENCY;break;case 73:this.$=ne.relationType.LOLLIPOP;break;case 74:this.$=ne.lineType.LINE;break;case 75:this.$=ne.lineType.DOTTED_LINE;break;case 76:case 82:this.$=U[ie-2],ne.setClickEvent(U[ie-1],U[ie]);break;case 77:case 83:this.$=U[ie-3],ne.setClickEvent(U[ie-2],U[ie-1]),ne.setTooltip(U[ie-2],U[ie]);break;case 78:this.$=U[ie-2],ne.setLink(U[ie-1],U[ie]);break;case 79:this.$=U[ie-3],ne.setLink(U[ie-2],U[ie-1],U[ie]);break;case 80:this.$=U[ie-3],ne.setLink(U[ie-2],U[ie-1]),ne.setTooltip(U[ie-2],U[ie]);break;case 81:this.$=U[ie-4],ne.setLink(U[ie-3],U[ie-2],U[ie]),ne.setTooltip(U[ie-3],U[ie-1]);break;case 84:this.$=U[ie-3],ne.setClickEvent(U[ie-2],U[ie-1],U[ie]);break;case 85:this.$=U[ie-4],ne.setClickEvent(U[ie-3],U[ie-2],U[ie-1]),ne.setTooltip(U[ie-3],U[ie]);break;case 86:this.$=U[ie-3],ne.setLink(U[ie-2],U[ie]);break;case 87:this.$=U[ie-4],ne.setLink(U[ie-3],U[ie-1],U[ie]);break;case 88:this.$=U[ie-4],ne.setLink(U[ie-3],U[ie-1]),ne.setTooltip(U[ie-3],U[ie]);break;case 89:this.$=U[ie-5],ne.setLink(U[ie-4],U[ie-2],U[ie]),ne.setTooltip(U[ie-4],U[ie-1]);break;case 90:this.$=U[ie-2],ne.setCssStyle(U[ie-1],U[ie]);break;case 91:ne.setCssClass(U[ie-1],U[ie]);break;case 92:this.$=[U[ie]];break;case 93:U[ie-2].push(U[ie]),this.$=U[ie-2];break;case 95:this.$=U[ie-1]+U[ie];break}},"anonymous"),table:[{3:1,4:2,5:3,6:4,7:[1,6],10:5,16:39,18:21,19:40,21:7,23:8,24:9,25:10,26:11,27:12,28:13,29:14,30:15,31:16,32:17,33:e,35:r,37:n,38:22,42:i,43:23,46:a,47:s,49:l,50:u,52:h,54:f,55:d,58:p,60:m,61:g,62:y,63:v,73:x,74:b,76:w,80:_,81:T,84:E,99:L,101:S,102:A},{1:[3]},{1:[2,1]},{1:[2,2]},{1:[2,3]},t(I,[2,5],{8:[1,48]}),{8:[1,49]},t(D,[2,18],{22:[1,50]}),t(D,[2,20]),t(D,[2,21]),t(D,[2,22]),t(D,[2,23]),t(D,[2,24]),t(D,[2,25]),t(D,[2,26]),t(D,[2,27]),t(D,[2,28]),t(D,[2,29]),{34:[1,51]},{36:[1,52]},t(D,[2,32]),t(D,[2,48],{51:53,64:56,65:57,13:[1,54],22:[1,55],66:k,67:R,68:C,69:O,70:N,71:P,72:F}),{39:[1,65]},t(B,[2,39],{39:[1,67],44:[1,66]}),t(D,[2,50]),t(D,[2,51]),{16:68,58:p,84:E,99:L,101:S},{16:39,18:69,19:40,58:p,84:E,99:L,101:S,102:A},{16:39,18:70,19:40,58:p,84:E,99:L,101:S,102:A},{16:39,18:71,19:40,58:p,84:E,99:L,101:S,102:A},{58:[1,72]},{13:[1,73]},{16:39,18:74,19:40,58:p,84:E,99:L,101:S,102:A},{13:G,53:75},{56:77,58:[1,78]},t(D,[2,61]),t(D,[2,62]),t(D,[2,63]),t(D,[2,64]),t(z,[2,12],{16:39,19:40,18:80,17:[1,79],20:[1,81],58:p,84:E,99:L,101:S,102:A}),t(z,[2,14],{20:[1,82]}),{15:83,16:84,58:p,84:E,99:L,101:S},{16:39,18:85,19:40,58:p,84:E,99:L,101:S,102:A},t(W,[2,118]),t(W,[2,119]),t(W,[2,120]),t(W,[2,121]),t([1,8,9,12,13,20,22,39,41,44,66,67,68,69,70,71,72,77,79],[2,122]),t(I,[2,6],{10:5,21:7,23:8,24:9,25:10,26:11,27:12,28:13,29:14,30:15,31:16,32:17,18:21,38:22,43:23,16:39,19:40,5:86,33:e,35:r,37:n,42:i,46:a,47:s,49:l,50:u,52:h,54:f,55:d,58:p,60:m,61:g,62:y,63:v,73:x,74:b,76:w,80:_,81:T,84:E,99:L,101:S,102:A}),{5:87,10:5,16:39,18:21,19:40,21:7,23:8,24:9,25:10,26:11,27:12,28:13,29:14,30:15,31:16,32:17,33:e,35:r,37:n,38:22,42:i,43:23,46:a,47:s,49:l,50:u,52:h,54:f,55:d,58:p,60:m,61:g,62:y,63:v,73:x,74:b,76:w,80:_,81:T,84:E,99:L,101:S,102:A},t(D,[2,19]),t(D,[2,30]),t(D,[2,31]),{13:[1,89],16:39,18:88,19:40,58:p,84:E,99:L,101:S,102:A},{51:90,64:56,65:57,66:k,67:R,68:C,69:O,70:N,71:P,72:F},t(D,[2,49]),{65:91,71:P,72:F},t(Z,[2,68],{64:92,66:k,67:R,68:C,69:O,70:N}),t(j,[2,69]),t(j,[2,70]),t(j,[2,71]),t(j,[2,72]),t(j,[2,73]),t(oe,[2,74]),t(oe,[2,75]),{8:[1,94],24:95,40:93,43:23,46:a},{16:96,58:p,84:E,99:L,101:S},{45:97,49:K},{48:[1,99]},{13:[1,100]},{13:[1,101]},{77:[1,102],79:[1,103]},{22:ee,57:104,58:J,80:H,82:105,83:106,84:q,85:Q,86:ae,87:ue,88:ce,89:te},{58:[1,116]},{13:G,53:117},t(D,[2,57]),t(D,[2,123]),{22:ee,57:118,58:J,59:[1,119],80:H,82:105,83:106,84:q,85:Q,86:ae,87:ue,88:ce,89:te},t(Ne,[2,59]),{16:39,18:120,19:40,58:p,84:E,99:L,101:S,102:A},t(z,[2,15]),t(z,[2,16]),t(z,[2,17]),{39:[2,35]},{15:122,16:84,17:[1,121],39:[2,9],58:p,84:E,99:L,101:S},t(se,[2,43],{11:123,12:[1,124]}),t(I,[2,7]),{9:[1,125]},t(ke,[2,52]),{16:39,18:126,19:40,58:p,84:E,99:L,101:S,102:A},{13:[1,128],16:39,18:127,19:40,58:p,84:E,99:L,101:S,102:A},t(Z,[2,67],{64:129,66:k,67:R,68:C,69:O,70:N}),t(Z,[2,66]),{41:[1,130]},{24:95,40:131,43:23,46:a},{8:[1,132],41:[2,36]},t(B,[2,40],{39:[1,133]}),{41:[1,134]},{41:[2,46],45:135,49:K},{16:39,18:136,19:40,58:p,84:E,99:L,101:S,102:A},t(D,[2,76],{13:[1,137]}),t(D,[2,78],{13:[1,139],75:[1,138]}),t(D,[2,82],{13:[1,140],78:[1,141]}),{13:[1,142]},t(D,[2,90],{59:Re}),t(Ce,[2,92],{83:144,22:ee,58:J,80:H,84:q,85:Q,86:ae,87:ue,88:ce,89:te}),t(Pe,[2,94]),t(Pe,[2,96]),t(Pe,[2,97]),t(Pe,[2,98]),t(Pe,[2,99]),t(Pe,[2,100]),t(Pe,[2,101]),t(Pe,[2,102]),t(Pe,[2,103]),t(Pe,[2,104]),t(D,[2,91]),t(D,[2,56]),t(D,[2,58],{59:Re}),{58:[1,145]},t(z,[2,13]),{15:146,16:84,58:p,84:E,99:L,101:S},{39:[2,11]},t(se,[2,44]),{13:[1,147]},{1:[2,4]},t(ke,[2,54]),t(ke,[2,53]),{16:39,18:148,19:40,58:p,84:E,99:L,101:S,102:A},t(Z,[2,65]),t(D,[2,33]),{41:[1,149]},{24:95,40:150,41:[2,37],43:23,46:a},{45:151,49:K},t(B,[2,41]),{41:[2,47]},t(D,[2,45]),t(D,[2,77]),t(D,[2,79]),t(D,[2,80],{75:[1,152]}),t(D,[2,83]),t(D,[2,84],{13:[1,153]}),t(D,[2,86],{13:[1,155],75:[1,154]}),{22:ee,58:J,80:H,82:156,83:106,84:q,85:Q,86:ae,87:ue,88:ce,89:te},t(Pe,[2,95]),t(Ne,[2,60]),{39:[2,10]},{14:[1,157]},t(ke,[2,55]),t(D,[2,34]),{41:[2,38]},{41:[1,158]},t(D,[2,81]),t(D,[2,85]),t(D,[2,87]),t(D,[2,88],{75:[1,159]}),t(Ce,[2,93],{83:144,22:ee,58:J,80:H,84:q,85:Q,86:ae,87:ue,88:ce,89:te}),t(se,[2,8]),t(B,[2,42]),t(D,[2,89])],defaultActions:{2:[2,1],3:[2,2],4:[2,3],83:[2,35],122:[2,11],125:[2,4],135:[2,47],146:[2,10],150:[2,38]},parseError:o(function(fe,he){if(he.recoverable)this.trace(fe);else{var ge=new Error(fe);throw ge.hash=he,ge}},"parseError"),parse:o(function(fe){var he=this,ge=[0],ne=[],ve=[null],U=[],Te=this.table,ie="",Ee=0,Ae=0,Ge=0,Be=2,me=1,He=U.slice.call(arguments,1),Oe=Object.create(this.lexer),et={yy:{}};for(var bt in this.yy)Object.prototype.hasOwnProperty.call(this.yy,bt)&&(et.yy[bt]=this.yy[bt]);Oe.setInput(fe,et.yy),et.yy.lexer=Oe,et.yy.parser=this,typeof Oe.yylloc>"u"&&(Oe.yylloc={});var kt=Oe.yylloc;U.push(kt);var vt=Oe.options&&Oe.options.ranges;typeof et.yy.parseError=="function"?this.parseError=et.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function rt(yr){ge.length=ge.length-2*yr,ve.length=ve.length-yr,U.length=U.length-yr}o(rt,"popStack");function yt(){var yr;return yr=ne.pop()||Oe.lex()||me,typeof yr!="number"&&(yr instanceof Array&&(ne=yr,yr=ne.pop()),yr=he.symbols_[yr]||yr),yr}o(yt,"lex");for(var Ue,tt,ht,Et,er,dt,Je={},ct,Ct,pt,Bt;;){if(ht=ge[ge.length-1],this.defaultActions[ht]?Et=this.defaultActions[ht]:((Ue===null||typeof Ue>"u")&&(Ue=yt()),Et=Te[ht]&&Te[ht][Ue]),typeof Et>"u"||!Et.length||!Et[0]){var Tr="";Bt=[];for(ct in Te[ht])this.terminals_[ct]&&ct>Be&&Bt.push("'"+this.terminals_[ct]+"'");Oe.showPosition?Tr="Parse error on line "+(Ee+1)+`: +`+Oe.showPosition()+` +Expecting `+Bt.join(", ")+", got '"+(this.terminals_[Ue]||Ue)+"'":Tr="Parse error on line "+(Ee+1)+": Unexpected "+(Ue==me?"end of input":"'"+(this.terminals_[Ue]||Ue)+"'"),this.parseError(Tr,{text:Oe.match,token:this.terminals_[Ue]||Ue,line:Oe.yylineno,loc:kt,expected:Bt})}if(Et[0]instanceof Array&&Et.length>1)throw new Error("Parse Error: multiple actions possible at state: "+ht+", token: "+Ue);switch(Et[0]){case 1:ge.push(Ue),ve.push(Oe.yytext),U.push(Oe.yylloc),ge.push(Et[1]),Ue=null,tt?(Ue=tt,tt=null):(Ae=Oe.yyleng,ie=Oe.yytext,Ee=Oe.yylineno,kt=Oe.yylloc,Ge>0&&Ge--);break;case 2:if(Ct=this.productions_[Et[1]][1],Je.$=ve[ve.length-Ct],Je._$={first_line:U[U.length-(Ct||1)].first_line,last_line:U[U.length-1].last_line,first_column:U[U.length-(Ct||1)].first_column,last_column:U[U.length-1].last_column},vt&&(Je._$.range=[U[U.length-(Ct||1)].range[0],U[U.length-1].range[1]]),dt=this.performAction.apply(Je,[ie,Ae,Ee,et.yy,Et[1],ve,U].concat(He)),typeof dt<"u")return dt;Ct&&(ge=ge.slice(0,-1*Ct*2),ve=ve.slice(0,-1*Ct),U=U.slice(0,-1*Ct)),ge.push(this.productions_[Et[1]][0]),ve.push(Je.$),U.push(Je._$),pt=Te[ge[ge.length-2]][ge[ge.length-1]],ge.push(pt);break;case 3:return!0}}return!0},"parse")},$e=function(){var X={EOF:1,parseError:o(function(he,ge){if(this.yy.parser)this.yy.parser.parseError(he,ge);else throw new Error(he)},"parseError"),setInput:o(function(fe,he){return this.yy=he||this.yy||{},this._input=fe,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},"setInput"),input:o(function(){var fe=this._input[0];this.yytext+=fe,this.yyleng++,this.offset++,this.match+=fe,this.matched+=fe;var he=fe.match(/(?:\r\n?|\n).*/g);return he?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),fe},"input"),unput:o(function(fe){var he=fe.length,ge=fe.split(/(?:\r\n?|\n)/g);this._input=fe+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-he),this.offset-=he;var ne=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),ge.length-1&&(this.yylineno-=ge.length-1);var ve=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:ge?(ge.length===ne.length?this.yylloc.first_column:0)+ne[ne.length-ge.length].length-ge[0].length:this.yylloc.first_column-he},this.options.ranges&&(this.yylloc.range=[ve[0],ve[0]+this.yyleng-he]),this.yyleng=this.yytext.length,this},"unput"),more:o(function(){return this._more=!0,this},"more"),reject:o(function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true). +`+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},"reject"),less:o(function(fe){this.unput(this.match.slice(fe))},"less"),pastInput:o(function(){var fe=this.matched.substr(0,this.matched.length-this.match.length);return(fe.length>20?"...":"")+fe.substr(-20).replace(/\n/g,"")},"pastInput"),upcomingInput:o(function(){var fe=this.match;return fe.length<20&&(fe+=this._input.substr(0,20-fe.length)),(fe.substr(0,20)+(fe.length>20?"...":"")).replace(/\n/g,"")},"upcomingInput"),showPosition:o(function(){var fe=this.pastInput(),he=new Array(fe.length+1).join("-");return fe+this.upcomingInput()+` +`+he+"^"},"showPosition"),test_match:o(function(fe,he){var ge,ne,ve;if(this.options.backtrack_lexer&&(ve={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(ve.yylloc.range=this.yylloc.range.slice(0))),ne=fe[0].match(/(?:\r\n?|\n).*/g),ne&&(this.yylineno+=ne.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:ne?ne[ne.length-1].length-ne[ne.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+fe[0].length},this.yytext+=fe[0],this.match+=fe[0],this.matches=fe,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(fe[0].length),this.matched+=fe[0],ge=this.performAction.call(this,this.yy,this,he,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),ge)return ge;if(this._backtrack){for(var U in ve)this[U]=ve[U];return!1}return!1},"test_match"),next:o(function(){if(this.done)return this.EOF;this._input||(this.done=!0);var fe,he,ge,ne;this._more||(this.yytext="",this.match="");for(var ve=this._currentRules(),U=0;Uhe[0].length)){if(he=ge,ne=U,this.options.backtrack_lexer){if(fe=this.test_match(ge,ve[U]),fe!==!1)return fe;if(this._backtrack){he=!1;continue}else return!1}else if(!this.options.flex)break}return he?(fe=this.test_match(he,ve[ne]),fe!==!1?fe:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text. +`+this.showPosition(),{text:"",token:null,line:this.yylineno})},"next"),lex:o(function(){var he=this.next();return he||this.lex()},"lex"),begin:o(function(he){this.conditionStack.push(he)},"begin"),popState:o(function(){var he=this.conditionStack.length-1;return he>0?this.conditionStack.pop():this.conditionStack[0]},"popState"),_currentRules:o(function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},"_currentRules"),topState:o(function(he){return he=this.conditionStack.length-1-Math.abs(he||0),he>=0?this.conditionStack[he]:"INITIAL"},"topState"),pushState:o(function(he){this.begin(he)},"pushState"),stateStackSize:o(function(){return this.conditionStack.length},"stateStackSize"),options:{},performAction:o(function(he,ge,ne,ve){var U=ve;switch(ne){case 0:return 60;case 1:return 61;case 2:return 62;case 3:return 63;case 4:break;case 5:break;case 6:return this.begin("acc_title"),33;break;case 7:return this.popState(),"acc_title_value";break;case 8:return this.begin("acc_descr"),35;break;case 9:return this.popState(),"acc_descr_value";break;case 10:this.begin("acc_descr_multiline");break;case 11:this.popState();break;case 12:return"acc_descr_multiline_value";case 13:return 8;case 14:break;case 15:return 7;case 16:return 7;case 17:return"EDGE_STATE";case 18:this.begin("callback_name");break;case 19:this.popState();break;case 20:this.popState(),this.begin("callback_args");break;case 21:return 77;case 22:this.popState();break;case 23:return 78;case 24:this.popState();break;case 25:return"STR";case 26:this.begin("string");break;case 27:return 80;case 28:return 55;case 29:return this.begin("namespace"),42;break;case 30:return this.popState(),8;break;case 31:break;case 32:return this.begin("namespace-body"),39;break;case 33:return this.popState(),41;break;case 34:return"EOF_IN_STRUCT";case 35:return 8;case 36:break;case 37:return"EDGE_STATE";case 38:return this.begin("class"),46;break;case 39:return this.popState(),8;break;case 40:break;case 41:return this.popState(),this.popState(),41;break;case 42:return this.begin("class-body"),39;break;case 43:return this.popState(),41;break;case 44:return"EOF_IN_STRUCT";case 45:return"EDGE_STATE";case 46:return"OPEN_IN_STRUCT";case 47:break;case 48:return"MEMBER";case 49:return 81;case 50:return 73;case 51:return 74;case 52:return 76;case 53:return 52;case 54:return 54;case 55:return 47;case 56:return 48;case 57:return 79;case 58:this.popState();break;case 59:return"GENERICTYPE";case 60:this.begin("generic");break;case 61:this.popState();break;case 62:return"BQUOTE_STR";case 63:this.begin("bqstring");break;case 64:return 75;case 65:return 75;case 66:return 75;case 67:return 75;case 68:return 67;case 69:return 67;case 70:return 69;case 71:return 69;case 72:return 68;case 73:return 66;case 74:return 70;case 75:return 71;case 76:return 72;case 77:return 22;case 78:return 44;case 79:return 99;case 80:return 17;case 81:return"PLUS";case 82:return 85;case 83:return 59;case 84:return 88;case 85:return 88;case 86:return 89;case 87:return"EQUALS";case 88:return"EQUALS";case 89:return 58;case 90:return 12;case 91:return 14;case 92:return"PUNCTUATION";case 93:return 84;case 94:return 101;case 95:return 87;case 96:return 87;case 97:return 9}},"anonymous"),rules:[/^(?:.*direction\s+TB[^\n]*)/,/^(?:.*direction\s+BT[^\n]*)/,/^(?:.*direction\s+RL[^\n]*)/,/^(?:.*direction\s+LR[^\n]*)/,/^(?:%%(?!\{)*[^\n]*(\r?\n?)+)/,/^(?:%%[^\n]*(\r?\n)*)/,/^(?:accTitle\s*:\s*)/,/^(?:(?!\n||)*[^\n]*)/,/^(?:accDescr\s*:\s*)/,/^(?:(?!\n||)*[^\n]*)/,/^(?:accDescr\s*\{\s*)/,/^(?:[\}])/,/^(?:[^\}]*)/,/^(?:\s*(\r?\n)+)/,/^(?:\s+)/,/^(?:classDiagram-v2\b)/,/^(?:classDiagram\b)/,/^(?:\[\*\])/,/^(?:call[\s]+)/,/^(?:\([\s]*\))/,/^(?:\()/,/^(?:[^(]*)/,/^(?:\))/,/^(?:[^)]*)/,/^(?:["])/,/^(?:[^"]*)/,/^(?:["])/,/^(?:style\b)/,/^(?:classDef\b)/,/^(?:namespace\b)/,/^(?:\s*(\r?\n)+)/,/^(?:\s+)/,/^(?:[{])/,/^(?:[}])/,/^(?:$)/,/^(?:\s*(\r?\n)+)/,/^(?:\s+)/,/^(?:\[\*\])/,/^(?:class\b)/,/^(?:\s*(\r?\n)+)/,/^(?:\s+)/,/^(?:[}])/,/^(?:[{])/,/^(?:[}])/,/^(?:$)/,/^(?:\[\*\])/,/^(?:[{])/,/^(?:[\n])/,/^(?:[^{}\n]*)/,/^(?:cssClass\b)/,/^(?:callback\b)/,/^(?:link\b)/,/^(?:click\b)/,/^(?:note for\b)/,/^(?:note\b)/,/^(?:<<)/,/^(?:>>)/,/^(?:href\b)/,/^(?:[~])/,/^(?:[^~]*)/,/^(?:~)/,/^(?:[`])/,/^(?:[^`]+)/,/^(?:[`])/,/^(?:_self\b)/,/^(?:_blank\b)/,/^(?:_parent\b)/,/^(?:_top\b)/,/^(?:\s*<\|)/,/^(?:\s*\|>)/,/^(?:\s*>)/,/^(?:\s*<)/,/^(?:\s*\*)/,/^(?:\s*o\b)/,/^(?:\s*\(\))/,/^(?:--)/,/^(?:\.\.)/,/^(?::{1}[^:\n;]+)/,/^(?::{3})/,/^(?:-)/,/^(?:\.)/,/^(?:\+)/,/^(?::)/,/^(?:,)/,/^(?:#)/,/^(?:#)/,/^(?:%)/,/^(?:=)/,/^(?:=)/,/^(?:\w+)/,/^(?:\[)/,/^(?:\])/,/^(?:[!"#$%&'*+,-.`?\\/])/,/^(?:[0-9]+)/,/^(?:[\u00AA\u00B5\u00BA\u00C0-\u00D6\u00D8-\u00F6]|[\u00F8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377]|[\u037A-\u037D\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5]|[\u03F7-\u0481\u048A-\u0527\u0531-\u0556\u0559\u0561-\u0587\u05D0-\u05EA]|[\u05F0-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE]|[\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA]|[\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u08A0]|[\u08A2-\u08AC\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0977]|[\u0979-\u097F\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2]|[\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u0A05-\u0A0A]|[\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39]|[\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8]|[\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0B05-\u0B0C]|[\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C]|[\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99]|[\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0]|[\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C33\u0C35-\u0C39\u0C3D]|[\u0C58\u0C59\u0C60\u0C61\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3]|[\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D05-\u0D0C\u0D0E-\u0D10]|[\u0D12-\u0D3A\u0D3D\u0D4E\u0D60\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1]|[\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81]|[\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3]|[\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6]|[\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A]|[\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081]|[\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D]|[\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0]|[\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310]|[\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F4\u1401-\u166C]|[\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u1700-\u170C\u170E-\u1711]|[\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7]|[\u17DC\u1820-\u1877\u1880-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191C]|[\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19C1-\u19C7\u1A00-\u1A16]|[\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4B\u1B83-\u1BA0\u1BAE\u1BAF]|[\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1CE9-\u1CEC]|[\u1CEE-\u1CF1\u1CF5\u1CF6\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D]|[\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D]|[\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3]|[\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F]|[\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128]|[\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2183\u2184]|[\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3]|[\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6]|[\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE]|[\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005\u3006\u3031-\u3035\u303B\u303C]|[\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D]|[\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FCC]|[\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B]|[\uA640-\uA66E\uA67F-\uA697\uA6A0-\uA6E5\uA717-\uA71F\uA722-\uA788]|[\uA78B-\uA78E\uA790-\uA793\uA7A0-\uA7AA\uA7F8-\uA801\uA803-\uA805]|[\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB]|[\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uAA00-\uAA28]|[\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA80-\uAAAF\uAAB1\uAAB5]|[\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4]|[\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E]|[\uABC0-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D]|[\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36]|[\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D]|[\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC]|[\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF]|[\uFFD2-\uFFD7\uFFDA-\uFFDC])/,/^(?:\s)/,/^(?:\s)/,/^(?:$)/],conditions:{"namespace-body":{rules:[26,33,34,35,36,37,38,49,50,51,52,53,54,55,56,57,60,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,86,87,88,89,90,91,92,93,94,95,97],inclusive:!1},namespace:{rules:[26,29,30,31,32,49,50,51,52,53,54,55,56,57,60,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,86,87,88,89,90,91,92,93,94,95,97],inclusive:!1},"class-body":{rules:[26,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,60,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,86,87,88,89,90,91,92,93,94,95,97],inclusive:!1},class:{rules:[26,39,40,41,42,49,50,51,52,53,54,55,56,57,60,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,86,87,88,89,90,91,92,93,94,95,97],inclusive:!1},acc_descr_multiline:{rules:[11,12,26,49,50,51,52,53,54,55,56,57,60,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,86,87,88,89,90,91,92,93,94,95,97],inclusive:!1},acc_descr:{rules:[9,26,49,50,51,52,53,54,55,56,57,60,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,86,87,88,89,90,91,92,93,94,95,97],inclusive:!1},acc_title:{rules:[7,26,49,50,51,52,53,54,55,56,57,60,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,86,87,88,89,90,91,92,93,94,95,97],inclusive:!1},callback_args:{rules:[22,23,26,49,50,51,52,53,54,55,56,57,60,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,86,87,88,89,90,91,92,93,94,95,97],inclusive:!1},callback_name:{rules:[19,20,21,26,49,50,51,52,53,54,55,56,57,60,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,86,87,88,89,90,91,92,93,94,95,97],inclusive:!1},href:{rules:[26,49,50,51,52,53,54,55,56,57,60,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,86,87,88,89,90,91,92,93,94,95,97],inclusive:!1},struct:{rules:[26,49,50,51,52,53,54,55,56,57,60,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,86,87,88,89,90,91,92,93,94,95,97],inclusive:!1},generic:{rules:[26,49,50,51,52,53,54,55,56,57,58,59,60,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,86,87,88,89,90,91,92,93,94,95,97],inclusive:!1},bqstring:{rules:[26,49,50,51,52,53,54,55,56,57,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,86,87,88,89,90,91,92,93,94,95,97],inclusive:!1},string:{rules:[24,25,26,49,50,51,52,53,54,55,56,57,60,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,86,87,88,89,90,91,92,93,94,95,97],inclusive:!1},INITIAL:{rules:[0,1,2,3,4,5,6,8,10,13,14,15,16,17,18,26,27,28,29,38,49,50,51,52,53,54,55,56,57,60,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97],inclusive:!0}}};return X}();Ie.lexer=$e;function ye(){this.yy={}}return o(ye,"Parser"),ye.prototype=Ie,Ie.Parser=ye,new ye}();RO.parser=RO;OE=RO});var pde,Bx,mde=M(()=>{"use strict";Vt();fr();pde=["#","+","~","-",""],Bx=class{static{o(this,"ClassMember")}constructor(e,r){this.memberType=r,this.visibility="",this.classifier="",this.text="";let n=kr(e,pe());this.parseMember(n)}getDisplayDetails(){let e=this.visibility+yu(this.id);this.memberType==="method"&&(e+=`(${yu(this.parameters.trim())})`,this.returnType&&(e+=" : "+yu(this.returnType))),e=e.trim();let r=this.parseClassifier();return{displayText:e,cssStyle:r}}parseMember(e){let r="";if(this.memberType==="method"){let a=/([#+~-])?(.+)\((.*)\)([\s$*])?(.*)([$*])?/.exec(e);if(a){let s=a[1]?a[1].trim():"";if(pde.includes(s)&&(this.visibility=s),this.id=a[2],this.parameters=a[3]?a[3].trim():"",r=a[4]?a[4].trim():"",this.returnType=a[5]?a[5].trim():"",r===""){let l=this.returnType.substring(this.returnType.length-1);/[$*]/.exec(l)&&(r=l,this.returnType=this.returnType.substring(0,this.returnType.length-1))}}}else{let i=e.length,a=e.substring(0,1),s=e.substring(i-1);pde.includes(a)&&(this.visibility=a),/[$*]/.exec(s)&&(r=s),this.id=e.substring(this.visibility===""?0:1,r===""?i:i-1)}this.classifier=r,this.id=this.id.startsWith(" ")?" "+this.id.trim():this.id.trim();let n=`${this.visibility?"\\"+this.visibility:""}${yu(this.id)}${this.memberType==="method"?`(${yu(this.parameters)})${this.returnType?" : "+yu(this.returnType):""}`:""}`;this.text=n.replaceAll("<","<").replaceAll(">",">"),this.text.startsWith("\\<")&&(this.text=this.text.replace("\\<","~"))}parseClassifier(){switch(this.classifier){case"*":return"font-style:italic;";case"$":return"text-decoration:underline;";default:return""}}}});function xde(t){let e;switch(t){case 0:e="aggregation";break;case 1:e="extension";break;case 2:e="composition";break;case 3:e="dependency";break;case 4:e="lollipop";break;default:e="none"}return e}var PE,BE,Nn,gde,Fx,Jg,yde,ql,IO,zx,P0,B0,AHe,Zg,vde,bde,_He,LHe,DHe,NHe,RHe,MHe,IHe,wde,OHe,PHe,BHe,OO,FHe,zHe,GHe,$He,VHe,UHe,HHe,WHe,Ef,Tde,PO,kde,YHe,qHe,XHe,jHe,KHe,QHe,ZHe,e1,BO=M(()=>{"use strict";pr();ut();Vt();fr();hr();Ai();mde();PE="classId-",BE=[],Nn=new Map,gde=new Map,Fx=[],Jg=[],yde=0,ql=new Map,IO=0,zx=[],P0=o(t=>qe.sanitizeText(t,pe()),"sanitizeText"),B0=o(function(t){let e=qe.sanitizeText(t,pe()),r="",n=e;if(e.indexOf("~")>0){let i=e.split("~");n=P0(i[0]),r=P0(i[1])}return{className:n,type:r}},"splitClassNameAndType"),AHe=o(function(t,e){let r=qe.sanitizeText(t,pe());e&&(e=P0(e));let{className:n}=B0(r);Nn.get(n).label=e,Nn.get(n).text=`${e}${Nn.get(n).type?`<${Nn.get(n).type}>`:""}`},"setClassLabel"),Zg=o(function(t){let e=qe.sanitizeText(t,pe()),{className:r,type:n}=B0(e);if(Nn.has(r))return;let i=qe.sanitizeText(r,pe());Nn.set(i,{id:i,type:n,label:i,text:`${i}${n?`<${n}>`:""}`,shape:"classBox",cssClasses:"default",methods:[],members:[],annotations:[],styles:[],domId:PE+i+"-"+yde}),yde++},"addClass"),vde=o(function(t,e){let r={id:`interface${Jg.length}`,label:t,classId:e};Jg.push(r)},"addInterface"),bde=o(function(t){let e=qe.sanitizeText(t,pe());if(Nn.has(e))return Nn.get(e).domId;throw new Error("Class not found: "+e)},"lookUpDomId"),_He=o(function(){BE=[],Nn=new Map,Fx=[],Jg=[],zx=[],zx.push(Tde),ql=new Map,IO=0,PO="TB",Lr()},"clear"),LHe=o(function(t){return Nn.get(t)},"getClass"),DHe=o(function(){return Nn},"getClasses"),NHe=o(function(){return BE},"getRelations"),RHe=o(function(){return Fx},"getNotes"),MHe=o(function(t){Y.debug("Adding relation: "+JSON.stringify(t));let e=[Ef.LOLLIPOP,Ef.AGGREGATION,Ef.COMPOSITION,Ef.DEPENDENCY,Ef.EXTENSION];t.relation.type1===Ef.LOLLIPOP&&!e.includes(t.relation.type2)?(Zg(t.id2),vde(t.id1,t.id2),t.id1=`interface${Jg.length-1}`):t.relation.type2===Ef.LOLLIPOP&&!e.includes(t.relation.type1)?(Zg(t.id1),vde(t.id2,t.id1),t.id2=`interface${Jg.length-1}`):(Zg(t.id1),Zg(t.id2)),t.id1=B0(t.id1).className,t.id2=B0(t.id2).className,t.relationTitle1=qe.sanitizeText(t.relationTitle1.trim(),pe()),t.relationTitle2=qe.sanitizeText(t.relationTitle2.trim(),pe()),BE.push(t)},"addRelation"),IHe=o(function(t,e){let r=B0(t).className;Nn.get(r).annotations.push(e)},"addAnnotation"),wde=o(function(t,e){Zg(t);let r=B0(t).className,n=Nn.get(r);if(typeof e=="string"){let i=e.trim();i.startsWith("<<")&&i.endsWith(">>")?n.annotations.push(P0(i.substring(2,i.length-2))):i.indexOf(")")>0?n.methods.push(new Bx(i,"method")):i&&n.members.push(new Bx(i,"attribute"))}},"addMember"),OHe=o(function(t,e){Array.isArray(e)&&(e.reverse(),e.forEach(r=>wde(t,r)))},"addMembers"),PHe=o(function(t,e){let r={id:`note${Fx.length}`,class:e,text:t};Fx.push(r)},"addNote"),BHe=o(function(t){return t.startsWith(":")&&(t=t.substring(1)),P0(t.trim())},"cleanupLabel"),OO=o(function(t,e){t.split(",").forEach(function(r){let n=r;/\d/.exec(r[0])&&(n=PE+n);let i=Nn.get(n);i&&(i.cssClasses+=" "+e)})},"setCssClass"),FHe=o(function(t,e){for(let r of t){let n=gde.get(r);n===void 0&&(n={id:r,styles:[],textStyles:[]},gde.set(r,n)),e&&e.forEach(function(i){if(/color/.exec(i)){let a=i.replace("fill","bgFill");n.textStyles.push(a)}n.styles.push(i)}),Nn.forEach(i=>{i.cssClasses.includes(r)&&i.styles.push(...e.flatMap(a=>a.split(",")))})}},"defineClass"),zHe=o(function(t,e){t.split(",").forEach(function(r){e!==void 0&&(Nn.get(r).tooltip=P0(e))})},"setTooltip"),GHe=o(function(t,e){return e&&ql.has(e)?ql.get(e).classes.get(t).tooltip:Nn.get(t).tooltip},"getTooltip"),$He=o(function(t,e,r){let n=pe();t.split(",").forEach(function(i){let a=i;/\d/.exec(i[0])&&(a=PE+a);let s=Nn.get(a);s&&(s.link=Ut.formatUrl(e,n),n.securityLevel==="sandbox"?s.linkTarget="_top":typeof r=="string"?s.linkTarget=P0(r):s.linkTarget="_blank")}),OO(t,"clickable")},"setLink"),VHe=o(function(t,e,r){t.split(",").forEach(function(n){UHe(n,e,r),Nn.get(n).haveCallback=!0}),OO(t,"clickable")},"setClickEvent"),UHe=o(function(t,e,r){let n=qe.sanitizeText(t,pe());if(pe().securityLevel!=="loose"||e===void 0)return;let a=n;if(Nn.has(a)){let s=bde(a),l=[];if(typeof r=="string"){l=r.split(/,(?=(?:(?:[^"]*"){2})*[^"]*$)/);for(let u=0;u")),i.classed("hover",!0)}).on("mouseout",function(){e.transition().duration(500).style("opacity",0),Ve(this).classed("hover",!1)})},"setupToolTips");zx.push(Tde);PO="TB",kde=o(()=>PO,"getDirection"),YHe=o(t=>{PO=t},"setDirection"),qHe=o(function(t){ql.has(t)||(ql.set(t,{id:t,classes:new Map,children:{},domId:PE+t+"-"+IO}),IO++)},"addNamespace"),XHe=o(function(t){return ql.get(t)},"getNamespace"),jHe=o(function(){return ql},"getNamespaces"),KHe=o(function(t,e){if(ql.has(t))for(let r of e){let{className:n}=B0(r);Nn.get(n).parent=t,ql.get(t).classes.set(n,Nn.get(n))}},"addClassesToNamespace"),QHe=o(function(t,e){let r=Nn.get(t);if(!(!e||!r))for(let n of e)n.includes(",")?r.styles.push(...n.split(",")):r.styles.push(n)},"setCssStyle");o(xde,"getArrowMarker");ZHe=o(()=>{let t=[],e=[],r=pe();for(let i of ql.keys()){let a=ql.get(i);if(a){let s={id:a.id,label:a.id,isGroup:!0,padding:r.class.padding??16,shape:"rect",cssStyles:["fill: none","stroke: black"],look:r.look};t.push(s)}}for(let i of Nn.keys()){let a=Nn.get(i);if(a){let s=a;s.parentId=a.parent,s.look=r.look,t.push(s)}}let n=0;for(let i of Fx){n++;let a={id:i.id,label:i.text,isGroup:!1,shape:"note",padding:r.class.padding??6,cssStyles:["text-align: left","white-space: nowrap",`fill: ${r.themeVariables.noteBkgColor}`,`stroke: ${r.themeVariables.noteBorderColor}`],look:r.look};t.push(a);let s=Nn.get(i.class)?.id??"";if(s){let l={id:`edgeNote${n}`,start:i.id,end:s,type:"normal",thickness:"normal",classes:"relation",arrowTypeStart:"none",arrowTypeEnd:"none",arrowheadStyle:"",labelStyle:[""],style:["fill: none"],pattern:"dotted",look:r.look};e.push(l)}}for(let i of Jg){let a={id:i.id,label:i.label,isGroup:!1,shape:"rect",cssStyles:["opacity: 0;"],look:r.look};t.push(a)}n=0;for(let i of BE){n++;let a={id:C5(i.id1,i.id2,{prefix:"id",counter:n}),start:i.id1,end:i.id2,type:"normal",label:i.title,labelpos:"c",thickness:"normal",classes:"relation",arrowTypeStart:xde(i.relation.type1),arrowTypeEnd:xde(i.relation.type2),startLabelRight:i.relationTitle1==="none"?"":i.relationTitle1,endLabelLeft:i.relationTitle2==="none"?"":i.relationTitle2,arrowheadStyle:"",labelStyle:["display: inline-block"],style:i.style||"",pattern:i.relation.lineType==1?"dashed":"solid",look:r.look};e.push(a)}return{nodes:t,edges:e,other:{},config:r,direction:kde()}},"getData"),e1={setAccTitle:Mr,getAccTitle:Br,getAccDescription:zr,setAccDescription:Fr,getConfig:o(()=>pe().class,"getConfig"),addClass:Zg,bindFunctions:HHe,clear:_He,getClass:LHe,getClasses:DHe,getNotes:RHe,addAnnotation:IHe,addNote:PHe,getRelations:NHe,addRelation:MHe,getDirection:kde,setDirection:YHe,addMember:wde,addMembers:OHe,cleanupLabel:BHe,lineType:WHe,relationType:Ef,setClickEvent:VHe,setCssClass:OO,defineClass:FHe,setLink:$He,getTooltip:GHe,setTooltip:zHe,lookUpDomId:bde,setDiagramTitle:cn,getDiagramTitle:Jr,setClassLabel:AHe,addNamespace:qHe,addClassesToNamespace:KHe,getNamespace:XHe,getNamespaces:jHe,setCssStyle:QHe,getData:ZHe}});var JHe,FE,FO=M(()=>{"use strict";JHe=o(t=>`g.classGroup text { + fill: ${t.nodeBorder||t.classText}; + stroke: none; + font-family: ${t.fontFamily}; + font-size: 10px; + + .title { + font-weight: bolder; + } + +} + +.nodeLabel, .edgeLabel { + color: ${t.classText}; +} +.edgeLabel .label rect { + fill: ${t.mainBkg}; +} +.label text { + fill: ${t.classText}; +} + +.labelBkg { + background: ${t.mainBkg}; +} +.edgeLabel .label span { + background: ${t.mainBkg}; +} + +.classTitle { + font-weight: bolder; +} +.node rect, + .node circle, + .node ellipse, + .node polygon, + .node path { + fill: ${t.mainBkg}; + stroke: ${t.nodeBorder}; + stroke-width: 1px; + } + + +.divider { + stroke: ${t.nodeBorder}; + stroke-width: 1; +} + +g.clickable { + cursor: pointer; +} + +g.classGroup rect { + fill: ${t.mainBkg}; + stroke: ${t.nodeBorder}; +} + +g.classGroup line { + stroke: ${t.nodeBorder}; + stroke-width: 1; +} + +.classLabel .box { + stroke: none; + stroke-width: 0; + fill: ${t.mainBkg}; + opacity: 0.5; +} + +.classLabel .label { + fill: ${t.nodeBorder}; + font-size: 10px; +} + +.relation { + stroke: ${t.lineColor}; + stroke-width: 1; + fill: none; +} + +.dashed-line{ + stroke-dasharray: 3; +} + +.dotted-line{ + stroke-dasharray: 1 2; +} + +#compositionStart, .composition { + fill: ${t.lineColor} !important; + stroke: ${t.lineColor} !important; + stroke-width: 1; +} + +#compositionEnd, .composition { + fill: ${t.lineColor} !important; + stroke: ${t.lineColor} !important; + stroke-width: 1; +} + +#dependencyStart, .dependency { + fill: ${t.lineColor} !important; + stroke: ${t.lineColor} !important; + stroke-width: 1; +} + +#dependencyStart, .dependency { + fill: ${t.lineColor} !important; + stroke: ${t.lineColor} !important; + stroke-width: 1; +} + +#extensionStart, .extension { + fill: transparent !important; + stroke: ${t.lineColor} !important; + stroke-width: 1; +} + +#extensionEnd, .extension { + fill: transparent !important; + stroke: ${t.lineColor} !important; + stroke-width: 1; +} + +#aggregationStart, .aggregation { + fill: transparent !important; + stroke: ${t.lineColor} !important; + stroke-width: 1; +} + +#aggregationEnd, .aggregation { + fill: transparent !important; + stroke: ${t.lineColor} !important; + stroke-width: 1; +} + +#lollipopStart, .lollipop { + fill: ${t.mainBkg} !important; + stroke: ${t.lineColor} !important; + stroke-width: 1; +} + +#lollipopEnd, .lollipop { + fill: ${t.mainBkg} !important; + stroke: ${t.lineColor} !important; + stroke-width: 1; +} + +.edgeTerminals { + font-size: 11px; + line-height: initial; +} + +.classTitleText { + text-anchor: middle; + font-size: 18px; + fill: ${t.textColor}; +} +`,"getStyles"),FE=JHe});var eWe,tWe,rWe,zE,zO=M(()=>{"use strict";Vt();ut();ow();Jv();TT();hr();eWe=o((t,e="TB")=>{if(!t.doc)return e;let r=e;for(let n of t.doc)n.stmt==="dir"&&(r=n.value);return r},"getDir"),tWe=o(function(t,e){return e.db.getClasses()},"getClasses"),rWe=o(async function(t,e,r,n){Y.info("REF0:"),Y.info("Drawing class diagram (v3)",e);let{securityLevel:i,state:a,layout:s}=pe(),l=n.db.getData(),u=Am(e,i);l.type=n.type,l.layoutAlgorithm=wT(s),l.nodeSpacing=a?.nodeSpacing||50,l.rankSpacing=a?.rankSpacing||50,l.markers=["aggregation","extension","composition","dependency","lollipop"],l.diagramId=e,await Qm(l,u);let h=8;Ut.insertTitle(u,"classDiagramTitleText",a?.titleTopMargin??25,n.db.getDiagramTitle()),Zm(u,h,"classDiagram",a?.useMaxWidth??!0)},"draw"),zE={getClasses:tWe,draw:rWe,getDir:eWe}});var Ede={};vr(Ede,{diagram:()=>nWe});var nWe,Sde=M(()=>{"use strict";MO();BO();FO();zO();nWe={parser:OE,db:e1,renderer:zE,styles:FE,init:o(t=>{t.class||(t.class={}),t.class.arrowMarkerAbsolute=t.arrowMarkerAbsolute,e1.clear()},"init")}});var _de={};vr(_de,{diagram:()=>oWe});var oWe,Lde=M(()=>{"use strict";MO();BO();FO();zO();oWe={parser:OE,db:e1,renderer:zE,styles:FE,init:o(t=>{t.class||(t.class={}),t.class.arrowMarkerAbsolute=t.arrowMarkerAbsolute,e1.clear()},"init")}});var GO,GE,$O=M(()=>{"use strict";GO=function(){var t=o(function(F,B,G,z){for(G=G||{},z=F.length;z--;G[F[z]]=B);return G},"o"),e=[1,2],r=[1,3],n=[1,4],i=[2,4],a=[1,9],s=[1,11],l=[1,16],u=[1,17],h=[1,18],f=[1,19],d=[1,32],p=[1,20],m=[1,21],g=[1,22],y=[1,23],v=[1,24],x=[1,26],b=[1,27],w=[1,28],_=[1,29],T=[1,30],E=[1,31],L=[1,34],S=[1,35],A=[1,36],I=[1,37],D=[1,33],k=[1,4,5,16,17,19,21,22,24,25,26,27,28,29,33,35,37,38,42,45,48,49,50,51,54],R=[1,4,5,14,15,16,17,19,21,22,24,25,26,27,28,29,33,35,37,38,42,45,48,49,50,51,54],C=[4,5,16,17,19,21,22,24,25,26,27,28,29,33,35,37,38,42,45,48,49,50,51,54],O={trace:o(function(){},"trace"),yy:{},symbols_:{error:2,start:3,SPACE:4,NL:5,SD:6,document:7,line:8,statement:9,classDefStatement:10,styleStatement:11,cssClassStatement:12,idStatement:13,DESCR:14,"-->":15,HIDE_EMPTY:16,scale:17,WIDTH:18,COMPOSIT_STATE:19,STRUCT_START:20,STRUCT_STOP:21,STATE_DESCR:22,AS:23,ID:24,FORK:25,JOIN:26,CHOICE:27,CONCURRENT:28,note:29,notePosition:30,NOTE_TEXT:31,direction:32,acc_title:33,acc_title_value:34,acc_descr:35,acc_descr_value:36,acc_descr_multiline_value:37,classDef:38,CLASSDEF_ID:39,CLASSDEF_STYLEOPTS:40,DEFAULT:41,style:42,STYLE_IDS:43,STYLEDEF_STYLEOPTS:44,class:45,CLASSENTITY_IDS:46,STYLECLASS:47,direction_tb:48,direction_bt:49,direction_rl:50,direction_lr:51,eol:52,";":53,EDGE_STATE:54,STYLE_SEPARATOR:55,left_of:56,right_of:57,$accept:0,$end:1},terminals_:{2:"error",4:"SPACE",5:"NL",6:"SD",14:"DESCR",15:"-->",16:"HIDE_EMPTY",17:"scale",18:"WIDTH",19:"COMPOSIT_STATE",20:"STRUCT_START",21:"STRUCT_STOP",22:"STATE_DESCR",23:"AS",24:"ID",25:"FORK",26:"JOIN",27:"CHOICE",28:"CONCURRENT",29:"note",31:"NOTE_TEXT",33:"acc_title",34:"acc_title_value",35:"acc_descr",36:"acc_descr_value",37:"acc_descr_multiline_value",38:"classDef",39:"CLASSDEF_ID",40:"CLASSDEF_STYLEOPTS",41:"DEFAULT",42:"style",43:"STYLE_IDS",44:"STYLEDEF_STYLEOPTS",45:"class",46:"CLASSENTITY_IDS",47:"STYLECLASS",48:"direction_tb",49:"direction_bt",50:"direction_rl",51:"direction_lr",53:";",54:"EDGE_STATE",55:"STYLE_SEPARATOR",56:"left_of",57:"right_of"},productions_:[0,[3,2],[3,2],[3,2],[7,0],[7,2],[8,2],[8,1],[8,1],[9,1],[9,1],[9,1],[9,1],[9,2],[9,3],[9,4],[9,1],[9,2],[9,1],[9,4],[9,3],[9,6],[9,1],[9,1],[9,1],[9,1],[9,4],[9,4],[9,1],[9,2],[9,2],[9,1],[10,3],[10,3],[11,3],[12,3],[32,1],[32,1],[32,1],[32,1],[52,1],[52,1],[13,1],[13,1],[13,3],[13,3],[30,1],[30,1]],performAction:o(function(B,G,z,W,Z,j,oe){var K=j.length-1;switch(Z){case 3:return W.setRootDoc(j[K]),j[K];break;case 4:this.$=[];break;case 5:j[K]!="nl"&&(j[K-1].push(j[K]),this.$=j[K-1]);break;case 6:case 7:this.$=j[K];break;case 8:this.$="nl";break;case 12:this.$=j[K];break;case 13:let q=j[K-1];q.description=W.trimColon(j[K]),this.$=q;break;case 14:this.$={stmt:"relation",state1:j[K-2],state2:j[K]};break;case 15:let Q=W.trimColon(j[K]);this.$={stmt:"relation",state1:j[K-3],state2:j[K-1],description:Q};break;case 19:this.$={stmt:"state",id:j[K-3],type:"default",description:"",doc:j[K-1]};break;case 20:var ee=j[K],J=j[K-2].trim();if(j[K].match(":")){var H=j[K].split(":");ee=H[0],J=[J,H[1]]}this.$={stmt:"state",id:ee,type:"default",description:J};break;case 21:this.$={stmt:"state",id:j[K-3],type:"default",description:j[K-5],doc:j[K-1]};break;case 22:this.$={stmt:"state",id:j[K],type:"fork"};break;case 23:this.$={stmt:"state",id:j[K],type:"join"};break;case 24:this.$={stmt:"state",id:j[K],type:"choice"};break;case 25:this.$={stmt:"state",id:W.getDividerId(),type:"divider"};break;case 26:this.$={stmt:"state",id:j[K-1].trim(),note:{position:j[K-2].trim(),text:j[K].trim()}};break;case 29:this.$=j[K].trim(),W.setAccTitle(this.$);break;case 30:case 31:this.$=j[K].trim(),W.setAccDescription(this.$);break;case 32:case 33:this.$={stmt:"classDef",id:j[K-1].trim(),classes:j[K].trim()};break;case 34:this.$={stmt:"style",id:j[K-1].trim(),styleClass:j[K].trim()};break;case 35:this.$={stmt:"applyClass",id:j[K-1].trim(),styleClass:j[K].trim()};break;case 36:W.setDirection("TB"),this.$={stmt:"dir",value:"TB"};break;case 37:W.setDirection("BT"),this.$={stmt:"dir",value:"BT"};break;case 38:W.setDirection("RL"),this.$={stmt:"dir",value:"RL"};break;case 39:W.setDirection("LR"),this.$={stmt:"dir",value:"LR"};break;case 42:case 43:this.$={stmt:"state",id:j[K].trim(),type:"default",description:""};break;case 44:this.$={stmt:"state",id:j[K-2].trim(),classes:[j[K].trim()],type:"default",description:""};break;case 45:this.$={stmt:"state",id:j[K-2].trim(),classes:[j[K].trim()],type:"default",description:""};break}},"anonymous"),table:[{3:1,4:e,5:r,6:n},{1:[3]},{3:5,4:e,5:r,6:n},{3:6,4:e,5:r,6:n},t([1,4,5,16,17,19,22,24,25,26,27,28,29,33,35,37,38,42,45,48,49,50,51,54],i,{7:7}),{1:[2,1]},{1:[2,2]},{1:[2,3],4:a,5:s,8:8,9:10,10:12,11:13,12:14,13:15,16:l,17:u,19:h,22:f,24:d,25:p,26:m,27:g,28:y,29:v,32:25,33:x,35:b,37:w,38:_,42:T,45:E,48:L,49:S,50:A,51:I,54:D},t(k,[2,5]),{9:38,10:12,11:13,12:14,13:15,16:l,17:u,19:h,22:f,24:d,25:p,26:m,27:g,28:y,29:v,32:25,33:x,35:b,37:w,38:_,42:T,45:E,48:L,49:S,50:A,51:I,54:D},t(k,[2,7]),t(k,[2,8]),t(k,[2,9]),t(k,[2,10]),t(k,[2,11]),t(k,[2,12],{14:[1,39],15:[1,40]}),t(k,[2,16]),{18:[1,41]},t(k,[2,18],{20:[1,42]}),{23:[1,43]},t(k,[2,22]),t(k,[2,23]),t(k,[2,24]),t(k,[2,25]),{30:44,31:[1,45],56:[1,46],57:[1,47]},t(k,[2,28]),{34:[1,48]},{36:[1,49]},t(k,[2,31]),{39:[1,50],41:[1,51]},{43:[1,52]},{46:[1,53]},t(R,[2,42],{55:[1,54]}),t(R,[2,43],{55:[1,55]}),t(k,[2,36]),t(k,[2,37]),t(k,[2,38]),t(k,[2,39]),t(k,[2,6]),t(k,[2,13]),{13:56,24:d,54:D},t(k,[2,17]),t(C,i,{7:57}),{24:[1,58]},{24:[1,59]},{23:[1,60]},{24:[2,46]},{24:[2,47]},t(k,[2,29]),t(k,[2,30]),{40:[1,61]},{40:[1,62]},{44:[1,63]},{47:[1,64]},{24:[1,65]},{24:[1,66]},t(k,[2,14],{14:[1,67]}),{4:a,5:s,8:8,9:10,10:12,11:13,12:14,13:15,16:l,17:u,19:h,21:[1,68],22:f,24:d,25:p,26:m,27:g,28:y,29:v,32:25,33:x,35:b,37:w,38:_,42:T,45:E,48:L,49:S,50:A,51:I,54:D},t(k,[2,20],{20:[1,69]}),{31:[1,70]},{24:[1,71]},t(k,[2,32]),t(k,[2,33]),t(k,[2,34]),t(k,[2,35]),t(R,[2,44]),t(R,[2,45]),t(k,[2,15]),t(k,[2,19]),t(C,i,{7:72}),t(k,[2,26]),t(k,[2,27]),{4:a,5:s,8:8,9:10,10:12,11:13,12:14,13:15,16:l,17:u,19:h,21:[1,73],22:f,24:d,25:p,26:m,27:g,28:y,29:v,32:25,33:x,35:b,37:w,38:_,42:T,45:E,48:L,49:S,50:A,51:I,54:D},t(k,[2,21])],defaultActions:{5:[2,1],6:[2,2],46:[2,46],47:[2,47]},parseError:o(function(B,G){if(G.recoverable)this.trace(B);else{var z=new Error(B);throw z.hash=G,z}},"parseError"),parse:o(function(B){var G=this,z=[0],W=[],Z=[null],j=[],oe=this.table,K="",ee=0,J=0,H=0,q=2,Q=1,ae=j.slice.call(arguments,1),ue=Object.create(this.lexer),ce={yy:{}};for(var te in this.yy)Object.prototype.hasOwnProperty.call(this.yy,te)&&(ce.yy[te]=this.yy[te]);ue.setInput(B,ce.yy),ce.yy.lexer=ue,ce.yy.parser=this,typeof ue.yylloc>"u"&&(ue.yylloc={});var Ne=ue.yylloc;j.push(Ne);var se=ue.options&&ue.options.ranges;typeof ce.yy.parseError=="function"?this.parseError=ce.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function ke(Te){z.length=z.length-2*Te,Z.length=Z.length-Te,j.length=j.length-Te}o(ke,"popStack");function Re(){var Te;return Te=W.pop()||ue.lex()||Q,typeof Te!="number"&&(Te instanceof Array&&(W=Te,Te=W.pop()),Te=G.symbols_[Te]||Te),Te}o(Re,"lex");for(var Ce,Pe,Ie,$e,ye,X,fe={},he,ge,ne,ve;;){if(Ie=z[z.length-1],this.defaultActions[Ie]?$e=this.defaultActions[Ie]:((Ce===null||typeof Ce>"u")&&(Ce=Re()),$e=oe[Ie]&&oe[Ie][Ce]),typeof $e>"u"||!$e.length||!$e[0]){var U="";ve=[];for(he in oe[Ie])this.terminals_[he]&&he>q&&ve.push("'"+this.terminals_[he]+"'");ue.showPosition?U="Parse error on line "+(ee+1)+`: +`+ue.showPosition()+` +Expecting `+ve.join(", ")+", got '"+(this.terminals_[Ce]||Ce)+"'":U="Parse error on line "+(ee+1)+": Unexpected "+(Ce==Q?"end of input":"'"+(this.terminals_[Ce]||Ce)+"'"),this.parseError(U,{text:ue.match,token:this.terminals_[Ce]||Ce,line:ue.yylineno,loc:Ne,expected:ve})}if($e[0]instanceof Array&&$e.length>1)throw new Error("Parse Error: multiple actions possible at state: "+Ie+", token: "+Ce);switch($e[0]){case 1:z.push(Ce),Z.push(ue.yytext),j.push(ue.yylloc),z.push($e[1]),Ce=null,Pe?(Ce=Pe,Pe=null):(J=ue.yyleng,K=ue.yytext,ee=ue.yylineno,Ne=ue.yylloc,H>0&&H--);break;case 2:if(ge=this.productions_[$e[1]][1],fe.$=Z[Z.length-ge],fe._$={first_line:j[j.length-(ge||1)].first_line,last_line:j[j.length-1].last_line,first_column:j[j.length-(ge||1)].first_column,last_column:j[j.length-1].last_column},se&&(fe._$.range=[j[j.length-(ge||1)].range[0],j[j.length-1].range[1]]),X=this.performAction.apply(fe,[K,J,ee,ce.yy,$e[1],Z,j].concat(ae)),typeof X<"u")return X;ge&&(z=z.slice(0,-1*ge*2),Z=Z.slice(0,-1*ge),j=j.slice(0,-1*ge)),z.push(this.productions_[$e[1]][0]),Z.push(fe.$),j.push(fe._$),ne=oe[z[z.length-2]][z[z.length-1]],z.push(ne);break;case 3:return!0}}return!0},"parse")},N=function(){var F={EOF:1,parseError:o(function(G,z){if(this.yy.parser)this.yy.parser.parseError(G,z);else throw new Error(G)},"parseError"),setInput:o(function(B,G){return this.yy=G||this.yy||{},this._input=B,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},"setInput"),input:o(function(){var B=this._input[0];this.yytext+=B,this.yyleng++,this.offset++,this.match+=B,this.matched+=B;var G=B.match(/(?:\r\n?|\n).*/g);return G?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),B},"input"),unput:o(function(B){var G=B.length,z=B.split(/(?:\r\n?|\n)/g);this._input=B+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-G),this.offset-=G;var W=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),z.length-1&&(this.yylineno-=z.length-1);var Z=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:z?(z.length===W.length?this.yylloc.first_column:0)+W[W.length-z.length].length-z[0].length:this.yylloc.first_column-G},this.options.ranges&&(this.yylloc.range=[Z[0],Z[0]+this.yyleng-G]),this.yyleng=this.yytext.length,this},"unput"),more:o(function(){return this._more=!0,this},"more"),reject:o(function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true). +`+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},"reject"),less:o(function(B){this.unput(this.match.slice(B))},"less"),pastInput:o(function(){var B=this.matched.substr(0,this.matched.length-this.match.length);return(B.length>20?"...":"")+B.substr(-20).replace(/\n/g,"")},"pastInput"),upcomingInput:o(function(){var B=this.match;return B.length<20&&(B+=this._input.substr(0,20-B.length)),(B.substr(0,20)+(B.length>20?"...":"")).replace(/\n/g,"")},"upcomingInput"),showPosition:o(function(){var B=this.pastInput(),G=new Array(B.length+1).join("-");return B+this.upcomingInput()+` +`+G+"^"},"showPosition"),test_match:o(function(B,G){var z,W,Z;if(this.options.backtrack_lexer&&(Z={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(Z.yylloc.range=this.yylloc.range.slice(0))),W=B[0].match(/(?:\r\n?|\n).*/g),W&&(this.yylineno+=W.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:W?W[W.length-1].length-W[W.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+B[0].length},this.yytext+=B[0],this.match+=B[0],this.matches=B,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(B[0].length),this.matched+=B[0],z=this.performAction.call(this,this.yy,this,G,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),z)return z;if(this._backtrack){for(var j in Z)this[j]=Z[j];return!1}return!1},"test_match"),next:o(function(){if(this.done)return this.EOF;this._input||(this.done=!0);var B,G,z,W;this._more||(this.yytext="",this.match="");for(var Z=this._currentRules(),j=0;jG[0].length)){if(G=z,W=j,this.options.backtrack_lexer){if(B=this.test_match(z,Z[j]),B!==!1)return B;if(this._backtrack){G=!1;continue}else return!1}else if(!this.options.flex)break}return G?(B=this.test_match(G,Z[W]),B!==!1?B:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text. +`+this.showPosition(),{text:"",token:null,line:this.yylineno})},"next"),lex:o(function(){var G=this.next();return G||this.lex()},"lex"),begin:o(function(G){this.conditionStack.push(G)},"begin"),popState:o(function(){var G=this.conditionStack.length-1;return G>0?this.conditionStack.pop():this.conditionStack[0]},"popState"),_currentRules:o(function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},"_currentRules"),topState:o(function(G){return G=this.conditionStack.length-1-Math.abs(G||0),G>=0?this.conditionStack[G]:"INITIAL"},"topState"),pushState:o(function(G){this.begin(G)},"pushState"),stateStackSize:o(function(){return this.conditionStack.length},"stateStackSize"),options:{"case-insensitive":!0},performAction:o(function(G,z,W,Z){var j=Z;switch(W){case 0:return 41;case 1:return 48;case 2:return 49;case 3:return 50;case 4:return 51;case 5:break;case 6:break;case 7:return 5;case 8:break;case 9:break;case 10:break;case 11:break;case 12:return this.pushState("SCALE"),17;break;case 13:return 18;case 14:this.popState();break;case 15:return this.begin("acc_title"),33;break;case 16:return this.popState(),"acc_title_value";break;case 17:return this.begin("acc_descr"),35;break;case 18:return this.popState(),"acc_descr_value";break;case 19:this.begin("acc_descr_multiline");break;case 20:this.popState();break;case 21:return"acc_descr_multiline_value";case 22:return this.pushState("CLASSDEF"),38;break;case 23:return this.popState(),this.pushState("CLASSDEFID"),"DEFAULT_CLASSDEF_ID";break;case 24:return this.popState(),this.pushState("CLASSDEFID"),39;break;case 25:return this.popState(),40;break;case 26:return this.pushState("CLASS"),45;break;case 27:return this.popState(),this.pushState("CLASS_STYLE"),46;break;case 28:return this.popState(),47;break;case 29:return this.pushState("STYLE"),42;break;case 30:return this.popState(),this.pushState("STYLEDEF_STYLES"),43;break;case 31:return this.popState(),44;break;case 32:return this.pushState("SCALE"),17;break;case 33:return 18;case 34:this.popState();break;case 35:this.pushState("STATE");break;case 36:return this.popState(),z.yytext=z.yytext.slice(0,-8).trim(),25;break;case 37:return this.popState(),z.yytext=z.yytext.slice(0,-8).trim(),26;break;case 38:return this.popState(),z.yytext=z.yytext.slice(0,-10).trim(),27;break;case 39:return this.popState(),z.yytext=z.yytext.slice(0,-8).trim(),25;break;case 40:return this.popState(),z.yytext=z.yytext.slice(0,-8).trim(),26;break;case 41:return this.popState(),z.yytext=z.yytext.slice(0,-10).trim(),27;break;case 42:return 48;case 43:return 49;case 44:return 50;case 45:return 51;case 46:this.pushState("STATE_STRING");break;case 47:return this.pushState("STATE_ID"),"AS";break;case 48:return this.popState(),"ID";break;case 49:this.popState();break;case 50:return"STATE_DESCR";case 51:return 19;case 52:this.popState();break;case 53:return this.popState(),this.pushState("struct"),20;break;case 54:break;case 55:return this.popState(),21;break;case 56:break;case 57:return this.begin("NOTE"),29;break;case 58:return this.popState(),this.pushState("NOTE_ID"),56;break;case 59:return this.popState(),this.pushState("NOTE_ID"),57;break;case 60:this.popState(),this.pushState("FLOATING_NOTE");break;case 61:return this.popState(),this.pushState("FLOATING_NOTE_ID"),"AS";break;case 62:break;case 63:return"NOTE_TEXT";case 64:return this.popState(),"ID";break;case 65:return this.popState(),this.pushState("NOTE_TEXT"),24;break;case 66:return this.popState(),z.yytext=z.yytext.substr(2).trim(),31;break;case 67:return this.popState(),z.yytext=z.yytext.slice(0,-8).trim(),31;break;case 68:return 6;case 69:return 6;case 70:return 16;case 71:return 54;case 72:return 24;case 73:return z.yytext=z.yytext.trim(),14;break;case 74:return 15;case 75:return 28;case 76:return 55;case 77:return 5;case 78:return"INVALID"}},"anonymous"),rules:[/^(?:default\b)/i,/^(?:.*direction\s+TB[^\n]*)/i,/^(?:.*direction\s+BT[^\n]*)/i,/^(?:.*direction\s+RL[^\n]*)/i,/^(?:.*direction\s+LR[^\n]*)/i,/^(?:%%(?!\{)[^\n]*)/i,/^(?:[^\}]%%[^\n]*)/i,/^(?:[\n]+)/i,/^(?:[\s]+)/i,/^(?:((?!\n)\s)+)/i,/^(?:#[^\n]*)/i,/^(?:%[^\n]*)/i,/^(?:scale\s+)/i,/^(?:\d+)/i,/^(?:\s+width\b)/i,/^(?:accTitle\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*\{\s*)/i,/^(?:[\}])/i,/^(?:[^\}]*)/i,/^(?:classDef\s+)/i,/^(?:DEFAULT\s+)/i,/^(?:\w+\s+)/i,/^(?:[^\n]*)/i,/^(?:class\s+)/i,/^(?:(\w+)+((,\s*\w+)*))/i,/^(?:[^\n]*)/i,/^(?:style\s+)/i,/^(?:[\w,]+\s+)/i,/^(?:[^\n]*)/i,/^(?:scale\s+)/i,/^(?:\d+)/i,/^(?:\s+width\b)/i,/^(?:state\s+)/i,/^(?:.*<>)/i,/^(?:.*<>)/i,/^(?:.*<>)/i,/^(?:.*\[\[fork\]\])/i,/^(?:.*\[\[join\]\])/i,/^(?:.*\[\[choice\]\])/i,/^(?:.*direction\s+TB[^\n]*)/i,/^(?:.*direction\s+BT[^\n]*)/i,/^(?:.*direction\s+RL[^\n]*)/i,/^(?:.*direction\s+LR[^\n]*)/i,/^(?:["])/i,/^(?:\s*as\s+)/i,/^(?:[^\n\{]*)/i,/^(?:["])/i,/^(?:[^"]*)/i,/^(?:[^\n\s\{]+)/i,/^(?:\n)/i,/^(?:\{)/i,/^(?:%%(?!\{)[^\n]*)/i,/^(?:\})/i,/^(?:[\n])/i,/^(?:note\s+)/i,/^(?:left of\b)/i,/^(?:right of\b)/i,/^(?:")/i,/^(?:\s*as\s*)/i,/^(?:["])/i,/^(?:[^"]*)/i,/^(?:[^\n]*)/i,/^(?:\s*[^:\n\s\-]+)/i,/^(?:\s*:[^:\n;]+)/i,/^(?:[\s\S]*?end note\b)/i,/^(?:stateDiagram\s+)/i,/^(?:stateDiagram-v2\s+)/i,/^(?:hide empty description\b)/i,/^(?:\[\*\])/i,/^(?:[^:\n\s\-\{]+)/i,/^(?:\s*:[^:\n;]+)/i,/^(?:-->)/i,/^(?:--)/i,/^(?::::)/i,/^(?:$)/i,/^(?:.)/i],conditions:{LINE:{rules:[9,10],inclusive:!1},struct:{rules:[9,10,22,26,29,35,42,43,44,45,54,55,56,57,71,72,73,74,75],inclusive:!1},FLOATING_NOTE_ID:{rules:[64],inclusive:!1},FLOATING_NOTE:{rules:[61,62,63],inclusive:!1},NOTE_TEXT:{rules:[66,67],inclusive:!1},NOTE_ID:{rules:[65],inclusive:!1},NOTE:{rules:[58,59,60],inclusive:!1},STYLEDEF_STYLEOPTS:{rules:[],inclusive:!1},STYLEDEF_STYLES:{rules:[31],inclusive:!1},STYLE_IDS:{rules:[],inclusive:!1},STYLE:{rules:[30],inclusive:!1},CLASS_STYLE:{rules:[28],inclusive:!1},CLASS:{rules:[27],inclusive:!1},CLASSDEFID:{rules:[25],inclusive:!1},CLASSDEF:{rules:[23,24],inclusive:!1},acc_descr_multiline:{rules:[20,21],inclusive:!1},acc_descr:{rules:[18],inclusive:!1},acc_title:{rules:[16],inclusive:!1},SCALE:{rules:[13,14,33,34],inclusive:!1},ALIAS:{rules:[],inclusive:!1},STATE_ID:{rules:[48],inclusive:!1},STATE_STRING:{rules:[49,50],inclusive:!1},FORK_STATE:{rules:[],inclusive:!1},STATE:{rules:[9,10,36,37,38,39,40,41,46,47,51,52,53],inclusive:!1},ID:{rules:[9,10],inclusive:!1},INITIAL:{rules:[0,1,2,3,4,5,6,7,8,10,11,12,15,17,19,22,26,29,32,35,53,57,68,69,70,71,72,73,74,76,77,78],inclusive:!0}}};return F}();O.lexer=N;function P(){this.yy={}}return o(P,"Parser"),P.prototype=O,O.Parser=P,new P}();GO.parser=GO;GE=GO});var Rde,$E,t1,Gx,Mde,Ide,Ode,F0,VE,VO,UO,HO,WO,YO,UE,HE,Pde,Bde,qO,XO,Fde,zde,r1,hWe,Gde,jO,fWe,dWe,$de,Vde,pWe,Ude,mWe,Hde,KO,QO,Wde,WE,Yde,ZO,YE=M(()=>{"use strict";Rde="LR",$E="TB",t1="state",Gx="relation",Mde="classDef",Ide="style",Ode="applyClass",F0="default",VE="divider",VO="fill:none",UO="fill: #333",HO="c",WO="text",YO="normal",UE="rect",HE="rectWithTitle",Pde="stateStart",Bde="stateEnd",qO="divider",XO="roundedWithTitle",Fde="note",zde="noteGroup",r1="statediagram",hWe="state",Gde=`${r1}-${hWe}`,jO="transition",fWe="note",dWe="note-edge",$de=`${jO} ${dWe}`,Vde=`${r1}-${fWe}`,pWe="cluster",Ude=`${r1}-${pWe}`,mWe="cluster-alt",Hde=`${r1}-${mWe}`,KO="parent",QO="note",Wde="state",WE="----",Yde=`${WE}${QO}`,ZO=`${WE}${KO}`});function JO(t="",e=0,r="",n=WE){let i=r!==null&&r.length>0?`${n}${r}`:"";return`${Wde}-${t}${i}-${e}`}function qE(t,e,r){if(!e.id||e.id===""||e.id==="")return;e.cssClasses&&(Array.isArray(e.cssCompiledStyles)||(e.cssCompiledStyles=[]),e.cssClasses.split(" ").forEach(i=>{if(r.get(i)){let a=r.get(i);e.cssCompiledStyles=[...e.cssCompiledStyles,...a.styles]}}));let n=t.find(i=>i.id===e.id);n?Object.assign(n,e):t.push(e)}function yWe(t){return t?.classes?.join(" ")??""}function vWe(t){return t?.styles??[]}var XE,Sf,gWe,qde,n1,Xde,jde=M(()=>{"use strict";Vt();ut();fr();YE();XE=new Map,Sf=0;o(JO,"stateDomId");gWe=o((t,e,r,n,i,a,s,l)=>{Y.trace("items",e),e.forEach(u=>{switch(u.stmt){case t1:n1(t,u,r,n,i,a,s,l);break;case F0:n1(t,u,r,n,i,a,s,l);break;case Gx:{n1(t,u.state1,r,n,i,a,s,l),n1(t,u.state2,r,n,i,a,s,l);let h={id:"edge"+Sf,start:u.state1.id,end:u.state2.id,arrowhead:"normal",arrowTypeEnd:"arrow_barb",style:VO,labelStyle:"",label:qe.sanitizeText(u.description,pe()),arrowheadStyle:UO,labelpos:HO,labelType:WO,thickness:YO,classes:jO,look:s};i.push(h),Sf++}break}})},"setupDoc"),qde=o((t,e=$E)=>{let r=e;if(t.doc)for(let n of t.doc)n.stmt==="dir"&&(r=n.value);return r},"getDir");o(qE,"insertOrUpdateNode");o(yWe,"getClassesFromDbInfo");o(vWe,"getStylesFromDbInfo");n1=o((t,e,r,n,i,a,s,l)=>{let u=e.id,h=r.get(u),f=yWe(h),d=vWe(h);if(Y.info("dataFetcher parsedItem",e,h,d),u!=="root"){let p=UE;e.start===!0?p=Pde:e.start===!1&&(p=Bde),e.type!==F0&&(p=e.type),XE.get(u)||XE.set(u,{id:u,shape:p,description:qe.sanitizeText(u,pe()),cssClasses:`${f} ${Gde}`,cssStyles:d});let m=XE.get(u);e.description&&(Array.isArray(m.description)?(m.shape=HE,m.description.push(e.description)):m.description?.length>0?(m.shape=HE,m.description===u?m.description=[e.description]:m.description=[m.description,e.description]):(m.shape=UE,m.description=e.description),m.description=qe.sanitizeTextOrArray(m.description,pe())),m.description?.length===1&&m.shape===HE&&(m.type==="group"?m.shape=XO:m.shape=UE),!m.type&&e.doc&&(Y.info("Setting cluster for XCX",u,qde(e)),m.type="group",m.isGroup=!0,m.dir=qde(e),m.shape=e.type===VE?qO:XO,m.cssClasses=`${m.cssClasses} ${Ude} ${a?Hde:""}`);let g={labelStyle:"",shape:m.shape,label:m.description,cssClasses:m.cssClasses,cssCompiledStyles:[],cssStyles:m.cssStyles,id:u,dir:m.dir,domId:JO(u,Sf),type:m.type,isGroup:m.type==="group",padding:8,rx:10,ry:10,look:s};if(g.shape===qO&&(g.label=""),t&&t.id!=="root"&&(Y.trace("Setting node ",u," to be child of its parent ",t.id),g.parentId=t.id),g.centerLabel=!0,e.note){let y={labelStyle:"",shape:Fde,label:e.note.text,cssClasses:Vde,cssStyles:[],cssCompilesStyles:[],id:u+Yde+"-"+Sf,domId:JO(u,Sf,QO),type:m.type,isGroup:m.type==="group",padding:pe().flowchart.padding,look:s,position:e.note.position},v=u+ZO,x={labelStyle:"",shape:zde,label:e.note.text,cssClasses:m.cssClasses,cssStyles:[],id:u+ZO,domId:JO(u,Sf,KO),type:"group",isGroup:!0,padding:16,look:s,position:e.note.position};Sf++,x.id=v,y.parentId=v,qE(n,x,l),qE(n,y,l),qE(n,g,l);let b=u,w=y.id;e.note.position==="left of"&&(b=y.id,w=u),i.push({id:b+"-"+w,start:b,end:w,arrowhead:"none",arrowTypeEnd:"",style:VO,labelStyle:"",classes:$de,arrowheadStyle:UO,labelpos:HO,labelType:WO,thickness:YO,look:s})}else qE(n,g,l)}e.doc&&(Y.trace("Adding nodes children "),gWe(e,e.doc,r,n,i,!a,s,l))},"dataFetcher"),Xde=o(()=>{XE.clear(),Sf=0},"reset")});var eP,xWe,bWe,Kde,tP=M(()=>{"use strict";Vt();ut();ow();Jv();TT();hr();YE();eP=o((t,e=$E)=>{if(!t.doc)return e;let r=e;for(let n of t.doc)n.stmt==="dir"&&(r=n.value);return r},"getDir"),xWe=o(function(t,e){return e.db.extract(e.db.getRootDocV2()),e.db.getClasses()},"getClasses"),bWe=o(async function(t,e,r,n){Y.info("REF0:"),Y.info("Drawing state diagram (v2)",e);let{securityLevel:i,state:a,layout:s}=pe();n.db.extract(n.db.getRootDocV2());let l=n.db.getData(),u=Am(e,i);l.type=n.type,l.layoutAlgorithm=s,l.nodeSpacing=a?.nodeSpacing||50,l.rankSpacing=a?.rankSpacing||50,l.markers=["barb"],l.diagramId=e,await Qm(l,u);let h=8;Ut.insertTitle(u,"statediagramTitleText",a?.titleTopMargin??25,n.db.getDiagramTitle()),Zm(u,h,r1,a?.useMaxWidth??!0)},"draw"),Kde={getClasses:xWe,draw:bWe,getDir:eP}});function n0e(){return new Map}function rP(t=""){let e=t;return t===aP&&($x++,e=`${e0e}${$x}`),e}function nP(t="",e=F0){return t===aP?e0e:e}function DWe(t=""){let e=t;return t===t0e&&($x++,e=`${r0e}${$x}`),e}function NWe(t="",e=F0){return t===t0e?r0e:e}function RWe(t,e,r){let n=rP(t.id.trim()),i=nP(t.id.trim(),t.type),a=rP(e.id.trim()),s=nP(e.id.trim(),e.type);Cf(n,i,t.doc,t.description,t.note,t.classes,t.styles,t.textStyles),Cf(a,s,e.doc,e.description,e.note,e.classes,e.styles,e.textStyles),Xs.relations.push({id1:n,id2:a,relationTitle:qe.sanitizeText(r,pe())})}var aP,e0e,t0e,r0e,Qde,Zde,wWe,TWe,QE,sP,i0e,ZE,i1,a0e,JE,Xs,$x,Jde,kWe,EWe,jE,SWe,CWe,KE,oP,AWe,Cf,s0e,z0,o0e,_We,LWe,l0e,iP,MWe,IWe,c0e,OWe,lP,PWe,BWe,FWe,zWe,GWe,$We,ol,e6=M(()=>{"use strict";ut();hr();fr();Vt();Ai();jde();tP();YE();aP="[*]",e0e="start",t0e=aP,r0e="end",Qde="color",Zde="fill",wWe="bgFill",TWe=",";o(n0e,"newClassesList");QE=[],sP=[],i0e=Rde,ZE=[],i1=n0e(),a0e=o(()=>({relations:[],states:new Map,documents:{}}),"newDoc"),JE={root:a0e()},Xs=JE.root,$x=0,Jde=0,kWe={LINE:0,DOTTED_LINE:1},EWe={AGGREGATION:0,EXTENSION:1,COMPOSITION:2,DEPENDENCY:3},jE=o(t=>JSON.parse(JSON.stringify(t)),"clone"),SWe=o(t=>{Y.info("Setting root doc",t),ZE=t},"setRootDoc"),CWe=o(()=>ZE,"getRootDoc"),KE=o((t,e,r)=>{if(e.stmt===Gx)KE(t,e.state1,!0),KE(t,e.state2,!1);else if(e.stmt===t1&&(e.id==="[*]"?(e.id=r?t.id+"_start":t.id+"_end",e.start=r):e.id=e.id.trim()),e.doc){let n=[],i=[],a;for(a=0;a0&&i.length>0){let s={stmt:t1,id:r9(),type:"divider",doc:jE(i)};n.push(jE(s)),e.doc=n}e.doc.forEach(s=>KE(e,s,!0))}},"docTranslator"),oP=o(()=>(KE({id:"root"},{id:"root",doc:ZE},!0),{id:"root",doc:ZE}),"getRootDocV2"),AWe=o(t=>{let e;t.doc?e=t.doc:e=t,Y.info(e),s0e(!0),Y.info("Extract initial document:",e),e.forEach(a=>{switch(Y.warn("Statement",a.stmt),a.stmt){case t1:Cf(a.id.trim(),a.type,a.doc,a.description,a.note,a.classes,a.styles,a.textStyles);break;case Gx:l0e(a.state1,a.state2,a.description);break;case Mde:c0e(a.id.trim(),a.classes);break;case Ide:{let s=a.id.trim().split(","),l=a.styleClass.split(",");s.forEach(u=>{let h=z0(u);if(h===void 0){let f=u.trim();Cf(f),h=z0(f)}h.styles=l.map(f=>f.replace(/;/g,"")?.trim())})}break;case Ode:lP(a.id.trim(),a.styleClass);break}});let r=o0e(),i=pe().look;Xde(),n1(void 0,oP(),r,QE,sP,!0,i,i1),QE.forEach(a=>{if(Array.isArray(a.label)){if(a.description=a.label.slice(1),a.isGroup&&a.description.length>0)throw new Error("Group nodes can only have label. Remove the additional description for node ["+a.id+"]");a.label=a.label[0]}})},"extract"),Cf=o(function(t,e=F0,r=null,n=null,i=null,a=null,s=null,l=null){let u=t?.trim();if(Xs.states.has(u)?(Xs.states.get(u).doc||(Xs.states.get(u).doc=r),Xs.states.get(u).type||(Xs.states.get(u).type=e)):(Y.info("Adding state ",u,n),Xs.states.set(u,{id:u,descriptions:[],type:e,doc:r,note:i,classes:[],styles:[],textStyles:[]})),n&&(Y.info("Setting state description",u,n),typeof n=="string"&&iP(u,n.trim()),typeof n=="object"&&n.forEach(h=>iP(u,h.trim()))),i){let h=Xs.states.get(u);h.note=i,h.note.text=qe.sanitizeText(h.note.text,pe())}a&&(Y.info("Setting state classes",u,a),(typeof a=="string"?[a]:a).forEach(f=>lP(u,f.trim()))),s&&(Y.info("Setting state styles",u,s),(typeof s=="string"?[s]:s).forEach(f=>PWe(u,f.trim()))),l&&(Y.info("Setting state styles",u,s),(typeof l=="string"?[l]:l).forEach(f=>BWe(u,f.trim())))},"addState"),s0e=o(function(t){QE=[],sP=[],JE={root:a0e()},Xs=JE.root,$x=0,i1=n0e(),t||Lr()},"clear"),z0=o(function(t){return Xs.states.get(t)},"getState"),o0e=o(function(){return Xs.states},"getStates"),_We=o(function(){Y.info("Documents = ",JE)},"logDocuments"),LWe=o(function(){return Xs.relations},"getRelations");o(rP,"startIdIfNeeded");o(nP,"startTypeIfNeeded");o(DWe,"endIdIfNeeded");o(NWe,"endTypeIfNeeded");o(RWe,"addRelationObjs");l0e=o(function(t,e,r){if(typeof t=="object")RWe(t,e,r);else{let n=rP(t.trim()),i=nP(t),a=DWe(e.trim()),s=NWe(e);Cf(n,i),Cf(a,s),Xs.relations.push({id1:n,id2:a,title:qe.sanitizeText(r,pe())})}},"addRelation"),iP=o(function(t,e){let r=Xs.states.get(t),n=e.startsWith(":")?e.replace(":","").trim():e;r.descriptions.push(qe.sanitizeText(n,pe()))},"addDescription"),MWe=o(function(t){return t.substring(0,1)===":"?t.substr(2).trim():t.trim()},"cleanupLabel"),IWe=o(()=>(Jde++,"divider-id-"+Jde),"getDividerId"),c0e=o(function(t,e=""){i1.has(t)||i1.set(t,{id:t,styles:[],textStyles:[]});let r=i1.get(t);e?.split(TWe).forEach(n=>{let i=n.replace(/([^;]*);/,"$1").trim();if(RegExp(Qde).exec(n)){let s=i.replace(Zde,wWe).replace(Qde,Zde);r.textStyles.push(s)}r.styles.push(i)})},"addStyleClass"),OWe=o(function(){return i1},"getClasses"),lP=o(function(t,e){t.split(",").forEach(function(r){let n=z0(r);if(n===void 0){let i=r.trim();Cf(i),n=z0(i)}n.classes.push(e)})},"setCssClass"),PWe=o(function(t,e){let r=z0(t);r!==void 0&&r.styles.push(e)},"setStyle"),BWe=o(function(t,e){let r=z0(t);r!==void 0&&r.textStyles.push(e)},"setTextStyle"),FWe=o(()=>i0e,"getDirection"),zWe=o(t=>{i0e=t},"setDirection"),GWe=o(t=>t&&t[0]===":"?t.substr(1).trim():t.trim(),"trimColon"),$We=o(()=>{let t=pe();return{nodes:QE,edges:sP,other:{},config:t,direction:eP(oP())}},"getData"),ol={getConfig:o(()=>pe().state,"getConfig"),getData:$We,addState:Cf,clear:s0e,getState:z0,getStates:o0e,getRelations:LWe,getClasses:OWe,getDirection:FWe,addRelation:l0e,getDividerId:IWe,setDirection:zWe,cleanupLabel:MWe,lineType:kWe,relationType:EWe,logDocuments:_We,getRootDoc:CWe,setRootDoc:SWe,getRootDocV2:oP,extract:AWe,trimColon:GWe,getAccTitle:Br,setAccTitle:Mr,getAccDescription:zr,setAccDescription:Fr,addStyleClass:c0e,setCssClass:lP,addDescription:iP,setDiagramTitle:cn,getDiagramTitle:Jr}});var VWe,t6,cP=M(()=>{"use strict";VWe=o(t=>` +defs #statediagram-barbEnd { + fill: ${t.transitionColor}; + stroke: ${t.transitionColor}; + } +g.stateGroup text { + fill: ${t.nodeBorder}; + stroke: none; + font-size: 10px; +} +g.stateGroup text { + fill: ${t.textColor}; + stroke: none; + font-size: 10px; + +} +g.stateGroup .state-title { + font-weight: bolder; + fill: ${t.stateLabelColor}; +} + +g.stateGroup rect { + fill: ${t.mainBkg}; + stroke: ${t.nodeBorder}; +} + +g.stateGroup line { + stroke: ${t.lineColor}; + stroke-width: 1; +} + +.transition { + stroke: ${t.transitionColor}; + stroke-width: 1; + fill: none; +} + +.stateGroup .composit { + fill: ${t.background}; + border-bottom: 1px +} + +.stateGroup .alt-composit { + fill: #e0e0e0; + border-bottom: 1px +} + +.state-note { + stroke: ${t.noteBorderColor}; + fill: ${t.noteBkgColor}; + + text { + fill: ${t.noteTextColor}; + stroke: none; + font-size: 10px; + } +} + +.stateLabel .box { + stroke: none; + stroke-width: 0; + fill: ${t.mainBkg}; + opacity: 0.5; +} + +.edgeLabel .label rect { + fill: ${t.labelBackgroundColor}; + opacity: 0.5; +} +.edgeLabel { + background-color: ${t.edgeLabelBackground}; + p { + background-color: ${t.edgeLabelBackground}; + } + rect { + opacity: 0.5; + background-color: ${t.edgeLabelBackground}; + fill: ${t.edgeLabelBackground}; + } + text-align: center; +} +.edgeLabel .label text { + fill: ${t.transitionLabelColor||t.tertiaryTextColor}; +} +.label div .edgeLabel { + color: ${t.transitionLabelColor||t.tertiaryTextColor}; +} + +.stateLabel text { + fill: ${t.stateLabelColor}; + font-size: 10px; + font-weight: bold; +} + +.node circle.state-start { + fill: ${t.specialStateColor}; + stroke: ${t.specialStateColor}; +} + +.node .fork-join { + fill: ${t.specialStateColor}; + stroke: ${t.specialStateColor}; +} + +.node circle.state-end { + fill: ${t.innerEndBackground}; + stroke: ${t.background}; + stroke-width: 1.5 +} +.end-state-inner { + fill: ${t.compositeBackground||t.background}; + // stroke: ${t.background}; + stroke-width: 1.5 +} + +.node rect { + fill: ${t.stateBkg||t.mainBkg}; + stroke: ${t.stateBorder||t.nodeBorder}; + stroke-width: 1px; +} +.node polygon { + fill: ${t.mainBkg}; + stroke: ${t.stateBorder||t.nodeBorder};; + stroke-width: 1px; +} +#statediagram-barbEnd { + fill: ${t.lineColor}; +} + +.statediagram-cluster rect { + fill: ${t.compositeTitleBackground}; + stroke: ${t.stateBorder||t.nodeBorder}; + stroke-width: 1px; +} + +.cluster-label, .nodeLabel { + color: ${t.stateLabelColor}; + // line-height: 1; +} + +.statediagram-cluster rect.outer { + rx: 5px; + ry: 5px; +} +.statediagram-state .divider { + stroke: ${t.stateBorder||t.nodeBorder}; +} + +.statediagram-state .title-state { + rx: 5px; + ry: 5px; +} +.statediagram-cluster.statediagram-cluster .inner { + fill: ${t.compositeBackground||t.background}; +} +.statediagram-cluster.statediagram-cluster-alt .inner { + fill: ${t.altBackground?t.altBackground:"#efefef"}; +} + +.statediagram-cluster .inner { + rx:0; + ry:0; +} + +.statediagram-state rect.basic { + rx: 5px; + ry: 5px; +} +.statediagram-state rect.divider { + stroke-dasharray: 10,10; + fill: ${t.altBackground?t.altBackground:"#efefef"}; +} + +.note-edge { + stroke-dasharray: 5; +} + +.statediagram-note rect { + fill: ${t.noteBkgColor}; + stroke: ${t.noteBorderColor}; + stroke-width: 1px; + rx: 0; + ry: 0; +} +.statediagram-note rect { + fill: ${t.noteBkgColor}; + stroke: ${t.noteBorderColor}; + stroke-width: 1px; + rx: 0; + ry: 0; +} + +.statediagram-note text { + fill: ${t.noteTextColor}; +} + +.statediagram-note .nodeLabel { + color: ${t.noteTextColor}; +} +.statediagram .edgeLabel { + color: red; // ${t.noteTextColor}; +} + +#dependencyStart, #dependencyEnd { + fill: ${t.lineColor}; + stroke: ${t.lineColor}; + stroke-width: 1; +} + +.statediagramTitleText { + text-anchor: middle; + font-size: 18px; + fill: ${t.textColor}; +} +`,"getStyles"),t6=VWe});var uP,UWe,HWe,u0e,WWe,h0e,f0e=M(()=>{"use strict";uP={},UWe=o((t,e)=>{uP[t]=e},"set"),HWe=o(t=>uP[t],"get"),u0e=o(()=>Object.keys(uP),"keys"),WWe=o(()=>u0e().length,"size"),h0e={get:HWe,set:UWe,keys:u0e,size:WWe}});var YWe,qWe,XWe,jWe,p0e,KWe,QWe,ZWe,JWe,hP,d0e,m0e,g0e=M(()=>{"use strict";pr();f0e();e6();hr();fr();Vt();ut();YWe=o(t=>t.append("circle").attr("class","start-state").attr("r",pe().state.sizeUnit).attr("cx",pe().state.padding+pe().state.sizeUnit).attr("cy",pe().state.padding+pe().state.sizeUnit),"drawStartState"),qWe=o(t=>t.append("line").style("stroke","grey").style("stroke-dasharray","3").attr("x1",pe().state.textHeight).attr("class","divider").attr("x2",pe().state.textHeight*2).attr("y1",0).attr("y2",0),"drawDivider"),XWe=o((t,e)=>{let r=t.append("text").attr("x",2*pe().state.padding).attr("y",pe().state.textHeight+2*pe().state.padding).attr("font-size",pe().state.fontSize).attr("class","state-title").text(e.id),n=r.node().getBBox();return t.insert("rect",":first-child").attr("x",pe().state.padding).attr("y",pe().state.padding).attr("width",n.width+2*pe().state.padding).attr("height",n.height+2*pe().state.padding).attr("rx",pe().state.radius),r},"drawSimpleState"),jWe=o((t,e)=>{let r=o(function(p,m,g){let y=p.append("tspan").attr("x",2*pe().state.padding).text(m);g||y.attr("dy",pe().state.textHeight)},"addTspan"),i=t.append("text").attr("x",2*pe().state.padding).attr("y",pe().state.textHeight+1.3*pe().state.padding).attr("font-size",pe().state.fontSize).attr("class","state-title").text(e.descriptions[0]).node().getBBox(),a=i.height,s=t.append("text").attr("x",pe().state.padding).attr("y",a+pe().state.padding*.4+pe().state.dividerMargin+pe().state.textHeight).attr("class","state-description"),l=!0,u=!0;e.descriptions.forEach(function(p){l||(r(s,p,u),u=!1),l=!1});let h=t.append("line").attr("x1",pe().state.padding).attr("y1",pe().state.padding+a+pe().state.dividerMargin/2).attr("y2",pe().state.padding+a+pe().state.dividerMargin/2).attr("class","descr-divider"),f=s.node().getBBox(),d=Math.max(f.width,i.width);return h.attr("x2",d+3*pe().state.padding),t.insert("rect",":first-child").attr("x",pe().state.padding).attr("y",pe().state.padding).attr("width",d+2*pe().state.padding).attr("height",f.height+a+2*pe().state.padding).attr("rx",pe().state.radius),t},"drawDescrState"),p0e=o((t,e,r)=>{let n=pe().state.padding,i=2*pe().state.padding,a=t.node().getBBox(),s=a.width,l=a.x,u=t.append("text").attr("x",0).attr("y",pe().state.titleShift).attr("font-size",pe().state.fontSize).attr("class","state-title").text(e.id),f=u.node().getBBox().width+i,d=Math.max(f,s);d===s&&(d=d+i);let p,m=t.node().getBBox();e.doc,p=l-n,f>s&&(p=(s-d)/2+n),Math.abs(l-m.x)s&&(p=l-(f-s)/2);let g=1-pe().state.textHeight;return t.insert("rect",":first-child").attr("x",p).attr("y",g).attr("class",r?"alt-composit":"composit").attr("width",d).attr("height",m.height+pe().state.textHeight+pe().state.titleShift+1).attr("rx","0"),u.attr("x",p+n),f<=s&&u.attr("x",l+(d-i)/2-f/2+n),t.insert("rect",":first-child").attr("x",p).attr("y",pe().state.titleShift-pe().state.textHeight-pe().state.padding).attr("width",d).attr("height",pe().state.textHeight*3).attr("rx",pe().state.radius),t.insert("rect",":first-child").attr("x",p).attr("y",pe().state.titleShift-pe().state.textHeight-pe().state.padding).attr("width",d).attr("height",m.height+3+2*pe().state.textHeight).attr("rx",pe().state.radius),t},"addTitleAndBox"),KWe=o(t=>(t.append("circle").attr("class","end-state-outer").attr("r",pe().state.sizeUnit+pe().state.miniPadding).attr("cx",pe().state.padding+pe().state.sizeUnit+pe().state.miniPadding).attr("cy",pe().state.padding+pe().state.sizeUnit+pe().state.miniPadding),t.append("circle").attr("class","end-state-inner").attr("r",pe().state.sizeUnit).attr("cx",pe().state.padding+pe().state.sizeUnit+2).attr("cy",pe().state.padding+pe().state.sizeUnit+2)),"drawEndState"),QWe=o((t,e)=>{let r=pe().state.forkWidth,n=pe().state.forkHeight;if(e.parentId){let i=r;r=n,n=i}return t.append("rect").style("stroke","black").style("fill","black").attr("width",r).attr("height",n).attr("x",pe().state.padding).attr("y",pe().state.padding)},"drawForkJoinState"),ZWe=o((t,e,r,n)=>{let i=0,a=n.append("text");a.style("text-anchor","start"),a.attr("class","noteText");let s=t.replace(/\r\n/g,"
    ");s=s.replace(/\n/g,"
    ");let l=s.split(qe.lineBreakRegex),u=1.25*pe().state.noteMargin;for(let h of l){let f=h.trim();if(f.length>0){let d=a.append("tspan");if(d.text(f),u===0){let p=d.node().getBBox();u+=p.height}i+=u,d.attr("x",e+pe().state.noteMargin),d.attr("y",r+i+1.25*pe().state.noteMargin)}}return{textWidth:a.node().getBBox().width,textHeight:i}},"_drawLongText"),JWe=o((t,e)=>{e.attr("class","state-note");let r=e.append("rect").attr("x",0).attr("y",pe().state.padding),n=e.append("g"),{textWidth:i,textHeight:a}=ZWe(t,0,0,n);return r.attr("height",a+2*pe().state.noteMargin),r.attr("width",i+pe().state.noteMargin*2),r},"drawNote"),hP=o(function(t,e){let r=e.id,n={id:r,label:e.id,width:0,height:0},i=t.append("g").attr("id",r).attr("class","stateGroup");e.type==="start"&&YWe(i),e.type==="end"&&KWe(i),(e.type==="fork"||e.type==="join")&&QWe(i,e),e.type==="note"&&JWe(e.note.text,i),e.type==="divider"&&qWe(i),e.type==="default"&&e.descriptions.length===0&&XWe(i,e),e.type==="default"&&e.descriptions.length>0&&jWe(i,e);let a=i.node().getBBox();return n.width=a.width+2*pe().state.padding,n.height=a.height+2*pe().state.padding,h0e.set(r,n),n},"drawState"),d0e=0,m0e=o(function(t,e,r){let n=o(function(u){switch(u){case ol.relationType.AGGREGATION:return"aggregation";case ol.relationType.EXTENSION:return"extension";case ol.relationType.COMPOSITION:return"composition";case ol.relationType.DEPENDENCY:return"dependency"}},"getRelationType");e.points=e.points.filter(u=>!Number.isNaN(u.y));let i=e.points,a=ns().x(function(u){return u.x}).y(function(u){return u.y}).curve(Po),s=t.append("path").attr("d",a(i)).attr("id","edge"+d0e).attr("class","transition"),l="";if(pe().state.arrowMarkerAbsolute&&(l=window.location.protocol+"//"+window.location.host+window.location.pathname+window.location.search,l=l.replace(/\(/g,"\\("),l=l.replace(/\)/g,"\\)")),s.attr("marker-end","url("+l+"#"+n(ol.relationType.DEPENDENCY)+"End)"),r.title!==void 0){let u=t.append("g").attr("class","stateLabel"),{x:h,y:f}=Ut.calcLabelPosition(e.points),d=qe.getRows(r.title),p=0,m=[],g=0,y=0;for(let b=0;b<=d.length;b++){let w=u.append("text").attr("text-anchor","middle").text(d[b]).attr("x",h).attr("y",f+p),_=w.node().getBBox();g=Math.max(g,_.width),y=Math.min(y,_.x),Y.info(_.x,h,f+p),p===0&&(p=w.node().getBBox().height,Y.info("Title height",p,f)),m.push(w)}let v=p*d.length;if(d.length>1){let b=(d.length-1)*p*.5;m.forEach((w,_)=>w.attr("y",f+_*p-b)),v=p*d.length}let x=u.node().getBBox();u.insert("rect",":first-child").attr("class","box").attr("x",h-g/2-pe().state.padding/2).attr("y",f-v/2-pe().state.padding/2-3.5).attr("width",g+pe().state.padding).attr("height",v+pe().state.padding),Y.info(x)}d0e++},"drawEdge")});var bo,fP,eYe,tYe,rYe,nYe,y0e,v0e,x0e=M(()=>{"use strict";pr();Qv();Gs();ut();fr();g0e();Vt();ai();fP={},eYe=o(function(){},"setConf"),tYe=o(function(t){t.append("defs").append("marker").attr("id","dependencyEnd").attr("refX",19).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 19,7 L9,13 L14,7 L9,1 Z")},"insertMarkers"),rYe=o(function(t,e,r,n){bo=pe().state;let i=pe().securityLevel,a;i==="sandbox"&&(a=Ve("#i"+e));let s=i==="sandbox"?Ve(a.nodes()[0].contentDocument.body):Ve("body"),l=i==="sandbox"?a.nodes()[0].contentDocument:document;Y.debug("Rendering diagram "+t);let u=s.select(`[id='${e}']`);tYe(u);let h=n.db.getRootDoc();y0e(h,u,void 0,!1,s,l,n);let f=bo.padding,d=u.node().getBBox(),p=d.width+f*2,m=d.height+f*2,g=p*1.75;Zr(u,m,g,bo.useMaxWidth),u.attr("viewBox",`${d.x-bo.padding} ${d.y-bo.padding} `+p+" "+m)},"draw"),nYe=o(t=>t?t.length*bo.fontSizeFactor:1,"getLabelWidth"),y0e=o((t,e,r,n,i,a,s)=>{let l=new Ir({compound:!0,multigraph:!0}),u,h=!0;for(u=0;u{let T=_.parentElement,E=0,L=0;T&&(T.parentElement&&(E=T.parentElement.getBBox().width),L=parseInt(T.getAttribute("data-x-shift"),10),Number.isNaN(L)&&(L=0)),_.setAttribute("x1",0-L+8),_.setAttribute("x2",E-L-8)})):Y.debug("No Node "+b+": "+JSON.stringify(l.node(b)))});let v=y.getBBox();l.edges().forEach(function(b){b!==void 0&&l.edge(b)!==void 0&&(Y.debug("Edge "+b.v+" -> "+b.w+": "+JSON.stringify(l.edge(b))),m0e(e,l.edge(b),l.edge(b).relation))}),v=y.getBBox();let x={id:r||"root",label:r||"root",width:0,height:0};return x.width=v.width+2*bo.padding,x.height=v.height+2*bo.padding,Y.debug("Doc rendered",x,l),x},"renderDoc"),v0e={setConf:eYe,draw:rYe}});var b0e={};vr(b0e,{diagram:()=>iYe});var iYe,w0e=M(()=>{"use strict";$O();e6();cP();x0e();iYe={parser:GE,db:ol,renderer:v0e,styles:t6,init:o(t=>{t.state||(t.state={}),t.state.arrowMarkerAbsolute=t.arrowMarkerAbsolute,ol.clear()},"init")}});var E0e={};vr(E0e,{diagram:()=>lYe});var lYe,S0e=M(()=>{"use strict";$O();e6();cP();tP();lYe={parser:GE,db:ol,renderer:Kde,styles:t6,init:o(t=>{t.state||(t.state={}),t.state.arrowMarkerAbsolute=t.arrowMarkerAbsolute,ol.clear()},"init")}});var dP,_0e,L0e=M(()=>{"use strict";dP=function(){var t=o(function(d,p,m,g){for(m=m||{},g=d.length;g--;m[d[g]]=p);return m},"o"),e=[6,8,10,11,12,14,16,17,18],r=[1,9],n=[1,10],i=[1,11],a=[1,12],s=[1,13],l=[1,14],u={trace:o(function(){},"trace"),yy:{},symbols_:{error:2,start:3,journey:4,document:5,EOF:6,line:7,SPACE:8,statement:9,NEWLINE:10,title:11,acc_title:12,acc_title_value:13,acc_descr:14,acc_descr_value:15,acc_descr_multiline_value:16,section:17,taskName:18,taskData:19,$accept:0,$end:1},terminals_:{2:"error",4:"journey",6:"EOF",8:"SPACE",10:"NEWLINE",11:"title",12:"acc_title",13:"acc_title_value",14:"acc_descr",15:"acc_descr_value",16:"acc_descr_multiline_value",17:"section",18:"taskName",19:"taskData"},productions_:[0,[3,3],[5,0],[5,2],[7,2],[7,1],[7,1],[7,1],[9,1],[9,2],[9,2],[9,1],[9,1],[9,2]],performAction:o(function(p,m,g,y,v,x,b){var w=x.length-1;switch(v){case 1:return x[w-1];case 2:this.$=[];break;case 3:x[w-1].push(x[w]),this.$=x[w-1];break;case 4:case 5:this.$=x[w];break;case 6:case 7:this.$=[];break;case 8:y.setDiagramTitle(x[w].substr(6)),this.$=x[w].substr(6);break;case 9:this.$=x[w].trim(),y.setAccTitle(this.$);break;case 10:case 11:this.$=x[w].trim(),y.setAccDescription(this.$);break;case 12:y.addSection(x[w].substr(8)),this.$=x[w].substr(8);break;case 13:y.addTask(x[w-1],x[w]),this.$="task";break}},"anonymous"),table:[{3:1,4:[1,2]},{1:[3]},t(e,[2,2],{5:3}),{6:[1,4],7:5,8:[1,6],9:7,10:[1,8],11:r,12:n,14:i,16:a,17:s,18:l},t(e,[2,7],{1:[2,1]}),t(e,[2,3]),{9:15,11:r,12:n,14:i,16:a,17:s,18:l},t(e,[2,5]),t(e,[2,6]),t(e,[2,8]),{13:[1,16]},{15:[1,17]},t(e,[2,11]),t(e,[2,12]),{19:[1,18]},t(e,[2,4]),t(e,[2,9]),t(e,[2,10]),t(e,[2,13])],defaultActions:{},parseError:o(function(p,m){if(m.recoverable)this.trace(p);else{var g=new Error(p);throw g.hash=m,g}},"parseError"),parse:o(function(p){var m=this,g=[0],y=[],v=[null],x=[],b=this.table,w="",_=0,T=0,E=0,L=2,S=1,A=x.slice.call(arguments,1),I=Object.create(this.lexer),D={yy:{}};for(var k in this.yy)Object.prototype.hasOwnProperty.call(this.yy,k)&&(D.yy[k]=this.yy[k]);I.setInput(p,D.yy),D.yy.lexer=I,D.yy.parser=this,typeof I.yylloc>"u"&&(I.yylloc={});var R=I.yylloc;x.push(R);var C=I.options&&I.options.ranges;typeof D.yy.parseError=="function"?this.parseError=D.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function O(H){g.length=g.length-2*H,v.length=v.length-H,x.length=x.length-H}o(O,"popStack");function N(){var H;return H=y.pop()||I.lex()||S,typeof H!="number"&&(H instanceof Array&&(y=H,H=y.pop()),H=m.symbols_[H]||H),H}o(N,"lex");for(var P,F,B,G,z,W,Z={},j,oe,K,ee;;){if(B=g[g.length-1],this.defaultActions[B]?G=this.defaultActions[B]:((P===null||typeof P>"u")&&(P=N()),G=b[B]&&b[B][P]),typeof G>"u"||!G.length||!G[0]){var J="";ee=[];for(j in b[B])this.terminals_[j]&&j>L&&ee.push("'"+this.terminals_[j]+"'");I.showPosition?J="Parse error on line "+(_+1)+`: +`+I.showPosition()+` +Expecting `+ee.join(", ")+", got '"+(this.terminals_[P]||P)+"'":J="Parse error on line "+(_+1)+": Unexpected "+(P==S?"end of input":"'"+(this.terminals_[P]||P)+"'"),this.parseError(J,{text:I.match,token:this.terminals_[P]||P,line:I.yylineno,loc:R,expected:ee})}if(G[0]instanceof Array&&G.length>1)throw new Error("Parse Error: multiple actions possible at state: "+B+", token: "+P);switch(G[0]){case 1:g.push(P),v.push(I.yytext),x.push(I.yylloc),g.push(G[1]),P=null,F?(P=F,F=null):(T=I.yyleng,w=I.yytext,_=I.yylineno,R=I.yylloc,E>0&&E--);break;case 2:if(oe=this.productions_[G[1]][1],Z.$=v[v.length-oe],Z._$={first_line:x[x.length-(oe||1)].first_line,last_line:x[x.length-1].last_line,first_column:x[x.length-(oe||1)].first_column,last_column:x[x.length-1].last_column},C&&(Z._$.range=[x[x.length-(oe||1)].range[0],x[x.length-1].range[1]]),W=this.performAction.apply(Z,[w,T,_,D.yy,G[1],v,x].concat(A)),typeof W<"u")return W;oe&&(g=g.slice(0,-1*oe*2),v=v.slice(0,-1*oe),x=x.slice(0,-1*oe)),g.push(this.productions_[G[1]][0]),v.push(Z.$),x.push(Z._$),K=b[g[g.length-2]][g[g.length-1]],g.push(K);break;case 3:return!0}}return!0},"parse")},h=function(){var d={EOF:1,parseError:o(function(m,g){if(this.yy.parser)this.yy.parser.parseError(m,g);else throw new Error(m)},"parseError"),setInput:o(function(p,m){return this.yy=m||this.yy||{},this._input=p,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},"setInput"),input:o(function(){var p=this._input[0];this.yytext+=p,this.yyleng++,this.offset++,this.match+=p,this.matched+=p;var m=p.match(/(?:\r\n?|\n).*/g);return m?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),p},"input"),unput:o(function(p){var m=p.length,g=p.split(/(?:\r\n?|\n)/g);this._input=p+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-m),this.offset-=m;var y=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),g.length-1&&(this.yylineno-=g.length-1);var v=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:g?(g.length===y.length?this.yylloc.first_column:0)+y[y.length-g.length].length-g[0].length:this.yylloc.first_column-m},this.options.ranges&&(this.yylloc.range=[v[0],v[0]+this.yyleng-m]),this.yyleng=this.yytext.length,this},"unput"),more:o(function(){return this._more=!0,this},"more"),reject:o(function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true). +`+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},"reject"),less:o(function(p){this.unput(this.match.slice(p))},"less"),pastInput:o(function(){var p=this.matched.substr(0,this.matched.length-this.match.length);return(p.length>20?"...":"")+p.substr(-20).replace(/\n/g,"")},"pastInput"),upcomingInput:o(function(){var p=this.match;return p.length<20&&(p+=this._input.substr(0,20-p.length)),(p.substr(0,20)+(p.length>20?"...":"")).replace(/\n/g,"")},"upcomingInput"),showPosition:o(function(){var p=this.pastInput(),m=new Array(p.length+1).join("-");return p+this.upcomingInput()+` +`+m+"^"},"showPosition"),test_match:o(function(p,m){var g,y,v;if(this.options.backtrack_lexer&&(v={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(v.yylloc.range=this.yylloc.range.slice(0))),y=p[0].match(/(?:\r\n?|\n).*/g),y&&(this.yylineno+=y.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:y?y[y.length-1].length-y[y.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+p[0].length},this.yytext+=p[0],this.match+=p[0],this.matches=p,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(p[0].length),this.matched+=p[0],g=this.performAction.call(this,this.yy,this,m,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),g)return g;if(this._backtrack){for(var x in v)this[x]=v[x];return!1}return!1},"test_match"),next:o(function(){if(this.done)return this.EOF;this._input||(this.done=!0);var p,m,g,y;this._more||(this.yytext="",this.match="");for(var v=this._currentRules(),x=0;xm[0].length)){if(m=g,y=x,this.options.backtrack_lexer){if(p=this.test_match(g,v[x]),p!==!1)return p;if(this._backtrack){m=!1;continue}else return!1}else if(!this.options.flex)break}return m?(p=this.test_match(m,v[y]),p!==!1?p:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text. +`+this.showPosition(),{text:"",token:null,line:this.yylineno})},"next"),lex:o(function(){var m=this.next();return m||this.lex()},"lex"),begin:o(function(m){this.conditionStack.push(m)},"begin"),popState:o(function(){var m=this.conditionStack.length-1;return m>0?this.conditionStack.pop():this.conditionStack[0]},"popState"),_currentRules:o(function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},"_currentRules"),topState:o(function(m){return m=this.conditionStack.length-1-Math.abs(m||0),m>=0?this.conditionStack[m]:"INITIAL"},"topState"),pushState:o(function(m){this.begin(m)},"pushState"),stateStackSize:o(function(){return this.conditionStack.length},"stateStackSize"),options:{"case-insensitive":!0},performAction:o(function(m,g,y,v){var x=v;switch(y){case 0:break;case 1:break;case 2:return 10;case 3:break;case 4:break;case 5:return 4;case 6:return 11;case 7:return this.begin("acc_title"),12;break;case 8:return this.popState(),"acc_title_value";break;case 9:return this.begin("acc_descr"),14;break;case 10:return this.popState(),"acc_descr_value";break;case 11:this.begin("acc_descr_multiline");break;case 12:this.popState();break;case 13:return"acc_descr_multiline_value";case 14:return 17;case 15:return 18;case 16:return 19;case 17:return":";case 18:return 6;case 19:return"INVALID"}},"anonymous"),rules:[/^(?:%(?!\{)[^\n]*)/i,/^(?:[^\}]%%[^\n]*)/i,/^(?:[\n]+)/i,/^(?:\s+)/i,/^(?:#[^\n]*)/i,/^(?:journey\b)/i,/^(?:title\s[^#\n;]+)/i,/^(?:accTitle\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*\{\s*)/i,/^(?:[\}])/i,/^(?:[^\}]*)/i,/^(?:section\s[^#:\n;]+)/i,/^(?:[^#:\n;]+)/i,/^(?::[^#\n;]+)/i,/^(?::)/i,/^(?:$)/i,/^(?:.)/i],conditions:{acc_descr_multiline:{rules:[12,13],inclusive:!1},acc_descr:{rules:[10],inclusive:!1},acc_title:{rules:[8],inclusive:!1},INITIAL:{rules:[0,1,2,3,4,5,6,7,9,11,14,15,16,17,18,19],inclusive:!0}}};return d}();u.lexer=h;function f(){this.yy={}}return o(f,"Parser"),f.prototype=u,u.Parser=f,new f}();dP.parser=dP;_0e=dP});var a1,pP,Vx,Ux,fYe,dYe,pYe,mYe,gYe,yYe,vYe,D0e,xYe,mP,N0e=M(()=>{"use strict";Vt();Ai();a1="",pP=[],Vx=[],Ux=[],fYe=o(function(){pP.length=0,Vx.length=0,a1="",Ux.length=0,Lr()},"clear"),dYe=o(function(t){a1=t,pP.push(t)},"addSection"),pYe=o(function(){return pP},"getSections"),mYe=o(function(){let t=D0e(),e=100,r=0;for(;!t&&r{r.people&&t.push(...r.people)}),[...new Set(t)].sort()},"updateActors"),yYe=o(function(t,e){let r=e.substr(1).split(":"),n=0,i=[];r.length===1?(n=Number(r[0]),i=[]):(n=Number(r[0]),i=r[1].split(","));let a=i.map(l=>l.trim()),s={section:a1,type:a1,people:a,task:t,score:n};Ux.push(s)},"addTask"),vYe=o(function(t){let e={section:a1,type:a1,description:t,task:t,classes:[]};Vx.push(e)},"addTaskOrg"),D0e=o(function(){let t=o(function(r){return Ux[r].processed},"compileTask"),e=!0;for(let[r,n]of Ux.entries())t(r),e=e&&n.processed;return e},"compileTasks"),xYe=o(function(){return gYe()},"getActors"),mP={getConfig:o(()=>pe().journey,"getConfig"),clear:fYe,setDiagramTitle:cn,getDiagramTitle:Jr,setAccTitle:Mr,getAccTitle:Br,setAccDescription:Fr,getAccDescription:zr,addSection:dYe,getSections:pYe,getTasks:mYe,addTask:yYe,addTaskOrg:vYe,getActors:xYe}});var bYe,R0e,M0e=M(()=>{"use strict";bYe=o(t=>`.label { + font-family: 'trebuchet ms', verdana, arial, sans-serif; + font-family: var(--mermaid-font-family); + color: ${t.textColor}; + } + .mouth { + stroke: #666; + } + + line { + stroke: ${t.textColor} + } + + .legend { + fill: ${t.textColor}; + } + + .label text { + fill: #333; + } + .label { + color: ${t.textColor} + } + + .face { + ${t.faceColor?`fill: ${t.faceColor}`:"fill: #FFF8DC"}; + stroke: #999; + } + + .node rect, + .node circle, + .node ellipse, + .node polygon, + .node path { + fill: ${t.mainBkg}; + stroke: ${t.nodeBorder}; + stroke-width: 1px; + } + + .node .label { + text-align: center; + } + .node.clickable { + cursor: pointer; + } + + .arrowheadPath { + fill: ${t.arrowheadColor}; + } + + .edgePath .path { + stroke: ${t.lineColor}; + stroke-width: 1.5px; + } + + .flowchart-link { + stroke: ${t.lineColor}; + fill: none; + } + + .edgeLabel { + background-color: ${t.edgeLabelBackground}; + rect { + opacity: 0.5; + } + text-align: center; + } + + .cluster rect { + } + + .cluster text { + fill: ${t.titleColor}; + } + + div.mermaidTooltip { + position: absolute; + text-align: center; + max-width: 200px; + padding: 2px; + font-family: 'trebuchet ms', verdana, arial, sans-serif; + font-family: var(--mermaid-font-family); + font-size: 12px; + background: ${t.tertiaryColor}; + border: 1px solid ${t.border2}; + border-radius: 2px; + pointer-events: none; + z-index: 100; + } + + .task-type-0, .section-type-0 { + ${t.fillType0?`fill: ${t.fillType0}`:""}; + } + .task-type-1, .section-type-1 { + ${t.fillType0?`fill: ${t.fillType1}`:""}; + } + .task-type-2, .section-type-2 { + ${t.fillType0?`fill: ${t.fillType2}`:""}; + } + .task-type-3, .section-type-3 { + ${t.fillType0?`fill: ${t.fillType3}`:""}; + } + .task-type-4, .section-type-4 { + ${t.fillType0?`fill: ${t.fillType4}`:""}; + } + .task-type-5, .section-type-5 { + ${t.fillType0?`fill: ${t.fillType5}`:""}; + } + .task-type-6, .section-type-6 { + ${t.fillType0?`fill: ${t.fillType6}`:""}; + } + .task-type-7, .section-type-7 { + ${t.fillType0?`fill: ${t.fillType7}`:""}; + } + + .actor-0 { + ${t.actor0?`fill: ${t.actor0}`:""}; + } + .actor-1 { + ${t.actor1?`fill: ${t.actor1}`:""}; + } + .actor-2 { + ${t.actor2?`fill: ${t.actor2}`:""}; + } + .actor-3 { + ${t.actor3?`fill: ${t.actor3}`:""}; + } + .actor-4 { + ${t.actor4?`fill: ${t.actor4}`:""}; + } + .actor-5 { + ${t.actor5?`fill: ${t.actor5}`:""}; + } +`,"getStyles"),R0e=bYe});var gP,wYe,O0e,P0e,TYe,kYe,I0e,EYe,SYe,B0e,CYe,s1,F0e=M(()=>{"use strict";pr();lv();gP=o(function(t,e){return Sd(t,e)},"drawRect"),wYe=o(function(t,e){let n=t.append("circle").attr("cx",e.cx).attr("cy",e.cy).attr("class","face").attr("r",15).attr("stroke-width",2).attr("overflow","visible"),i=t.append("g");i.append("circle").attr("cx",e.cx-15/3).attr("cy",e.cy-15/3).attr("r",1.5).attr("stroke-width",2).attr("fill","#666").attr("stroke","#666"),i.append("circle").attr("cx",e.cx+15/3).attr("cy",e.cy-15/3).attr("r",1.5).attr("stroke-width",2).attr("fill","#666").attr("stroke","#666");function a(u){let h=Dl().startAngle(Math.PI/2).endAngle(3*(Math.PI/2)).innerRadius(7.5).outerRadius(6.8181818181818175);u.append("path").attr("class","mouth").attr("d",h).attr("transform","translate("+e.cx+","+(e.cy+2)+")")}o(a,"smile");function s(u){let h=Dl().startAngle(3*Math.PI/2).endAngle(5*(Math.PI/2)).innerRadius(7.5).outerRadius(6.8181818181818175);u.append("path").attr("class","mouth").attr("d",h).attr("transform","translate("+e.cx+","+(e.cy+7)+")")}o(s,"sad");function l(u){u.append("line").attr("class","mouth").attr("stroke",2).attr("x1",e.cx-5).attr("y1",e.cy+7).attr("x2",e.cx+5).attr("y2",e.cy+7).attr("class","mouth").attr("stroke-width","1px").attr("stroke","#666")}return o(l,"ambivalent"),e.score>3?a(i):e.score<3?s(i):l(i),n},"drawFace"),O0e=o(function(t,e){let r=t.append("circle");return r.attr("cx",e.cx),r.attr("cy",e.cy),r.attr("class","actor-"+e.pos),r.attr("fill",e.fill),r.attr("stroke",e.stroke),r.attr("r",e.r),r.class!==void 0&&r.attr("class",r.class),e.title!==void 0&&r.append("title").text(e.title),r},"drawCircle"),P0e=o(function(t,e){return AY(t,e)},"drawText"),TYe=o(function(t,e){function r(i,a,s,l,u){return i+","+a+" "+(i+s)+","+a+" "+(i+s)+","+(a+l-u)+" "+(i+s-u*1.2)+","+(a+l)+" "+i+","+(a+l)}o(r,"genPoints");let n=t.append("polygon");n.attr("points",r(e.x,e.y,50,20,7)),n.attr("class","labelBox"),e.y=e.y+e.labelMargin,e.x=e.x+.5*e.labelMargin,P0e(t,e)},"drawLabel"),kYe=o(function(t,e,r){let n=t.append("g"),i=Nl();i.x=e.x,i.y=e.y,i.fill=e.fill,i.width=r.width*e.taskCount+r.diagramMarginX*(e.taskCount-1),i.height=r.height,i.class="journey-section section-type-"+e.num,i.rx=3,i.ry=3,gP(n,i),B0e(r)(e.text,n,i.x,i.y,i.width,i.height,{class:"journey-section section-type-"+e.num},r,e.colour)},"drawSection"),I0e=-1,EYe=o(function(t,e,r){let n=e.x+r.width/2,i=t.append("g");I0e++;let a=300+5*30;i.append("line").attr("id","task"+I0e).attr("x1",n).attr("y1",e.y).attr("x2",n).attr("y2",a).attr("class","task-line").attr("stroke-width","1px").attr("stroke-dasharray","4 2").attr("stroke","#666"),wYe(i,{cx:n,cy:300+(5-e.score)*30,score:e.score});let s=Nl();s.x=e.x,s.y=e.y,s.fill=e.fill,s.width=r.width,s.height=r.height,s.class="task task-type-"+e.num,s.rx=3,s.ry=3,gP(i,s);let l=e.x+14;e.people.forEach(u=>{let h=e.actors[u].color,f={cx:l,cy:e.y,r:7,fill:h,stroke:"#000",title:u,pos:e.actors[u].position};O0e(i,f),l+=10}),B0e(r)(e.task,i,s.x,s.y,s.width,s.height,{class:"task"},r,e.colour)},"drawTask"),SYe=o(function(t,e){i5(t,e)},"drawBackgroundRect"),B0e=function(){function t(i,a,s,l,u,h,f,d){let p=a.append("text").attr("x",s+u/2).attr("y",l+h/2+5).style("font-color",d).style("text-anchor","middle").text(i);n(p,f)}o(t,"byText");function e(i,a,s,l,u,h,f,d,p){let{taskFontSize:m,taskFontFamily:g}=d,y=i.split(//gi);for(let v=0;v{let i=rh[n].color,a={cx:20,cy:r,r:7,fill:i,stroke:"#000",pos:rh[n].position};s1.drawCircle(t,a);let s={x:40,y:r+7,fill:"#666",text:n,textMargin:e.boxTextMargin|5};s1.drawText(t,s),r+=20})}var AYe,rh,r6,G0,LYe,ll,yP,z0e,DYe,vP,G0e=M(()=>{"use strict";pr();F0e();Vt();ai();AYe=o(function(t){Object.keys(t).forEach(function(r){r6[r]=t[r]})},"setConf"),rh={};o(_Ye,"drawActorLegend");r6=pe().journey,G0=r6.leftMargin,LYe=o(function(t,e,r,n){let i=pe().journey,a=pe().securityLevel,s;a==="sandbox"&&(s=Ve("#i"+e));let l=a==="sandbox"?Ve(s.nodes()[0].contentDocument.body):Ve("body");ll.init();let u=l.select("#"+e);s1.initGraphics(u);let h=n.db.getTasks(),f=n.db.getDiagramTitle(),d=n.db.getActors();for(let x in rh)delete rh[x];let p=0;d.forEach(x=>{rh[x]={color:i.actorColours[p%i.actorColours.length],position:p},p++}),_Ye(u),ll.insert(0,0,G0,Object.keys(rh).length*50),DYe(u,h,0);let m=ll.getBounds();f&&u.append("text").text(f).attr("x",G0).attr("font-size","4ex").attr("font-weight","bold").attr("y",25);let g=m.stopy-m.starty+2*i.diagramMarginY,y=G0+m.stopx+2*i.diagramMarginX;Zr(u,g,y,i.useMaxWidth),u.append("line").attr("x1",G0).attr("y1",i.height*4).attr("x2",y-G0-4).attr("y2",i.height*4).attr("stroke-width",4).attr("stroke","black").attr("marker-end","url(#arrowhead)");let v=f?70:0;u.attr("viewBox",`${m.startx} -25 ${y} ${g+v}`),u.attr("preserveAspectRatio","xMinYMin meet"),u.attr("height",g+v+25)},"draw"),ll={data:{startx:void 0,stopx:void 0,starty:void 0,stopy:void 0},verticalPos:0,sequenceItems:[],init:o(function(){this.sequenceItems=[],this.data={startx:void 0,stopx:void 0,starty:void 0,stopy:void 0},this.verticalPos=0},"init"),updateVal:o(function(t,e,r,n){t[e]===void 0?t[e]=r:t[e]=n(r,t[e])},"updateVal"),updateBounds:o(function(t,e,r,n){let i=pe().journey,a=this,s=0;function l(u){return o(function(f){s++;let d=a.sequenceItems.length-s+1;a.updateVal(f,"starty",e-d*i.boxMargin,Math.min),a.updateVal(f,"stopy",n+d*i.boxMargin,Math.max),a.updateVal(ll.data,"startx",t-d*i.boxMargin,Math.min),a.updateVal(ll.data,"stopx",r+d*i.boxMargin,Math.max),u!=="activation"&&(a.updateVal(f,"startx",t-d*i.boxMargin,Math.min),a.updateVal(f,"stopx",r+d*i.boxMargin,Math.max),a.updateVal(ll.data,"starty",e-d*i.boxMargin,Math.min),a.updateVal(ll.data,"stopy",n+d*i.boxMargin,Math.max))},"updateItemBounds")}o(l,"updateFn"),this.sequenceItems.forEach(l())},"updateBounds"),insert:o(function(t,e,r,n){let i=Math.min(t,r),a=Math.max(t,r),s=Math.min(e,n),l=Math.max(e,n);this.updateVal(ll.data,"startx",i,Math.min),this.updateVal(ll.data,"starty",s,Math.min),this.updateVal(ll.data,"stopx",a,Math.max),this.updateVal(ll.data,"stopy",l,Math.max),this.updateBounds(i,s,a,l)},"insert"),bumpVerticalPos:o(function(t){this.verticalPos=this.verticalPos+t,this.data.stopy=this.verticalPos},"bumpVerticalPos"),getVerticalPos:o(function(){return this.verticalPos},"getVerticalPos"),getBounds:o(function(){return this.data},"getBounds")},yP=r6.sectionFills,z0e=r6.sectionColours,DYe=o(function(t,e,r){let n=pe().journey,i="",a=n.height*2+n.diagramMarginY,s=r+a,l=0,u="#CCC",h="black",f=0;for(let[d,p]of e.entries()){if(i!==p.section){u=yP[l%yP.length],f=l%yP.length,h=z0e[l%z0e.length];let g=0,y=p.section;for(let x=d;x(rh[y]&&(g[y]=rh[y]),g),{});p.x=d*n.taskMargin+d*n.width+G0,p.y=s,p.width=n.diagramMarginX,p.height=n.diagramMarginY,p.colour=h,p.fill=u,p.num=f,p.actors=m,s1.drawTask(t,p,n),ll.insert(p.x,p.y,p.x+p.width+n.taskMargin,300+5*30)}},"drawTasks"),vP={setConf:AYe,draw:LYe}});var $0e={};vr($0e,{diagram:()=>NYe});var NYe,V0e=M(()=>{"use strict";L0e();N0e();M0e();G0e();NYe={parser:_0e,db:mP,renderer:vP,styles:R0e,init:o(t=>{vP.setConf(t.journey),mP.clear()},"init")}});var bP,j0e,K0e=M(()=>{"use strict";bP=function(){var t=o(function(p,m,g,y){for(g=g||{},y=p.length;y--;g[p[y]]=m);return g},"o"),e=[6,8,10,11,12,14,16,17,20,21],r=[1,9],n=[1,10],i=[1,11],a=[1,12],s=[1,13],l=[1,16],u=[1,17],h={trace:o(function(){},"trace"),yy:{},symbols_:{error:2,start:3,timeline:4,document:5,EOF:6,line:7,SPACE:8,statement:9,NEWLINE:10,title:11,acc_title:12,acc_title_value:13,acc_descr:14,acc_descr_value:15,acc_descr_multiline_value:16,section:17,period_statement:18,event_statement:19,period:20,event:21,$accept:0,$end:1},terminals_:{2:"error",4:"timeline",6:"EOF",8:"SPACE",10:"NEWLINE",11:"title",12:"acc_title",13:"acc_title_value",14:"acc_descr",15:"acc_descr_value",16:"acc_descr_multiline_value",17:"section",20:"period",21:"event"},productions_:[0,[3,3],[5,0],[5,2],[7,2],[7,1],[7,1],[7,1],[9,1],[9,2],[9,2],[9,1],[9,1],[9,1],[9,1],[18,1],[19,1]],performAction:o(function(m,g,y,v,x,b,w){var _=b.length-1;switch(x){case 1:return b[_-1];case 2:this.$=[];break;case 3:b[_-1].push(b[_]),this.$=b[_-1];break;case 4:case 5:this.$=b[_];break;case 6:case 7:this.$=[];break;case 8:v.getCommonDb().setDiagramTitle(b[_].substr(6)),this.$=b[_].substr(6);break;case 9:this.$=b[_].trim(),v.getCommonDb().setAccTitle(this.$);break;case 10:case 11:this.$=b[_].trim(),v.getCommonDb().setAccDescription(this.$);break;case 12:v.addSection(b[_].substr(8)),this.$=b[_].substr(8);break;case 15:v.addTask(b[_],0,""),this.$=b[_];break;case 16:v.addEvent(b[_].substr(2)),this.$=b[_];break}},"anonymous"),table:[{3:1,4:[1,2]},{1:[3]},t(e,[2,2],{5:3}),{6:[1,4],7:5,8:[1,6],9:7,10:[1,8],11:r,12:n,14:i,16:a,17:s,18:14,19:15,20:l,21:u},t(e,[2,7],{1:[2,1]}),t(e,[2,3]),{9:18,11:r,12:n,14:i,16:a,17:s,18:14,19:15,20:l,21:u},t(e,[2,5]),t(e,[2,6]),t(e,[2,8]),{13:[1,19]},{15:[1,20]},t(e,[2,11]),t(e,[2,12]),t(e,[2,13]),t(e,[2,14]),t(e,[2,15]),t(e,[2,16]),t(e,[2,4]),t(e,[2,9]),t(e,[2,10])],defaultActions:{},parseError:o(function(m,g){if(g.recoverable)this.trace(m);else{var y=new Error(m);throw y.hash=g,y}},"parseError"),parse:o(function(m){var g=this,y=[0],v=[],x=[null],b=[],w=this.table,_="",T=0,E=0,L=0,S=2,A=1,I=b.slice.call(arguments,1),D=Object.create(this.lexer),k={yy:{}};for(var R in this.yy)Object.prototype.hasOwnProperty.call(this.yy,R)&&(k.yy[R]=this.yy[R]);D.setInput(m,k.yy),k.yy.lexer=D,k.yy.parser=this,typeof D.yylloc>"u"&&(D.yylloc={});var C=D.yylloc;b.push(C);var O=D.options&&D.options.ranges;typeof k.yy.parseError=="function"?this.parseError=k.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function N(q){y.length=y.length-2*q,x.length=x.length-q,b.length=b.length-q}o(N,"popStack");function P(){var q;return q=v.pop()||D.lex()||A,typeof q!="number"&&(q instanceof Array&&(v=q,q=v.pop()),q=g.symbols_[q]||q),q}o(P,"lex");for(var F,B,G,z,W,Z,j={},oe,K,ee,J;;){if(G=y[y.length-1],this.defaultActions[G]?z=this.defaultActions[G]:((F===null||typeof F>"u")&&(F=P()),z=w[G]&&w[G][F]),typeof z>"u"||!z.length||!z[0]){var H="";J=[];for(oe in w[G])this.terminals_[oe]&&oe>S&&J.push("'"+this.terminals_[oe]+"'");D.showPosition?H="Parse error on line "+(T+1)+`: +`+D.showPosition()+` +Expecting `+J.join(", ")+", got '"+(this.terminals_[F]||F)+"'":H="Parse error on line "+(T+1)+": Unexpected "+(F==A?"end of input":"'"+(this.terminals_[F]||F)+"'"),this.parseError(H,{text:D.match,token:this.terminals_[F]||F,line:D.yylineno,loc:C,expected:J})}if(z[0]instanceof Array&&z.length>1)throw new Error("Parse Error: multiple actions possible at state: "+G+", token: "+F);switch(z[0]){case 1:y.push(F),x.push(D.yytext),b.push(D.yylloc),y.push(z[1]),F=null,B?(F=B,B=null):(E=D.yyleng,_=D.yytext,T=D.yylineno,C=D.yylloc,L>0&&L--);break;case 2:if(K=this.productions_[z[1]][1],j.$=x[x.length-K],j._$={first_line:b[b.length-(K||1)].first_line,last_line:b[b.length-1].last_line,first_column:b[b.length-(K||1)].first_column,last_column:b[b.length-1].last_column},O&&(j._$.range=[b[b.length-(K||1)].range[0],b[b.length-1].range[1]]),Z=this.performAction.apply(j,[_,E,T,k.yy,z[1],x,b].concat(I)),typeof Z<"u")return Z;K&&(y=y.slice(0,-1*K*2),x=x.slice(0,-1*K),b=b.slice(0,-1*K)),y.push(this.productions_[z[1]][0]),x.push(j.$),b.push(j._$),ee=w[y[y.length-2]][y[y.length-1]],y.push(ee);break;case 3:return!0}}return!0},"parse")},f=function(){var p={EOF:1,parseError:o(function(g,y){if(this.yy.parser)this.yy.parser.parseError(g,y);else throw new Error(g)},"parseError"),setInput:o(function(m,g){return this.yy=g||this.yy||{},this._input=m,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},"setInput"),input:o(function(){var m=this._input[0];this.yytext+=m,this.yyleng++,this.offset++,this.match+=m,this.matched+=m;var g=m.match(/(?:\r\n?|\n).*/g);return g?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),m},"input"),unput:o(function(m){var g=m.length,y=m.split(/(?:\r\n?|\n)/g);this._input=m+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-g),this.offset-=g;var v=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),y.length-1&&(this.yylineno-=y.length-1);var x=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:y?(y.length===v.length?this.yylloc.first_column:0)+v[v.length-y.length].length-y[0].length:this.yylloc.first_column-g},this.options.ranges&&(this.yylloc.range=[x[0],x[0]+this.yyleng-g]),this.yyleng=this.yytext.length,this},"unput"),more:o(function(){return this._more=!0,this},"more"),reject:o(function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true). +`+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},"reject"),less:o(function(m){this.unput(this.match.slice(m))},"less"),pastInput:o(function(){var m=this.matched.substr(0,this.matched.length-this.match.length);return(m.length>20?"...":"")+m.substr(-20).replace(/\n/g,"")},"pastInput"),upcomingInput:o(function(){var m=this.match;return m.length<20&&(m+=this._input.substr(0,20-m.length)),(m.substr(0,20)+(m.length>20?"...":"")).replace(/\n/g,"")},"upcomingInput"),showPosition:o(function(){var m=this.pastInput(),g=new Array(m.length+1).join("-");return m+this.upcomingInput()+` +`+g+"^"},"showPosition"),test_match:o(function(m,g){var y,v,x;if(this.options.backtrack_lexer&&(x={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(x.yylloc.range=this.yylloc.range.slice(0))),v=m[0].match(/(?:\r\n?|\n).*/g),v&&(this.yylineno+=v.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:v?v[v.length-1].length-v[v.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+m[0].length},this.yytext+=m[0],this.match+=m[0],this.matches=m,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(m[0].length),this.matched+=m[0],y=this.performAction.call(this,this.yy,this,g,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),y)return y;if(this._backtrack){for(var b in x)this[b]=x[b];return!1}return!1},"test_match"),next:o(function(){if(this.done)return this.EOF;this._input||(this.done=!0);var m,g,y,v;this._more||(this.yytext="",this.match="");for(var x=this._currentRules(),b=0;bg[0].length)){if(g=y,v=b,this.options.backtrack_lexer){if(m=this.test_match(y,x[b]),m!==!1)return m;if(this._backtrack){g=!1;continue}else return!1}else if(!this.options.flex)break}return g?(m=this.test_match(g,x[v]),m!==!1?m:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text. +`+this.showPosition(),{text:"",token:null,line:this.yylineno})},"next"),lex:o(function(){var g=this.next();return g||this.lex()},"lex"),begin:o(function(g){this.conditionStack.push(g)},"begin"),popState:o(function(){var g=this.conditionStack.length-1;return g>0?this.conditionStack.pop():this.conditionStack[0]},"popState"),_currentRules:o(function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},"_currentRules"),topState:o(function(g){return g=this.conditionStack.length-1-Math.abs(g||0),g>=0?this.conditionStack[g]:"INITIAL"},"topState"),pushState:o(function(g){this.begin(g)},"pushState"),stateStackSize:o(function(){return this.conditionStack.length},"stateStackSize"),options:{"case-insensitive":!0},performAction:o(function(g,y,v,x){var b=x;switch(v){case 0:break;case 1:break;case 2:return 10;case 3:break;case 4:break;case 5:return 4;case 6:return 11;case 7:return this.begin("acc_title"),12;break;case 8:return this.popState(),"acc_title_value";break;case 9:return this.begin("acc_descr"),14;break;case 10:return this.popState(),"acc_descr_value";break;case 11:this.begin("acc_descr_multiline");break;case 12:this.popState();break;case 13:return"acc_descr_multiline_value";case 14:return 17;case 15:return 21;case 16:return 20;case 17:return 6;case 18:return"INVALID"}},"anonymous"),rules:[/^(?:%(?!\{)[^\n]*)/i,/^(?:[^\}]%%[^\n]*)/i,/^(?:[\n]+)/i,/^(?:\s+)/i,/^(?:#[^\n]*)/i,/^(?:timeline\b)/i,/^(?:title\s[^\n]+)/i,/^(?:accTitle\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*\{\s*)/i,/^(?:[\}])/i,/^(?:[^\}]*)/i,/^(?:section\s[^:\n]+)/i,/^(?::\s[^:\n]+)/i,/^(?:[^#:\n]+)/i,/^(?:$)/i,/^(?:.)/i],conditions:{acc_descr_multiline:{rules:[12,13],inclusive:!1},acc_descr:{rules:[10],inclusive:!1},acc_title:{rules:[8],inclusive:!1},INITIAL:{rules:[0,1,2,3,4,5,6,7,9,11,14,15,16,17,18],inclusive:!0}}};return p}();h.lexer=f;function d(){this.yy={}}return o(d,"Parser"),d.prototype=h,h.Parser=d,new d}();bP.parser=bP;j0e=bP});var TP={};vr(TP,{addEvent:()=>ape,addSection:()=>tpe,addTask:()=>ipe,addTaskOrg:()=>spe,clear:()=>epe,default:()=>GYe,getCommonDb:()=>J0e,getSections:()=>rpe,getTasks:()=>npe});var o1,Z0e,wP,n6,l1,J0e,epe,tpe,rpe,npe,ipe,ape,spe,Q0e,GYe,ope=M(()=>{"use strict";Ai();o1="",Z0e=0,wP=[],n6=[],l1=[],J0e=o(()=>xy,"getCommonDb"),epe=o(function(){wP.length=0,n6.length=0,o1="",l1.length=0,Lr()},"clear"),tpe=o(function(t){o1=t,wP.push(t)},"addSection"),rpe=o(function(){return wP},"getSections"),npe=o(function(){let t=Q0e(),e=100,r=0;for(;!t&&rr.id===Z0e-1).events.push(t)},"addEvent"),spe=o(function(t){let e={section:o1,type:o1,description:t,task:t,classes:[]};n6.push(e)},"addTaskOrg"),Q0e=o(function(){let t=o(function(r){return l1[r].processed},"compileTask"),e=!0;for(let[r,n]of l1.entries())t(r),e=e&&n.processed;return e},"compileTasks"),GYe={clear:epe,getCommonDb:J0e,addSection:tpe,getSections:rpe,getTasks:npe,addTask:ipe,addTaskOrg:spe,addEvent:ape}});function hpe(t,e){t.each(function(){var r=Ve(this),n=r.text().split(/(\s+|
    )/).reverse(),i,a=[],s=1.1,l=r.attr("y"),u=parseFloat(r.attr("dy")),h=r.text(null).append("tspan").attr("x",0).attr("y",l).attr("dy",u+"em");for(let f=0;fe||i==="
    ")&&(a.pop(),h.text(a.join(" ").trim()),i==="
    "?a=[""]:a=[i],h=r.append("tspan").attr("x",0).attr("y",l).attr("dy",s+"em").text(i))})}var $Ye,i6,VYe,UYe,cpe,HYe,WYe,lpe,YYe,qYe,XYe,kP,upe,jYe,KYe,QYe,ZYe,Af,fpe=M(()=>{"use strict";pr();$Ye=12,i6=o(function(t,e){let r=t.append("rect");return r.attr("x",e.x),r.attr("y",e.y),r.attr("fill",e.fill),r.attr("stroke",e.stroke),r.attr("width",e.width),r.attr("height",e.height),r.attr("rx",e.rx),r.attr("ry",e.ry),e.class!==void 0&&r.attr("class",e.class),r},"drawRect"),VYe=o(function(t,e){let n=t.append("circle").attr("cx",e.cx).attr("cy",e.cy).attr("class","face").attr("r",15).attr("stroke-width",2).attr("overflow","visible"),i=t.append("g");i.append("circle").attr("cx",e.cx-15/3).attr("cy",e.cy-15/3).attr("r",1.5).attr("stroke-width",2).attr("fill","#666").attr("stroke","#666"),i.append("circle").attr("cx",e.cx+15/3).attr("cy",e.cy-15/3).attr("r",1.5).attr("stroke-width",2).attr("fill","#666").attr("stroke","#666");function a(u){let h=Dl().startAngle(Math.PI/2).endAngle(3*(Math.PI/2)).innerRadius(7.5).outerRadius(6.8181818181818175);u.append("path").attr("class","mouth").attr("d",h).attr("transform","translate("+e.cx+","+(e.cy+2)+")")}o(a,"smile");function s(u){let h=Dl().startAngle(3*Math.PI/2).endAngle(5*(Math.PI/2)).innerRadius(7.5).outerRadius(6.8181818181818175);u.append("path").attr("class","mouth").attr("d",h).attr("transform","translate("+e.cx+","+(e.cy+7)+")")}o(s,"sad");function l(u){u.append("line").attr("class","mouth").attr("stroke",2).attr("x1",e.cx-5).attr("y1",e.cy+7).attr("x2",e.cx+5).attr("y2",e.cy+7).attr("class","mouth").attr("stroke-width","1px").attr("stroke","#666")}return o(l,"ambivalent"),e.score>3?a(i):e.score<3?s(i):l(i),n},"drawFace"),UYe=o(function(t,e){let r=t.append("circle");return r.attr("cx",e.cx),r.attr("cy",e.cy),r.attr("class","actor-"+e.pos),r.attr("fill",e.fill),r.attr("stroke",e.stroke),r.attr("r",e.r),r.class!==void 0&&r.attr("class",r.class),e.title!==void 0&&r.append("title").text(e.title),r},"drawCircle"),cpe=o(function(t,e){let r=e.text.replace(//gi," "),n=t.append("text");n.attr("x",e.x),n.attr("y",e.y),n.attr("class","legend"),n.style("text-anchor",e.anchor),e.class!==void 0&&n.attr("class",e.class);let i=n.append("tspan");return i.attr("x",e.x+e.textMargin*2),i.text(r),n},"drawText"),HYe=o(function(t,e){function r(i,a,s,l,u){return i+","+a+" "+(i+s)+","+a+" "+(i+s)+","+(a+l-u)+" "+(i+s-u*1.2)+","+(a+l)+" "+i+","+(a+l)}o(r,"genPoints");let n=t.append("polygon");n.attr("points",r(e.x,e.y,50,20,7)),n.attr("class","labelBox"),e.y=e.y+e.labelMargin,e.x=e.x+.5*e.labelMargin,cpe(t,e)},"drawLabel"),WYe=o(function(t,e,r){let n=t.append("g"),i=kP();i.x=e.x,i.y=e.y,i.fill=e.fill,i.width=r.width,i.height=r.height,i.class="journey-section section-type-"+e.num,i.rx=3,i.ry=3,i6(n,i),upe(r)(e.text,n,i.x,i.y,i.width,i.height,{class:"journey-section section-type-"+e.num},r,e.colour)},"drawSection"),lpe=-1,YYe=o(function(t,e,r){let n=e.x+r.width/2,i=t.append("g");lpe++;let a=300+5*30;i.append("line").attr("id","task"+lpe).attr("x1",n).attr("y1",e.y).attr("x2",n).attr("y2",a).attr("class","task-line").attr("stroke-width","1px").attr("stroke-dasharray","4 2").attr("stroke","#666"),VYe(i,{cx:n,cy:300+(5-e.score)*30,score:e.score});let s=kP();s.x=e.x,s.y=e.y,s.fill=e.fill,s.width=r.width,s.height=r.height,s.class="task task-type-"+e.num,s.rx=3,s.ry=3,i6(i,s),upe(r)(e.task,i,s.x,s.y,s.width,s.height,{class:"task"},r,e.colour)},"drawTask"),qYe=o(function(t,e){i6(t,{x:e.startx,y:e.starty,width:e.stopx-e.startx,height:e.stopy-e.starty,fill:e.fill,class:"rect"}).lower()},"drawBackgroundRect"),XYe=o(function(){return{x:0,y:0,fill:void 0,"text-anchor":"start",width:100,height:100,textMargin:0,rx:0,ry:0}},"getTextObj"),kP=o(function(){return{x:0,y:0,width:100,anchor:"start",height:100,rx:0,ry:0}},"getNoteRect"),upe=function(){function t(i,a,s,l,u,h,f,d){let p=a.append("text").attr("x",s+u/2).attr("y",l+h/2+5).style("font-color",d).style("text-anchor","middle").text(i);n(p,f)}o(t,"byText");function e(i,a,s,l,u,h,f,d,p){let{taskFontSize:m,taskFontFamily:g}=d,y=i.split(//gi);for(let v=0;v{"use strict";pr();fpe();ut();Vt();ai();JYe=o(function(t,e,r,n){let i=pe(),a=i.leftMargin??50;Y.debug("timeline",n.db);let s=i.securityLevel,l;s==="sandbox"&&(l=Ve("#i"+e));let h=(s==="sandbox"?Ve(l.nodes()[0].contentDocument.body):Ve("body")).select("#"+e);h.append("g");let f=n.db.getTasks(),d=n.db.getCommonDb().getDiagramTitle();Y.debug("task",f),Af.initGraphics(h);let p=n.db.getSections();Y.debug("sections",p);let m=0,g=0,y=0,v=0,x=50+a,b=50;v=50;let w=0,_=!0;p.forEach(function(A){let I={number:w,descr:A,section:w,width:150,padding:20,maxHeight:m},D=Af.getVirtualNodeHeight(h,I,i);Y.debug("sectionHeight before draw",D),m=Math.max(m,D+20)});let T=0,E=0;Y.debug("tasks.length",f.length);for(let[A,I]of f.entries()){let D={number:A,descr:I,section:I.section,width:150,padding:20,maxHeight:g},k=Af.getVirtualNodeHeight(h,D,i);Y.debug("taskHeight before draw",k),g=Math.max(g,k+20),T=Math.max(T,I.events.length);let R=0;for(let C of I.events){let O={descr:C,section:I.section,number:I.section,width:150,padding:20,maxHeight:50};R+=Af.getVirtualNodeHeight(h,O,i)}E=Math.max(E,R)}Y.debug("maxSectionHeight before draw",m),Y.debug("maxTaskHeight before draw",g),p&&p.length>0?p.forEach(A=>{let I=f.filter(C=>C.section===A),D={number:w,descr:A,section:w,width:200*Math.max(I.length,1)-50,padding:20,maxHeight:m};Y.debug("sectionNode",D);let k=h.append("g"),R=Af.drawNode(k,D,w,i);Y.debug("sectionNode output",R),k.attr("transform",`translate(${x}, ${v})`),b+=m+50,I.length>0&&dpe(h,I,w,x,b,g,i,T,E,m,!1),x+=200*Math.max(I.length,1),b=v,w++}):(_=!1,dpe(h,f,w,x,b,g,i,T,E,m,!0));let L=h.node().getBBox();Y.debug("bounds",L),d&&h.append("text").text(d).attr("x",L.width/2-a).attr("font-size","4ex").attr("font-weight","bold").attr("y",20),y=_?m+g+150:g+100,h.append("g").attr("class","lineWrapper").append("line").attr("x1",a).attr("y1",y).attr("x2",L.width+3*a).attr("y2",y).attr("stroke-width",4).attr("stroke","black").attr("marker-end","url(#arrowhead)"),Io(void 0,h,i.timeline?.padding??50,i.timeline?.useMaxWidth??!1)},"draw"),dpe=o(function(t,e,r,n,i,a,s,l,u,h,f){for(let d of e){let p={descr:d.task,section:r,number:r,width:150,padding:20,maxHeight:a};Y.debug("taskNode",p);let m=t.append("g").attr("class","taskWrapper"),y=Af.drawNode(m,p,r,s).height;if(Y.debug("taskHeight after draw",y),m.attr("transform",`translate(${n}, ${i})`),a=Math.max(a,y),d.events){let v=t.append("g").attr("class","lineWrapper"),x=a;i+=100,x=x+eqe(t,d.events,r,n,i,s),i-=100,v.append("line").attr("x1",n+190/2).attr("y1",i+a).attr("x2",n+190/2).attr("y2",i+a+(f?a:h)+u+120).attr("stroke-width",2).attr("stroke","black").attr("marker-end","url(#arrowhead)").attr("stroke-dasharray","5,5")}n=n+200,f&&!s.timeline?.disableMulticolor&&r++}i=i-10},"drawTasks"),eqe=o(function(t,e,r,n,i,a){let s=0,l=i;i=i+100;for(let u of e){let h={descr:u,section:r,number:r,width:150,padding:20,maxHeight:50};Y.debug("eventNode",h);let f=t.append("g").attr("class","eventWrapper"),p=Af.drawNode(f,h,r,a).height;s=s+p,f.attr("transform",`translate(${n}, ${i})`),i=i+10+p}return i=l,s},"drawEvents"),ppe={setConf:o(()=>{},"setConf"),draw:JYe}});var tqe,rqe,gpe,ype=M(()=>{"use strict";Lo();tqe=o(t=>{let e="";for(let r=0;r` + .edge { + stroke-width: 3; + } + ${tqe(t)} + .section-root rect, .section-root path, .section-root circle { + fill: ${t.git0}; + } + .section-root text { + fill: ${t.gitBranchLabel0}; + } + .icon-container { + height:100%; + display: flex; + justify-content: center; + align-items: center; + } + .edge { + fill: none; + } + .eventWrapper { + filter: brightness(120%); + } +`,"getStyles"),gpe=rqe});var vpe={};vr(vpe,{diagram:()=>nqe});var nqe,xpe=M(()=>{"use strict";K0e();ope();mpe();ype();nqe={db:TP,renderer:ppe,parser:j0e,styles:gpe}});var EP,Tpe,kpe=M(()=>{"use strict";EP=function(){var t=o(function(_,T,E,L){for(E=E||{},L=_.length;L--;E[_[L]]=T);return E},"o"),e=[1,4],r=[1,13],n=[1,12],i=[1,15],a=[1,16],s=[1,20],l=[1,19],u=[6,7,8],h=[1,26],f=[1,24],d=[1,25],p=[6,7,11],m=[1,6,13,15,16,19,22],g=[1,33],y=[1,34],v=[1,6,7,11,13,15,16,19,22],x={trace:o(function(){},"trace"),yy:{},symbols_:{error:2,start:3,mindMap:4,spaceLines:5,SPACELINE:6,NL:7,MINDMAP:8,document:9,stop:10,EOF:11,statement:12,SPACELIST:13,node:14,ICON:15,CLASS:16,nodeWithId:17,nodeWithoutId:18,NODE_DSTART:19,NODE_DESCR:20,NODE_DEND:21,NODE_ID:22,$accept:0,$end:1},terminals_:{2:"error",6:"SPACELINE",7:"NL",8:"MINDMAP",11:"EOF",13:"SPACELIST",15:"ICON",16:"CLASS",19:"NODE_DSTART",20:"NODE_DESCR",21:"NODE_DEND",22:"NODE_ID"},productions_:[0,[3,1],[3,2],[5,1],[5,2],[5,2],[4,2],[4,3],[10,1],[10,1],[10,1],[10,2],[10,2],[9,3],[9,2],[12,2],[12,2],[12,2],[12,1],[12,1],[12,1],[12,1],[12,1],[14,1],[14,1],[18,3],[17,1],[17,4]],performAction:o(function(T,E,L,S,A,I,D){var k=I.length-1;switch(A){case 6:case 7:return S;case 8:S.getLogger().trace("Stop NL ");break;case 9:S.getLogger().trace("Stop EOF ");break;case 11:S.getLogger().trace("Stop NL2 ");break;case 12:S.getLogger().trace("Stop EOF2 ");break;case 15:S.getLogger().info("Node: ",I[k].id),S.addNode(I[k-1].length,I[k].id,I[k].descr,I[k].type);break;case 16:S.getLogger().trace("Icon: ",I[k]),S.decorateNode({icon:I[k]});break;case 17:case 21:S.decorateNode({class:I[k]});break;case 18:S.getLogger().trace("SPACELIST");break;case 19:S.getLogger().trace("Node: ",I[k].id),S.addNode(0,I[k].id,I[k].descr,I[k].type);break;case 20:S.decorateNode({icon:I[k]});break;case 25:S.getLogger().trace("node found ..",I[k-2]),this.$={id:I[k-1],descr:I[k-1],type:S.getType(I[k-2],I[k])};break;case 26:this.$={id:I[k],descr:I[k],type:S.nodeType.DEFAULT};break;case 27:S.getLogger().trace("node found ..",I[k-3]),this.$={id:I[k-3],descr:I[k-1],type:S.getType(I[k-2],I[k])};break}},"anonymous"),table:[{3:1,4:2,5:3,6:[1,5],8:e},{1:[3]},{1:[2,1]},{4:6,6:[1,7],7:[1,8],8:e},{6:r,7:[1,10],9:9,12:11,13:n,14:14,15:i,16:a,17:17,18:18,19:s,22:l},t(u,[2,3]),{1:[2,2]},t(u,[2,4]),t(u,[2,5]),{1:[2,6],6:r,12:21,13:n,14:14,15:i,16:a,17:17,18:18,19:s,22:l},{6:r,9:22,12:11,13:n,14:14,15:i,16:a,17:17,18:18,19:s,22:l},{6:h,7:f,10:23,11:d},t(p,[2,22],{17:17,18:18,14:27,15:[1,28],16:[1,29],19:s,22:l}),t(p,[2,18]),t(p,[2,19]),t(p,[2,20]),t(p,[2,21]),t(p,[2,23]),t(p,[2,24]),t(p,[2,26],{19:[1,30]}),{20:[1,31]},{6:h,7:f,10:32,11:d},{1:[2,7],6:r,12:21,13:n,14:14,15:i,16:a,17:17,18:18,19:s,22:l},t(m,[2,14],{7:g,11:y}),t(v,[2,8]),t(v,[2,9]),t(v,[2,10]),t(p,[2,15]),t(p,[2,16]),t(p,[2,17]),{20:[1,35]},{21:[1,36]},t(m,[2,13],{7:g,11:y}),t(v,[2,11]),t(v,[2,12]),{21:[1,37]},t(p,[2,25]),t(p,[2,27])],defaultActions:{2:[2,1],6:[2,2]},parseError:o(function(T,E){if(E.recoverable)this.trace(T);else{var L=new Error(T);throw L.hash=E,L}},"parseError"),parse:o(function(T){var E=this,L=[0],S=[],A=[null],I=[],D=this.table,k="",R=0,C=0,O=0,N=2,P=1,F=I.slice.call(arguments,1),B=Object.create(this.lexer),G={yy:{}};for(var z in this.yy)Object.prototype.hasOwnProperty.call(this.yy,z)&&(G.yy[z]=this.yy[z]);B.setInput(T,G.yy),G.yy.lexer=B,G.yy.parser=this,typeof B.yylloc>"u"&&(B.yylloc={});var W=B.yylloc;I.push(W);var Z=B.options&&B.options.ranges;typeof G.yy.parseError=="function"?this.parseError=G.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function j(ke){L.length=L.length-2*ke,A.length=A.length-ke,I.length=I.length-ke}o(j,"popStack");function oe(){var ke;return ke=S.pop()||B.lex()||P,typeof ke!="number"&&(ke instanceof Array&&(S=ke,ke=S.pop()),ke=E.symbols_[ke]||ke),ke}o(oe,"lex");for(var K,ee,J,H,q,Q,ae={},ue,ce,te,Ne;;){if(J=L[L.length-1],this.defaultActions[J]?H=this.defaultActions[J]:((K===null||typeof K>"u")&&(K=oe()),H=D[J]&&D[J][K]),typeof H>"u"||!H.length||!H[0]){var se="";Ne=[];for(ue in D[J])this.terminals_[ue]&&ue>N&&Ne.push("'"+this.terminals_[ue]+"'");B.showPosition?se="Parse error on line "+(R+1)+`: +`+B.showPosition()+` +Expecting `+Ne.join(", ")+", got '"+(this.terminals_[K]||K)+"'":se="Parse error on line "+(R+1)+": Unexpected "+(K==P?"end of input":"'"+(this.terminals_[K]||K)+"'"),this.parseError(se,{text:B.match,token:this.terminals_[K]||K,line:B.yylineno,loc:W,expected:Ne})}if(H[0]instanceof Array&&H.length>1)throw new Error("Parse Error: multiple actions possible at state: "+J+", token: "+K);switch(H[0]){case 1:L.push(K),A.push(B.yytext),I.push(B.yylloc),L.push(H[1]),K=null,ee?(K=ee,ee=null):(C=B.yyleng,k=B.yytext,R=B.yylineno,W=B.yylloc,O>0&&O--);break;case 2:if(ce=this.productions_[H[1]][1],ae.$=A[A.length-ce],ae._$={first_line:I[I.length-(ce||1)].first_line,last_line:I[I.length-1].last_line,first_column:I[I.length-(ce||1)].first_column,last_column:I[I.length-1].last_column},Z&&(ae._$.range=[I[I.length-(ce||1)].range[0],I[I.length-1].range[1]]),Q=this.performAction.apply(ae,[k,C,R,G.yy,H[1],A,I].concat(F)),typeof Q<"u")return Q;ce&&(L=L.slice(0,-1*ce*2),A=A.slice(0,-1*ce),I=I.slice(0,-1*ce)),L.push(this.productions_[H[1]][0]),A.push(ae.$),I.push(ae._$),te=D[L[L.length-2]][L[L.length-1]],L.push(te);break;case 3:return!0}}return!0},"parse")},b=function(){var _={EOF:1,parseError:o(function(E,L){if(this.yy.parser)this.yy.parser.parseError(E,L);else throw new Error(E)},"parseError"),setInput:o(function(T,E){return this.yy=E||this.yy||{},this._input=T,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},"setInput"),input:o(function(){var T=this._input[0];this.yytext+=T,this.yyleng++,this.offset++,this.match+=T,this.matched+=T;var E=T.match(/(?:\r\n?|\n).*/g);return E?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),T},"input"),unput:o(function(T){var E=T.length,L=T.split(/(?:\r\n?|\n)/g);this._input=T+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-E),this.offset-=E;var S=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),L.length-1&&(this.yylineno-=L.length-1);var A=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:L?(L.length===S.length?this.yylloc.first_column:0)+S[S.length-L.length].length-L[0].length:this.yylloc.first_column-E},this.options.ranges&&(this.yylloc.range=[A[0],A[0]+this.yyleng-E]),this.yyleng=this.yytext.length,this},"unput"),more:o(function(){return this._more=!0,this},"more"),reject:o(function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true). +`+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},"reject"),less:o(function(T){this.unput(this.match.slice(T))},"less"),pastInput:o(function(){var T=this.matched.substr(0,this.matched.length-this.match.length);return(T.length>20?"...":"")+T.substr(-20).replace(/\n/g,"")},"pastInput"),upcomingInput:o(function(){var T=this.match;return T.length<20&&(T+=this._input.substr(0,20-T.length)),(T.substr(0,20)+(T.length>20?"...":"")).replace(/\n/g,"")},"upcomingInput"),showPosition:o(function(){var T=this.pastInput(),E=new Array(T.length+1).join("-");return T+this.upcomingInput()+` +`+E+"^"},"showPosition"),test_match:o(function(T,E){var L,S,A;if(this.options.backtrack_lexer&&(A={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(A.yylloc.range=this.yylloc.range.slice(0))),S=T[0].match(/(?:\r\n?|\n).*/g),S&&(this.yylineno+=S.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:S?S[S.length-1].length-S[S.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+T[0].length},this.yytext+=T[0],this.match+=T[0],this.matches=T,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(T[0].length),this.matched+=T[0],L=this.performAction.call(this,this.yy,this,E,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),L)return L;if(this._backtrack){for(var I in A)this[I]=A[I];return!1}return!1},"test_match"),next:o(function(){if(this.done)return this.EOF;this._input||(this.done=!0);var T,E,L,S;this._more||(this.yytext="",this.match="");for(var A=this._currentRules(),I=0;IE[0].length)){if(E=L,S=I,this.options.backtrack_lexer){if(T=this.test_match(L,A[I]),T!==!1)return T;if(this._backtrack){E=!1;continue}else return!1}else if(!this.options.flex)break}return E?(T=this.test_match(E,A[S]),T!==!1?T:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text. +`+this.showPosition(),{text:"",token:null,line:this.yylineno})},"next"),lex:o(function(){var E=this.next();return E||this.lex()},"lex"),begin:o(function(E){this.conditionStack.push(E)},"begin"),popState:o(function(){var E=this.conditionStack.length-1;return E>0?this.conditionStack.pop():this.conditionStack[0]},"popState"),_currentRules:o(function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},"_currentRules"),topState:o(function(E){return E=this.conditionStack.length-1-Math.abs(E||0),E>=0?this.conditionStack[E]:"INITIAL"},"topState"),pushState:o(function(E){this.begin(E)},"pushState"),stateStackSize:o(function(){return this.conditionStack.length},"stateStackSize"),options:{"case-insensitive":!0},performAction:o(function(E,L,S,A){var I=A;switch(S){case 0:return E.getLogger().trace("Found comment",L.yytext),6;break;case 1:return 8;case 2:this.begin("CLASS");break;case 3:return this.popState(),16;break;case 4:this.popState();break;case 5:E.getLogger().trace("Begin icon"),this.begin("ICON");break;case 6:return E.getLogger().trace("SPACELINE"),6;break;case 7:return 7;case 8:return 15;case 9:E.getLogger().trace("end icon"),this.popState();break;case 10:return E.getLogger().trace("Exploding node"),this.begin("NODE"),19;break;case 11:return E.getLogger().trace("Cloud"),this.begin("NODE"),19;break;case 12:return E.getLogger().trace("Explosion Bang"),this.begin("NODE"),19;break;case 13:return E.getLogger().trace("Cloud Bang"),this.begin("NODE"),19;break;case 14:return this.begin("NODE"),19;break;case 15:return this.begin("NODE"),19;break;case 16:return this.begin("NODE"),19;break;case 17:return this.begin("NODE"),19;break;case 18:return 13;case 19:return 22;case 20:return 11;case 21:this.begin("NSTR2");break;case 22:return"NODE_DESCR";case 23:this.popState();break;case 24:E.getLogger().trace("Starting NSTR"),this.begin("NSTR");break;case 25:return E.getLogger().trace("description:",L.yytext),"NODE_DESCR";break;case 26:this.popState();break;case 27:return this.popState(),E.getLogger().trace("node end ))"),"NODE_DEND";break;case 28:return this.popState(),E.getLogger().trace("node end )"),"NODE_DEND";break;case 29:return this.popState(),E.getLogger().trace("node end ...",L.yytext),"NODE_DEND";break;case 30:return this.popState(),E.getLogger().trace("node end (("),"NODE_DEND";break;case 31:return this.popState(),E.getLogger().trace("node end (-"),"NODE_DEND";break;case 32:return this.popState(),E.getLogger().trace("node end (-"),"NODE_DEND";break;case 33:return this.popState(),E.getLogger().trace("node end (("),"NODE_DEND";break;case 34:return this.popState(),E.getLogger().trace("node end (("),"NODE_DEND";break;case 35:return E.getLogger().trace("Long description:",L.yytext),20;break;case 36:return E.getLogger().trace("Long description:",L.yytext),20;break}},"anonymous"),rules:[/^(?:\s*%%.*)/i,/^(?:mindmap\b)/i,/^(?::::)/i,/^(?:.+)/i,/^(?:\n)/i,/^(?:::icon\()/i,/^(?:[\s]+[\n])/i,/^(?:[\n]+)/i,/^(?:[^\)]+)/i,/^(?:\))/i,/^(?:-\))/i,/^(?:\(-)/i,/^(?:\)\))/i,/^(?:\))/i,/^(?:\(\()/i,/^(?:\{\{)/i,/^(?:\()/i,/^(?:\[)/i,/^(?:[\s]+)/i,/^(?:[^\(\[\n\)\{\}]+)/i,/^(?:$)/i,/^(?:["][`])/i,/^(?:[^`"]+)/i,/^(?:[`]["])/i,/^(?:["])/i,/^(?:[^"]+)/i,/^(?:["])/i,/^(?:[\)]\))/i,/^(?:[\)])/i,/^(?:[\]])/i,/^(?:\}\})/i,/^(?:\(-)/i,/^(?:-\))/i,/^(?:\(\()/i,/^(?:\()/i,/^(?:[^\)\]\(\}]+)/i,/^(?:.+(?!\(\())/i],conditions:{CLASS:{rules:[3,4],inclusive:!1},ICON:{rules:[8,9],inclusive:!1},NSTR2:{rules:[22,23],inclusive:!1},NSTR:{rules:[25,26],inclusive:!1},NODE:{rules:[21,24,27,28,29,30,31,32,33,34,35,36],inclusive:!1},INITIAL:{rules:[0,1,2,5,6,7,10,11,12,13,14,15,16,17,18,19,20],inclusive:!0}}};return _}();x.lexer=b;function w(){this.yy={}}return o(w,"Parser"),w.prototype=x,x.Parser=w,new w}();EP.parser=EP;Tpe=EP});var Xl,Epe,SP,oqe,lqe,cqe,uqe,qi,hqe,fqe,dqe,pqe,mqe,gqe,yqe,Spe,Cpe=M(()=>{"use strict";Vt();fr();ut();bs();Xl=[],Epe=0,SP={},oqe=o(()=>{Xl=[],Epe=0,SP={}},"clear"),lqe=o(function(t){for(let e=Xl.length-1;e>=0;e--)if(Xl[e].levelXl.length>0?Xl[0]:null,"getMindmap"),uqe=o((t,e,r,n)=>{Y.info("addNode",t,e,r,n);let i=pe(),a=i.mindmap?.padding??ur.mindmap.padding;switch(n){case qi.ROUNDED_RECT:case qi.RECT:case qi.HEXAGON:a*=2}let s={id:Epe++,nodeId:kr(e,i),level:t,descr:kr(r,i),type:n,children:[],width:i.mindmap?.maxNodeWidth??ur.mindmap.maxNodeWidth,padding:a},l=lqe(t);if(l)l.children.push(s),Xl.push(s);else if(Xl.length===0)Xl.push(s);else throw new Error('There can be only one root. No parent could be found for ("'+s.descr+'")')},"addNode"),qi={DEFAULT:0,NO_BORDER:0,ROUNDED_RECT:1,RECT:2,CIRCLE:3,CLOUD:4,BANG:5,HEXAGON:6},hqe=o((t,e)=>{switch(Y.debug("In get type",t,e),t){case"[":return qi.RECT;case"(":return e===")"?qi.ROUNDED_RECT:qi.CLOUD;case"((":return qi.CIRCLE;case")":return qi.CLOUD;case"))":return qi.BANG;case"{{":return qi.HEXAGON;default:return qi.DEFAULT}},"getType"),fqe=o((t,e)=>{SP[t]=e},"setElementForId"),dqe=o(t=>{if(!t)return;let e=pe(),r=Xl[Xl.length-1];t.icon&&(r.icon=kr(t.icon,e)),t.class&&(r.class=kr(t.class,e))},"decorateNode"),pqe=o(t=>{switch(t){case qi.DEFAULT:return"no-border";case qi.RECT:return"rect";case qi.ROUNDED_RECT:return"rounded-rect";case qi.CIRCLE:return"circle";case qi.CLOUD:return"cloud";case qi.BANG:return"bang";case qi.HEXAGON:return"hexgon";default:return"no-border"}},"type2Str"),mqe=o(()=>Y,"getLogger"),gqe=o(t=>SP[t],"getElementById"),yqe={clear:oqe,addNode:uqe,getMindmap:cqe,nodeType:qi,getType:hqe,setElementForId:fqe,decorateNode:dqe,type2Str:pqe,getLogger:mqe,getElementById:gqe},Spe=yqe});function Ki(t){"@babel/helpers - typeof";return Ki=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(e){return typeof e}:function(e){return e&&typeof Symbol=="function"&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Ki(t)}function tB(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function Ape(t,e){for(var r=0;rt.length)&&(e=t.length);for(var r=0,n=new Array(e);r=t.length?{done:!0}:{done:!1,value:t[n++]}},"n"),e:o(function(u){throw u},"e"),f:i}}throw new TypeError(`Invalid attempt to iterate non-iterable instance. +In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}var a=!0,s=!1,l;return{s:o(function(){r=r.call(t)},"s"),n:o(function(){var u=r.next();return a=u.done,u},"n"),e:o(function(u){s=!0,l=u},"e"),f:o(function(){try{!a&&r.return!=null&&r.return()}finally{if(s)throw l}},"f")}}function Hqe(t){var e=typeof t;return t!=null&&(e=="object"||e=="function")}function Wqe(t,e){return e={exports:{}},t(e,e.exports),e.exports}function Zqe(t){for(var e=t.length;e--&&Qqe.test(t.charAt(e)););return e}function tXe(t){return t&&t.slice(0,Jqe(t)+1).replace(eXe,"")}function sXe(t){var e=iXe.call(t,Hx),r=t[Hx];try{t[Hx]=void 0;var n=!0}catch{}var i=aXe.call(t);return n&&(e?t[Hx]=r:delete t[Hx]),i}function uXe(t){return cXe.call(t)}function pXe(t){return t==null?t===void 0?dXe:fXe:Npe&&Npe in Object(t)?oXe(t):hXe(t)}function mXe(t){return t!=null&&typeof t=="object"}function vXe(t){return typeof t=="symbol"||gXe(t)&&Zme(t)==yXe}function kXe(t){if(typeof t=="number")return t;if(mb(t))return Rpe;if(X0(t)){var e=typeof t.valueOf=="function"?t.valueOf():t;t=X0(e)?e+"":e}if(typeof t!="string")return t===0?t:+t;t=rXe(t);var r=bXe.test(t);return r||wXe.test(t)?TXe(t.slice(2),r?2:8):xXe.test(t)?Rpe:+t}function AXe(t,e,r){var n,i,a,s,l,u,h=0,f=!1,d=!1,p=!0;if(typeof t!="function")throw new TypeError(EXe);e=Mpe(e)||0,X0(r)&&(f=!!r.leading,d="maxWait"in r,a=d?SXe(Mpe(r.maxWait)||0,e):a,p="trailing"in r?!!r.trailing:p);function m(E){var L=n,S=i;return n=i=void 0,h=E,s=t.apply(S,L),s}o(m,"invokeFunc");function g(E){return h=E,l=setTimeout(x,e),f?m(E):s}o(g,"leadingEdge");function y(E){var L=E-u,S=E-h,A=e-L;return d?CXe(A,a-S):A}o(y,"remainingWait");function v(E){var L=E-u,S=E-h;return u===void 0||L>=e||L<0||d&&S>=a}o(v,"shouldInvoke");function x(){var E=CP();if(v(E))return b(E);l=setTimeout(x,y(E))}o(x,"timerExpired");function b(E){return l=void 0,p&&n?m(E):(n=i=void 0,s)}o(b,"trailingEdge");function w(){l!==void 0&&clearTimeout(l),h=0,n=u=i=l=void 0}o(w,"cancel");function _(){return l===void 0?s:b(CP())}o(_,"flush");function T(){var E=CP(),L=v(E);if(n=arguments,i=this,u=E,L){if(l===void 0)return g(u);if(d)return clearTimeout(l),l=setTimeout(x,e),m(u)}return l===void 0&&(l=setTimeout(x,e)),s}return o(T,"debounced"),T.cancel=w,T.flush=_,T}function V6(t,e,r,n,i,a){var s;return ni(t)?s=t:s=k1[t]||k1.euclidean,e===0&&ni(t)?s(i,a):s(e,r,n,i,a)}function xKe(t,e){if(U6(t))return!1;var r=typeof t;return r=="number"||r=="symbol"||r=="boolean"||t==null||mb(t)?!0:vKe.test(t)||!yKe.test(t)||e!=null&&t in Object(e)}function SKe(t){if(!X0(t))return!1;var e=Zme(t);return e==TKe||e==kKe||e==wKe||e==EKe}function _Ke(t){return!!Jpe&&Jpe in t}function RKe(t){if(t!=null){try{return NKe.call(t)}catch{}try{return t+""}catch{}}return""}function $Ke(t){if(!X0(t)||LKe(t))return!1;var e=CKe(t)?GKe:OKe;return e.test(MKe(t))}function UKe(t,e){return t?.[e]}function WKe(t,e){var r=HKe(t,e);return VKe(r)?r:void 0}function qKe(){this.__data__=lb?lb(null):{},this.size=0}function jKe(t){var e=this.has(t)&&delete this.__data__[t];return this.size-=e?1:0,e}function eQe(t){var e=this.__data__;if(lb){var r=e[t];return r===QKe?void 0:r}return JKe.call(e,t)?e[t]:void 0}function iQe(t){var e=this.__data__;return lb?e[t]!==void 0:nQe.call(e,t)}function oQe(t,e){var r=this.__data__;return this.size+=this.has(t)?0:1,r[t]=lb&&e===void 0?sQe:e,this}function A1(t){var e=-1,r=t==null?0:t.length;for(this.clear();++e-1}function wQe(t,e){var r=this.__data__,n=H6(r,t);return n<0?(++this.size,r.push([t,e])):r[n][1]=e,this}function _1(t){var e=-1,r=t==null?0:t.length;for(this.clear();++e-1&&t%1==0&&t0;){var f=i.shift();e(f),a.add(f.id()),l&&n(i,a,f)}return t}function Nge(t,e,r){if(r.isParent())for(var n=r._private.children,i=0;i0&&arguments[0]!==void 0?arguments[0]:aJe,e=arguments.length>1?arguments[1]:void 0,r=0;r0?k=C:D=C;while(Math.abs(R)>s&&++O=a?b(I,O):N===0?O:_(I,D,D+h)}o(T,"getTForX");var E=!1;function L(){E=!0,(t!==e||r!==n)&&w()}o(L,"precompute");var S=o(function(D){return E||L(),t===e&&r===n?D:D===0?0:D===1?1:v(T(D),e,n)},"f");S.getControlPoints=function(){return[{x:t,y:e},{x:r,y:n}]};var A="generateBezier("+[t,e,r,n]+")";return S.toString=function(){return A},S}function vme(t,e,r,n,i){if(n===1||e===r)return r;var a=i(e,r,n);return t==null||((t.roundValue||t.color)&&(a=Math.round(a)),t.min!==void 0&&(a=Math.max(a,t.min)),t.max!==void 0&&(a=Math.min(a,t.max))),a}function xme(t,e){return t.pfValue!=null||t.value!=null?t.pfValue!=null&&(e==null||e.type.units!=="%")?t.pfValue:t.value:t}function h1(t,e,r,n,i){var a=i!=null?i.type:null;r<0?r=0:r>1&&(r=1);var s=xme(t,i),l=xme(e,i);if(xt(s)&&xt(l))return vme(a,s,l,r,n);if(kn(s)&&kn(l)){for(var u=[],h=0;h0?(m==="spring"&&g.push(s.duration),s.easingImpl=w6[m].apply(null,g)):s.easingImpl=w6[m]}var y=s.easingImpl,v;if(s.duration===0?v=1:v=(r-u)/s.duration,s.applying&&(v=s.progress),v<0?v=0:v>1&&(v=1),s.delay==null){var x=s.startPosition,b=s.position;if(b&&i&&!t.locked()){var w={};Xx(x.x,b.x)&&(w.x=h1(x.x,b.x,v,y)),Xx(x.y,b.y)&&(w.y=h1(x.y,b.y,v,y)),t.position(w)}var _=s.startPan,T=s.pan,E=a.pan,L=T!=null&&n;L&&(Xx(_.x,T.x)&&(E.x=h1(_.x,T.x,v,y)),Xx(_.y,T.y)&&(E.y=h1(_.y,T.y,v,y)),t.emit("pan"));var S=s.startZoom,A=s.zoom,I=A!=null&&n;I&&(Xx(S,A)&&(a.zoom=sb(a.minZoom,h1(S,A,v,y),a.maxZoom)),t.emit("zoom")),(L||I)&&t.emit("viewport");var D=s.style;if(D&&D.length>0&&i){for(var k=0;k=0;L--){var S=E[L];S()}E.splice(0,E.length)},"callbacks"),b=m.length-1;b>=0;b--){var w=m[b],_=w._private;if(_.stopped){m.splice(b,1),_.hooked=!1,_.playing=!1,_.started=!1,x(_.frames);continue}!_.playing&&!_.applying||(_.playing&&_.applying&&(_.applying=!1),_.started||xJe(f,w,t),vJe(f,w,t,d),_.applying&&(_.applying=!1),x(_.frames),_.step!=null&&_.step(t),w.completed()&&(m.splice(b,1),_.hooked=!1,_.playing=!1,_.started=!1,x(_.completes)),y=!0)}return!d&&m.length===0&&g.length===0&&n.push(f),y}o(i,"stepOne");for(var a=!1,s=0;s0?e.notify("draw",r):e.notify("draw")),r.unmerge(n),e.emit("step")}function Xge(t){this.options=ir({},AJe,_Je,t)}function jge(t){this.options=ir({},LJe,t)}function Kge(t){this.options=ir({},DJe,t)}function Z6(t){this.options=ir({},NJe,t),this.options.layout=this;var e=this.options.eles.nodes(),r=this.options.eles.edges(),n=r.filter(function(i){var a=i.source().data("id"),s=i.target().data("id"),l=e.some(function(h){return h.data("id")===a}),u=e.some(function(h){return h.data("id")===s});return!l||!u});this.options.eles=this.options.eles.not(n)}function Zge(t){this.options=ir({},XJe,t)}function bB(t){this.options=ir({},jJe,t)}function Jge(t){this.options=ir({},KJe,t)}function e1e(t){this.options=ir({},QJe,t)}function t1e(t){this.options=t,this.notifications=0}function i1e(t,e){e.radius===0?t.lineTo(e.cx,e.cy):t.arc(e.cx,e.cy,e.radius,e.startAngle,e.endAngle,e.counterClockwise)}function TB(t,e,r,n){var i=arguments.length>4&&arguments[4]!==void 0?arguments[4]:!0;return n===0||e.radius===0?{cx:e.x,cy:e.y,radius:0,startX:e.x,startY:e.y,stopX:e.x,stopY:e.y,startAngle:void 0,endAngle:void 0,counterClockwise:void 0}:(eet(t,e,r,n,i),{cx:qP,cy:XP,radius:W0,startX:r1e,startY:n1e,stopX:jP,stopY:KP,startAngle:Qc.ang+Math.PI/2*Y0,endAngle:cl.ang-Math.PI/2*Y0,counterClockwise:E6})}function a1e(t){var e=[];if(t!=null){for(var r=0;r5&&arguments[5]!==void 0?arguments[5]:5,s=arguments.length>6?arguments[6]:void 0;t.beginPath(),t.moveTo(e+a,r),t.lineTo(e+n-a,r),t.quadraticCurveTo(e+n,r,e+n,r+a),t.lineTo(e+n,r+i-a),t.quadraticCurveTo(e+n,r+i,e+n-a,r+i),t.lineTo(e+a,r+i),t.quadraticCurveTo(e,r+i,e,r+i-a),t.lineTo(e,r+a),t.quadraticCurveTo(e,r,e+a,r),t.closePath(),s?t.stroke():t.fill()}function Het(t,e){for(var r=atob(t),n=new ArrayBuffer(r.length),i=new Uint8Array(n),a=0;a{"use strict";o(Ki,"_typeof");o(tB,"_classCallCheck");o(Ape,"_defineProperties");o(rB,"_createClass");o($me,"_defineProperty$1");o(jl,"_slicedToArray");o(vqe,"_arrayWithHoles");o(xqe,"_iterableToArrayLimit");o(Vme,"_unsupportedIterableToArray");o(_pe,"_arrayLikeToArray");o(bqe,"_nonIterableRest");o(Ume,"_createForOfIteratorHelper");Xi=typeof window>"u"?null:window,Lpe=Xi?Xi.navigator:null;Xi&&Xi.document;wqe=Ki(""),Hme=Ki({}),Tqe=Ki(function(){}),kqe=typeof HTMLElement>"u"?"undefined":Ki(HTMLElement),db=o(function(e){return e&&e.instanceString&&ni(e.instanceString)?e.instanceString():null},"instanceStr"),Zt=o(function(e){return e!=null&&Ki(e)==wqe},"string"),ni=o(function(e){return e!=null&&Ki(e)===Tqe},"fn"),kn=o(function(e){return!wo(e)&&(Array.isArray?Array.isArray(e):e!=null&&e instanceof Array)},"array"),Ur=o(function(e){return e!=null&&Ki(e)===Hme&&!kn(e)&&e.constructor===Object},"plainObject"),Eqe=o(function(e){return e!=null&&Ki(e)===Hme},"object"),xt=o(function(e){return e!=null&&Ki(e)===Ki(1)&&!isNaN(e)},"number"),Sqe=o(function(e){return xt(e)&&Math.floor(e)===e},"integer"),C6=o(function(e){if(kqe!=="undefined")return e!=null&&e instanceof HTMLElement},"htmlElement"),wo=o(function(e){return pb(e)||Wme(e)},"elementOrCollection"),pb=o(function(e){return db(e)==="collection"&&e._private.single},"element"),Wme=o(function(e){return db(e)==="collection"&&!e._private.single},"collection"),nB=o(function(e){return db(e)==="core"},"core"),Yme=o(function(e){return db(e)==="stylesheet"},"stylesheet"),Cqe=o(function(e){return db(e)==="event"},"event"),If=o(function(e){return e==null?!0:!!(e===""||e.match(/^\s+$/))},"emptyString"),Aqe=o(function(e){return typeof HTMLElement>"u"?!1:e instanceof HTMLElement},"domElement"),_qe=o(function(e){return Ur(e)&&xt(e.x1)&&xt(e.x2)&&xt(e.y1)&&xt(e.y2)},"boundingBox"),Lqe=o(function(e){return Eqe(e)&&ni(e.then)},"promise"),Dqe=o(function(){return Lpe&&Lpe.userAgent.match(/msie|trident|edge/i)},"ms"),rb=o(function(e,r){r||(r=o(function(){if(arguments.length===1)return arguments[0];if(arguments.length===0)return"undefined";for(var a=[],s=0;sr?1:0},"ascending"),Bqe=o(function(e,r){return-1*Xme(e,r)},"descending"),ir=Object.assign!=null?Object.assign.bind(Object):function(t){for(var e=arguments,r=1;r1&&(v-=1),v<1/6?g+(y-g)*6*v:v<1/2?y:v<2/3?g+(y-g)*(2/3-v)*6:g}o(f,"hue2rgb");var d=new RegExp("^"+Mqe+"$").exec(e);if(d){if(n=parseInt(d[1]),n<0?n=(360- -1*n%360)%360:n>360&&(n=n%360),n/=360,i=parseFloat(d[2]),i<0||i>100||(i=i/100,a=parseFloat(d[3]),a<0||a>100)||(a=a/100,s=d[4],s!==void 0&&(s=parseFloat(s),s<0||s>1)))return;if(i===0)l=u=h=Math.round(a*255);else{var p=a<.5?a*(1+i):a+i-a*i,m=2*a-p;l=Math.round(255*f(m,p,n+1/3)),u=Math.round(255*f(m,p,n)),h=Math.round(255*f(m,p,n-1/3))}r=[l,u,h,s]}return r},"hsl2tuple"),Gqe=o(function(e){var r,n=new RegExp("^"+Nqe+"$").exec(e);if(n){r=[];for(var i=[],a=1;a<=3;a++){var s=n[a];if(s[s.length-1]==="%"&&(i[a]=!0),s=parseFloat(s),i[a]&&(s=s/100*255),s<0||s>255)return;r.push(Math.floor(s))}var l=i[1]||i[2]||i[3],u=i[1]&&i[2]&&i[3];if(l&&!u)return;var h=n[4];if(h!==void 0){if(h=parseFloat(h),h<0||h>1)return;r.push(h)}}return r},"rgb2tuple"),$qe=o(function(e){return Uqe[e.toLowerCase()]},"colorname2tuple"),Vqe=o(function(e){return(kn(e)?e:null)||$qe(e)||Fqe(e)||Gqe(e)||zqe(e)},"color2tuple"),Uqe={transparent:[0,0,0,0],aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],grey:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]},jme=o(function(e){for(var r=e.map,n=e.keys,i=n.length,a=0;a1&&arguments[1]!==void 0?arguments[1]:p1,n=r,i;i=e.next(),!i.done;)n=n*ege+i.value|0;return n},"hashIterableInts"),nb=o(function(e){var r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:p1;return r*ege+e|0},"hashInt"),ib=o(function(e){var r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:Kx;return(r<<5)+r+e|0},"hashIntAlt"),LXe=o(function(e,r){return e*2097152+r},"combineHashes"),_f=o(function(e){return e[0]*2097152+e[1]},"combineHashesArray"),a6=o(function(e,r){return[nb(e[0],r[0]),ib(e[1],r[1])]},"hashArrays"),DXe=o(function(e,r){var n={value:0,done:!1},i=0,a=e.length,s={next:o(function(){return i=0&&!(e[i]===r&&(e.splice(i,1),n));i--);},"removeFromArray"),oB=o(function(e){e.splice(0,e.length)},"clearArray"),BXe=o(function(e,r){for(var n=0;n"u"?"undefined":Ki(Set))!==zXe?Set:GXe,G6=o(function(e,r){var n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!0;if(e===void 0||r===void 0||!nB(e)){di("An element must have a core reference and parameters set");return}var i=r.group;if(i==null&&(r.data&&r.data.source!=null&&r.data.target!=null?i="edges":i="nodes"),i!=="nodes"&&i!=="edges"){di("An element must be of type `nodes` or `edges`; you specified `"+i+"`");return}this.length=1,this[0]=this;var a=this._private={cy:e,single:!0,data:r.data||{},position:r.position||{x:0,y:0},autoWidth:void 0,autoHeight:void 0,autoPadding:void 0,compoundBoundsClean:!1,listeners:[],group:i,style:{},rstyle:{},styleCxts:[],styleKeys:{},removed:!0,selected:!!r.selected,selectable:r.selectable===void 0?!0:!!r.selectable,locked:!!r.locked,grabbed:!1,grabbable:r.grabbable===void 0?!0:!!r.grabbable,pannable:r.pannable===void 0?i==="edges":!!r.pannable,active:!1,classes:new S1,animation:{current:[],queue:[]},rscratch:{},scratch:r.scratch||{},edges:[],children:[],parent:r.parent&&r.parent.isNode()?r.parent:null,traversalCache:{},backgrounding:!1,bbCache:null,bbCacheShift:{x:0,y:0},bodyBounds:null,overlayBounds:null,labelBounds:{all:null,source:null,target:null,main:null},arrowBounds:{source:null,target:null,"mid-source":null,"mid-target":null}};if(a.position.x==null&&(a.position.x=0),a.position.y==null&&(a.position.y=0),r.renderedPosition){var s=r.renderedPosition,l=e.pan(),u=e.zoom();a.position={x:(s.x-l.x)/u,y:(s.y-l.y)/u}}var h=[];kn(r.classes)?h=r.classes:Zt(r.classes)&&(h=r.classes.split(/\s+/));for(var f=0,d=h.length;fb?1:0},"defaultCmp"),f=o(function(x,b,w,_,T){var E;if(w==null&&(w=0),T==null&&(T=n),w<0)throw new Error("lo must be non-negative");for(_==null&&(_=x.length);w<_;)E=i((w+_)/2),T(b,x[E])<0?_=E:w=E+1;return[].splice.apply(x,[w,w-w].concat(b)),b},"insort"),l=o(function(x,b,w){return w==null&&(w=n),x.push(b),y(x,0,x.length-1,w)},"heappush"),s=o(function(x,b){var w,_;return b==null&&(b=n),w=x.pop(),x.length?(_=x[0],x[0]=w,v(x,0,b)):_=w,_},"heappop"),h=o(function(x,b,w){var _;return w==null&&(w=n),_=x[0],x[0]=b,v(x,0,w),_},"heapreplace"),u=o(function(x,b,w){var _;return w==null&&(w=n),x.length&&w(x[0],b)<0&&(_=[x[0],b],b=_[0],x[0]=_[1],v(x,0,w)),b},"heappushpop"),a=o(function(x,b){var w,_,T,E,L,S;for(b==null&&(b=n),E=function(){S=[];for(var A=0,I=i(x.length/2);0<=I?AI;0<=I?A++:A--)S.push(A);return S}.apply(this).reverse(),L=[],_=0,T=E.length;_D;0<=D?++S:--S)k.push(s(x,w));return k},"nsmallest"),y=o(function(x,b,w,_){var T,E,L;for(_==null&&(_=n),T=x[w];w>b;){if(L=w-1>>1,E=x[L],_(T,E)<0){x[w]=E,w=L;continue}break}return x[w]=T},"_siftdown"),v=o(function(x,b,w){var _,T,E,L,S;for(w==null&&(w=n),T=x.length,S=b,E=x[b],_=2*b+1;_0;){var E=b.pop(),L=v(E),S=E.id();if(p[S]=L,L!==1/0)for(var A=E.neighborhood().intersect(g),I=0;I0)for(F.unshift(P);d[G];){var z=d[G];F.unshift(z.edge),F.unshift(z.node),B=z.node,G=B.id()}return l.spawn(F)},"pathTo")}},"dijkstra")},HXe={kruskal:o(function(e){e=e||function(w){return 1};for(var r=this.byGroup(),n=r.nodes,i=r.edges,a=n.length,s=new Array(a),l=n,u=o(function(_){for(var T=0;T0;){if(T(),L++,_===f){for(var S=[],A=a,I=f,D=x[I];S.unshift(A),D!=null&&S.unshift(D),A=v[I],A!=null;)I=A.id(),D=x[I];return{found:!0,distance:d[_],path:this.spawn(S),steps:L}}m[_]=!0;for(var k=w._private.edges,R=0;RD&&(g[I]=D,b[I]=A,w[I]=T),!a){var k=A*f+S;!a&&g[k]>D&&(g[k]=D,b[k]=S,w[k]=T)}}}for(var R=0;R1&&arguments[1]!==void 0?arguments[1]:s,Ce=w(ke),Pe=[],Ie=Ce;;){if(Ie==null)return r.spawn();var $e=b(Ie),ye=$e.edge,X=$e.pred;if(Pe.unshift(Ie[0]),Ie.same(Re)&&Pe.length>0)break;ye!=null&&Pe.unshift(ye),Ie=X}return u.spawn(Pe)},"pathTo"),E=0;E=0;f--){var d=h[f],p=d[1],m=d[2];(r[p]===l&&r[m]===u||r[p]===u&&r[m]===l)&&h.splice(f,1)}for(var g=0;gi;){var a=Math.floor(Math.random()*r.length);r=ZXe(a,e,r),n--}return r},"contractUntil"),JXe={kargerStein:o(function(){var e=this,r=this.byGroup(),n=r.nodes,i=r.edges;i.unmergeBy(function(F){return F.isLoop()});var a=n.length,s=i.length,l=Math.ceil(Math.pow(Math.log(a)/Math.LN2,2)),u=Math.floor(a/QXe);if(a<2){di("At least 2 nodes are required for Karger-Stein algorithm");return}for(var h=[],f=0;f1&&arguments[1]!==void 0?arguments[1]:0,n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:e.length,i=1/0,a=r;a1&&arguments[1]!==void 0?arguments[1]:0,n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:e.length,i=-1/0,a=r;a1&&arguments[1]!==void 0?arguments[1]:0,n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:e.length,i=0,a=0,s=r;s1&&arguments[1]!==void 0?arguments[1]:0,n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:e.length,i=arguments.length>3&&arguments[3]!==void 0?arguments[3]:!0,a=arguments.length>4&&arguments[4]!==void 0?arguments[4]:!0,s=arguments.length>5&&arguments[5]!==void 0?arguments[5]:!0;i?e=e.slice(r,n):(n0&&e.splice(0,r));for(var l=0,u=e.length-1;u>=0;u--){var h=e[u];s?isFinite(h)||(e[u]=-1/0,l++):e.splice(u,1)}a&&e.sort(function(p,m){return p-m});var f=e.length,d=Math.floor(f/2);return f%2!==0?e[d+1+l]:(e[d-1+l]+e[d+l])/2},"median"),aje=o(function(e){return Math.PI*e/180},"deg2rad"),s6=o(function(e,r){return Math.atan2(r,e)-Math.PI/2},"getAngleFromDisp"),lB=Math.log2||function(t){return Math.log(t)/Math.log(2)},lge=o(function(e){return e>0?1:e<0?-1:0},"signum"),K0=o(function(e,r){return Math.sqrt(U0(e,r))},"dist"),U0=o(function(e,r){var n=r.x-e.x,i=r.y-e.y;return n*n+i*i},"sqdist"),sje=o(function(e){for(var r=e.length,n=0,i=0;i=e.x1&&e.y2>=e.y1)return{x1:e.x1,y1:e.y1,x2:e.x2,y2:e.y2,w:e.x2-e.x1,h:e.y2-e.y1};if(e.w!=null&&e.h!=null&&e.w>=0&&e.h>=0)return{x1:e.x1,y1:e.y1,x2:e.x1+e.w,y2:e.y1+e.h,w:e.w,h:e.h}}},"makeBoundingBox"),lje=o(function(e){return{x1:e.x1,x2:e.x2,w:e.w,y1:e.y1,y2:e.y2,h:e.h}},"copyBoundingBox"),cje=o(function(e){e.x1=1/0,e.y1=1/0,e.x2=-1/0,e.y2=-1/0,e.w=0,e.h=0},"clearBoundingBox"),uje=o(function(e,r,n){return{x1:e.x1+r,x2:e.x2+r,y1:e.y1+n,y2:e.y2+n,w:e.w,h:e.h}},"shiftBoundingBox"),cge=o(function(e,r){e.x1=Math.min(e.x1,r.x1),e.x2=Math.max(e.x2,r.x2),e.w=e.x2-e.x1,e.y1=Math.min(e.y1,r.y1),e.y2=Math.max(e.y2,r.y2),e.h=e.y2-e.y1},"updateBoundingBox"),hje=o(function(e,r,n){e.x1=Math.min(e.x1,r),e.x2=Math.max(e.x2,r),e.w=e.x2-e.x1,e.y1=Math.min(e.y1,n),e.y2=Math.max(e.y2,n),e.h=e.y2-e.y1},"expandBoundingBoxByPoint"),y6=o(function(e){var r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:0;return e.x1-=r,e.x2+=r,e.y1-=r,e.y2+=r,e.w=e.x2-e.x1,e.h=e.y2-e.y1,e},"expandBoundingBox"),v6=o(function(e){var r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:[0],n,i,a,s;if(r.length===1)n=i=a=s=r[0];else if(r.length===2)n=a=r[0],s=i=r[1];else if(r.length===4){var l=jl(r,4);n=l[0],i=l[1],a=l[2],s=l[3]}return e.x1-=s,e.x2+=i,e.y1-=n,e.y2+=a,e.w=e.x2-e.x1,e.h=e.y2-e.y1,e},"expandBoundingBoxSides"),Bpe=o(function(e,r){e.x1=r.x1,e.y1=r.y1,e.x2=r.x2,e.y2=r.y2,e.w=e.x2-e.x1,e.h=e.y2-e.y1},"assignBoundingBox"),cB=o(function(e,r){return!(e.x1>r.x2||r.x1>e.x2||e.x2r.y2||r.y1>e.y2)},"boundingBoxesIntersect"),T1=o(function(e,r,n){return e.x1<=r&&r<=e.x2&&e.y1<=n&&n<=e.y2},"inBoundingBox"),fje=o(function(e,r){return T1(e,r.x,r.y)},"pointInBoundingBox"),uge=o(function(e,r){return T1(e,r.x1,r.y1)&&T1(e,r.x2,r.y2)},"boundingBoxInBoundingBox"),hge=o(function(e,r,n,i,a,s,l){var u=arguments.length>7&&arguments[7]!==void 0?arguments[7]:"auto",h=u==="auto"?Q0(a,s):u,f=a/2,d=s/2;h=Math.min(h,f,d);var p=h!==f,m=h!==d,g;if(p){var y=n-f+h-l,v=i-d-l,x=n+f-h+l,b=v;if(g=Nf(e,r,n,i,y,v,x,b,!1),g.length>0)return g}if(m){var w=n+f+l,_=i-d+h-l,T=w,E=i+d-h+l;if(g=Nf(e,r,n,i,w,_,T,E,!1),g.length>0)return g}if(p){var L=n-f+h-l,S=i+d+l,A=n+f-h+l,I=S;if(g=Nf(e,r,n,i,L,S,A,I,!1),g.length>0)return g}if(m){var D=n-f-l,k=i-d+h-l,R=D,C=i+d-h+l;if(g=Nf(e,r,n,i,D,k,R,C,!1),g.length>0)return g}var O;{var N=n-f+h,P=i-d+h;if(O=Qx(e,r,n,i,N,P,h+l),O.length>0&&O[0]<=N&&O[1]<=P)return[O[0],O[1]]}{var F=n+f-h,B=i-d+h;if(O=Qx(e,r,n,i,F,B,h+l),O.length>0&&O[0]>=F&&O[1]<=B)return[O[0],O[1]]}{var G=n+f-h,z=i+d-h;if(O=Qx(e,r,n,i,G,z,h+l),O.length>0&&O[0]>=G&&O[1]>=z)return[O[0],O[1]]}{var W=n-f+h,Z=i+d-h;if(O=Qx(e,r,n,i,W,Z,h+l),O.length>0&&O[0]<=W&&O[1]>=Z)return[O[0],O[1]]}return[]},"roundRectangleIntersectLine"),dje=o(function(e,r,n,i,a,s,l){var u=l,h=Math.min(n,a),f=Math.max(n,a),d=Math.min(i,s),p=Math.max(i,s);return h-u<=e&&e<=f+u&&d-u<=r&&r<=p+u},"inLineVicinity"),pje=o(function(e,r,n,i,a,s,l,u,h){var f={x1:Math.min(n,l,a)-h,x2:Math.max(n,l,a)+h,y1:Math.min(i,u,s)-h,y2:Math.max(i,u,s)+h};return!(ef.x2||rf.y2)},"inBezierVicinity"),mje=o(function(e,r,n,i){n-=i;var a=r*r-4*e*n;if(a<0)return[];var s=Math.sqrt(a),l=2*e,u=(-r+s)/l,h=(-r-s)/l;return[u,h]},"solveQuadratic"),gje=o(function(e,r,n,i,a){var s=1e-5;e===0&&(e=s),r/=e,n/=e,i/=e;var l,u,h,f,d,p,m,g;if(u=(3*n-r*r)/9,h=-(27*i)+r*(9*n-2*(r*r)),h/=54,l=u*u*u+h*h,a[1]=0,m=r/3,l>0){d=h+Math.sqrt(l),d=d<0?-Math.pow(-d,1/3):Math.pow(d,1/3),p=h-Math.sqrt(l),p=p<0?-Math.pow(-p,1/3):Math.pow(p,1/3),a[0]=-m+d+p,m+=(d+p)/2,a[4]=a[2]=-m,m=Math.sqrt(3)*(-p+d)/2,a[3]=m,a[5]=-m;return}if(a[5]=a[3]=0,l===0){g=h<0?-Math.pow(-h,1/3):Math.pow(h,1/3),a[0]=-m+2*g,a[4]=a[2]=-(g+m);return}u=-u,f=u*u*u,f=Math.acos(h/Math.sqrt(f)),g=2*Math.sqrt(u),a[0]=-m+g*Math.cos(f/3),a[2]=-m+g*Math.cos((f+2*Math.PI)/3),a[4]=-m+g*Math.cos((f+4*Math.PI)/3)},"solveCubic"),yje=o(function(e,r,n,i,a,s,l,u){var h=1*n*n-4*n*a+2*n*l+4*a*a-4*a*l+l*l+i*i-4*i*s+2*i*u+4*s*s-4*s*u+u*u,f=1*9*n*a-3*n*n-3*n*l-6*a*a+3*a*l+9*i*s-3*i*i-3*i*u-6*s*s+3*s*u,d=1*3*n*n-6*n*a+n*l-n*e+2*a*a+2*a*e-l*e+3*i*i-6*i*s+i*u-i*r+2*s*s+2*s*r-u*r,p=1*n*a-n*n+n*e-a*e+i*s-i*i+i*r-s*r,m=[];gje(h,f,d,p,m);for(var g=1e-7,y=[],v=0;v<6;v+=2)Math.abs(m[v+1])=0&&m[v]<=1&&y.push(m[v]);y.push(1),y.push(0);for(var x=-1,b,w,_,T=0;T=0?_h?(e-a)*(e-a)+(r-s)*(r-s):f-p},"sqdistToFiniteLine"),js=o(function(e,r,n){for(var i,a,s,l,u,h=0,f=0;f=e&&e>=s||i<=e&&e<=s)u=(e-i)/(s-i)*(l-a)+a,u>r&&h++;else continue;return h%2!==0},"pointInsidePolygonPoints"),ah=o(function(e,r,n,i,a,s,l,u,h){var f=new Array(n.length),d;u[0]!=null?(d=Math.atan(u[1]/u[0]),u[0]<0?d=d+Math.PI/2:d=-d-Math.PI/2):d=u;for(var p=Math.cos(-d),m=Math.sin(-d),g=0;g0){var v=D6(f,-h);y=L6(v)}else y=f;return js(e,r,y)},"pointInsidePolygon"),xje=o(function(e,r,n,i,a,s,l,u){for(var h=new Array(n.length*2),f=0;f=0&&v<=1&&b.push(v),x>=0&&x<=1&&b.push(x),b.length===0)return[];var w=b[0]*u[0]+e,_=b[0]*u[1]+r;if(b.length>1){if(b[0]==b[1])return[w,_];var T=b[1]*u[0]+e,E=b[1]*u[1]+r;return[w,_,T,E]}else return[w,_]},"intersectLineCircle"),LP=o(function(e,r,n){return r<=e&&e<=n||n<=e&&e<=r?e:e<=r&&r<=n||n<=r&&r<=e?r:n},"midOfThree"),Nf=o(function(e,r,n,i,a,s,l,u,h){var f=e-a,d=n-e,p=l-a,m=r-s,g=i-r,y=u-s,v=p*m-y*f,x=d*m-g*f,b=y*d-p*g;if(b!==0){var w=v/b,_=x/b,T=.001,E=0-T,L=1+T;return E<=w&&w<=L&&E<=_&&_<=L?[e+w*d,r+w*g]:h?[e+w*d,r+w*g]:[]}else return v===0||x===0?LP(e,n,l)===l?[l,u]:LP(e,n,a)===a?[a,s]:LP(a,l,n)===n?[n,i]:[]:[]},"finiteLinesIntersect"),ob=o(function(e,r,n,i,a,s,l,u){var h=[],f,d=new Array(n.length),p=!0;s==null&&(p=!1);var m;if(p){for(var g=0;g0){var y=D6(d,-u);m=L6(y)}else m=d}else m=n;for(var v,x,b,w,_=0;_2){for(var g=[f[0],f[1]],y=Math.pow(g[0]-e,2)+Math.pow(g[1]-r,2),v=1;vf&&(f=_)},"set"),get:o(function(w){return h[w]},"get")},p=0;p0?N=O.edgesTo(C)[0]:N=C.edgesTo(O)[0];var P=i(N);C=C.id(),S[C]>S[k]+P&&(S[C]=S[k]+P,A.nodes.indexOf(C)<0?A.push(C):A.updateItem(C),L[C]=0,E[C]=[]),S[C]==S[k]+P&&(L[C]=L[C]+L[k],E[C].push(k))}else for(var F=0;F0;){for(var W=T.pop(),Z=0;Z0&&l.push(n[u]);l.length!==0&&a.push(i.collection(l))}return a},"assign"),Oje=o(function(e,r){for(var n=0;n5&&arguments[5]!==void 0?arguments[5]:Fje,l=i,u,h,f=0;f=2?Wx(e,r,n,0,Vpe,zje):Wx(e,r,n,0,$pe)},"euclidean"),squaredEuclidean:o(function(e,r,n){return Wx(e,r,n,0,Vpe)},"squaredEuclidean"),manhattan:o(function(e,r,n){return Wx(e,r,n,0,$pe)},"manhattan"),max:o(function(e,r,n){return Wx(e,r,n,-1/0,Gje)},"max")};k1["squared-euclidean"]=k1.squaredEuclidean;k1.squaredeuclidean=k1.squaredEuclidean;o(V6,"clusteringDistance");$je=_a({k:2,m:2,sensitivityThreshold:1e-4,distance:"euclidean",maxIterations:10,attributes:[],testMode:!1,testCentroids:null}),hB=o(function(e){return $je(e)},"setOptions"),N6=o(function(e,r,n,i,a){var s=a!=="kMedoids",l=s?function(d){return n[d]}:function(d){return i[d](n)},u=o(function(p){return i[p](r)},"getQ"),h=n,f=r;return V6(e,i.length,l,u,h,f)},"getDist"),DP=o(function(e,r,n){for(var i=n.length,a=new Array(i),s=new Array(i),l=new Array(r),u=null,h=0;hn)return!1}return!0},"haveMatricesConverged"),Hje=o(function(e,r,n){for(var i=0;il&&(l=r[h][f],u=f);a[u].push(e[h])}for(var d=0;d=a.threshold||a.mode==="dendrogram"&&e.length===1)return!1;var g=r[s],y=r[i[s]],v;a.mode==="dendrogram"?v={left:g,right:y,key:g.key}:v={value:g.value.concat(y.value),key:g.key},e[g.index]=v,e.splice(y.index,1),r[g.key]=v;for(var x=0;xn[y.key][b.key]&&(u=n[y.key][b.key])):a.linkage==="max"?(u=n[g.key][b.key],n[g.key][b.key]0&&i.push(a);return i},"findExemplars"),Xpe=o(function(e,r,n){for(var i=[],a=0;al&&(s=h,l=r[a*e+h])}s>0&&i.push(s)}for(var f=0;fh&&(u=f,h=d)}n[a]=s[u]}return i=Xpe(e,r,n),i},"assign"),jpe=o(function(e){for(var r=this.cy(),n=this.nodes(),i=iKe(e),a={},s=0;s=D?(k=D,D=C,R=O):C>k&&(k=C);for(var N=0;N0?1:0;L[A%i.minIterations*l+W]=Z,z+=Z}if(z>0&&(A>=i.minIterations-1||A==i.maxIterations-1)){for(var j=0,oe=0;oe1||E>1)&&(l=!0),d[w]=[],b.outgoers().forEach(function(S){S.isEdge()&&d[w].push(S.id())})}else p[w]=[void 0,b.target().id()]}):s.forEach(function(b){var w=b.id();if(b.isNode()){var _=b.degree(!0);_%2&&(u?h?l=!0:h=w:u=w),d[w]=[],b.connectedEdges().forEach(function(T){return d[w].push(T.id())})}else p[w]=[b.source().id(),b.target().id()]});var m={found:!1,trail:void 0};if(l)return m;if(h&&u)if(a){if(f&&h!=f)return m;f=h}else{if(f&&h!=f&&u!=f)return m;f||(f=h)}else f||(f=s[0].id());var g=o(function(w){for(var _=w,T=[w],E,L,S;d[_].length;)E=d[_].shift(),L=p[E][0],S=p[E][1],_!=S?(d[S]=d[S].filter(function(A){return A!=E}),_=S):!a&&_!=L&&(d[L]=d[L].filter(function(A){return A!=E}),_=L),T.unshift(E),T.unshift(_);return T},"walk"),y=[],v=[];for(v=g(f);v.length!=1;)d[v[0]].length==0?(y.unshift(s.getElementById(v.shift())),y.unshift(s.getElementById(v.shift()))):v=g(v.shift()).concat(v);y.unshift(s.getElementById(v.shift()));for(var x in d)if(d[x].length)return m;return m.found=!0,m.trail=this.spawn(y,!0),m},"hierholzer")},c6=o(function(){var e=this,r={},n=0,i=0,a=[],s=[],l={},u=o(function(p,m){for(var g=s.length-1,y=[],v=e.spawn();s[g].x!=p||s[g].y!=m;)y.push(s.pop().edge),g--;y.push(s.pop().edge),y.forEach(function(x){var b=x.connectedNodes().intersection(e);v.merge(x),b.forEach(function(w){var _=w.id(),T=w.connectedEdges().intersection(e);v.merge(w),r[_].cutVertex?v.merge(T.filter(function(E){return E.isLoop()})):v.merge(T)})}),a.push(v)},"buildComponent"),h=o(function d(p,m,g){p===g&&(i+=1),r[m]={id:n,low:n++,cutVertex:!1};var y=e.getElementById(m).connectedEdges().intersection(e);if(y.size()===0)a.push(e.spawn(e.getElementById(m)));else{var v,x,b,w;y.forEach(function(_){v=_.source().id(),x=_.target().id(),b=v===m?x:v,b!==g&&(w=_.id(),l[w]||(l[w]=!0,s.push({x:m,y:b,edge:_})),b in r?r[m].low=Math.min(r[m].low,r[b].id):(d(p,b,m),r[m].low=Math.min(r[m].low,r[b].low),r[m].id<=r[b].low&&(r[m].cutVertex=!0,u(m,b))))})}},"biconnectedSearch");e.forEach(function(d){if(d.isNode()){var p=d.id();p in r||(i=0,h(p,p),r[p].cutVertex=i>1)}});var f=Object.keys(r).filter(function(d){return r[d].cutVertex}).map(function(d){return e.getElementById(d)});return{cut:e.spawn(f),components:a}},"hopcroftTarjanBiconnected"),fKe={hopcroftTarjanBiconnected:c6,htbc:c6,htb:c6,hopcroftTarjanBiconnectedComponents:c6},u6=o(function(){var e=this,r={},n=0,i=[],a=[],s=e.spawn(e),l=o(function u(h){a.push(h),r[h]={index:n,low:n++,explored:!1};var f=e.getElementById(h).connectedEdges().intersection(e);if(f.forEach(function(y){var v=y.target().id();v!==h&&(v in r||u(v),r[v].explored||(r[h].low=Math.min(r[h].low,r[v].low)))}),r[h].index===r[h].low){for(var d=e.spawn();;){var p=a.pop();if(d.merge(e.getElementById(p)),r[p].low=r[h].index,r[p].explored=!0,p===h)break}var m=d.edgesWith(d),g=d.merge(m);i.push(g),s=s.difference(g)}},"stronglyConnectedSearch");return e.forEach(function(u){if(u.isNode()){var h=u.id();h in r||l(h)}}),{cut:s,components:i}},"tarjanStronglyConnected"),dKe={tarjanStronglyConnected:u6,tsc:u6,tscc:u6,tarjanStronglyConnectedComponents:u6},vge={};[ab,UXe,HXe,YXe,XXe,KXe,JXe,Eje,v1,x1,$P,Bje,Kje,rKe,cKe,hKe,fKe,dKe].forEach(function(t){ir(vge,t)});xge=0,bge=1,wge=2,sh=o(function t(e){if(!(this instanceof t))return new t(e);this.id="Thenable/1.0.7",this.state=xge,this.fulfillValue=void 0,this.rejectReason=void 0,this.onFulfilled=[],this.onRejected=[],this.proxy={then:this.then.bind(this)},typeof e=="function"&&e.call(this,this.fulfill.bind(this),this.reject.bind(this))},"api");sh.prototype={fulfill:o(function(e){return Kpe(this,bge,"fulfillValue",e)},"fulfill"),reject:o(function(e){return Kpe(this,wge,"rejectReason",e)},"reject"),then:o(function(e,r){var n=this,i=new sh;return n.onFulfilled.push(Zpe(e,i,"fulfill")),n.onRejected.push(Zpe(r,i,"reject")),Tge(n),i.proxy},"then")};Kpe=o(function(e,r,n,i){return e.state===xge&&(e.state=r,e[n]=i,Tge(e)),e},"deliver"),Tge=o(function(e){e.state===bge?Qpe(e,"onFulfilled",e.fulfillValue):e.state===wge&&Qpe(e,"onRejected",e.rejectReason)},"execute"),Qpe=o(function(e,r,n){if(e[r].length!==0){var i=e[r];e[r]=[];var a=o(function(){for(var l=0;l0},"animatedImpl")},"animated"),clearQueue:o(function(){return o(function(){var r=this,n=r.length!==void 0,i=n?r:[r],a=this._private.cy||this;if(!a.styleEnabled())return this;for(var s=0;s0&&this.spawn(i).updateStyle().emit("class"),r},"classes"),addClass:o(function(e){return this.toggleClass(e,!0)},"addClass"),hasClass:o(function(e){var r=this[0];return r!=null&&r._private.classes.has(e)},"hasClass"),toggleClass:o(function(e,r){kn(e)||(e=e.match(/\S+/g)||[]);for(var n=this,i=r===void 0,a=[],s=0,l=n.length;s0&&this.spawn(a).updateStyle().emit("class"),n},"toggleClass"),removeClass:o(function(e){return this.toggleClass(e,!1)},"removeClass"),flashClass:o(function(e,r){var n=this;if(r==null)r=250;else if(r===0)return n;return n.addClass(e),setTimeout(function(){n.removeClass(e)},r),n},"flashClass")};x6.className=x6.classNames=x6.classes;Vr={metaChar:"[\\!\\\"\\#\\$\\%\\&\\'\\(\\)\\*\\+\\,\\.\\/\\:\\;\\<\\=\\>\\?\\@\\[\\]\\^\\`\\{\\|\\}\\~]",comparatorOp:"=|\\!=|>|>=|<|<=|\\$=|\\^=|\\*=",boolOp:"\\?|\\!|\\^",string:`"(?:\\\\"|[^"])*"|'(?:\\\\'|[^'])*'`,number:ji,meta:"degree|indegree|outdegree",separator:"\\s*,\\s*",descendant:"\\s+",child:"\\s+>\\s+",subject:"\\$",group:"node|edge|\\*",directedEdge:"\\s+->\\s+",undirectedEdge:"\\s+<->\\s+"};Vr.variable="(?:[\\w-.]|(?:\\\\"+Vr.metaChar+"))+";Vr.className="(?:[\\w-]|(?:\\\\"+Vr.metaChar+"))+";Vr.value=Vr.string+"|"+Vr.number;Vr.id=Vr.variable;(function(){var t,e,r;for(t=Vr.comparatorOp.split("|"),r=0;r=0)&&e!=="="&&(Vr.comparatorOp+="|\\!"+e)})();pn=o(function(){return{checks:[]}},"newQuery"),Mt={GROUP:0,COLLECTION:1,FILTER:2,DATA_COMPARE:3,DATA_EXIST:4,DATA_BOOL:5,META_COMPARE:6,STATE:7,ID:8,CLASS:9,UNDIRECTED_EDGE:10,DIRECTED_EDGE:11,NODE_SOURCE:12,NODE_TARGET:13,NODE_NEIGHBOR:14,CHILD:15,DESCENDANT:16,PARENT:17,ANCESTOR:18,COMPOUND_SPLIT:19,TRUE:20},UP=[{selector:":selected",matches:o(function(e){return e.selected()},"matches")},{selector:":unselected",matches:o(function(e){return!e.selected()},"matches")},{selector:":selectable",matches:o(function(e){return e.selectable()},"matches")},{selector:":unselectable",matches:o(function(e){return!e.selectable()},"matches")},{selector:":locked",matches:o(function(e){return e.locked()},"matches")},{selector:":unlocked",matches:o(function(e){return!e.locked()},"matches")},{selector:":visible",matches:o(function(e){return e.visible()},"matches")},{selector:":hidden",matches:o(function(e){return!e.visible()},"matches")},{selector:":transparent",matches:o(function(e){return e.transparent()},"matches")},{selector:":grabbed",matches:o(function(e){return e.grabbed()},"matches")},{selector:":free",matches:o(function(e){return!e.grabbed()},"matches")},{selector:":removed",matches:o(function(e){return e.removed()},"matches")},{selector:":inside",matches:o(function(e){return!e.removed()},"matches")},{selector:":grabbable",matches:o(function(e){return e.grabbable()},"matches")},{selector:":ungrabbable",matches:o(function(e){return!e.grabbable()},"matches")},{selector:":animated",matches:o(function(e){return e.animated()},"matches")},{selector:":unanimated",matches:o(function(e){return!e.animated()},"matches")},{selector:":parent",matches:o(function(e){return e.isParent()},"matches")},{selector:":childless",matches:o(function(e){return e.isChildless()},"matches")},{selector:":child",matches:o(function(e){return e.isChild()},"matches")},{selector:":orphan",matches:o(function(e){return e.isOrphan()},"matches")},{selector:":nonorphan",matches:o(function(e){return e.isChild()},"matches")},{selector:":compound",matches:o(function(e){return e.isNode()?e.isParent():e.source().isParent()||e.target().isParent()},"matches")},{selector:":loop",matches:o(function(e){return e.isLoop()},"matches")},{selector:":simple",matches:o(function(e){return e.isSimple()},"matches")},{selector:":active",matches:o(function(e){return e.active()},"matches")},{selector:":inactive",matches:o(function(e){return!e.active()},"matches")},{selector:":backgrounding",matches:o(function(e){return e.backgrounding()},"matches")},{selector:":nonbackgrounding",matches:o(function(e){return!e.backgrounding()},"matches")}].sort(function(t,e){return Bqe(t.selector,e.selector)}),CZe=function(){for(var t={},e,r=0;r0&&f.edgeCount>0)return on("The selector `"+e+"` is invalid because it uses both a compound selector and an edge selector"),!1;if(f.edgeCount>1)return on("The selector `"+e+"` is invalid because it uses multiple edge selectors"),!1;f.edgeCount===1&&on("The selector `"+e+"` is deprecated. Edge selectors do not take effect on changes to source and target nodes after an edge is added, for performance reasons. Use a class or data selector on edges instead, updating the class or data of an edge when your app detects a change in source or target nodes.")}return!0},"parse"),RZe=o(function(){if(this.toStringCache!=null)return this.toStringCache;for(var e=o(function(f){return f??""},"clean"),r=o(function(f){return Zt(f)?'"'+f+'"':e(f)},"cleanVal"),n=o(function(f){return" "+f+" "},"space"),i=o(function(f,d){var p=f.type,m=f.value;switch(p){case Mt.GROUP:{var g=e(m);return g.substring(0,g.length-1)}case Mt.DATA_COMPARE:{var y=f.field,v=f.operator;return"["+y+n(e(v))+r(m)+"]"}case Mt.DATA_BOOL:{var x=f.operator,b=f.field;return"["+e(x)+b+"]"}case Mt.DATA_EXIST:{var w=f.field;return"["+w+"]"}case Mt.META_COMPARE:{var _=f.operator,T=f.field;return"[["+T+n(e(_))+r(m)+"]]"}case Mt.STATE:return m;case Mt.ID:return"#"+m;case Mt.CLASS:return"."+m;case Mt.PARENT:case Mt.CHILD:return a(f.parent,d)+n(">")+a(f.child,d);case Mt.ANCESTOR:case Mt.DESCENDANT:return a(f.ancestor,d)+" "+a(f.descendant,d);case Mt.COMPOUND_SPLIT:{var E=a(f.left,d),L=a(f.subject,d),S=a(f.right,d);return E+(E.length>0?" ":"")+L+S}case Mt.TRUE:return""}},"checkToString"),a=o(function(f,d){return f.checks.reduce(function(p,m,g){return p+(d===f&&g===0?"$":"")+i(m,d)},"")},"queryToString"),s="",l=0;l1&&l=0&&(r=r.replace("!",""),d=!0),r.indexOf("@")>=0&&(r=r.replace("@",""),f=!0),(a||l||f)&&(u=!a&&!s?"":""+e,h=""+n),f&&(e=u=u.toLowerCase(),n=h=h.toLowerCase()),r){case"*=":i=u.indexOf(h)>=0;break;case"$=":i=u.indexOf(h,u.length-h.length)>=0;break;case"^=":i=u.indexOf(h)===0;break;case"=":i=e===n;break;case">":p=!0,i=e>n;break;case">=":p=!0,i=e>=n;break;case"<":p=!0,i=e1&&arguments[1]!==void 0?arguments[1]:!0;return gB(this,t,e,Nge)};o(Rge,"addParent");E1.forEachUp=function(t){var e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!0;return gB(this,t,e,Rge)};o(GZe,"addParentAndChildren");E1.forEachUpAndDown=function(t){var e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!0;return gB(this,t,e,GZe)};E1.ancestors=E1.parents;cb=Mge={data:sn.data({field:"data",bindingEvent:"data",allowBinding:!0,allowSetting:!0,settingEvent:"data",settingTriggersEvent:!0,triggerFnName:"trigger",allowGetting:!0,immutableKeys:{id:!0,source:!0,target:!0,parent:!0},updateStyle:!0}),removeData:sn.removeData({field:"data",event:"data",triggerFnName:"trigger",triggerEvent:!0,immutableKeys:{id:!0,source:!0,target:!0,parent:!0},updateStyle:!0}),scratch:sn.data({field:"scratch",bindingEvent:"scratch",allowBinding:!0,allowSetting:!0,settingEvent:"scratch",settingTriggersEvent:!0,triggerFnName:"trigger",allowGetting:!0,updateStyle:!0}),removeScratch:sn.removeData({field:"scratch",event:"scratch",triggerFnName:"trigger",triggerEvent:!0,updateStyle:!0}),rscratch:sn.data({field:"rscratch",allowBinding:!1,allowSetting:!0,settingTriggersEvent:!1,allowGetting:!0}),removeRscratch:sn.removeData({field:"rscratch",triggerEvent:!1}),id:o(function(){var e=this[0];if(e)return e._private.data.id},"id")};cb.attr=cb.data;cb.removeAttr=cb.removeData;$Ze=Mge,Y6={};o(RP,"defineDegreeFunction");ir(Y6,{degree:RP(function(t,e){return e.source().same(e.target())?2:1}),indegree:RP(function(t,e){return e.target().same(t)?1:0}),outdegree:RP(function(t,e){return e.source().same(t)?1:0})});o(u1,"defineDegreeBoundsFunction");ir(Y6,{minDegree:u1("degree",function(t,e){return te}),minIndegree:u1("indegree",function(t,e){return te}),minOutdegree:u1("outdegree",function(t,e){return te})});ir(Y6,{totalDegree:o(function(e){for(var r=0,n=this.nodes(),i=0;i0,p=d;d&&(f=f[0]);var m=p?f.position():{x:0,y:0};r!==void 0?h.position(e,r+m[e]):a!==void 0&&h.position({x:a.x+m.x,y:a.y+m.y})}else{var g=n.position(),y=l?n.parent():null,v=y&&y.length>0,x=v;v&&(y=y[0]);var b=x?y.position():{x:0,y:0};return a={x:g.x-b.x,y:g.y-b.y},e===void 0?a:a[e]}else if(!s)return;return this},"relativePosition")};Zl.modelPosition=Zl.point=Zl.position;Zl.modelPositions=Zl.points=Zl.positions;Zl.renderedPoint=Zl.renderedPosition;Zl.relativePoint=Zl.relativePosition;VZe=Ige;b1=zf={};zf.renderedBoundingBox=function(t){var e=this.boundingBox(t),r=this.cy(),n=r.zoom(),i=r.pan(),a=e.x1*n+i.x,s=e.x2*n+i.x,l=e.y1*n+i.y,u=e.y2*n+i.y;return{x1:a,x2:s,y1:l,y2:u,w:s-a,h:u-l}};zf.dirtyCompoundBoundsCache=function(){var t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:!1,e=this.cy();return!e.styleEnabled()||!e.hasCompoundNodes()?this:(this.forEachUp(function(r){if(r.isParent()){var n=r._private;n.compoundBoundsClean=!1,n.bbCache=null,t||r.emitAndNotify("bounds")}}),this)};zf.updateCompoundBounds=function(){var t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:!1,e=this.cy();if(!e.styleEnabled()||!e.hasCompoundNodes())return this;if(!t&&e.batching())return this;function r(s){if(!s.isParent())return;var l=s._private,u=s.children(),h=s.pstyle("compound-sizing-wrt-labels").value==="include",f={width:{val:s.pstyle("min-width").pfValue,left:s.pstyle("min-width-bias-left"),right:s.pstyle("min-width-bias-right")},height:{val:s.pstyle("min-height").pfValue,top:s.pstyle("min-height-bias-top"),bottom:s.pstyle("min-height-bias-bottom")}},d=u.boundingBox({includeLabels:h,includeOverlays:!1,useCache:!1}),p=l.position;(d.w===0||d.h===0)&&(d={w:s.pstyle("width").pfValue,h:s.pstyle("height").pfValue},d.x1=p.x-d.w/2,d.x2=p.x+d.w/2,d.y1=p.y-d.h/2,d.y2=p.y+d.h/2);function m(A,I,D){var k=0,R=0,C=I+D;return A>0&&C>0&&(k=I/C*A,R=D/C*A),{biasDiff:k,biasComplementDiff:R}}o(m,"computeBiasValues");function g(A,I,D,k){if(D.units==="%")switch(k){case"width":return A>0?D.pfValue*A:0;case"height":return I>0?D.pfValue*I:0;case"average":return A>0&&I>0?D.pfValue*(A+I)/2:0;case"min":return A>0&&I>0?A>I?D.pfValue*I:D.pfValue*A:0;case"max":return A>0&&I>0?A>I?D.pfValue*A:D.pfValue*I:0;default:return 0}else return D.units==="px"?D.pfValue:0}o(g,"computePaddingValues");var y=f.width.left.value;f.width.left.units==="px"&&f.width.val>0&&(y=y*100/f.width.val);var v=f.width.right.value;f.width.right.units==="px"&&f.width.val>0&&(v=v*100/f.width.val);var x=f.height.top.value;f.height.top.units==="px"&&f.height.val>0&&(x=x*100/f.height.val);var b=f.height.bottom.value;f.height.bottom.units==="px"&&f.height.val>0&&(b=b*100/f.height.val);var w=m(f.width.val-d.w,y,v),_=w.biasDiff,T=w.biasComplementDiff,E=m(f.height.val-d.h,x,b),L=E.biasDiff,S=E.biasComplementDiff;l.autoPadding=g(d.w,d.h,s.pstyle("padding"),s.pstyle("padding-relative-to").value),l.autoWidth=Math.max(d.w,f.width.val),p.x=(-_+d.x1+d.x2+T)/2,l.autoHeight=Math.max(d.h,f.height.val),p.y=(-L+d.y1+d.y2+S)/2}o(r,"update");for(var n=0;ne.x2?i:e.x2,e.y1=ne.y2?a:e.y2,e.w=e.x2-e.x1,e.h=e.y2-e.y1)},"updateBounds"),H0=o(function(e,r){return r==null?e:Kl(e,r.x1,r.y1,r.x2,r.y2)},"updateBoundsFromBox"),Yx=o(function(e,r,n){return Ql(e,r,n)},"prefixedProperty"),h6=o(function(e,r,n){if(!r.cy().headless()){var i=r._private,a=i.rstyle,s=a.arrowWidth/2,l=r.pstyle(n+"-arrow-shape").value,u,h;if(l!=="none"){n==="source"?(u=a.srcX,h=a.srcY):n==="target"?(u=a.tgtX,h=a.tgtY):(u=a.midX,h=a.midY);var f=i.arrowBounds=i.arrowBounds||{},d=f[n]=f[n]||{};d.x1=u-s,d.y1=h-s,d.x2=u+s,d.y2=h+s,d.w=d.x2-d.x1,d.h=d.y2-d.y1,y6(d,1),Kl(e,d.x1,d.y1,d.x2,d.y2)}}},"updateBoundsFromArrow"),MP=o(function(e,r,n){if(!r.cy().headless()){var i;n?i=n+"-":i="";var a=r._private,s=a.rstyle,l=r.pstyle(i+"label").strValue;if(l){var u=r.pstyle("text-halign"),h=r.pstyle("text-valign"),f=Yx(s,"labelWidth",n),d=Yx(s,"labelHeight",n),p=Yx(s,"labelX",n),m=Yx(s,"labelY",n),g=r.pstyle(i+"text-margin-x").pfValue,y=r.pstyle(i+"text-margin-y").pfValue,v=r.isEdge(),x=r.pstyle(i+"text-rotation"),b=r.pstyle("text-outline-width").pfValue,w=r.pstyle("text-border-width").pfValue,_=w/2,T=r.pstyle("text-background-padding").pfValue,E=2,L=d,S=f,A=S/2,I=L/2,D,k,R,C;if(v)D=p-A,k=p+A,R=m-I,C=m+I;else{switch(u.value){case"left":D=p-S,k=p;break;case"center":D=p-A,k=p+A;break;case"right":D=p,k=p+S;break}switch(h.value){case"top":R=m-L,C=m;break;case"center":R=m-I,C=m+I;break;case"bottom":R=m,C=m+L;break}}D+=g-Math.max(b,_)-T-E,k+=g+Math.max(b,_)+T+E,R+=y-Math.max(b,_)-T-E,C+=y+Math.max(b,_)+T+E;var O=n||"main",N=a.labelBounds,P=N[O]=N[O]||{};P.x1=D,P.y1=R,P.x2=k,P.y2=C,P.w=k-D,P.h=C-R;var F=v&&x.strValue==="autorotate",B=x.pfValue!=null&&x.pfValue!==0;if(F||B){var G=F?Yx(a.rstyle,"labelAngle",n):x.pfValue,z=Math.cos(G),W=Math.sin(G),Z=(D+k)/2,j=(R+C)/2;if(!v){switch(u.value){case"left":Z=k;break;case"right":Z=D;break}switch(h.value){case"top":j=C;break;case"bottom":j=R;break}}var oe=o(function(ue,ce){return ue=ue-Z,ce=ce-j,{x:ue*z-ce*W+Z,y:ue*W+ce*z+j}},"rotate"),K=oe(D,R),ee=oe(D,C),J=oe(k,R),H=oe(k,C);D=Math.min(K.x,ee.x,J.x,H.x),k=Math.max(K.x,ee.x,J.x,H.x),R=Math.min(K.y,ee.y,J.y,H.y),C=Math.max(K.y,ee.y,J.y,H.y)}var q=O+"Rot",Q=N[q]=N[q]||{};Q.x1=D,Q.y1=R,Q.x2=k,Q.y2=C,Q.w=k-D,Q.h=C-R,Kl(e,D,R,k,C),Kl(a.labelBounds.all,D,R,k,C)}return e}},"updateBoundsFromLabel"),UZe=o(function(e,r){if(!r.cy().headless()){var n=r.pstyle("outline-opacity").value,i=r.pstyle("outline-width").value;if(n>0&&i>0){var a=r.pstyle("outline-offset").value,s=r.pstyle("shape").value,l=i+a,u=(e.w+l*2)/e.w,h=(e.h+l*2)/e.h,f=0,d=0;["diamond","pentagon","round-triangle"].includes(s)?(u=(e.w+l*2.4)/e.w,d=-l/3.6):["concave-hexagon","rhomboid","right-rhomboid"].includes(s)?u=(e.w+l*2.4)/e.w:s==="star"?(u=(e.w+l*2.8)/e.w,h=(e.h+l*2.6)/e.h,d=-l/3.8):s==="triangle"?(u=(e.w+l*2.8)/e.w,h=(e.h+l*2.4)/e.h,d=-l/1.4):s==="vee"&&(u=(e.w+l*4.4)/e.w,h=(e.h+l*3.8)/e.h,d=-l*.5);var p=e.h*h-e.h,m=e.w*u-e.w;if(v6(e,[Math.ceil(p/2),Math.ceil(m/2)]),f!=0||d!==0){var g=uje(e,f,d);cge(e,g)}}}},"updateBoundsFromOutline"),HZe=o(function(e,r){var n=e._private.cy,i=n.styleEnabled(),a=n.headless(),s=Ks(),l=e._private,u=e.isNode(),h=e.isEdge(),f,d,p,m,g,y,v=l.rstyle,x=u&&i?e.pstyle("bounds-expansion").pfValue:[0],b=o(function(Ne){return Ne.pstyle("display").value!=="none"},"isDisplayed"),w=!i||b(e)&&(!h||b(e.source())&&b(e.target()));if(w){var _=0,T=0;i&&r.includeOverlays&&(_=e.pstyle("overlay-opacity").value,_!==0&&(T=e.pstyle("overlay-padding").value));var E=0,L=0;i&&r.includeUnderlays&&(E=e.pstyle("underlay-opacity").value,E!==0&&(L=e.pstyle("underlay-padding").value));var S=Math.max(T,L),A=0,I=0;if(i&&(A=e.pstyle("width").pfValue,I=A/2),u&&r.includeNodes){var D=e.position();g=D.x,y=D.y;var k=e.outerWidth(),R=k/2,C=e.outerHeight(),O=C/2;f=g-R,d=g+R,p=y-O,m=y+O,Kl(s,f,p,d,m),i&&r.includeOutlines&&UZe(s,e)}else if(h&&r.includeEdges)if(i&&!a){var N=e.pstyle("curve-style").strValue;if(f=Math.min(v.srcX,v.midX,v.tgtX),d=Math.max(v.srcX,v.midX,v.tgtX),p=Math.min(v.srcY,v.midY,v.tgtY),m=Math.max(v.srcY,v.midY,v.tgtY),f-=I,d+=I,p-=I,m+=I,Kl(s,f,p,d,m),N==="haystack"){var P=v.haystackPts;if(P&&P.length===2){if(f=P[0].x,p=P[0].y,d=P[1].x,m=P[1].y,f>d){var F=f;f=d,d=F}if(p>m){var B=p;p=m,m=B}Kl(s,f-I,p-I,d+I,m+I)}}else if(N==="bezier"||N==="unbundled-bezier"||N.endsWith("segments")||N.endsWith("taxi")){var G;switch(N){case"bezier":case"unbundled-bezier":G=v.bezierPts;break;case"segments":case"taxi":case"round-segments":case"round-taxi":G=v.linePts;break}if(G!=null)for(var z=0;zd){var ee=f;f=d,d=ee}if(p>m){var J=p;p=m,m=J}f-=I,d+=I,p-=I,m+=I,Kl(s,f,p,d,m)}if(i&&r.includeEdges&&h&&(h6(s,e,"mid-source"),h6(s,e,"mid-target"),h6(s,e,"source"),h6(s,e,"target")),i){var H=e.pstyle("ghost").value==="yes";if(H){var q=e.pstyle("ghost-offset-x").pfValue,Q=e.pstyle("ghost-offset-y").pfValue;Kl(s,s.x1+q,s.y1+Q,s.x2+q,s.y2+Q)}}var ae=l.bodyBounds=l.bodyBounds||{};Bpe(ae,s),v6(ae,x),y6(ae,1),i&&(f=s.x1,d=s.x2,p=s.y1,m=s.y2,Kl(s,f-S,p-S,d+S,m+S));var ue=l.overlayBounds=l.overlayBounds||{};Bpe(ue,s),v6(ue,x),y6(ue,1);var ce=l.labelBounds=l.labelBounds||{};ce.all!=null?cje(ce.all):ce.all=Ks(),i&&r.includeLabels&&(r.includeMainLabels&&MP(s,e,null),h&&(r.includeSourceLabels&&MP(s,e,"source"),r.includeTargetLabels&&MP(s,e,"target")))}return s.x1=ul(s.x1),s.y1=ul(s.y1),s.x2=ul(s.x2),s.y2=ul(s.y2),s.w=ul(s.x2-s.x1),s.h=ul(s.y2-s.y1),s.w>0&&s.h>0&&w&&(v6(s,x),y6(s,1)),s},"boundingBoxImpl"),Pge=o(function(e){var r=0,n=o(function(s){return(s?1:0)<=0;l--)s(l);return this};Ff.removeAllListeners=function(){return this.removeListener("*")};Ff.emit=Ff.trigger=function(t,e,r){var n=this.listeners,i=n.length;return this.emitting++,kn(e)||(e=[e]),sJe(this,function(a,s){r!=null&&(n=[{event:s.event,type:s.type,namespace:s.namespace,callback:r}],i=n.length);for(var l=o(function(f){var d=n[f];if(d.type===s.type&&(!d.namespace||d.namespace===s.namespace||d.namespace===iJe)&&a.eventMatches(a.context,d,s)){var p=[s];e!=null&&BXe(p,e),a.beforeEmit(a.context,d,s),d.conf&&d.conf.one&&(a.listeners=a.listeners.filter(function(y){return y!==d}));var m=a.callbackContext(a.context,d,s),g=d.callback.apply(m,p);a.afterEmit(a.context,d,s),g===!1&&(s.stopPropagation(),s.preventDefault())}},"_loop2"),u=0;u1&&!s){var l=this.length-1,u=this[l],h=u._private.data.id;this[l]=void 0,this[e]=u,a.set(h,{ele:u,index:e})}return this.length--,this},"unmergeAt"),unmergeOne:o(function(e){e=e[0];var r=this._private,n=e._private.data.id,i=r.map,a=i.get(n);if(!a)return this;var s=a.index;return this.unmergeAt(s),this},"unmergeOne"),unmerge:o(function(e){var r=this._private.cy;if(!e)return this;if(e&&Zt(e)){var n=e;e=r.mutableElements().filter(n)}for(var i=0;i=0;r--){var n=this[r];e(n)&&this.unmergeAt(r)}return this},"unmergeBy"),map:o(function(e,r){for(var n=[],i=this,a=0;an&&(n=u,i=l)}return{value:n,ele:i}},"max"),min:o(function(e,r){for(var n=1/0,i,a=this,s=0;s=0&&a"u"?"undefined":Ki(Symbol))!=e&&Ki(Symbol.iterator)!=e;r&&(R6[Symbol.iterator]=function(){var n=this,i={value:void 0,done:!1},a=0,s=this.length;return $me({next:o(function(){return a1&&arguments[1]!==void 0?arguments[1]:!0,n=this[0],i=n.cy();if(i.styleEnabled()&&n){this.cleanStyle();var a=n._private.style[e];return a??(r?i.style().getDefaultProperty(e):null)}},"parsedStyle"),numericStyle:o(function(e){var r=this[0];if(r.cy().styleEnabled()&&r){var n=r.pstyle(e);return n.pfValue!==void 0?n.pfValue:n.value}},"numericStyle"),numericStyleUnits:o(function(e){var r=this[0];if(r.cy().styleEnabled()&&r)return r.pstyle(e).units},"numericStyleUnits"),renderedStyle:o(function(e){var r=this.cy();if(!r.styleEnabled())return this;var n=this[0];if(n)return r.style().getRenderedStyle(n,e)},"renderedStyle"),style:o(function(e,r){var n=this.cy();if(!n.styleEnabled())return this;var i=!1,a=n.style();if(Ur(e)){var s=e;a.applyBypass(this,s,i),this.emitAndNotify("style")}else if(Zt(e))if(r===void 0){var l=this[0];return l?a.getStylePropertyValue(l,e):void 0}else a.applyBypass(this,e,r,i),this.emitAndNotify("style");else if(e===void 0){var u=this[0];return u?a.getRawStyle(u):void 0}return this},"style"),removeStyle:o(function(e){var r=this.cy();if(!r.styleEnabled())return this;var n=!1,i=r.style(),a=this;if(e===void 0)for(var s=0;s0&&e.push(f[0]),e.push(l[0])}return this.spawn(e,!0).filter(t)},"neighborhood"),closedNeighborhood:o(function(e){return this.neighborhood().add(this).filter(e)},"closedNeighborhood"),openNeighborhood:o(function(e){return this.neighborhood(e)},"openNeighborhood")});Ha.neighbourhood=Ha.neighborhood;Ha.closedNeighbourhood=Ha.closedNeighborhood;Ha.openNeighbourhood=Ha.openNeighborhood;ir(Ha,{source:hl(o(function(e){var r=this[0],n;return r&&(n=r._private.source||r.cy().collection()),n&&e?n.filter(e):n},"sourceImpl"),"source"),target:hl(o(function(e){var r=this[0],n;return r&&(n=r._private.target||r.cy().collection()),n&&e?n.filter(e):n},"targetImpl"),"target"),sources:mme({attr:"source"}),targets:mme({attr:"target"})});o(mme,"defineSourceFunction");ir(Ha,{edgesWith:hl(gme(),"edgesWith"),edgesTo:hl(gme({thisIsSrc:!0}),"edgesTo")});o(gme,"defineEdgesWithFunction");ir(Ha,{connectedEdges:hl(function(t){for(var e=[],r=this,n=0;n0);return s},"components"),component:o(function(){var e=this[0];return e.cy().mutableElements().components(e)[0]},"component")});Ha.componentsOf=Ha.components;Aa=o(function(e,r){var n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!1,i=arguments.length>3&&arguments[3]!==void 0?arguments[3]:!1;if(e===void 0){di("A collection must have a reference to the core");return}var a=new Jc,s=!1;if(!r)r=[];else if(r.length>0&&Ur(r[0])&&!pb(r[0])){s=!0;for(var l=[],u=new S1,h=0,f=r.length;h0&&arguments[0]!==void 0?arguments[0]:!0,e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!0,r=this,n=r.cy(),i=n._private,a=[],s=[],l,u=0,h=r.length;u0){for(var B=l.length===r.length?r:new Aa(n,l),G=0;G0&&arguments[0]!==void 0?arguments[0]:!0,e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!0,r=this,n=[],i={},a=r._private.cy;function s(C){for(var O=C._private.edges,N=0;N0&&(t?D.emitAndNotify("remove"):e&&D.emit("remove"));for(var k=0;kf&&Math.abs(g.v)>f;);return p?function(y){return u[y*(u.length-1)|0]}:h},"springRK4Factory")}(),Rn=o(function(e,r,n,i){var a=gJe(e,r,n,i);return function(s,l,u){return s+(l-s)*a(u)}},"cubicBezier"),w6={linear:o(function(e,r,n){return e+(r-e)*n},"linear"),ease:Rn(.25,.1,.25,1),"ease-in":Rn(.42,0,1,1),"ease-out":Rn(0,0,.58,1),"ease-in-out":Rn(.42,0,.58,1),"ease-in-sine":Rn(.47,0,.745,.715),"ease-out-sine":Rn(.39,.575,.565,1),"ease-in-out-sine":Rn(.445,.05,.55,.95),"ease-in-quad":Rn(.55,.085,.68,.53),"ease-out-quad":Rn(.25,.46,.45,.94),"ease-in-out-quad":Rn(.455,.03,.515,.955),"ease-in-cubic":Rn(.55,.055,.675,.19),"ease-out-cubic":Rn(.215,.61,.355,1),"ease-in-out-cubic":Rn(.645,.045,.355,1),"ease-in-quart":Rn(.895,.03,.685,.22),"ease-out-quart":Rn(.165,.84,.44,1),"ease-in-out-quart":Rn(.77,0,.175,1),"ease-in-quint":Rn(.755,.05,.855,.06),"ease-out-quint":Rn(.23,1,.32,1),"ease-in-out-quint":Rn(.86,0,.07,1),"ease-in-expo":Rn(.95,.05,.795,.035),"ease-out-expo":Rn(.19,1,.22,1),"ease-in-out-expo":Rn(1,0,0,1),"ease-in-circ":Rn(.6,.04,.98,.335),"ease-out-circ":Rn(.075,.82,.165,1),"ease-in-out-circ":Rn(.785,.135,.15,.86),spring:o(function(e,r,n){if(n===0)return w6.linear;var i=yJe(e,r,n);return function(a,s,l){return a+(s-a)*i(l)}},"spring"),"cubic-bezier":Rn};o(vme,"getEasedValue");o(xme,"getValue");o(h1,"ease");o(vJe,"step$1");o(Xx,"valid");o(xJe,"startAnimation");o(bme,"stepAll");bJe={animate:sn.animate(),animation:sn.animation(),animated:sn.animated(),clearQueue:sn.clearQueue(),delay:sn.delay(),delayAnimation:sn.delayAnimation(),stop:sn.stop(),addToAnimationPool:o(function(e){var r=this;r.styleEnabled()&&r._private.aniEles.merge(e)},"addToAnimationPool"),stopAnimationLoop:o(function(){this._private.animationsRunning=!1},"stopAnimationLoop"),startAnimationLoop:o(function(){var e=this;if(e._private.animationsRunning=!0,!e.styleEnabled())return;function r(){e._private.animationsRunning&&A6(o(function(a){bme(a,e),r()},"animationStep"))}o(r,"headlessStep");var n=e.renderer();n&&n.beforeRender?n.beforeRender(o(function(a,s){bme(s,e)},"rendererAnimationStep"),n.beforeRenderPriorities.animations):r()},"startAnimationLoop")},wJe={qualifierCompare:o(function(e,r){return e==null||r==null?e==null&&r==null:e.sameText(r)},"qualifierCompare"),eventMatches:o(function(e,r,n){var i=r.qualifier;return i!=null?e!==n.target&&pb(n.target)&&i.matches(n.target):!0},"eventMatches"),addEventFields:o(function(e,r){r.cy=e,r.target=e},"addEventFields"),callbackContext:o(function(e,r,n){return r.qualifier!=null?n.target:e},"callbackContext")},p6=o(function(e){return Zt(e)?new Pf(e):e},"argSelector"),qge={createEmitter:o(function(){var e=this._private;return e.emitter||(e.emitter=new q6(wJe,this)),this},"createEmitter"),emitter:o(function(){return this._private.emitter},"emitter"),on:o(function(e,r,n){return this.emitter().on(e,p6(r),n),this},"on"),removeListener:o(function(e,r,n){return this.emitter().removeListener(e,p6(r),n),this},"removeListener"),removeAllListeners:o(function(){return this.emitter().removeAllListeners(),this},"removeAllListeners"),one:o(function(e,r,n){return this.emitter().one(e,p6(r),n),this},"one"),once:o(function(e,r,n){return this.emitter().one(e,p6(r),n),this},"once"),emit:o(function(e,r){return this.emitter().emit(e,r),this},"emit"),emitAndNotify:o(function(e,r){return this.emit(e),this.notify(e,r),this},"emitAndNotify")};sn.eventAliasesOn(qge);WP={png:o(function(e){var r=this._private.renderer;return e=e||{},r.png(e)},"png"),jpg:o(function(e){var r=this._private.renderer;return e=e||{},e.bg=e.bg||"#fff",r.jpg(e)},"jpg")};WP.jpeg=WP.jpg;T6={layout:o(function(e){var r=this;if(e==null){di("Layout options must be specified to make a layout");return}if(e.name==null){di("A `name` must be specified to make a layout");return}var n=e.name,i=r.extension("layout",n);if(i==null){di("No such layout `"+n+"` found. Did you forget to import it and `cytoscape.use()` it?");return}var a;Zt(e.eles)?a=r.$(e.eles):a=e.eles!=null?e.eles:r.$();var s=new i(ir({},e,{cy:r,eles:a}));return s},"layout")};T6.createLayout=T6.makeLayout=T6.layout;TJe={notify:o(function(e,r){var n=this._private;if(this.batching()){n.batchNotifications=n.batchNotifications||{};var i=n.batchNotifications[e]=n.batchNotifications[e]||this.collection();r!=null&&i.merge(r);return}if(n.notificationsEnabled){var a=this.renderer();this.destroyed()||!a||a.notify(e,r)}},"notify"),notifications:o(function(e){var r=this._private;return e===void 0?r.notificationsEnabled:(r.notificationsEnabled=!!e,this)},"notifications"),noNotifications:o(function(e){this.notifications(!1),e(),this.notifications(!0)},"noNotifications"),batching:o(function(){return this._private.batchCount>0},"batching"),startBatch:o(function(){var e=this._private;return e.batchCount==null&&(e.batchCount=0),e.batchCount===0&&(e.batchStyleEles=this.collection(),e.batchNotifications={}),e.batchCount++,this},"startBatch"),endBatch:o(function(){var e=this._private;if(e.batchCount===0)return this;if(e.batchCount--,e.batchCount===0){e.batchStyleEles.updateStyle();var r=this.renderer();Object.keys(e.batchNotifications).forEach(function(n){var i=e.batchNotifications[n];i.empty()?r.notify(n):r.notify(n,i)})}return this},"endBatch"),batch:o(function(e){return this.startBatch(),e(),this.endBatch(),this},"batch"),batchData:o(function(e){var r=this;return this.batch(function(){for(var n=Object.keys(e),i=0;i0;)r.removeChild(r.childNodes[0]);e._private.renderer=null,e.mutableElements().forEach(function(n){var i=n._private;i.rscratch={},i.rstyle={},i.animation.current=[],i.animation.queue=[]})},"destroyRenderer"),onRender:o(function(e){return this.on("render",e)},"onRender"),offRender:o(function(e){return this.off("render",e)},"offRender")};YP.invalidateDimensions=YP.resize;k6={collection:o(function(e,r){return Zt(e)?this.$(e):wo(e)?e.collection():kn(e)?(r||(r={}),new Aa(this,e,r.unique,r.removed)):new Aa(this)},"collection"),nodes:o(function(e){var r=this.$(function(n){return n.isNode()});return e?r.filter(e):r},"nodes"),edges:o(function(e){var r=this.$(function(n){return n.isEdge()});return e?r.filter(e):r},"edges"),$:o(function(e){var r=this._private.elements;return e?r.filter(e):r.spawnSelf()},"$"),mutableElements:o(function(){return this._private.elements},"mutableElements")};k6.elements=k6.filter=k6.$;Ya={},eb="t",EJe="f";Ya.apply=function(t){for(var e=this,r=e._private,n=r.cy,i=n.collection(),a=0;a0;if(p||d&&m){var g=void 0;p&&m||p?g=h.properties:m&&(g=h.mappedProperties);for(var y=0;y1&&(_=1),l.color){var E=n.valueMin[0],L=n.valueMax[0],S=n.valueMin[1],A=n.valueMax[1],I=n.valueMin[2],D=n.valueMax[2],k=n.valueMin[3]==null?1:n.valueMin[3],R=n.valueMax[3]==null?1:n.valueMax[3],C=[Math.round(E+(L-E)*_),Math.round(S+(A-S)*_),Math.round(I+(D-I)*_),Math.round(k+(R-k)*_)];a={bypass:n.bypass,name:n.name,value:C,strValue:"rgb("+C[0]+", "+C[1]+", "+C[2]+")"}}else if(l.number){var O=n.valueMin+(n.valueMax-n.valueMin)*_;a=this.parse(n.name,O,n.bypass,p)}else return!1;if(!a)return y(),!1;a.mapping=n,n=a;break}case s.data:{for(var N=n.field.split("."),P=d.data,F=0;F0&&a>0){for(var l={},u=!1,h=0;h0?t.delayAnimation(s).play().promise().then(w):w()}).then(function(){return t.animation({style:l,duration:a,easing:t.pstyle("transition-timing-function").value,queue:!1}).play().promise()}).then(function(){r.removeBypasses(t,i),t.emitAndNotify("style"),n.transitioning=!1})}else n.transitioning&&(this.removeBypasses(t,i),t.emitAndNotify("style"),n.transitioning=!1)};Ya.checkTrigger=function(t,e,r,n,i,a){var s=this.properties[e],l=i(s);l!=null&&l(r,n)&&a(s)};Ya.checkZOrderTrigger=function(t,e,r,n){var i=this;this.checkTrigger(t,e,r,n,function(a){return a.triggersZOrder},function(){i._private.cy.notify("zorder",t)})};Ya.checkBoundsTrigger=function(t,e,r,n){this.checkTrigger(t,e,r,n,function(i){return i.triggersBounds},function(i){t.dirtyCompoundBoundsCache(),t.dirtyBoundingBoxCache(),i.triggersBoundsOfParallelBeziers&&e==="curve-style"&&(r==="bezier"||n==="bezier")&&t.parallelEdges().forEach(function(a){a.isBundledBezier()&&a.dirtyBoundingBoxCache()}),i.triggersBoundsOfConnectedEdges&&e==="display"&&(r==="none"||n==="none")&&t.connectedEdges().forEach(function(a){a.dirtyBoundingBoxCache()})})};Ya.checkTriggers=function(t,e,r,n){t.dirtyStyleCache(),this.checkZOrderTrigger(t,e,r,n),this.checkBoundsTrigger(t,e,r,n)};vb={};vb.applyBypass=function(t,e,r,n){var i=this,a=[],s=!0;if(e==="*"||e==="**"){if(r!==void 0)for(var l=0;li.length?n=n.substr(i.length):n=""}o(l,"removeSelAndBlockFromRemaining");function u(){a.length>s.length?a=a.substr(s.length):a=""}for(o(u,"removePropAndValFromRem");;){var h=n.match(/^\s*$/);if(h)break;var f=n.match(/^\s*((?:.|\s)+?)\s*\{((?:.|\s)+?)\}/);if(!f){on("Halting stylesheet parsing: String stylesheet contains more to parse but no selector and block found in: "+n);break}i=f[0];var d=f[1];if(d!=="core"){var p=new Pf(d);if(p.invalid){on("Skipping parsing of block: Invalid selector found in string stylesheet: "+d),l();continue}}var m=f[2],g=!1;a=m;for(var y=[];;){var v=a.match(/^\s*$/);if(v)break;var x=a.match(/^\s*(.+?)\s*:\s*(.+?)(?:\s*;|\s*$)/);if(!x){on("Skipping parsing of block: Invalid formatting of style property and value definitions found in:"+m),g=!0;break}s=x[0];var b=x[1],w=x[2],_=e.properties[b];if(!_){on("Skipping property: Invalid property name in: "+s),u();continue}var T=r.parse(b,w);if(!T){on("Skipping property: Invalid property definition in: "+s),u();continue}y.push({name:b,val:w}),u()}if(g){l();break}r.selector(d);for(var E=0;E=7&&e[0]==="d"&&(f=new RegExp(l.data.regex).exec(e))){if(r)return!1;var p=l.data;return{name:t,value:f,strValue:""+e,mapped:p,field:f[1],bypass:r}}else if(e.length>=10&&e[0]==="m"&&(d=new RegExp(l.mapData.regex).exec(e))){if(r||h.multiple)return!1;var m=l.mapData;if(!(h.color||h.number))return!1;var g=this.parse(t,d[4]);if(!g||g.mapped)return!1;var y=this.parse(t,d[5]);if(!y||y.mapped)return!1;if(g.pfValue===y.pfValue||g.strValue===y.strValue)return on("`"+t+": "+e+"` is not a valid mapper because the output range is zero; converting to `"+t+": "+g.strValue+"`"),this.parse(t,g.strValue);if(h.color){var v=g.value,x=y.value,b=v[0]===x[0]&&v[1]===x[1]&&v[2]===x[2]&&(v[3]===x[3]||(v[3]==null||v[3]===1)&&(x[3]==null||x[3]===1));if(b)return!1}return{name:t,value:d,strValue:""+e,mapped:m,field:d[1],fieldMin:parseFloat(d[2]),fieldMax:parseFloat(d[3]),valueMin:g.value,valueMax:y.value,bypass:r}}}if(h.multiple&&n!=="multiple"){var w;if(u?w=e.split(/\s+/):kn(e)?w=e:w=[e],h.evenMultiple&&w.length%2!==0)return null;for(var _=[],T=[],E=[],L="",S=!1,A=0;A0?" ":"")+I.strValue}return h.validate&&!h.validate(_,T)?null:h.singleEnum&&S?_.length===1&&Zt(_[0])?{name:t,value:_[0],strValue:_[0],bypass:r}:null:{name:t,value:_,pfValue:E,strValue:L,bypass:r,units:T}}var D=o(function(){for(var H=0;Hh.max||h.strictMax&&e===h.max))return null;var N={name:t,value:e,strValue:""+e+(k||""),units:k,bypass:r};return h.unitless||k!=="px"&&k!=="em"?N.pfValue=e:N.pfValue=k==="px"||!k?e:this.getEmSizeInPixels()*e,(k==="ms"||k==="s")&&(N.pfValue=k==="ms"?e:1e3*e),(k==="deg"||k==="rad")&&(N.pfValue=k==="rad"?e:aje(e)),k==="%"&&(N.pfValue=e/100),N}else if(h.propList){var P=[],F=""+e;if(F!=="none"){for(var B=F.split(/\s*,\s*|\s+/),G=0;G0&&l>0&&!isNaN(n.w)&&!isNaN(n.h)&&n.w>0&&n.h>0){u=Math.min((s-2*r)/n.w,(l-2*r)/n.h),u=u>this._private.maxZoom?this._private.maxZoom:u,u=u=n.minZoom&&(n.maxZoom=r),this},"zoomRange"),minZoom:o(function(e){return e===void 0?this._private.minZoom:this.zoomRange({min:e})},"minZoom"),maxZoom:o(function(e){return e===void 0?this._private.maxZoom:this.zoomRange({max:e})},"maxZoom"),getZoomedViewport:o(function(e){var r=this._private,n=r.pan,i=r.zoom,a,s,l=!1;if(r.zoomingEnabled||(l=!0),xt(e)?s=e:Ur(e)&&(s=e.level,e.position!=null?a=$6(e.position,i,n):e.renderedPosition!=null&&(a=e.renderedPosition),a!=null&&!r.panningEnabled&&(l=!0)),s=s>r.maxZoom?r.maxZoom:s,s=sr.maxZoom||!r.zoomingEnabled?s=!0:(r.zoom=u,a.push("zoom"))}if(i&&(!s||!e.cancelOnFailedZoom)&&r.panningEnabled){var h=e.pan;xt(h.x)&&(r.pan.x=h.x,l=!1),xt(h.y)&&(r.pan.y=h.y,l=!1),l||a.push("pan")}return a.length>0&&(a.push("viewport"),this.emit(a.join(" ")),this.notify("viewport")),this},"viewport"),center:o(function(e){var r=this.getCenterPan(e);return r&&(this._private.pan=r,this.emit("pan viewport"),this.notify("viewport")),this},"center"),getCenterPan:o(function(e,r){if(this._private.panningEnabled){if(Zt(e)){var n=e;e=this.mutableElements().filter(n)}else wo(e)||(e=this.mutableElements());if(e.length!==0){var i=e.boundingBox(),a=this.width(),s=this.height();r=r===void 0?this._private.zoom:r;var l={x:(a-r*(i.x1+i.x2))/2,y:(s-r*(i.y1+i.y2))/2};return l}}},"getCenterPan"),reset:o(function(){return!this._private.panningEnabled||!this._private.zoomingEnabled?this:(this.viewport({pan:{x:0,y:0},zoom:1}),this)},"reset"),invalidateSize:o(function(){this._private.sizeCache=null},"invalidateSize"),size:o(function(){var e=this._private,r=e.container,n=this;return e.sizeCache=e.sizeCache||(r?function(){var i=n.window().getComputedStyle(r),a=o(function(l){return parseFloat(i.getPropertyValue(l))},"val");return{width:r.clientWidth-a("padding-left")-a("padding-right"),height:r.clientHeight-a("padding-top")-a("padding-bottom")}}():{width:1,height:1})},"size"),width:o(function(){return this.size().width},"width"),height:o(function(){return this.size().height},"height"),extent:o(function(){var e=this._private.pan,r=this._private.zoom,n=this.renderedExtent(),i={x1:(n.x1-e.x)/r,x2:(n.x2-e.x)/r,y1:(n.y1-e.y)/r,y2:(n.y2-e.y)/r};return i.w=i.x2-i.x1,i.h=i.y2-i.y1,i},"extent"),renderedExtent:o(function(){var e=this.width(),r=this.height();return{x1:0,y1:0,x2:e,y2:r,w:e,h:r}},"renderedExtent"),multiClickDebounceTime:o(function(e){if(e)this._private.multiClickDebounceTime=e;else return this._private.multiClickDebounceTime;return this},"multiClickDebounceTime")};J0.centre=J0.center;J0.autolockNodes=J0.autolock;J0.autoungrabifyNodes=J0.autoungrabify;hb={data:sn.data({field:"data",bindingEvent:"data",allowBinding:!0,allowSetting:!0,settingEvent:"data",settingTriggersEvent:!0,triggerFnName:"trigger",allowGetting:!0,updateStyle:!0}),removeData:sn.removeData({field:"data",event:"data",triggerFnName:"trigger",triggerEvent:!0,updateStyle:!0}),scratch:sn.data({field:"scratch",bindingEvent:"scratch",allowBinding:!0,allowSetting:!0,settingEvent:"scratch",settingTriggersEvent:!0,triggerFnName:"trigger",allowGetting:!0,updateStyle:!0}),removeScratch:sn.removeData({field:"scratch",event:"scratch",triggerFnName:"trigger",triggerEvent:!0,updateStyle:!0})};hb.attr=hb.data;hb.removeAttr=hb.removeData;fb=o(function(e){var r=this;e=ir({},e);var n=e.container;n&&!C6(n)&&C6(n[0])&&(n=n[0]);var i=n?n._cyreg:null;i=i||{},i&&i.cy&&(i.cy.destroy(),i={});var a=i.readies=i.readies||[];n&&(n._cyreg=i),i.cy=r;var s=Xi!==void 0&&n!==void 0&&!e.headless,l=e;l.layout=ir({name:s?"grid":"null"},l.layout),l.renderer=ir({name:s?"canvas":"null"},l.renderer);var u=o(function(g,y,v){return y!==void 0?y:v!==void 0?v:g},"defVal"),h=this._private={container:n,ready:!1,options:l,elements:new Aa(this),listeners:[],aniEles:new Aa(this),data:l.data||{},scratch:{},layout:null,renderer:null,destroyed:!1,notificationsEnabled:!0,minZoom:1e-50,maxZoom:1e50,zoomingEnabled:u(!0,l.zoomingEnabled),userZoomingEnabled:u(!0,l.userZoomingEnabled),panningEnabled:u(!0,l.panningEnabled),userPanningEnabled:u(!0,l.userPanningEnabled),boxSelectionEnabled:u(!0,l.boxSelectionEnabled),autolock:u(!1,l.autolock,l.autolockNodes),autoungrabify:u(!1,l.autoungrabify,l.autoungrabifyNodes),autounselectify:u(!1,l.autounselectify),styleEnabled:l.styleEnabled===void 0?s:l.styleEnabled,zoom:xt(l.zoom)?l.zoom:1,pan:{x:Ur(l.pan)&&xt(l.pan.x)?l.pan.x:0,y:Ur(l.pan)&&xt(l.pan.y)?l.pan.y:0},animation:{current:[],queue:[]},hasCompoundNodes:!1,multiClickDebounceTime:u(250,l.multiClickDebounceTime)};this.createEmitter(),this.selectionType(l.selectionType),this.zoomRange({min:l.minZoom,max:l.maxZoom});var f=o(function(g,y){var v=g.some(Lqe);if(v)return C1.all(g).then(y);y(g)},"loadExtData");h.styleEnabled&&r.setStyle([]);var d=ir({},l,l.renderer);r.initRenderer(d);var p=o(function(g,y,v){r.notifications(!1);var x=r.mutableElements();x.length>0&&x.remove(),g!=null&&(Ur(g)||kn(g))&&r.add(g),r.one("layoutready",function(w){r.notifications(!0),r.emit(w),r.one("load",y),r.emitAndNotify("load")}).one("layoutstop",function(){r.one("done",v),r.emit("done")});var b=ir({},r._private.options.layout);b.eles=r.elements(),r.layout(b).run()},"setElesAndLayout");f([l.style,l.elements],function(m){var g=m[0],y=m[1];h.styleEnabled&&r.style().append(g),p(y,function(){r.startAnimationLoop(),h.ready=!0,ni(l.ready)&&r.on("ready",l.ready);for(var v=0;v0,u=Ks(e.boundingBox?e.boundingBox:{x1:0,y1:0,w:r.width(),h:r.height()}),h;if(wo(e.roots))h=e.roots;else if(kn(e.roots)){for(var f=[],d=0;d0;){var O=C(),N=I(O,k);if(N)O.outgoers().filter(function(ce){return ce.isNode()&&n.has(ce)}).forEach(R);else if(N===null){on("Detected double maximal shift for node `"+O.id()+"`. Bailing maximal adjustment due to cycle. Use `options.maximal: true` only on DAGs.");break}}}A();var P=0;if(e.avoidOverlap)for(var F=0;F0&&x[0].length<=3?Ie/2:0),X=2*Math.PI/x[se].length*ke;return se===0&&x[0].length===1&&(ye=1),{x:Q.x+ye*Math.cos(X),y:Q.y+ye*Math.sin(X)}}else{var $e={x:Q.x+(ke+1-(Re+1)/2)*Ce,y:(se+1)*Pe};return $e}},"getPosition");return n.nodes().layoutPositions(this,e,ue),this};LJe={fit:!0,padding:30,boundingBox:void 0,avoidOverlap:!0,nodeDimensionsIncludeLabels:!1,spacingFactor:void 0,radius:void 0,startAngle:3/2*Math.PI,sweep:void 0,clockwise:!0,sort:void 0,animate:!1,animationDuration:500,animationEasing:void 0,animateFilter:o(function(e,r){return!0},"animateFilter"),ready:void 0,stop:void 0,transform:o(function(e,r){return r},"transform")};o(jge,"CircleLayout");jge.prototype.run=function(){var t=this.options,e=t,r=t.cy,n=e.eles,i=e.counterclockwise!==void 0?!e.counterclockwise:e.clockwise,a=n.nodes().not(":parent");e.sort&&(a=a.sort(e.sort));for(var s=Ks(e.boundingBox?e.boundingBox:{x1:0,y1:0,w:r.width(),h:r.height()}),l={x:s.x1+s.w/2,y:s.y1+s.h/2},u=e.sweep===void 0?2*Math.PI-2*Math.PI/a.length:e.sweep,h=u/Math.max(1,a.length-1),f,d=0,p=0;p1&&e.avoidOverlap){d*=1.75;var x=Math.cos(h)-Math.cos(0),b=Math.sin(h)-Math.sin(0),w=Math.sqrt(d*d/(x*x+b*b));f=Math.max(w,f)}var _=o(function(E,L){var S=e.startAngle+L*h*(i?1:-1),A=f*Math.cos(S),I=f*Math.sin(S),D={x:l.x+A,y:l.y+I};return D},"getPos");return n.nodes().layoutPositions(this,e,_),this};DJe={fit:!0,padding:30,startAngle:3/2*Math.PI,sweep:void 0,clockwise:!0,equidistant:!1,minNodeSpacing:10,boundingBox:void 0,avoidOverlap:!0,nodeDimensionsIncludeLabels:!1,height:void 0,width:void 0,spacingFactor:void 0,concentric:o(function(e){return e.degree()},"concentric"),levelWidth:o(function(e){return e.maxDegree()/4},"levelWidth"),animate:!1,animationDuration:500,animationEasing:void 0,animateFilter:o(function(e,r){return!0},"animateFilter"),ready:void 0,stop:void 0,transform:o(function(e,r){return r},"transform")};o(Kge,"ConcentricLayout");Kge.prototype.run=function(){for(var t=this.options,e=t,r=e.counterclockwise!==void 0?!e.counterclockwise:e.clockwise,n=t.cy,i=e.eles,a=i.nodes().not(":parent"),s=Ks(e.boundingBox?e.boundingBox:{x1:0,y1:0,w:n.width(),h:n.height()}),l={x:s.x1+s.w/2,y:s.y1+s.h/2},u=[],h=0,f=0;f0){var T=Math.abs(b[0].value-_.value);T>=v&&(b=[],x.push(b))}b.push(_)}var E=h+e.minNodeSpacing;if(!e.avoidOverlap){var L=x.length>0&&x[0].length>1,S=Math.min(s.w,s.h)/2-E,A=S/(x.length+L?1:0);E=Math.min(E,A)}for(var I=0,D=0;D1&&e.avoidOverlap){var O=Math.cos(C)-Math.cos(0),N=Math.sin(C)-Math.sin(0),P=Math.sqrt(E*E/(O*O+N*N));I=Math.max(P,I)}k.r=I,I+=E}if(e.equidistant){for(var F=0,B=0,G=0;G=t.numIter||(FJe(n,t),n.temperature=n.temperature*t.coolingFactor,n.temperature=t.animationThreshold&&a(),A6(d)}},"frame");f()}else{for(;h;)h=s(u),u++;kme(n,t),l()}return this};Z6.prototype.stop=function(){return this.stopped=!0,this.thread&&this.thread.stop(),this.emit("layoutstop"),this};Z6.prototype.destroy=function(){return this.thread&&this.thread.stop(),this};RJe=o(function(e,r,n){for(var i=n.eles.edges(),a=n.eles.nodes(),s=Ks(n.boundingBox?n.boundingBox:{x1:0,y1:0,w:e.width(),h:e.height()}),l={isCompound:e.hasCompoundNodes(),layoutNodes:[],idToIndex:{},nodeSize:a.size(),graphSet:[],indexToGraph:[],layoutEdges:[],edgeSize:i.size(),temperature:n.initialTemp,clientWidth:s.w,clientHeight:s.h,boundingBox:s},u=n.eles.components(),h={},f=0;f0){l.graphSet.push(S);for(var f=0;fi.count?0:i.graph},"findLCA"),IJe=o(function t(e,r,n,i){var a=i.graphSet[n];if(-10)var d=i.nodeOverlap*f,p=Math.sqrt(l*l+u*u),m=d*l/p,g=d*u/p;else var y=I6(e,l,u),v=I6(r,-1*l,-1*u),x=v.x-y.x,b=v.y-y.y,w=x*x+b*b,p=Math.sqrt(w),d=(e.nodeRepulsion+r.nodeRepulsion)/w,m=d*x/p,g=d*b/p;e.isLocked||(e.offsetX-=m,e.offsetY-=g),r.isLocked||(r.offsetX+=m,r.offsetY+=g)}},"nodeRepulsion"),$Je=o(function(e,r,n,i){if(n>0)var a=e.maxX-r.minX;else var a=r.maxX-e.minX;if(i>0)var s=e.maxY-r.minY;else var s=r.maxY-e.minY;return a>=0&&s>=0?Math.sqrt(a*a+s*s):0},"nodesOverlap"),I6=o(function(e,r,n){var i=e.positionX,a=e.positionY,s=e.height||1,l=e.width||1,u=n/r,h=s/l,f={};return r===0&&0n?(f.x=i,f.y=a+s/2,f):0r&&-1*h<=u&&u<=h?(f.x=i-l/2,f.y=a-l*n/2/r,f):0=h)?(f.x=i+s*r/2/n,f.y=a+s/2,f):(0>n&&(u<=-1*h||u>=h)&&(f.x=i-s*r/2/n,f.y=a-s/2),f)},"findClippingPoint"),VJe=o(function(e,r){for(var n=0;nn){var v=r.gravity*m/y,x=r.gravity*g/y;p.offsetX+=v,p.offsetY+=x}}}}},"calculateGravityForces"),HJe=o(function(e,r){var n=[],i=0,a=-1;for(n.push.apply(n,e.graphSet[0]),a+=e.graphSet[0].length;i<=a;){var s=n[i++],l=e.idToIndex[s],u=e.layoutNodes[l],h=u.children;if(0n)var a={x:n*e/i,y:n*r/i};else var a={x:e,y:r};return a},"limitForce"),qJe=o(function t(e,r){var n=e.parentId;if(n!=null){var i=r.layoutNodes[r.idToIndex[n]],a=!1;if((i.maxX==null||e.maxX+i.padRight>i.maxX)&&(i.maxX=e.maxX+i.padRight,a=!0),(i.minX==null||e.minX-i.padLefti.maxY)&&(i.maxY=e.maxY+i.padBottom,a=!0),(i.minY==null||e.minY-i.padTopx&&(g+=v+r.componentSpacing,m=0,y=0,v=0)}}},"separateComponents"),XJe={fit:!0,padding:30,boundingBox:void 0,avoidOverlap:!0,avoidOverlapPadding:10,nodeDimensionsIncludeLabels:!1,spacingFactor:void 0,condense:!1,rows:void 0,cols:void 0,position:o(function(e){},"position"),sort:void 0,animate:!1,animationDuration:500,animationEasing:void 0,animateFilter:o(function(e,r){return!0},"animateFilter"),ready:void 0,stop:void 0,transform:o(function(e,r){return r},"transform")};o(Zge,"GridLayout");Zge.prototype.run=function(){var t=this.options,e=t,r=t.cy,n=e.eles,i=n.nodes().not(":parent");e.sort&&(i=i.sort(e.sort));var a=Ks(e.boundingBox?e.boundingBox:{x1:0,y1:0,w:r.width(),h:r.height()});if(a.h===0||a.w===0)n.nodes().layoutPositions(this,e,function(Z){return{x:a.x1,y:a.y1}});else{var s=i.size(),l=Math.sqrt(s*a.h/a.w),u=Math.round(l),h=Math.round(a.w/a.h*l),f=o(function(j){if(j==null)return Math.min(u,h);var oe=Math.min(u,h);oe==u?u=j:h=j},"small"),d=o(function(j){if(j==null)return Math.max(u,h);var oe=Math.max(u,h);oe==u?u=j:h=j},"large"),p=e.rows,m=e.cols!=null?e.cols:e.columns;if(p!=null&&m!=null)u=p,h=m;else if(p!=null&&m==null)u=p,h=Math.ceil(s/u);else if(p==null&&m!=null)h=m,u=Math.ceil(s/h);else if(h*u>s){var g=f(),y=d();(g-1)*y>=s?f(g-1):(y-1)*g>=s&&d(y-1)}else for(;h*u=s?d(x+1):f(v+1)}var b=a.w/h,w=a.h/u;if(e.condense&&(b=0,w=0),e.avoidOverlap)for(var _=0;_=h&&(O=0,C++)},"moveToNextCell"),P={},F=0;F(O=vje(t,e,N[P],N[P+1],N[P+2],N[P+3])))return v(L,O),!0}else if(A.edgeType==="bezier"||A.edgeType==="multibezier"||A.edgeType==="self"||A.edgeType==="compound"){for(var N=A.allpts,P=0;P+5(O=yje(t,e,N[P],N[P+1],N[P+2],N[P+3],N[P+4],N[P+5])))return v(L,O),!0}for(var F=F||S.source,B=B||S.target,G=i.getArrowWidth(I,D),z=[{name:"source",x:A.arrowStartX,y:A.arrowStartY,angle:A.srcArrowAngle},{name:"target",x:A.arrowEndX,y:A.arrowEndY,angle:A.tgtArrowAngle},{name:"mid-source",x:A.midX,y:A.midY,angle:A.midsrcArrowAngle},{name:"mid-target",x:A.midX,y:A.midY,angle:A.midtgtArrowAngle}],P=0;P0&&(x(F),x(B))}o(b,"checkEdge");function w(L,S,A){return Ql(L,S,A)}o(w,"preprop");function _(L,S){var A=L._private,I=p,D;S?D=S+"-":D="",L.boundingBox();var k=A.labelBounds[S||"main"],R=L.pstyle(D+"label").value,C=L.pstyle("text-events").strValue==="yes";if(!(!C||!R)){var O=w(A.rscratch,"labelX",S),N=w(A.rscratch,"labelY",S),P=w(A.rscratch,"labelAngle",S),F=L.pstyle(D+"text-margin-x").pfValue,B=L.pstyle(D+"text-margin-y").pfValue,G=k.x1-I-F,z=k.x2+I-F,W=k.y1-I-B,Z=k.y2+I-B;if(P){var j=Math.cos(P),oe=Math.sin(P),K=o(function(ue,ce){return ue=ue-O,ce=ce-N,{x:ue*j-ce*oe+O,y:ue*oe+ce*j+N}},"rotate"),ee=K(G,W),J=K(G,Z),H=K(z,W),q=K(z,Z),Q=[ee.x+F,ee.y+B,H.x+F,H.y+B,q.x+F,q.y+B,J.x+F,J.y+B];if(js(t,e,Q))return v(L),!0}else if(T1(k,t,e))return v(L),!0}}o(_,"checkLabel");for(var T=s.length-1;T>=0;T--){var E=s[T];E.isNode()?x(E)||_(E):b(E)||_(E)||_(E,"source")||_(E,"target")}return l};tp.getAllInBox=function(t,e,r,n){var i=this.getCachedZSortedEles().interactive,a=[],s=Math.min(t,r),l=Math.max(t,r),u=Math.min(e,n),h=Math.max(e,n);t=s,r=l,e=u,n=h;for(var f=Ks({x1:t,y1:e,x2:r,y2:n}),d=0;d0?-(Math.PI-e.ang):Math.PI+e.ang},"invertVec"),eet=o(function(e,r,n,i,a){if(e!==_me?Lme(r,e,Qc):JJe(cl,Qc),Lme(r,n,cl),Cme=Qc.nx*cl.ny-Qc.ny*cl.nx,Ame=Qc.nx*cl.nx-Qc.ny*-cl.ny,nh=Math.asin(Math.max(-1,Math.min(1,Cme))),Math.abs(nh)<1e-6){qP=r.x,XP=r.y,W0=d1=0;return}Y0=1,E6=!1,Ame<0?nh<0?nh=Math.PI+nh:(nh=Math.PI-nh,Y0=-1,E6=!0):nh>0&&(Y0=-1,E6=!0),r.radius!==void 0?d1=r.radius:d1=i,$0=nh/2,m6=Math.min(Qc.len/2,cl.len/2),a?(Kc=Math.abs(Math.cos($0)*d1/Math.sin($0)),Kc>m6?(Kc=m6,W0=Math.abs(Kc*Math.sin($0)/Math.cos($0))):W0=d1):(Kc=Math.min(m6,d1),W0=Math.abs(Kc*Math.sin($0)/Math.cos($0))),jP=r.x+cl.nx*Kc,KP=r.y+cl.ny*Kc,qP=jP-cl.ny*W0*Y0,XP=KP+cl.nx*W0*Y0,r1e=r.x+Qc.nx*Kc,n1e=r.y+Qc.ny*Kc,_me=r},"calcCornerArc");o(i1e,"drawPreparedRoundCorner");o(TB,"getRoundCorner");qa={};qa.findMidptPtsEtc=function(t,e){var r=e.posPts,n=e.intersectionPts,i=e.vectorNormInverse,a,s=t.pstyle("source-endpoint"),l=t.pstyle("target-endpoint"),u=s.units!=null&&l.units!=null,h=o(function(T,E,L,S){var A=S-E,I=L-T,D=Math.sqrt(I*I+A*A);return{x:-A/D,y:I/D}},"recalcVectorNormInverse"),f=t.pstyle("edge-distances").value;switch(f){case"node-position":a=r;break;case"intersection":a=n;break;case"endpoints":{if(u){var d=this.manualEndptToPx(t.source()[0],s),p=jl(d,2),m=p[0],g=p[1],y=this.manualEndptToPx(t.target()[0],l),v=jl(y,2),x=v[0],b=v[1],w={x1:m,y1:g,x2:x,y2:b};i=h(m,g,x,b),a=w}else on("Edge ".concat(t.id()," has edge-distances:endpoints specified without manual endpoints specified via source-endpoint and target-endpoint. Falling back on edge-distances:intersection (default).")),a=n;break}}return{midptPts:a,vectorNormInverse:i}};qa.findHaystackPoints=function(t){for(var e=0;e0?Math.max(ie-Ee,0):Math.min(ie+Ee,0)},"subDWH"),R=k(I,S),C=k(D,A),O=!1;b===h?x=Math.abs(R)>Math.abs(C)?i:n:b===u||b===l?(x=n,O=!0):(b===a||b===s)&&(x=i,O=!0);var N=x===n,P=N?C:R,F=N?D:I,B=lge(F),G=!1;!(O&&(_||E))&&(b===l&&F<0||b===u&&F>0||b===a&&F>0||b===s&&F<0)&&(B*=-1,P=B*Math.abs(P),G=!0);var z;if(_){var W=T<0?1+T:T;z=W*P}else{var Z=T<0?P:0;z=Z+T*B}var j=o(function(ie){return Math.abs(ie)=Math.abs(P)},"getIsTooClose"),oe=j(z),K=j(Math.abs(P)-Math.abs(z)),ee=oe||K;if(ee&&!G)if(N){var J=Math.abs(F)<=p/2,H=Math.abs(I)<=m/2;if(J){var q=(f.x1+f.x2)/2,Q=f.y1,ae=f.y2;r.segpts=[q,Q,q,ae]}else if(H){var ue=(f.y1+f.y2)/2,ce=f.x1,te=f.x2;r.segpts=[ce,ue,te,ue]}else r.segpts=[f.x1,f.y2]}else{var Ne=Math.abs(F)<=d/2,se=Math.abs(D)<=g/2;if(Ne){var ke=(f.y1+f.y2)/2,Re=f.x1,Ce=f.x2;r.segpts=[Re,ke,Ce,ke]}else if(se){var Pe=(f.x1+f.x2)/2,Ie=f.y1,$e=f.y2;r.segpts=[Pe,Ie,Pe,$e]}else r.segpts=[f.x2,f.y1]}else if(N){var ye=f.y1+z+(v?p/2*B:0),X=f.x1,fe=f.x2;r.segpts=[X,ye,fe,ye]}else{var he=f.x1+z+(v?d/2*B:0),ge=f.y1,ne=f.y2;r.segpts=[he,ge,he,ne]}if(r.isRound){var ve=t.pstyle("taxi-radius").value,U=t.pstyle("radius-type").value[0]==="arc-radius";r.radii=new Array(r.segpts.length/2).fill(ve),r.isArcRadius=new Array(r.segpts.length/2).fill(U)}};qa.tryToCorrectInvalidPoints=function(t,e){var r=t._private.rscratch;if(r.edgeType==="bezier"){var n=e.srcPos,i=e.tgtPos,a=e.srcW,s=e.srcH,l=e.tgtW,u=e.tgtH,h=e.srcShape,f=e.tgtShape,d=e.srcCornerRadius,p=e.tgtCornerRadius,m=e.srcRs,g=e.tgtRs,y=!xt(r.startX)||!xt(r.startY),v=!xt(r.arrowStartX)||!xt(r.arrowStartY),x=!xt(r.endX)||!xt(r.endY),b=!xt(r.arrowEndX)||!xt(r.arrowEndY),w=3,_=this.getArrowWidth(t.pstyle("width").pfValue,t.pstyle("arrow-scale").value)*this.arrowShapeWidth,T=w*_,E=K0({x:r.ctrlpts[0],y:r.ctrlpts[1]},{x:r.startX,y:r.startY}),L=EC.poolIndex()){var O=R;R=C,C=O}var N=A.srcPos=R.position(),P=A.tgtPos=C.position(),F=A.srcW=R.outerWidth(),B=A.srcH=R.outerHeight(),G=A.tgtW=C.outerWidth(),z=A.tgtH=C.outerHeight(),W=A.srcShape=r.nodeShapes[e.getNodeShape(R)],Z=A.tgtShape=r.nodeShapes[e.getNodeShape(C)],j=A.srcCornerRadius=R.pstyle("corner-radius").value==="auto"?"auto":R.pstyle("corner-radius").pfValue,oe=A.tgtCornerRadius=C.pstyle("corner-radius").value==="auto"?"auto":C.pstyle("corner-radius").pfValue,K=A.tgtRs=C._private.rscratch,ee=A.srcRs=R._private.rscratch;A.dirCounts={north:0,west:0,south:0,east:0,northwest:0,southwest:0,northeast:0,southeast:0};for(var J=0;J0){var ae=a,ue=U0(ae,m1(r)),ce=U0(ae,m1(Q)),te=ue;if(ce2){var Ne=U0(ae,{x:Q[2],y:Q[3]});Ne0){var ne=s,ve=U0(ne,m1(r)),U=U0(ne,m1(ge)),Te=ve;if(U2){var ie=U0(ne,{x:ge[2],y:ge[3]});ie=g||L){v={cp:_,segment:E};break}}if(v)break}var S=v.cp,A=v.segment,I=(g-x)/A.length,D=A.t1-A.t0,k=m?A.t0+D*I:A.t1-D*I;k=sb(0,k,1),e=y1(S.p0,S.p1,S.p2,k),p=ret(S.p0,S.p1,S.p2,k);break}case"straight":case"segments":case"haystack":{for(var R=0,C,O,N,P,F=n.allpts.length,B=0;B+3=g));B+=2);var G=g-O,z=G/C;z=sb(0,z,1),e=oje(N,P,z),p=o1e(N,P);break}}s("labelX",d,e.x),s("labelY",d,e.y),s("labelAutoAngle",d,p)}},"calculateEndProjection");h("source"),h("target"),this.applyLabelDimensions(t)}};tu.applyLabelDimensions=function(t){this.applyPrefixedLabelDimensions(t),t.isEdge()&&(this.applyPrefixedLabelDimensions(t,"source"),this.applyPrefixedLabelDimensions(t,"target"))};tu.applyPrefixedLabelDimensions=function(t,e){var r=t._private,n=this.getLabelText(t,e),i=this.calculateLabelDimensions(t,n),a=t.pstyle("line-height").pfValue,s=t.pstyle("text-wrap").strValue,l=Ql(r.rscratch,"labelWrapCachedLines",e)||[],u=s!=="wrap"?1:Math.max(l.length,1),h=i.height/u,f=h*a,d=i.width,p=i.height+(u-1)*(a-1)*h;Df(r.rstyle,"labelWidth",e,d),Df(r.rscratch,"labelWidth",e,d),Df(r.rstyle,"labelHeight",e,p),Df(r.rscratch,"labelHeight",e,p),Df(r.rscratch,"labelLineHeight",e,f)};tu.getLabelText=function(t,e){var r=t._private,n=e?e+"-":"",i=t.pstyle(n+"label").strValue,a=t.pstyle("text-transform").value,s=o(function(Z,j){return j?(Df(r.rscratch,Z,e,j),j):Ql(r.rscratch,Z,e)},"rscratch");if(!i)return"";a=="none"||(a=="uppercase"?i=i.toUpperCase():a=="lowercase"&&(i=i.toLowerCase()));var l=t.pstyle("text-wrap").value;if(l==="wrap"){var u=s("labelKey");if(u!=null&&s("labelWrapKey")===u)return s("labelWrapCachedText");for(var h="\u200B",f=i.split(` +`),d=t.pstyle("text-max-width").pfValue,p=t.pstyle("text-overflow-wrap").value,m=p==="anywhere",g=[],y=/[\s\u200b]+|$/g,v=0;vd){var T=x.matchAll(y),E="",L=0,S=Ume(T),A;try{for(S.s();!(A=S.n()).done;){var I=A.value,D=I[0],k=x.substring(L,I.index);L=I.index+D.length;var R=E.length===0?k:E+k+D,C=this.calculateLabelDimensions(t,R),O=C.width;O<=d?E+=k+D:(E&&g.push(E),E=k+D)}}catch(W){S.e(W)}finally{S.f()}E.match(/^[\s\u200b]+$/)||g.push(E)}else g.push(x)}s("labelWrapCachedLines",g),i=s("labelWrapCachedText",g.join(` +`)),s("labelWrapKey",u)}else if(l==="ellipsis"){var N=t.pstyle("text-max-width").pfValue,P="",F="\u2026",B=!1;if(this.calculateLabelDimensions(t,i).widthN)break;P+=i[G],G===i.length-1&&(B=!0)}return B||(P+=F),P}return i};tu.getLabelJustification=function(t){var e=t.pstyle("text-justification").strValue,r=t.pstyle("text-halign").strValue;if(e==="auto")if(t.isNode())switch(r){case"left":return"right";case"right":return"left";default:return"center"}else return"center";else return e};tu.calculateLabelDimensions=function(t,e){var r=this,n=r.cy.window(),i=n.document,a=j0(e,t._private.labelDimsKey),s=r.labelDimCache||(r.labelDimCache=[]),l=s[a];if(l!=null)return l;var u=0,h=t.pstyle("font-style").strValue,f=t.pstyle("font-size").pfValue,d=t.pstyle("font-family").strValue,p=t.pstyle("font-weight").strValue,m=this.labelCalcCanvas,g=this.labelCalcCanvasContext;if(!m){m=this.labelCalcCanvas=i.createElement("canvas"),g=this.labelCalcCanvasContext=m.getContext("2d");var y=m.style;y.position="absolute",y.left="-9999px",y.top="-9999px",y.zIndex="-1",y.visibility="hidden",y.pointerEvents="none"}g.font="".concat(h," ").concat(p," ").concat(f,"px ").concat(d);for(var v=0,x=0,b=e.split(` +`),w=0;w1&&arguments[1]!==void 0?arguments[1]:!0;if(e.merge(s),l)for(var u=0;u=t.desktopTapThreshold2}var yt=i(X);Oe&&(t.hoverData.tapholdCancelled=!0);var Ue=o(function(){var Bt=t.hoverData.dragDelta=t.hoverData.dragDelta||[];Bt.length===0?(Bt.push(me[0]),Bt.push(me[1])):(Bt[0]+=me[0],Bt[1]+=me[1])},"updateDragDelta");he=!0,n(Ae,["mousemove","vmousemove","tapdrag"],X,{x:U[0],y:U[1]});var tt=o(function(){t.data.bgActivePosistion=void 0,t.hoverData.selecting||ge.emit({originalEvent:X,type:"boxstart",position:{x:U[0],y:U[1]}}),Ee[4]=1,t.hoverData.selecting=!0,t.redrawHint("select",!0),t.redraw()},"goIntoBoxMode");if(t.hoverData.which===3){if(Oe){var ht={originalEvent:X,type:"cxtdrag",position:{x:U[0],y:U[1]}};Be?Be.emit(ht):ge.emit(ht),t.hoverData.cxtDragged=!0,(!t.hoverData.cxtOver||Ae!==t.hoverData.cxtOver)&&(t.hoverData.cxtOver&&t.hoverData.cxtOver.emit({originalEvent:X,type:"cxtdragout",position:{x:U[0],y:U[1]}}),t.hoverData.cxtOver=Ae,Ae&&Ae.emit({originalEvent:X,type:"cxtdragover",position:{x:U[0],y:U[1]}}))}}else if(t.hoverData.dragging){if(he=!0,ge.panningEnabled()&&ge.userPanningEnabled()){var Et;if(t.hoverData.justStartedPan){var er=t.hoverData.mdownPos;Et={x:(U[0]-er[0])*ne,y:(U[1]-er[1])*ne},t.hoverData.justStartedPan=!1}else Et={x:me[0]*ne,y:me[1]*ne};ge.panBy(Et),ge.emit("dragpan"),t.hoverData.dragged=!0}U=t.projectIntoViewport(X.clientX,X.clientY)}else if(Ee[4]==1&&(Be==null||Be.pannable())){if(Oe){if(!t.hoverData.dragging&&ge.boxSelectionEnabled()&&(yt||!ge.panningEnabled()||!ge.userPanningEnabled()))tt();else if(!t.hoverData.selecting&&ge.panningEnabled()&&ge.userPanningEnabled()){var dt=a(Be,t.hoverData.downs);dt&&(t.hoverData.dragging=!0,t.hoverData.justStartedPan=!0,Ee[4]=0,t.data.bgActivePosistion=m1(Te),t.redrawHint("select",!0),t.redraw())}Be&&Be.pannable()&&Be.active()&&Be.unactivate()}}else{if(Be&&Be.pannable()&&Be.active()&&Be.unactivate(),(!Be||!Be.grabbed())&&Ae!=Ge&&(Ge&&n(Ge,["mouseout","tapdragout"],X,{x:U[0],y:U[1]}),Ae&&n(Ae,["mouseover","tapdragover"],X,{x:U[0],y:U[1]}),t.hoverData.last=Ae),Be)if(Oe){if(ge.boxSelectionEnabled()&&yt)Be&&Be.grabbed()&&(v(He),Be.emit("freeon"),He.emit("free"),t.dragData.didDrag&&(Be.emit("dragfreeon"),He.emit("dragfree"))),tt();else if(Be&&Be.grabbed()&&t.nodeIsDraggable(Be)){var Je=!t.dragData.didDrag;Je&&t.redrawHint("eles",!0),t.dragData.didDrag=!0,t.hoverData.draggingEles||g(He,{inDragLayer:!0});var ct={x:0,y:0};if(xt(me[0])&&xt(me[1])&&(ct.x+=me[0],ct.y+=me[1],Je)){var Ct=t.hoverData.dragDelta;Ct&&xt(Ct[0])&&xt(Ct[1])&&(ct.x+=Ct[0],ct.y+=Ct[1])}t.hoverData.draggingEles=!0,He.silentShift(ct).emit("position drag"),t.redrawHint("drag",!0),t.redraw()}}else Ue();he=!0}if(Ee[2]=U[0],Ee[3]=U[1],he)return X.stopPropagation&&X.stopPropagation(),X.preventDefault&&X.preventDefault(),!1}},"mousemoveHandler"),!1);var I,D,k;t.registerBinding(e,"mouseup",o(function(X){if(!(t.hoverData.which===1&&X.which!==1&&t.hoverData.capture)){var fe=t.hoverData.capture;if(fe){t.hoverData.capture=!1;var he=t.cy,ge=t.projectIntoViewport(X.clientX,X.clientY),ne=t.selection,ve=t.findNearestElement(ge[0],ge[1],!0,!1),U=t.dragData.possibleDragElements,Te=t.hoverData.down,ie=i(X);if(t.data.bgActivePosistion&&(t.redrawHint("select",!0),t.redraw()),t.hoverData.tapholdCancelled=!0,t.data.bgActivePosistion=void 0,Te&&Te.unactivate(),t.hoverData.which===3){var Ee={originalEvent:X,type:"cxttapend",position:{x:ge[0],y:ge[1]}};if(Te?Te.emit(Ee):he.emit(Ee),!t.hoverData.cxtDragged){var Ae={originalEvent:X,type:"cxttap",position:{x:ge[0],y:ge[1]}};Te?Te.emit(Ae):he.emit(Ae)}t.hoverData.cxtDragged=!1,t.hoverData.which=null}else if(t.hoverData.which===1){if(n(ve,["mouseup","tapend","vmouseup"],X,{x:ge[0],y:ge[1]}),!t.dragData.didDrag&&!t.hoverData.dragged&&!t.hoverData.selecting&&!t.hoverData.isOverThresholdDrag&&(n(Te,["click","tap","vclick"],X,{x:ge[0],y:ge[1]}),D=!1,X.timeStamp-k<=he.multiClickDebounceTime()?(I&&clearTimeout(I),D=!0,k=null,n(Te,["dblclick","dbltap","vdblclick"],X,{x:ge[0],y:ge[1]})):(I=setTimeout(function(){D||n(Te,["oneclick","onetap","voneclick"],X,{x:ge[0],y:ge[1]})},he.multiClickDebounceTime()),k=X.timeStamp)),Te==null&&!t.dragData.didDrag&&!t.hoverData.selecting&&!t.hoverData.dragged&&!i(X)&&(he.$(r).unselect(["tapunselect"]),U.length>0&&t.redrawHint("eles",!0),t.dragData.possibleDragElements=U=he.collection()),ve==Te&&!t.dragData.didDrag&&!t.hoverData.selecting&&ve!=null&&ve._private.selectable&&(t.hoverData.dragging||(he.selectionType()==="additive"||ie?ve.selected()?ve.unselect(["tapunselect"]):ve.select(["tapselect"]):ie||(he.$(r).unmerge(ve).unselect(["tapunselect"]),ve.select(["tapselect"]))),t.redrawHint("eles",!0)),t.hoverData.selecting){var Ge=he.collection(t.getAllInBox(ne[0],ne[1],ne[2],ne[3]));t.redrawHint("select",!0),Ge.length>0&&t.redrawHint("eles",!0),he.emit({type:"boxend",originalEvent:X,position:{x:ge[0],y:ge[1]}});var Be=o(function(Oe){return Oe.selectable()&&!Oe.selected()},"eleWouldBeSelected");he.selectionType()==="additive"||ie||he.$(r).unmerge(Ge).unselect(),Ge.emit("box").stdFilter(Be).select().emit("boxselect"),t.redraw()}if(t.hoverData.dragging&&(t.hoverData.dragging=!1,t.redrawHint("select",!0),t.redrawHint("eles",!0),t.redraw()),!ne[4]){t.redrawHint("drag",!0),t.redrawHint("eles",!0);var me=Te&&Te.grabbed();v(U),me&&(Te.emit("freeon"),U.emit("free"),t.dragData.didDrag&&(Te.emit("dragfreeon"),U.emit("dragfree")))}}ne[4]=0,t.hoverData.down=null,t.hoverData.cxtStarted=!1,t.hoverData.draggingEles=!1,t.hoverData.selecting=!1,t.hoverData.isOverThresholdDrag=!1,t.dragData.didDrag=!1,t.hoverData.dragged=!1,t.hoverData.dragDelta=[],t.hoverData.mdownPos=null,t.hoverData.mdownGPos=null,t.hoverData.which=null}}},"mouseupHandler"),!1);var R=o(function(X){if(!t.scrollingPage){var fe=t.cy,he=fe.zoom(),ge=fe.pan(),ne=t.projectIntoViewport(X.clientX,X.clientY),ve=[ne[0]*he+ge.x,ne[1]*he+ge.y];if(t.hoverData.draggingEles||t.hoverData.dragging||t.hoverData.cxtStarted||S()){X.preventDefault();return}if(fe.panningEnabled()&&fe.userPanningEnabled()&&fe.zoomingEnabled()&&fe.userZoomingEnabled()){X.preventDefault(),t.data.wheelZooming=!0,clearTimeout(t.data.wheelTimeout),t.data.wheelTimeout=setTimeout(function(){t.data.wheelZooming=!1,t.redrawHint("eles",!0),t.redraw()},150);var U;X.deltaY!=null?U=X.deltaY/-250:X.wheelDeltaY!=null?U=X.wheelDeltaY/1e3:U=X.wheelDelta/1e3,U=U*t.wheelSensitivity;var Te=X.deltaMode===1;Te&&(U*=33);var ie=fe.zoom()*Math.pow(10,U);X.type==="gesturechange"&&(ie=t.gestureStartZoom*X.scale),fe.zoom({level:ie,renderedPosition:{x:ve[0],y:ve[1]}}),fe.emit(X.type==="gesturechange"?"pinchzoom":"scrollzoom")}}},"wheelHandler");t.registerBinding(t.container,"wheel",R,!0),t.registerBinding(e,"scroll",o(function(X){t.scrollingPage=!0,clearTimeout(t.scrollingPageTimeout),t.scrollingPageTimeout=setTimeout(function(){t.scrollingPage=!1},250)},"scrollHandler"),!0),t.registerBinding(t.container,"gesturestart",o(function(X){t.gestureStartZoom=t.cy.zoom(),t.hasTouchStarted||X.preventDefault()},"gestureStartHandler"),!0),t.registerBinding(t.container,"gesturechange",function(ye){t.hasTouchStarted||R(ye)},!0),t.registerBinding(t.container,"mouseout",o(function(X){var fe=t.projectIntoViewport(X.clientX,X.clientY);t.cy.emit({originalEvent:X,type:"mouseout",position:{x:fe[0],y:fe[1]}})},"mouseOutHandler"),!1),t.registerBinding(t.container,"mouseover",o(function(X){var fe=t.projectIntoViewport(X.clientX,X.clientY);t.cy.emit({originalEvent:X,type:"mouseover",position:{x:fe[0],y:fe[1]}})},"mouseOverHandler"),!1);var C,O,N,P,F,B,G,z,W,Z,j,oe,K,ee=o(function(X,fe,he,ge){return Math.sqrt((he-X)*(he-X)+(ge-fe)*(ge-fe))},"distance"),J=o(function(X,fe,he,ge){return(he-X)*(he-X)+(ge-fe)*(ge-fe)},"distanceSq"),H;t.registerBinding(t.container,"touchstart",H=o(function(X){if(t.hasTouchStarted=!0,!!A(X)){b(),t.touchData.capture=!0,t.data.bgActivePosistion=void 0;var fe=t.cy,he=t.touchData.now,ge=t.touchData.earlier;if(X.touches[0]){var ne=t.projectIntoViewport(X.touches[0].clientX,X.touches[0].clientY);he[0]=ne[0],he[1]=ne[1]}if(X.touches[1]){var ne=t.projectIntoViewport(X.touches[1].clientX,X.touches[1].clientY);he[2]=ne[0],he[3]=ne[1]}if(X.touches[2]){var ne=t.projectIntoViewport(X.touches[2].clientX,X.touches[2].clientY);he[4]=ne[0],he[5]=ne[1]}if(X.touches[1]){t.touchData.singleTouchMoved=!0,v(t.dragData.touchDragEles);var ve=t.findContainerClientCoords();W=ve[0],Z=ve[1],j=ve[2],oe=ve[3],C=X.touches[0].clientX-W,O=X.touches[0].clientY-Z,N=X.touches[1].clientX-W,P=X.touches[1].clientY-Z,K=0<=C&&C<=j&&0<=N&&N<=j&&0<=O&&O<=oe&&0<=P&&P<=oe;var U=fe.pan(),Te=fe.zoom();F=ee(C,O,N,P),B=J(C,O,N,P),G=[(C+N)/2,(O+P)/2],z=[(G[0]-U.x)/Te,(G[1]-U.y)/Te];var ie=200,Ee=ie*ie;if(B=1){for(var bt=t.touchData.startPosition=[null,null,null,null,null,null],kt=0;kt=t.touchTapThreshold2}if(fe&&t.touchData.cxt){X.preventDefault();var bt=X.touches[0].clientX-W,kt=X.touches[0].clientY-Z,vt=X.touches[1].clientX-W,rt=X.touches[1].clientY-Z,yt=J(bt,kt,vt,rt),Ue=yt/B,tt=150,ht=tt*tt,Et=1.5,er=Et*Et;if(Ue>=er||yt>=ht){t.touchData.cxt=!1,t.data.bgActivePosistion=void 0,t.redrawHint("select",!0);var dt={originalEvent:X,type:"cxttapend",position:{x:ne[0],y:ne[1]}};t.touchData.start?(t.touchData.start.unactivate().emit(dt),t.touchData.start=null):ge.emit(dt)}}if(fe&&t.touchData.cxt){var dt={originalEvent:X,type:"cxtdrag",position:{x:ne[0],y:ne[1]}};t.data.bgActivePosistion=void 0,t.redrawHint("select",!0),t.touchData.start?t.touchData.start.emit(dt):ge.emit(dt),t.touchData.start&&(t.touchData.start._private.grabbed=!1),t.touchData.cxtDragged=!0;var Je=t.findNearestElement(ne[0],ne[1],!0,!0);(!t.touchData.cxtOver||Je!==t.touchData.cxtOver)&&(t.touchData.cxtOver&&t.touchData.cxtOver.emit({originalEvent:X,type:"cxtdragout",position:{x:ne[0],y:ne[1]}}),t.touchData.cxtOver=Je,Je&&Je.emit({originalEvent:X,type:"cxtdragover",position:{x:ne[0],y:ne[1]}}))}else if(fe&&X.touches[2]&&ge.boxSelectionEnabled())X.preventDefault(),t.data.bgActivePosistion=void 0,this.lastThreeTouch=+new Date,t.touchData.selecting||ge.emit({originalEvent:X,type:"boxstart",position:{x:ne[0],y:ne[1]}}),t.touchData.selecting=!0,t.touchData.didSelect=!0,he[4]=1,!he||he.length===0||he[0]===void 0?(he[0]=(ne[0]+ne[2]+ne[4])/3,he[1]=(ne[1]+ne[3]+ne[5])/3,he[2]=(ne[0]+ne[2]+ne[4])/3+1,he[3]=(ne[1]+ne[3]+ne[5])/3+1):(he[2]=(ne[0]+ne[2]+ne[4])/3,he[3]=(ne[1]+ne[3]+ne[5])/3),t.redrawHint("select",!0),t.redraw();else if(fe&&X.touches[1]&&!t.touchData.didSelect&&ge.zoomingEnabled()&&ge.panningEnabled()&&ge.userZoomingEnabled()&&ge.userPanningEnabled()){X.preventDefault(),t.data.bgActivePosistion=void 0,t.redrawHint("select",!0);var ct=t.dragData.touchDragEles;if(ct){t.redrawHint("drag",!0);for(var Ct=0;Ct0&&!t.hoverData.draggingEles&&!t.swipePanning&&t.data.bgActivePosistion!=null&&(t.data.bgActivePosistion=void 0,t.redrawHint("select",!0),t.redraw())}},"touchmoveHandler"),!1);var Q;t.registerBinding(e,"touchcancel",Q=o(function(X){var fe=t.touchData.start;t.touchData.capture=!1,fe&&fe.unactivate()},"touchcancelHandler"));var ae,ue,ce,te;if(t.registerBinding(e,"touchend",ae=o(function(X){var fe=t.touchData.start,he=t.touchData.capture;if(he)X.touches.length===0&&(t.touchData.capture=!1),X.preventDefault();else return;var ge=t.selection;t.swipePanning=!1,t.hoverData.draggingEles=!1;var ne=t.cy,ve=ne.zoom(),U=t.touchData.now,Te=t.touchData.earlier;if(X.touches[0]){var ie=t.projectIntoViewport(X.touches[0].clientX,X.touches[0].clientY);U[0]=ie[0],U[1]=ie[1]}if(X.touches[1]){var ie=t.projectIntoViewport(X.touches[1].clientX,X.touches[1].clientY);U[2]=ie[0],U[3]=ie[1]}if(X.touches[2]){var ie=t.projectIntoViewport(X.touches[2].clientX,X.touches[2].clientY);U[4]=ie[0],U[5]=ie[1]}fe&&fe.unactivate();var Ee;if(t.touchData.cxt){if(Ee={originalEvent:X,type:"cxttapend",position:{x:U[0],y:U[1]}},fe?fe.emit(Ee):ne.emit(Ee),!t.touchData.cxtDragged){var Ae={originalEvent:X,type:"cxttap",position:{x:U[0],y:U[1]}};fe?fe.emit(Ae):ne.emit(Ae)}t.touchData.start&&(t.touchData.start._private.grabbed=!1),t.touchData.cxt=!1,t.touchData.start=null,t.redraw();return}if(!X.touches[2]&&ne.boxSelectionEnabled()&&t.touchData.selecting){t.touchData.selecting=!1;var Ge=ne.collection(t.getAllInBox(ge[0],ge[1],ge[2],ge[3]));ge[0]=void 0,ge[1]=void 0,ge[2]=void 0,ge[3]=void 0,ge[4]=0,t.redrawHint("select",!0),ne.emit({type:"boxend",originalEvent:X,position:{x:U[0],y:U[1]}});var Be=o(function(ht){return ht.selectable()&&!ht.selected()},"eleWouldBeSelected");Ge.emit("box").stdFilter(Be).select().emit("boxselect"),Ge.nonempty()&&t.redrawHint("eles",!0),t.redraw()}if(fe?.unactivate(),X.touches[2])t.data.bgActivePosistion=void 0,t.redrawHint("select",!0);else if(!X.touches[1]){if(!X.touches[0]){if(!X.touches[0]){t.data.bgActivePosistion=void 0,t.redrawHint("select",!0);var me=t.dragData.touchDragEles;if(fe!=null){var He=fe._private.grabbed;v(me),t.redrawHint("drag",!0),t.redrawHint("eles",!0),He&&(fe.emit("freeon"),me.emit("free"),t.dragData.didDrag&&(fe.emit("dragfreeon"),me.emit("dragfree"))),n(fe,["touchend","tapend","vmouseup","tapdragout"],X,{x:U[0],y:U[1]}),fe.unactivate(),t.touchData.start=null}else{var Oe=t.findNearestElement(U[0],U[1],!0,!0);n(Oe,["touchend","tapend","vmouseup","tapdragout"],X,{x:U[0],y:U[1]})}var et=t.touchData.startPosition[0]-U[0],bt=et*et,kt=t.touchData.startPosition[1]-U[1],vt=kt*kt,rt=bt+vt,yt=rt*ve*ve;t.touchData.singleTouchMoved||(fe||ne.$(":selected").unselect(["tapunselect"]),n(fe,["tap","vclick"],X,{x:U[0],y:U[1]}),ue=!1,X.timeStamp-te<=ne.multiClickDebounceTime()?(ce&&clearTimeout(ce),ue=!0,te=null,n(fe,["dbltap","vdblclick"],X,{x:U[0],y:U[1]})):(ce=setTimeout(function(){ue||n(fe,["onetap","voneclick"],X,{x:U[0],y:U[1]})},ne.multiClickDebounceTime()),te=X.timeStamp)),fe!=null&&!t.dragData.didDrag&&fe._private.selectable&&yt"u"){var Ne=[],se=o(function(X){return{clientX:X.clientX,clientY:X.clientY,force:1,identifier:X.pointerId,pageX:X.pageX,pageY:X.pageY,radiusX:X.width/2,radiusY:X.height/2,screenX:X.screenX,screenY:X.screenY,target:X.target}},"makeTouch"),ke=o(function(X){return{event:X,touch:se(X)}},"makePointer"),Re=o(function(X){Ne.push(ke(X))},"addPointer"),Ce=o(function(X){for(var fe=0;fe0)return W[0]}return null},"getCurveT"),g=Object.keys(p),y=0;y0?m:hge(a,s,e,r,n,i,l,u)},"intersectLine"),checkPoint:o(function(e,r,n,i,a,s,l,u){u=u==="auto"?Q0(i,a):u;var h=2*u;if(ah(e,r,this.points,s,l,i,a-h,[0,-1],n)||ah(e,r,this.points,s,l,i-h,a,[0,-1],n))return!0;var f=i/2+2*n,d=a/2+2*n,p=[s-f,l-d,s-f,l,s+f,l,s+f,l-d];return!!(js(e,r,p)||q0(e,r,h,h,s+i/2-u,l+a/2-u,n)||q0(e,r,h,h,s-i/2+u,l+a/2-u,n))},"checkPoint")}};oh.registerNodeShapes=function(){var t=this.nodeShapes={},e=this;this.generateEllipse(),this.generatePolygon("triangle",ms(3,0)),this.generateRoundPolygon("round-triangle",ms(3,0)),this.generatePolygon("rectangle",ms(4,0)),t.square=t.rectangle,this.generateRoundRectangle(),this.generateCutRectangle(),this.generateBarrel(),this.generateBottomRoundrectangle();{var r=[0,1,1,0,0,-1,-1,0];this.generatePolygon("diamond",r),this.generateRoundPolygon("round-diamond",r)}this.generatePolygon("pentagon",ms(5,0)),this.generateRoundPolygon("round-pentagon",ms(5,0)),this.generatePolygon("hexagon",ms(6,0)),this.generateRoundPolygon("round-hexagon",ms(6,0)),this.generatePolygon("heptagon",ms(7,0)),this.generateRoundPolygon("round-heptagon",ms(7,0)),this.generatePolygon("octagon",ms(8,0)),this.generateRoundPolygon("round-octagon",ms(8,0));var n=new Array(20);{var i=zP(5,0),a=zP(5,Math.PI/5),s=.5*(3-Math.sqrt(5));s*=1.57;for(var l=0;l=e.deqFastCost*_)break}else if(h){if(b>=e.deqCost*m||b>=e.deqAvgCost*p)break}else if(w>=e.deqNoDrawCost*PP)break;var T=e.deq(n,v,y);if(T.length>0)for(var E=0;E0&&(e.onDeqd(n,g),!h&&e.shouldRedraw(n,g,v,y)&&a())},"dequeue"),l=e.priority||sB;i.beforeRender(s,l(n))}},"setupDequeueingImpl")},"setupDequeueing")},iet=function(){function t(e){var r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:_6;tB(this,t),this.idsByKey=new Jc,this.keyForId=new Jc,this.cachesByLvl=new Jc,this.lvls=[],this.getKey=e,this.doesEleInvalidateKey=r}return o(t,"ElementTextureCacheLookup"),rB(t,[{key:"getIdsFor",value:o(function(r){r==null&&di("Can not get id list for null key");var n=this.idsByKey,i=this.idsByKey.get(r);return i||(i=new S1,n.set(r,i)),i},"getIdsFor")},{key:"addIdForKey",value:o(function(r,n){r!=null&&this.getIdsFor(r).add(n)},"addIdForKey")},{key:"deleteIdForKey",value:o(function(r,n){r!=null&&this.getIdsFor(r).delete(n)},"deleteIdForKey")},{key:"getNumberOfIdsForKey",value:o(function(r){return r==null?0:this.getIdsFor(r).size},"getNumberOfIdsForKey")},{key:"updateKeyMappingFor",value:o(function(r){var n=r.id(),i=this.keyForId.get(n),a=this.getKey(r);this.deleteIdForKey(i,n),this.addIdForKey(a,n),this.keyForId.set(n,a)},"updateKeyMappingFor")},{key:"deleteKeyMappingFor",value:o(function(r){var n=r.id(),i=this.keyForId.get(n);this.deleteIdForKey(i,n),this.keyForId.delete(n)},"deleteKeyMappingFor")},{key:"keyHasChangedFor",value:o(function(r){var n=r.id(),i=this.keyForId.get(n),a=this.getKey(r);return i!==a},"keyHasChangedFor")},{key:"isInvalid",value:o(function(r){return this.keyHasChangedFor(r)||this.doesEleInvalidateKey(r)},"isInvalid")},{key:"getCachesAt",value:o(function(r){var n=this.cachesByLvl,i=this.lvls,a=n.get(r);return a||(a=new Jc,n.set(r,a),i.push(r)),a},"getCachesAt")},{key:"getCache",value:o(function(r,n){return this.getCachesAt(n).get(r)},"getCache")},{key:"get",value:o(function(r,n){var i=this.getKey(r),a=this.getCache(i,n);return a!=null&&this.updateKeyMappingFor(r),a},"get")},{key:"getForCachedKey",value:o(function(r,n){var i=this.keyForId.get(r.id()),a=this.getCache(i,n);return a},"getForCachedKey")},{key:"hasCache",value:o(function(r,n){return this.getCachesAt(n).has(r)},"hasCache")},{key:"has",value:o(function(r,n){var i=this.getKey(r);return this.hasCache(i,n)},"has")},{key:"setCache",value:o(function(r,n,i){i.key=r,this.getCachesAt(n).set(r,i)},"setCache")},{key:"set",value:o(function(r,n,i){var a=this.getKey(r);this.setCache(a,n,i),this.updateKeyMappingFor(r)},"set")},{key:"deleteCache",value:o(function(r,n){this.getCachesAt(n).delete(r)},"deleteCache")},{key:"delete",value:o(function(r,n){var i=this.getKey(r);this.deleteCache(i,n)},"_delete")},{key:"invalidateKey",value:o(function(r){var n=this;this.lvls.forEach(function(i){return n.deleteCache(r,i)})},"invalidateKey")},{key:"invalidate",value:o(function(r){var n=r.id(),i=this.keyForId.get(n);this.deleteKeyMappingFor(r);var a=this.doesEleInvalidateKey(r);return a&&this.invalidateKey(i),a||this.getNumberOfIdsForKey(i)===0},"invalidate")}]),t}(),Mme=25,g6=50,S6=-4,QP=3,aet=7.99,set=8,oet=1024,cet=1024,uet=1024,het=.2,fet=.8,det=10,pet=.15,met=.1,get=.9,yet=.9,vet=100,xet=1,g1={dequeue:"dequeue",downscale:"downscale",highQuality:"highQuality"},bet=_a({getKey:null,doesEleInvalidateKey:_6,drawElement:null,getBoundingBox:null,getRotationPoint:null,getRotationOffset:null,isVisible:nge,allowEdgeTxrCaching:!0,allowParentTxrCaching:!0}),Jx=o(function(e,r){var n=this;n.renderer=e,n.onDequeues=[];var i=bet(r);ir(n,i),n.lookup=new iet(i.getKey,i.doesEleInvalidateKey),n.setupDequeueing()},"ElementTextureCache"),Qi=Jx.prototype;Qi.reasons=g1;Qi.getTextureQueue=function(t){var e=this;return e.eleImgCaches=e.eleImgCaches||{},e.eleImgCaches[t]=e.eleImgCaches[t]||[]};Qi.getRetiredTextureQueue=function(t){var e=this,r=e.eleImgCaches.retired=e.eleImgCaches.retired||{},n=r[t]=r[t]||[];return n};Qi.getElementQueue=function(){var t=this,e=t.eleCacheQueue=t.eleCacheQueue||new gb(function(r,n){return n.reqs-r.reqs});return e};Qi.getElementKeyToQueue=function(){var t=this,e=t.eleKeyToCacheQueue=t.eleKeyToCacheQueue||{};return e};Qi.getElement=function(t,e,r,n,i){var a=this,s=this.renderer,l=s.cy.zoom(),u=this.lookup;if(!e||e.w===0||e.h===0||isNaN(e.w)||isNaN(e.h)||!t.visible()||t.removed()||!a.allowEdgeTxrCaching&&t.isEdge()||!a.allowParentTxrCaching&&t.isParent())return null;if(n==null&&(n=Math.ceil(lB(l*r))),n=aet||n>QP)return null;var h=Math.pow(2,n),f=e.h*h,d=e.w*h,p=s.eleTextBiggerThanMin(t,h);if(!this.isVisible(t,p))return null;var m=u.get(t,n);if(m&&m.invalidated&&(m.invalidated=!1,m.texture.invalidatedWidth-=m.width),m)return m;var g;if(f<=Mme?g=Mme:f<=g6?g=g6:g=Math.ceil(f/g6)*g6,f>uet||d>cet)return null;var y=a.getTextureQueue(g),v=y[y.length-2],x=o(function(){return a.recycleTexture(g,d)||a.addTexture(g,d)},"addNewTxr");v||(v=y[y.length-1]),v||(v=x()),v.width-v.usedWidthn;D--)A=a.getElement(t,e,r,D,g1.downscale);I()}else return a.queueElement(t,E.level-1),E;else{var k;if(!w&&!_&&!T)for(var R=n-1;R>=S6;R--){var C=u.get(t,R);if(C){k=C;break}}if(b(k))return a.queueElement(t,n),k;v.context.translate(v.usedWidth,0),v.context.scale(h,h),this.drawElement(v.context,t,e,p,!1),v.context.scale(1/h,1/h),v.context.translate(-v.usedWidth,0)}return m={x:v.usedWidth,texture:v,level:n,scale:h,width:d,height:f,scaledLabelShown:p},v.usedWidth+=Math.ceil(d+set),v.eleCaches.push(m),u.set(t,n,m),a.checkTextureFullness(v),m};Qi.invalidateElements=function(t){for(var e=0;e=het*t.width&&this.retireTexture(t)};Qi.checkTextureFullness=function(t){var e=this,r=e.getTextureQueue(t.height);t.usedWidth/t.width>fet&&t.fullnessChecks>=det?Of(r,t):t.fullnessChecks++};Qi.retireTexture=function(t){var e=this,r=t.height,n=e.getTextureQueue(r),i=this.lookup;Of(n,t),t.retired=!0;for(var a=t.eleCaches,s=0;s=e)return s.retired=!1,s.usedWidth=0,s.invalidatedWidth=0,s.fullnessChecks=0,oB(s.eleCaches),s.context.setTransform(1,0,0,1,0,0),s.context.clearRect(0,0,s.width,s.height),Of(i,s),n.push(s),s}};Qi.queueElement=function(t,e){var r=this,n=r.getElementQueue(),i=r.getElementKeyToQueue(),a=this.getKey(t),s=i[a];if(s)s.level=Math.max(s.level,e),s.eles.merge(t),s.reqs++,n.updateItem(s);else{var l={eles:t.spawn().merge(t),level:e,reqs:1,key:a};n.push(l),i[a]=l}};Qi.dequeue=function(t){for(var e=this,r=e.getElementQueue(),n=e.getElementKeyToQueue(),i=[],a=e.lookup,s=0;s0;s++){var l=r.pop(),u=l.key,h=l.eles[0],f=a.hasCache(h,l.level);if(n[u]=null,f)continue;i.push(l);var d=e.getBoundingBox(h);e.getElement(h,d,t,l.level,g1.dequeue)}return i};Qi.removeFromQueue=function(t){var e=this,r=e.getElementQueue(),n=e.getElementKeyToQueue(),i=this.getKey(t),a=n[i];a!=null&&(a.eles.length===1?(a.reqs=aB,r.updateItem(a),r.pop(),n[i]=null):a.eles.unmerge(t))};Qi.onDequeue=function(t){this.onDequeues.push(t)};Qi.offDequeue=function(t){Of(this.onDequeues,t)};Qi.setupDequeueing=f1e.setupDequeueing({deqRedrawThreshold:vet,deqCost:pet,deqAvgCost:met,deqNoDrawCost:get,deqFastCost:yet,deq:o(function(e,r,n){return e.dequeue(r,n)},"deq"),onDeqd:o(function(e,r){for(var n=0;n=Tet||r>P6)return null}n.validateLayersElesOrdering(r,t);var u=n.layersByLevel,h=Math.pow(2,r),f=u[r]=u[r]||[],d,p=n.levelIsComplete(r,t),m,g=o(function(){var I=o(function(O){if(n.validateLayersElesOrdering(O,t),n.levelIsComplete(O,t))return m=u[O],!0},"canUseAsTmpLvl"),D=o(function(O){if(!m)for(var N=r+O;tb<=N&&N<=P6&&!I(N);N+=O);},"checkLvls");D(1),D(-1);for(var k=f.length-1;k>=0;k--){var R=f[k];R.invalid&&Of(f,R)}},"checkTempLevels");if(!p)g();else return f;var y=o(function(){if(!d){d=Ks();for(var I=0;INet)return null;var R=n.makeLayer(d,r);if(D!=null){var C=f.indexOf(D)+1;f.splice(C,0,R)}else(I.insert===void 0||I.insert)&&f.unshift(R);return R},"makeLayer");if(n.skipping&&!l)return null;for(var x=null,b=t.length/wet,w=!l,_=0;_=b||!uge(x.bb,T.boundingBox()))&&(x=v({insert:!0,after:x}),!x))return null;m||w?n.queueLayer(x,T):n.drawEleInLayer(x,T,r,e),x.eles.push(T),L[r]=x}return m||(w?null:f)};La.getEleLevelForLayerLevel=function(t,e){return t};La.drawEleInLayer=function(t,e,r,n){var i=this,a=this.renderer,s=t.context,l=e.boundingBox();l.w===0||l.h===0||!e.visible()||(r=i.getEleLevelForLayerLevel(r,n),a.setImgSmoothing(s,!1),a.drawCachedElement(s,e,null,null,r,Ret),a.setImgSmoothing(s,!0))};La.levelIsComplete=function(t,e){var r=this,n=r.layersByLevel[t];if(!n||n.length===0)return!1;for(var i=0,a=0;a0||s.invalid)return!1;i+=s.eles.length}return i===e.length};La.validateLayersElesOrdering=function(t,e){var r=this.layersByLevel[t];if(r)for(var n=0;n0){e=!0;break}}return e};La.invalidateElements=function(t){var e=this;t.length!==0&&(e.lastInvalidationTime=ih(),!(t.length===0||!e.haveLayers())&&e.updateElementsInLayers(t,o(function(n,i,a){e.invalidateLayer(n)},"invalAssocLayers")))};La.invalidateLayer=function(t){if(this.lastInvalidationTime=ih(),!t.invalid){var e=t.level,r=t.eles,n=this.layersByLevel[e];Of(n,t),t.elesQueue=[],t.invalid=!0,t.replacement&&(t.replacement.invalid=!0);for(var i=0;i3&&arguments[3]!==void 0?arguments[3]:!0,i=arguments.length>4&&arguments[4]!==void 0?arguments[4]:!0,a=arguments.length>5&&arguments[5]!==void 0?arguments[5]:!0,s=this,l=e._private.rscratch;if(!(a&&!e.visible())&&!(l.badLine||l.allpts==null||isNaN(l.allpts[0]))){var u;r&&(u=r,t.translate(-u.x1,-u.y1));var h=a?e.pstyle("opacity").value:1,f=a?e.pstyle("line-opacity").value:1,d=e.pstyle("curve-style").value,p=e.pstyle("line-style").value,m=e.pstyle("width").pfValue,g=e.pstyle("line-cap").value,y=e.pstyle("line-outline-width").value,v=e.pstyle("line-outline-color").value,x=h*f,b=h*f,w=o(function(){var O=arguments.length>0&&arguments[0]!==void 0?arguments[0]:x;d==="straight-triangle"?(s.eleStrokeStyle(t,e,O),s.drawEdgeTrianglePath(e,t,l.allpts)):(t.lineWidth=m,t.lineCap=g,s.eleStrokeStyle(t,e,O),s.drawEdgePath(e,t,l.allpts,p),t.lineCap="butt")},"drawLine"),_=o(function(){var O=arguments.length>0&&arguments[0]!==void 0?arguments[0]:x;if(t.lineWidth=m+y,t.lineCap=g,y>0)s.colorStrokeStyle(t,v[0],v[1],v[2],O);else{t.lineCap="butt";return}d==="straight-triangle"?s.drawEdgeTrianglePath(e,t,l.allpts):(s.drawEdgePath(e,t,l.allpts,p),t.lineCap="butt")},"drawLineOutline"),T=o(function(){i&&s.drawEdgeOverlay(t,e)},"drawOverlay"),E=o(function(){i&&s.drawEdgeUnderlay(t,e)},"drawUnderlay"),L=o(function(){var O=arguments.length>0&&arguments[0]!==void 0?arguments[0]:b;s.drawArrowheads(t,e,O)},"drawArrows"),S=o(function(){s.drawElementText(t,e,null,n)},"drawText");t.lineJoin="round";var A=e.pstyle("ghost").value==="yes";if(A){var I=e.pstyle("ghost-offset-x").pfValue,D=e.pstyle("ghost-offset-y").pfValue,k=e.pstyle("ghost-opacity").value,R=x*k;t.translate(I,D),w(R),L(R),t.translate(-I,-D)}else _();E(),w(),L(),T(),S(),r&&t.translate(u.x1,u.y1)}};m1e=o(function(e){if(!["overlay","underlay"].includes(e))throw new Error("Invalid state");return function(r,n){if(n.visible()){var i=n.pstyle("".concat(e,"-opacity")).value;if(i!==0){var a=this,s=a.usePaths(),l=n._private.rscratch,u=n.pstyle("".concat(e,"-padding")).pfValue,h=2*u,f=n.pstyle("".concat(e,"-color")).value;r.lineWidth=h,l.edgeType==="self"&&!s?r.lineCap="butt":r.lineCap="round",a.colorStrokeStyle(r,f[0],f[1],f[2],i),a.drawEdgePath(n,r,l.allpts,"solid")}}}},"drawEdgeOverlayUnderlay");lh.drawEdgeOverlay=m1e("overlay");lh.drawEdgeUnderlay=m1e("underlay");lh.drawEdgePath=function(t,e,r,n){var i=t._private.rscratch,a=e,s,l=!1,u=this.usePaths(),h=t.pstyle("line-dash-pattern").pfValue,f=t.pstyle("line-dash-offset").pfValue;if(u){var d=r.join("$"),p=i.pathCacheKey&&i.pathCacheKey===d;p?(s=e=i.pathCache,l=!0):(s=e=new Path2D,i.pathCacheKey=d,i.pathCache=s)}if(a.setLineDash)switch(n){case"dotted":a.setLineDash([1,1]);break;case"dashed":a.setLineDash(h),a.lineDashOffset=f;break;case"solid":a.setLineDash([]);break}if(!l&&!i.badLine)switch(e.beginPath&&e.beginPath(),e.moveTo(r[0],r[1]),i.edgeType){case"bezier":case"self":case"compound":case"multibezier":for(var m=2;m+35&&arguments[5]!==void 0?arguments[5]:!0,s=this;if(n==null){if(a&&!s.eleTextBiggerThanMin(e))return}else if(n===!1)return;if(e.isNode()){var l=e.pstyle("label");if(!l||!l.value)return;var u=s.getLabelJustification(e);t.textAlign=u,t.textBaseline="bottom"}else{var h=e.element()._private.rscratch.badLine,f=e.pstyle("label"),d=e.pstyle("source-label"),p=e.pstyle("target-label");if(h||(!f||!f.value)&&(!d||!d.value)&&(!p||!p.value))return;t.textAlign="center",t.textBaseline="bottom"}var m=!r,g;r&&(g=r,t.translate(-g.x1,-g.y1)),i==null?(s.drawText(t,e,null,m,a),e.isEdge()&&(s.drawText(t,e,"source",m,a),s.drawText(t,e,"target",m,a))):s.drawText(t,e,i,m,a),r&&t.translate(g.x1,g.y1)};rp.getFontCache=function(t){var e;this.fontCaches=this.fontCaches||[];for(var r=0;r2&&arguments[2]!==void 0?arguments[2]:!0,n=e.pstyle("font-style").strValue,i=e.pstyle("font-size").pfValue+"px",a=e.pstyle("font-family").strValue,s=e.pstyle("font-weight").strValue,l=r?e.effectiveOpacity()*e.pstyle("text-opacity").value:1,u=e.pstyle("text-outline-opacity").value*l,h=e.pstyle("color").value,f=e.pstyle("text-outline-color").value;t.font=n+" "+s+" "+i+" "+a,t.lineJoin="round",this.colorFillStyle(t,h[0],h[1],h[2],l),this.colorStrokeStyle(t,f[0],f[1],f[2],u)};o(FP,"roundRect");rp.getTextAngle=function(t,e){var r,n=t._private,i=n.rscratch,a=e?e+"-":"",s=t.pstyle(a+"text-rotation"),l=Ql(i,"labelAngle",e);return s.strValue==="autorotate"?r=t.isEdge()?l:0:s.strValue==="none"?r=0:r=s.pfValue,r};rp.drawText=function(t,e,r){var n=arguments.length>3&&arguments[3]!==void 0?arguments[3]:!0,i=arguments.length>4&&arguments[4]!==void 0?arguments[4]:!0,a=e._private,s=a.rscratch,l=i?e.effectiveOpacity():1;if(!(i&&(l===0||e.pstyle("text-opacity").value===0))){r==="main"&&(r=null);var u=Ql(s,"labelX",r),h=Ql(s,"labelY",r),f,d,p=this.getLabelText(e,r);if(p!=null&&p!==""&&!isNaN(u)&&!isNaN(h)){this.setupTextStyle(t,e,i);var m=r?r+"-":"",g=Ql(s,"labelWidth",r),y=Ql(s,"labelHeight",r),v=e.pstyle(m+"text-margin-x").pfValue,x=e.pstyle(m+"text-margin-y").pfValue,b=e.isEdge(),w=e.pstyle("text-halign").value,_=e.pstyle("text-valign").value;b&&(w="center",_="center"),u+=v,h+=x;var T;switch(n?T=this.getTextAngle(e,r):T=0,T!==0&&(f=u,d=h,t.translate(f,d),t.rotate(T),u=0,h=0),_){case"top":break;case"center":h+=y/2;break;case"bottom":h+=y;break}var E=e.pstyle("text-background-opacity").value,L=e.pstyle("text-border-opacity").value,S=e.pstyle("text-border-width").pfValue,A=e.pstyle("text-background-padding").pfValue,I=e.pstyle("text-background-shape").strValue,D=I.indexOf("round")===0,k=2;if(E>0||S>0&&L>0){var R=u-A;switch(w){case"left":R-=g;break;case"center":R-=g/2;break}var C=h-y-A,O=g+2*A,N=y+2*A;if(E>0){var P=t.fillStyle,F=e.pstyle("text-background-color").value;t.fillStyle="rgba("+F[0]+","+F[1]+","+F[2]+","+E*l+")",D?FP(t,R,C,O,N,k):t.fillRect(R,C,O,N),t.fillStyle=P}if(S>0&&L>0){var B=t.strokeStyle,G=t.lineWidth,z=e.pstyle("text-border-color").value,W=e.pstyle("text-border-style").value;if(t.strokeStyle="rgba("+z[0]+","+z[1]+","+z[2]+","+L*l+")",t.lineWidth=S,t.setLineDash)switch(W){case"dotted":t.setLineDash([1,1]);break;case"dashed":t.setLineDash([4,2]);break;case"double":t.lineWidth=S/4,t.setLineDash([]);break;case"solid":t.setLineDash([]);break}if(D?FP(t,R,C,O,N,k,"stroke"):t.strokeRect(R,C,O,N),W==="double"){var Z=S/2;D?FP(t,R+Z,C+Z,O-Z*2,N-Z*2,k,"stroke"):t.strokeRect(R+Z,C+Z,O-Z*2,N-Z*2)}t.setLineDash&&t.setLineDash([]),t.lineWidth=G,t.strokeStyle=B}}var j=2*e.pstyle("text-outline-width").pfValue;if(j>0&&(t.lineWidth=j),e.pstyle("text-wrap").value==="wrap"){var oe=Ql(s,"labelWrapCachedLines",r),K=Ql(s,"labelLineHeight",r),ee=g/2,J=this.getLabelJustification(e);switch(J==="auto"||(w==="left"?J==="left"?u+=-g:J==="center"&&(u+=-ee):w==="center"?J==="left"?u+=-ee:J==="right"&&(u+=ee):w==="right"&&(J==="center"?u+=ee:J==="right"&&(u+=g))),_){case"top":h-=(oe.length-1)*K;break;case"center":case"bottom":h-=(oe.length-1)*K;break}for(var H=0;H0&&t.strokeText(oe[H],u,h),t.fillText(oe[H],u,h),h+=K}else j>0&&t.strokeText(p,u,h),t.fillText(p,u,h);T!==0&&(t.rotate(-T),t.translate(-f,-d))}}};I1={};I1.drawNode=function(t,e,r){var n=arguments.length>3&&arguments[3]!==void 0?arguments[3]:!0,i=arguments.length>4&&arguments[4]!==void 0?arguments[4]:!0,a=arguments.length>5&&arguments[5]!==void 0?arguments[5]:!0,s=this,l,u,h=e._private,f=h.rscratch,d=e.position();if(!(!xt(d.x)||!xt(d.y))&&!(a&&!e.visible())){var p=a?e.effectiveOpacity():1,m=s.usePaths(),g,y=!1,v=e.padding();l=e.width()+2*v,u=e.height()+2*v;var x;r&&(x=r,t.translate(-x.x1,-x.y1));for(var b=e.pstyle("background-image"),w=b.value,_=new Array(w.length),T=new Array(w.length),E=0,L=0;L0&&arguments[0]!==void 0?arguments[0]:R;s.eleFillStyle(t,e,ve)},"setupShapeColor"),H=o(function(){var ve=arguments.length>0&&arguments[0]!==void 0?arguments[0]:z;s.colorStrokeStyle(t,C[0],C[1],C[2],ve)},"setupBorderColor"),q=o(function(){var ve=arguments.length>0&&arguments[0]!==void 0?arguments[0]:oe;s.colorStrokeStyle(t,Z[0],Z[1],Z[2],ve)},"setupOutlineColor"),Q=o(function(ve,U,Te,ie){var Ee=s.nodePathCache=s.nodePathCache||[],Ae=rge(Te==="polygon"?Te+","+ie.join(","):Te,""+U,""+ve,""+ee),Ge=Ee[Ae],Be,me=!1;return Ge!=null?(Be=Ge,me=!0,f.pathCache=Be):(Be=new Path2D,Ee[Ae]=f.pathCache=Be),{path:Be,cacheHit:me}},"getPath"),ae=e.pstyle("shape").strValue,ue=e.pstyle("shape-polygon-points").pfValue;if(m){t.translate(d.x,d.y);var ce=Q(l,u,ae,ue);g=ce.path,y=ce.cacheHit}var te=o(function(){if(!y){var ve=d;m&&(ve={x:0,y:0}),s.nodeShapes[s.getNodeShape(e)].draw(g||t,ve.x,ve.y,l,u,ee,f)}m?t.fill(g):t.fill()},"drawShape"),Ne=o(function(){for(var ve=arguments.length>0&&arguments[0]!==void 0?arguments[0]:p,U=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!0,Te=h.backgrounding,ie=0,Ee=0;Ee0&&arguments[0]!==void 0?arguments[0]:!1,U=arguments.length>1&&arguments[1]!==void 0?arguments[1]:p;s.hasPie(e)&&(s.drawPie(t,e,U),ve&&(m||s.nodeShapes[s.getNodeShape(e)].draw(t,d.x,d.y,l,u,ee,f)))},"drawPie"),ke=o(function(){var ve=arguments.length>0&&arguments[0]!==void 0?arguments[0]:p,U=(D>0?D:-D)*ve,Te=D>0?0:255;D!==0&&(s.colorFillStyle(t,Te,Te,Te,U),m?t.fill(g):t.fill())},"darken"),Re=o(function(){if(k>0){if(t.lineWidth=k,t.lineCap=P,t.lineJoin=N,t.setLineDash)switch(O){case"dotted":t.setLineDash([1,1]);break;case"dashed":t.setLineDash(B),t.lineDashOffset=G;break;case"solid":case"double":t.setLineDash([]);break}if(F!=="center"){if(t.save(),t.lineWidth*=2,F==="inside")m?t.clip(g):t.clip();else{var ve=new Path2D;ve.rect(-l/2-k,-u/2-k,l+2*k,u+2*k),ve.addPath(g),t.clip(ve,"evenodd")}m?t.stroke(g):t.stroke(),t.restore()}else m?t.stroke(g):t.stroke();if(O==="double"){t.lineWidth=k/3;var U=t.globalCompositeOperation;t.globalCompositeOperation="destination-out",m?t.stroke(g):t.stroke(),t.globalCompositeOperation=U}t.setLineDash&&t.setLineDash([])}},"drawBorder"),Ce=o(function(){if(W>0){if(t.lineWidth=W,t.lineCap="butt",t.setLineDash)switch(j){case"dotted":t.setLineDash([1,1]);break;case"dashed":t.setLineDash([4,2]);break;case"solid":case"double":t.setLineDash([]);break}var ve=d;m&&(ve={x:0,y:0});var U=s.getNodeShape(e),Te=k;F==="inside"&&(Te=0),F==="outside"&&(Te*=2);var ie=(l+Te+(W+K))/l,Ee=(u+Te+(W+K))/u,Ae=l*ie,Ge=u*Ee,Be=s.nodeShapes[U].points,me;if(m){var He=Q(Ae,Ge,U,Be);me=He.path}if(U==="ellipse")s.drawEllipsePath(me||t,ve.x,ve.y,Ae,Ge);else if(["round-diamond","round-heptagon","round-hexagon","round-octagon","round-pentagon","round-polygon","round-triangle","round-tag"].includes(U)){var Oe=0,et=0,bt=0;U==="round-diamond"?Oe=(Te+K+W)*1.4:U==="round-heptagon"?(Oe=(Te+K+W)*1.075,bt=-(Te/2+K+W)/35):U==="round-hexagon"?Oe=(Te+K+W)*1.12:U==="round-pentagon"?(Oe=(Te+K+W)*1.13,bt=-(Te/2+K+W)/15):U==="round-tag"?(Oe=(Te+K+W)*1.12,et=(Te/2+W+K)*.07):U==="round-triangle"&&(Oe=(Te+K+W)*(Math.PI/2),bt=-(Te+K/2+W)/Math.PI),Oe!==0&&(ie=(l+Oe)/l,Ae=l*ie,["round-hexagon","round-tag"].includes(U)||(Ee=(u+Oe)/u,Ge=u*Ee)),ee=ee==="auto"?dge(Ae,Ge):ee;for(var kt=Ae/2,vt=Ge/2,rt=ee+(Te+W+K)/2,yt=new Array(Be.length/2),Ue=new Array(Be.length/2),tt=0;tt0){if(i=i||n.position(),a==null||s==null){var m=n.padding();a=n.width()+2*m,s=n.height()+2*m}l.colorFillStyle(r,f[0],f[1],f[2],h),l.nodeShapes[d].draw(r,i.x,i.y,a+u*2,s+u*2,p),r.fill()}}}},"drawNodeOverlayUnderlay");I1.drawNodeOverlay=g1e("overlay");I1.drawNodeUnderlay=g1e("underlay");I1.hasPie=function(t){return t=t[0],t._private.hasPie};I1.drawPie=function(t,e,r,n){e=e[0],n=n||e.position();var i=e.cy().style(),a=e.pstyle("pie-size"),s=n.x,l=n.y,u=e.width(),h=e.height(),f=Math.min(u,h)/2,d=0,p=this.usePaths();p&&(s=0,l=0),a.units==="%"?f=f*a.pfValue:a.pfValue!==void 0&&(f=a.pfValue/2);for(var m=1;m<=i.pieBackgroundN;m++){var g=e.pstyle("pie-"+m+"-background-size").value,y=e.pstyle("pie-"+m+"-background-color").value,v=e.pstyle("pie-"+m+"-background-opacity").value*r,x=g/100;x+d>1&&(x=1-d);var b=1.5*Math.PI+2*Math.PI*d,w=2*Math.PI*x,_=b+w;g===0||d>=1||d+x>1||(t.beginPath(),t.moveTo(s,l),t.arc(s,l,f,b,_),t.closePath(),this.colorFillStyle(t,y[0],y[1],y[2],v),t.fill(),d+=x)}};To={},Uet=100;To.getPixelRatio=function(){var t=this.data.contexts[0];if(this.forcedPixelRatio!=null)return this.forcedPixelRatio;var e=this.cy.window(),r=t.backingStorePixelRatio||t.webkitBackingStorePixelRatio||t.mozBackingStorePixelRatio||t.msBackingStorePixelRatio||t.oBackingStorePixelRatio||t.backingStorePixelRatio||1;return(e.devicePixelRatio||1)/r};To.paintCache=function(t){for(var e=this.paintCaches=this.paintCaches||[],r=!0,n,i=0;is.minMbLowQualFrames&&(s.motionBlurPxRatio=s.mbPxRBlurry)),s.clearingMotionBlur&&(s.motionBlurPxRatio=1),s.textureDrawLastFrame&&!d&&(f[s.NODE]=!0,f[s.SELECT_BOX]=!0);var b=u.style(),w=u.zoom(),_=i!==void 0?i:w,T=u.pan(),E={x:T.x,y:T.y},L={zoom:w,pan:{x:T.x,y:T.y}},S=s.prevViewport,A=S===void 0||L.zoom!==S.zoom||L.pan.x!==S.pan.x||L.pan.y!==S.pan.y;!A&&!(y&&!g)&&(s.motionBlurPxRatio=1),a&&(E=a),_*=l,E.x*=l,E.y*=l;var I=s.getCachedZSortedEles();function D(ce,te,Ne,se,ke){var Re=ce.globalCompositeOperation;ce.globalCompositeOperation="destination-out",s.colorFillStyle(ce,255,255,255,s.motionBlurTransparency),ce.fillRect(te,Ne,se,ke),ce.globalCompositeOperation=Re}o(D,"mbclear");function k(ce,te){var Ne,se,ke,Re;!s.clearingMotionBlur&&(ce===h.bufferContexts[s.MOTIONBLUR_BUFFER_NODE]||ce===h.bufferContexts[s.MOTIONBLUR_BUFFER_DRAG])?(Ne={x:T.x*m,y:T.y*m},se=w*m,ke=s.canvasWidth*m,Re=s.canvasHeight*m):(Ne=E,se=_,ke=s.canvasWidth,Re=s.canvasHeight),ce.setTransform(1,0,0,1,0,0),te==="motionBlur"?D(ce,0,0,ke,Re):!e&&(te===void 0||te)&&ce.clearRect(0,0,ke,Re),r||(ce.translate(Ne.x,Ne.y),ce.scale(se,se)),a&&ce.translate(a.x,a.y),i&&ce.scale(i,i)}if(o(k,"setContextTransform"),d||(s.textureDrawLastFrame=!1),d){if(s.textureDrawLastFrame=!0,!s.textureCache){s.textureCache={},s.textureCache.bb=u.mutableElements().boundingBox(),s.textureCache.texture=s.data.bufferCanvases[s.TEXTURE_BUFFER];var R=s.data.bufferContexts[s.TEXTURE_BUFFER];R.setTransform(1,0,0,1,0,0),R.clearRect(0,0,s.canvasWidth*s.textureMult,s.canvasHeight*s.textureMult),s.render({forcedContext:R,drawOnlyNodeLayer:!0,forcedPxRatio:l*s.textureMult});var L=s.textureCache.viewport={zoom:u.zoom(),pan:u.pan(),width:s.canvasWidth,height:s.canvasHeight};L.mpan={x:(0-L.pan.x)/L.zoom,y:(0-L.pan.y)/L.zoom}}f[s.DRAG]=!1,f[s.NODE]=!1;var C=h.contexts[s.NODE],O=s.textureCache.texture,L=s.textureCache.viewport;C.setTransform(1,0,0,1,0,0),p?D(C,0,0,L.width,L.height):C.clearRect(0,0,L.width,L.height);var N=b.core("outside-texture-bg-color").value,P=b.core("outside-texture-bg-opacity").value;s.colorFillStyle(C,N[0],N[1],N[2],P),C.fillRect(0,0,L.width,L.height);var w=u.zoom();k(C,!1),C.clearRect(L.mpan.x,L.mpan.y,L.width/L.zoom/l,L.height/L.zoom/l),C.drawImage(O,L.mpan.x,L.mpan.y,L.width/L.zoom/l,L.height/L.zoom/l)}else s.textureOnViewport&&!e&&(s.textureCache=null);var F=u.extent(),B=s.pinching||s.hoverData.dragging||s.swipePanning||s.data.wheelZooming||s.hoverData.draggingEles||s.cy.animated(),G=s.hideEdgesOnViewport&&B,z=[];if(z[s.NODE]=!f[s.NODE]&&p&&!s.clearedForMotionBlur[s.NODE]||s.clearingMotionBlur,z[s.NODE]&&(s.clearedForMotionBlur[s.NODE]=!0),z[s.DRAG]=!f[s.DRAG]&&p&&!s.clearedForMotionBlur[s.DRAG]||s.clearingMotionBlur,z[s.DRAG]&&(s.clearedForMotionBlur[s.DRAG]=!0),f[s.NODE]||r||n||z[s.NODE]){var W=p&&!z[s.NODE]&&m!==1,C=e||(W?s.data.bufferContexts[s.MOTIONBLUR_BUFFER_NODE]:h.contexts[s.NODE]),Z=p&&!W?"motionBlur":void 0;k(C,Z),G?s.drawCachedNodes(C,I.nondrag,l,F):s.drawLayeredElements(C,I.nondrag,l,F),s.debug&&s.drawDebugPoints(C,I.nondrag),!r&&!p&&(f[s.NODE]=!1)}if(!n&&(f[s.DRAG]||r||z[s.DRAG])){var W=p&&!z[s.DRAG]&&m!==1,C=e||(W?s.data.bufferContexts[s.MOTIONBLUR_BUFFER_DRAG]:h.contexts[s.DRAG]);k(C,p&&!W?"motionBlur":void 0),G?s.drawCachedNodes(C,I.drag,l,F):s.drawCachedElements(C,I.drag,l,F),s.debug&&s.drawDebugPoints(C,I.drag),!r&&!p&&(f[s.DRAG]=!1)}if(s.showFps||!n&&f[s.SELECT_BOX]&&!r){var C=e||h.contexts[s.SELECT_BOX];if(k(C),s.selection[4]==1&&(s.hoverData.selecting||s.touchData.selecting)){var w=s.cy.zoom(),j=b.core("selection-box-border-width").value/w;C.lineWidth=j,C.fillStyle="rgba("+b.core("selection-box-color").value[0]+","+b.core("selection-box-color").value[1]+","+b.core("selection-box-color").value[2]+","+b.core("selection-box-opacity").value+")",C.fillRect(s.selection[0],s.selection[1],s.selection[2]-s.selection[0],s.selection[3]-s.selection[1]),j>0&&(C.strokeStyle="rgba("+b.core("selection-box-border-color").value[0]+","+b.core("selection-box-border-color").value[1]+","+b.core("selection-box-border-color").value[2]+","+b.core("selection-box-opacity").value+")",C.strokeRect(s.selection[0],s.selection[1],s.selection[2]-s.selection[0],s.selection[3]-s.selection[1]))}if(h.bgActivePosistion&&!s.hoverData.selecting){var w=s.cy.zoom(),oe=h.bgActivePosistion;C.fillStyle="rgba("+b.core("active-bg-color").value[0]+","+b.core("active-bg-color").value[1]+","+b.core("active-bg-color").value[2]+","+b.core("active-bg-opacity").value+")",C.beginPath(),C.arc(oe.x,oe.y,b.core("active-bg-size").pfValue/w,0,2*Math.PI),C.fill()}var K=s.lastRedrawTime;if(s.showFps&&K){K=Math.round(K);var ee=Math.round(1e3/K);C.setTransform(1,0,0,1,0,0),C.fillStyle="rgba(255, 0, 0, 0.75)",C.strokeStyle="rgba(255, 0, 0, 0.75)",C.lineWidth=1,C.fillText("1 frame = "+K+" ms = "+ee+" fps",0,20);var J=60;C.strokeRect(0,30,250,20),C.fillRect(0,30,250*Math.min(ee/J,1),20)}r||(f[s.SELECT_BOX]=!1)}if(p&&m!==1){var H=h.contexts[s.NODE],q=s.data.bufferCanvases[s.MOTIONBLUR_BUFFER_NODE],Q=h.contexts[s.DRAG],ae=s.data.bufferCanvases[s.MOTIONBLUR_BUFFER_DRAG],ue=o(function(te,Ne,se){te.setTransform(1,0,0,1,0,0),se||!x?te.clearRect(0,0,s.canvasWidth,s.canvasHeight):D(te,0,0,s.canvasWidth,s.canvasHeight);var ke=m;te.drawImage(Ne,0,0,s.canvasWidth*ke,s.canvasHeight*ke,0,0,s.canvasWidth,s.canvasHeight)},"drawMotionBlur");(f[s.NODE]||z[s.NODE])&&(ue(H,q,z[s.NODE]),f[s.NODE]=!1),(f[s.DRAG]||z[s.DRAG])&&(ue(Q,ae,z[s.DRAG]),f[s.DRAG]=!1)}s.prevViewport=L,s.clearingMotionBlur&&(s.clearingMotionBlur=!1,s.motionBlurCleared=!0,s.motionBlur=!0),p&&(s.motionBlurTimeout=setTimeout(function(){s.motionBlurTimeout=null,s.clearedForMotionBlur[s.NODE]=!1,s.clearedForMotionBlur[s.DRAG]=!1,s.motionBlur=!1,s.clearingMotionBlur=!d,s.mbFrames=0,f[s.NODE]=!0,f[s.DRAG]=!0,s.redraw()},Uet)),e||u.emit("render")};Gf={};Gf.drawPolygonPath=function(t,e,r,n,i,a){var s=n/2,l=i/2;t.beginPath&&t.beginPath(),t.moveTo(e+s*a[0],r+l*a[1]);for(var u=1;u0&&s>0){m.clearRect(0,0,a,s),m.globalCompositeOperation="source-over";var g=this.getCachedZSortedEles();if(t.full)m.translate(-n.x1*h,-n.y1*h),m.scale(h,h),this.drawElements(m,g),m.scale(1/h,1/h),m.translate(n.x1*h,n.y1*h);else{var y=e.pan(),v={x:y.x*h,y:y.y*h};h*=e.zoom(),m.translate(v.x,v.y),m.scale(h,h),this.drawElements(m,g),m.scale(1/h,1/h),m.translate(-v.x,-v.y)}t.bg&&(m.globalCompositeOperation="destination-over",m.fillStyle=t.bg,m.rect(0,0,a,s),m.fill())}return p};o(Het,"b64ToBlob");o(Gme,"b64UriToB64");o(v1e,"output");wb.png=function(t){return v1e(t,this.bufferCanvasImage(t),"image/png")};wb.jpg=function(t){return v1e(t,this.bufferCanvasImage(t),"image/jpeg")};x1e={};x1e.nodeShapeImpl=function(t,e,r,n,i,a,s,l){switch(t){case"ellipse":return this.drawEllipsePath(e,r,n,i,a);case"polygon":return this.drawPolygonPath(e,r,n,i,a,s);case"round-polygon":return this.drawRoundPolygonPath(e,r,n,i,a,s,l);case"roundrectangle":case"round-rectangle":return this.drawRoundRectanglePath(e,r,n,i,a,l);case"cutrectangle":case"cut-rectangle":return this.drawCutRectanglePath(e,r,n,i,a,s,l);case"bottomroundrectangle":case"bottom-round-rectangle":return this.drawBottomRoundRectanglePath(e,r,n,i,a,l);case"barrel":return this.drawBarrelPath(e,r,n,i,a)}};Wet=b1e,Kr=b1e.prototype;Kr.CANVAS_LAYERS=3;Kr.SELECT_BOX=0;Kr.DRAG=1;Kr.NODE=2;Kr.BUFFER_COUNT=3;Kr.TEXTURE_BUFFER=0;Kr.MOTIONBLUR_BUFFER_NODE=1;Kr.MOTIONBLUR_BUFFER_DRAG=2;o(b1e,"CanvasRenderer");Kr.redrawHint=function(t,e){var r=this;switch(t){case"eles":r.data.canvasNeedsRedraw[Kr.NODE]=e;break;case"drag":r.data.canvasNeedsRedraw[Kr.DRAG]=e;break;case"select":r.data.canvasNeedsRedraw[Kr.SELECT_BOX]=e;break}};Yet=typeof Path2D<"u";Kr.path2dEnabled=function(t){if(t===void 0)return this.pathsEnabled;this.pathsEnabled=!!t};Kr.usePaths=function(){return Yet&&this.pathsEnabled};Kr.setImgSmoothing=function(t,e){t.imageSmoothingEnabled!=null?t.imageSmoothingEnabled=e:(t.webkitImageSmoothingEnabled=e,t.mozImageSmoothingEnabled=e,t.msImageSmoothingEnabled=e)};Kr.getImgSmoothing=function(t){return t.imageSmoothingEnabled!=null?t.imageSmoothingEnabled:t.webkitImageSmoothingEnabled||t.mozImageSmoothingEnabled||t.msImageSmoothingEnabled};Kr.makeOffscreenCanvas=function(t,e){var r;if((typeof OffscreenCanvas>"u"?"undefined":Ki(OffscreenCanvas))!=="undefined")r=new OffscreenCanvas(t,e);else{var n=this.cy.window(),i=n.document;r=i.createElement("canvas"),r.width=t,r.height=e}return r};[p1e,ru,lh,EB,rp,I1,To,Gf,wb,x1e].forEach(function(t){ir(Kr,t)});qet=[{name:"null",impl:t1e},{name:"base",impl:h1e},{name:"canvas",impl:Wet}],Xet=[{type:"layout",extensions:ZJe},{type:"renderer",extensions:qet}],w1e={},T1e={};o(k1e,"setExtension");o(E1e,"getExtension");o(jet,"setModule");o(Ket,"getModule");eB=o(function(){if(arguments.length===2)return E1e.apply(null,arguments);if(arguments.length===3)return k1e.apply(null,arguments);if(arguments.length===4)return Ket.apply(null,arguments);if(arguments.length===5)return jet.apply(null,arguments);di("Invalid extension access syntax")},"extension");fb.prototype.extension=eB;Xet.forEach(function(t){t.extensions.forEach(function(e){k1e(t.type,e.name,e.impl)})});S1e=o(function t(){if(!(this instanceof t))return new t;this.length=0},"Stylesheet"),ep=S1e.prototype;ep.instanceString=function(){return"stylesheet"};ep.selector=function(t){var e=this.length++;return this[e]={selector:t,properties:[]},this};ep.css=function(t,e){var r=this.length-1;if(Zt(t))this[r].properties.push({name:t,value:e});else if(Ur(t))for(var n=t,i=Object.keys(n),a=0;a{"use strict";o(function(e,r){typeof Tb=="object"&&typeof CB=="object"?CB.exports=r():typeof define=="function"&&define.amd?define([],r):typeof Tb=="object"?Tb.layoutBase=r():e.layoutBase=r()},"webpackUniversalModuleDefinition")(Tb,function(){return function(t){var e={};function r(n){if(e[n])return e[n].exports;var i=e[n]={i:n,l:!1,exports:{}};return t[n].call(i.exports,i,i.exports,r),i.l=!0,i.exports}return o(r,"__webpack_require__"),r.m=t,r.c=e,r.i=function(n){return n},r.d=function(n,i,a){r.o(n,i)||Object.defineProperty(n,i,{configurable:!1,enumerable:!0,get:a})},r.n=function(n){var i=n&&n.__esModule?o(function(){return n.default},"getDefault"):o(function(){return n},"getModuleExports");return r.d(i,"a",i),i},r.o=function(n,i){return Object.prototype.hasOwnProperty.call(n,i)},r.p="",r(r.s=26)}([function(t,e,r){"use strict";function n(){}o(n,"LayoutConstants"),n.QUALITY=1,n.DEFAULT_CREATE_BENDS_AS_NEEDED=!1,n.DEFAULT_INCREMENTAL=!1,n.DEFAULT_ANIMATION_ON_LAYOUT=!0,n.DEFAULT_ANIMATION_DURING_LAYOUT=!1,n.DEFAULT_ANIMATION_PERIOD=50,n.DEFAULT_UNIFORM_LEAF_NODE_SIZES=!1,n.DEFAULT_GRAPH_MARGIN=15,n.NODE_DIMENSIONS_INCLUDE_LABELS=!1,n.SIMPLE_NODE_SIZE=40,n.SIMPLE_NODE_HALF_SIZE=n.SIMPLE_NODE_SIZE/2,n.EMPTY_COMPOUND_NODE_SIZE=40,n.MIN_EDGE_LENGTH=1,n.WORLD_BOUNDARY=1e6,n.INITIAL_WORLD_BOUNDARY=n.WORLD_BOUNDARY/1e3,n.WORLD_CENTER_X=1200,n.WORLD_CENTER_Y=900,t.exports=n},function(t,e,r){"use strict";var n=r(2),i=r(8),a=r(9);function s(u,h,f){n.call(this,f),this.isOverlapingSourceAndTarget=!1,this.vGraphObject=f,this.bendpoints=[],this.source=u,this.target=h}o(s,"LEdge"),s.prototype=Object.create(n.prototype);for(var l in n)s[l]=n[l];s.prototype.getSource=function(){return this.source},s.prototype.getTarget=function(){return this.target},s.prototype.isInterGraph=function(){return this.isInterGraph},s.prototype.getLength=function(){return this.length},s.prototype.isOverlapingSourceAndTarget=function(){return this.isOverlapingSourceAndTarget},s.prototype.getBendpoints=function(){return this.bendpoints},s.prototype.getLca=function(){return this.lca},s.prototype.getSourceInLca=function(){return this.sourceInLca},s.prototype.getTargetInLca=function(){return this.targetInLca},s.prototype.getOtherEnd=function(u){if(this.source===u)return this.target;if(this.target===u)return this.source;throw"Node is not incident with this edge"},s.prototype.getOtherEndInGraph=function(u,h){for(var f=this.getOtherEnd(u),d=h.getGraphManager().getRoot();;){if(f.getOwner()==h)return f;if(f.getOwner()==d)break;f=f.getOwner().getParent()}return null},s.prototype.updateLength=function(){var u=new Array(4);this.isOverlapingSourceAndTarget=i.getIntersection(this.target.getRect(),this.source.getRect(),u),this.isOverlapingSourceAndTarget||(this.lengthX=u[0]-u[2],this.lengthY=u[1]-u[3],Math.abs(this.lengthX)<1&&(this.lengthX=a.sign(this.lengthX)),Math.abs(this.lengthY)<1&&(this.lengthY=a.sign(this.lengthY)),this.length=Math.sqrt(this.lengthX*this.lengthX+this.lengthY*this.lengthY))},s.prototype.updateLengthSimple=function(){this.lengthX=this.target.getCenterX()-this.source.getCenterX(),this.lengthY=this.target.getCenterY()-this.source.getCenterY(),Math.abs(this.lengthX)<1&&(this.lengthX=a.sign(this.lengthX)),Math.abs(this.lengthY)<1&&(this.lengthY=a.sign(this.lengthY)),this.length=Math.sqrt(this.lengthX*this.lengthX+this.lengthY*this.lengthY)},t.exports=s},function(t,e,r){"use strict";function n(i){this.vGraphObject=i}o(n,"LGraphObject"),t.exports=n},function(t,e,r){"use strict";var n=r(2),i=r(10),a=r(13),s=r(0),l=r(16),u=r(4);function h(d,p,m,g){m==null&&g==null&&(g=p),n.call(this,g),d.graphManager!=null&&(d=d.graphManager),this.estimatedSize=i.MIN_VALUE,this.inclusionTreeDepth=i.MAX_VALUE,this.vGraphObject=g,this.edges=[],this.graphManager=d,m!=null&&p!=null?this.rect=new a(p.x,p.y,m.width,m.height):this.rect=new a}o(h,"LNode"),h.prototype=Object.create(n.prototype);for(var f in n)h[f]=n[f];h.prototype.getEdges=function(){return this.edges},h.prototype.getChild=function(){return this.child},h.prototype.getOwner=function(){return this.owner},h.prototype.getWidth=function(){return this.rect.width},h.prototype.setWidth=function(d){this.rect.width=d},h.prototype.getHeight=function(){return this.rect.height},h.prototype.setHeight=function(d){this.rect.height=d},h.prototype.getCenterX=function(){return this.rect.x+this.rect.width/2},h.prototype.getCenterY=function(){return this.rect.y+this.rect.height/2},h.prototype.getCenter=function(){return new u(this.rect.x+this.rect.width/2,this.rect.y+this.rect.height/2)},h.prototype.getLocation=function(){return new u(this.rect.x,this.rect.y)},h.prototype.getRect=function(){return this.rect},h.prototype.getDiagonal=function(){return Math.sqrt(this.rect.width*this.rect.width+this.rect.height*this.rect.height)},h.prototype.getHalfTheDiagonal=function(){return Math.sqrt(this.rect.height*this.rect.height+this.rect.width*this.rect.width)/2},h.prototype.setRect=function(d,p){this.rect.x=d.x,this.rect.y=d.y,this.rect.width=p.width,this.rect.height=p.height},h.prototype.setCenter=function(d,p){this.rect.x=d-this.rect.width/2,this.rect.y=p-this.rect.height/2},h.prototype.setLocation=function(d,p){this.rect.x=d,this.rect.y=p},h.prototype.moveBy=function(d,p){this.rect.x+=d,this.rect.y+=p},h.prototype.getEdgeListToNode=function(d){var p=[],m,g=this;return g.edges.forEach(function(y){if(y.target==d){if(y.source!=g)throw"Incorrect edge source!";p.push(y)}}),p},h.prototype.getEdgesBetween=function(d){var p=[],m,g=this;return g.edges.forEach(function(y){if(!(y.source==g||y.target==g))throw"Incorrect edge source and/or target";(y.target==d||y.source==d)&&p.push(y)}),p},h.prototype.getNeighborsList=function(){var d=new Set,p=this;return p.edges.forEach(function(m){if(m.source==p)d.add(m.target);else{if(m.target!=p)throw"Incorrect incidency!";d.add(m.source)}}),d},h.prototype.withChildren=function(){var d=new Set,p,m;if(d.add(this),this.child!=null)for(var g=this.child.getNodes(),y=0;yp&&(this.rect.x-=(this.labelWidth-p)/2,this.setWidth(this.labelWidth)),this.labelHeight>m&&(this.labelPos=="center"?this.rect.y-=(this.labelHeight-m)/2:this.labelPos=="top"&&(this.rect.y-=this.labelHeight-m),this.setHeight(this.labelHeight))}}},h.prototype.getInclusionTreeDepth=function(){if(this.inclusionTreeDepth==i.MAX_VALUE)throw"assert failed";return this.inclusionTreeDepth},h.prototype.transform=function(d){var p=this.rect.x;p>s.WORLD_BOUNDARY?p=s.WORLD_BOUNDARY:p<-s.WORLD_BOUNDARY&&(p=-s.WORLD_BOUNDARY);var m=this.rect.y;m>s.WORLD_BOUNDARY?m=s.WORLD_BOUNDARY:m<-s.WORLD_BOUNDARY&&(m=-s.WORLD_BOUNDARY);var g=new u(p,m),y=d.inverseTransformPoint(g);this.setLocation(y.x,y.y)},h.prototype.getLeft=function(){return this.rect.x},h.prototype.getRight=function(){return this.rect.x+this.rect.width},h.prototype.getTop=function(){return this.rect.y},h.prototype.getBottom=function(){return this.rect.y+this.rect.height},h.prototype.getParent=function(){return this.owner==null?null:this.owner.getParent()},t.exports=h},function(t,e,r){"use strict";function n(i,a){i==null&&a==null?(this.x=0,this.y=0):(this.x=i,this.y=a)}o(n,"PointD"),n.prototype.getX=function(){return this.x},n.prototype.getY=function(){return this.y},n.prototype.setX=function(i){this.x=i},n.prototype.setY=function(i){this.y=i},n.prototype.getDifference=function(i){return new DimensionD(this.x-i.x,this.y-i.y)},n.prototype.getCopy=function(){return new n(this.x,this.y)},n.prototype.translate=function(i){return this.x+=i.width,this.y+=i.height,this},t.exports=n},function(t,e,r){"use strict";var n=r(2),i=r(10),a=r(0),s=r(6),l=r(3),u=r(1),h=r(13),f=r(12),d=r(11);function p(g,y,v){n.call(this,v),this.estimatedSize=i.MIN_VALUE,this.margin=a.DEFAULT_GRAPH_MARGIN,this.edges=[],this.nodes=[],this.isConnected=!1,this.parent=g,y!=null&&y instanceof s?this.graphManager=y:y!=null&&y instanceof Layout&&(this.graphManager=y.graphManager)}o(p,"LGraph"),p.prototype=Object.create(n.prototype);for(var m in n)p[m]=n[m];p.prototype.getNodes=function(){return this.nodes},p.prototype.getEdges=function(){return this.edges},p.prototype.getGraphManager=function(){return this.graphManager},p.prototype.getParent=function(){return this.parent},p.prototype.getLeft=function(){return this.left},p.prototype.getRight=function(){return this.right},p.prototype.getTop=function(){return this.top},p.prototype.getBottom=function(){return this.bottom},p.prototype.isConnected=function(){return this.isConnected},p.prototype.add=function(g,y,v){if(y==null&&v==null){var x=g;if(this.graphManager==null)throw"Graph has no graph mgr!";if(this.getNodes().indexOf(x)>-1)throw"Node already in graph!";return x.owner=this,this.getNodes().push(x),x}else{var b=g;if(!(this.getNodes().indexOf(y)>-1&&this.getNodes().indexOf(v)>-1))throw"Source or target not in graph!";if(!(y.owner==v.owner&&y.owner==this))throw"Both owners must be this graph!";return y.owner!=v.owner?null:(b.source=y,b.target=v,b.isInterGraph=!1,this.getEdges().push(b),y.edges.push(b),v!=y&&v.edges.push(b),b)}},p.prototype.remove=function(g){var y=g;if(g instanceof l){if(y==null)throw"Node is null!";if(!(y.owner!=null&&y.owner==this))throw"Owner graph is invalid!";if(this.graphManager==null)throw"Owner graph manager is invalid!";for(var v=y.edges.slice(),x,b=v.length,w=0;w-1&&E>-1))throw"Source and/or target doesn't know this edge!";x.source.edges.splice(T,1),x.target!=x.source&&x.target.edges.splice(E,1);var _=x.source.owner.getEdges().indexOf(x);if(_==-1)throw"Not in owner's edge list!";x.source.owner.getEdges().splice(_,1)}},p.prototype.updateLeftTop=function(){for(var g=i.MAX_VALUE,y=i.MAX_VALUE,v,x,b,w=this.getNodes(),_=w.length,T=0;T<_;T++){var E=w[T];v=E.getTop(),x=E.getLeft(),g>v&&(g=v),y>x&&(y=x)}return g==i.MAX_VALUE?null:(w[0].getParent().paddingLeft!=null?b=w[0].getParent().paddingLeft:b=this.margin,this.left=y-b,this.top=g-b,new f(this.left,this.top))},p.prototype.updateBounds=function(g){for(var y=i.MAX_VALUE,v=-i.MAX_VALUE,x=i.MAX_VALUE,b=-i.MAX_VALUE,w,_,T,E,L,S=this.nodes,A=S.length,I=0;Iw&&(y=w),v<_&&(v=_),x>T&&(x=T),bw&&(y=w),v<_&&(v=_),x>T&&(x=T),b=this.nodes.length){var A=0;v.forEach(function(I){I.owner==g&&A++}),A==this.nodes.length&&(this.isConnected=!0)}},t.exports=p},function(t,e,r){"use strict";var n,i=r(1);function a(s){n=r(5),this.layout=s,this.graphs=[],this.edges=[]}o(a,"LGraphManager"),a.prototype.addRoot=function(){var s=this.layout.newGraph(),l=this.layout.newNode(null),u=this.add(s,l);return this.setRootGraph(u),this.rootGraph},a.prototype.add=function(s,l,u,h,f){if(u==null&&h==null&&f==null){if(s==null)throw"Graph is null!";if(l==null)throw"Parent node is null!";if(this.graphs.indexOf(s)>-1)throw"Graph already in this graph mgr!";if(this.graphs.push(s),s.parent!=null)throw"Already has a parent!";if(l.child!=null)throw"Already has a child!";return s.parent=l,l.child=s,s}else{f=u,h=l,u=s;var d=h.getOwner(),p=f.getOwner();if(!(d!=null&&d.getGraphManager()==this))throw"Source not in this graph mgr!";if(!(p!=null&&p.getGraphManager()==this))throw"Target not in this graph mgr!";if(d==p)return u.isInterGraph=!1,d.add(u,h,f);if(u.isInterGraph=!0,u.source=h,u.target=f,this.edges.indexOf(u)>-1)throw"Edge already in inter-graph edge list!";if(this.edges.push(u),!(u.source!=null&&u.target!=null))throw"Edge source and/or target is null!";if(!(u.source.edges.indexOf(u)==-1&&u.target.edges.indexOf(u)==-1))throw"Edge already in source and/or target incidency list!";return u.source.edges.push(u),u.target.edges.push(u),u}},a.prototype.remove=function(s){if(s instanceof n){var l=s;if(l.getGraphManager()!=this)throw"Graph not in this graph mgr";if(!(l==this.rootGraph||l.parent!=null&&l.parent.graphManager==this))throw"Invalid parent node!";var u=[];u=u.concat(l.getEdges());for(var h,f=u.length,d=0;d=s.getRight()?l[0]+=Math.min(s.getX()-a.getX(),a.getRight()-s.getRight()):s.getX()<=a.getX()&&s.getRight()>=a.getRight()&&(l[0]+=Math.min(a.getX()-s.getX(),s.getRight()-a.getRight())),a.getY()<=s.getY()&&a.getBottom()>=s.getBottom()?l[1]+=Math.min(s.getY()-a.getY(),a.getBottom()-s.getBottom()):s.getY()<=a.getY()&&s.getBottom()>=a.getBottom()&&(l[1]+=Math.min(a.getY()-s.getY(),s.getBottom()-a.getBottom()));var f=Math.abs((s.getCenterY()-a.getCenterY())/(s.getCenterX()-a.getCenterX()));s.getCenterY()===a.getCenterY()&&s.getCenterX()===a.getCenterX()&&(f=1);var d=f*l[0],p=l[1]/f;l[0]d)return l[0]=u,l[1]=m,l[2]=f,l[3]=S,!1;if(hf)return l[0]=p,l[1]=h,l[2]=E,l[3]=d,!1;if(uf?(l[0]=y,l[1]=v,k=!0):(l[0]=g,l[1]=m,k=!0):C===N&&(u>f?(l[0]=p,l[1]=m,k=!0):(l[0]=x,l[1]=v,k=!0)),-O===N?f>u?(l[2]=L,l[3]=S,R=!0):(l[2]=E,l[3]=T,R=!0):O===N&&(f>u?(l[2]=_,l[3]=T,R=!0):(l[2]=A,l[3]=S,R=!0)),k&&R)return!1;if(u>f?h>d?(P=this.getCardinalDirection(C,N,4),F=this.getCardinalDirection(O,N,2)):(P=this.getCardinalDirection(-C,N,3),F=this.getCardinalDirection(-O,N,1)):h>d?(P=this.getCardinalDirection(-C,N,1),F=this.getCardinalDirection(-O,N,3)):(P=this.getCardinalDirection(C,N,2),F=this.getCardinalDirection(O,N,4)),!k)switch(P){case 1:G=m,B=u+-w/N,l[0]=B,l[1]=G;break;case 2:B=x,G=h+b*N,l[0]=B,l[1]=G;break;case 3:G=v,B=u+w/N,l[0]=B,l[1]=G;break;case 4:B=y,G=h+-b*N,l[0]=B,l[1]=G;break}if(!R)switch(F){case 1:W=T,z=f+-D/N,l[2]=z,l[3]=W;break;case 2:z=A,W=d+I*N,l[2]=z,l[3]=W;break;case 3:W=S,z=f+D/N,l[2]=z,l[3]=W;break;case 4:z=L,W=d+-I*N,l[2]=z,l[3]=W;break}}return!1},i.getCardinalDirection=function(a,s,l){return a>s?l:1+l%4},i.getIntersection=function(a,s,l,u){if(u==null)return this.getIntersection2(a,s,l);var h=a.x,f=a.y,d=s.x,p=s.y,m=l.x,g=l.y,y=u.x,v=u.y,x=void 0,b=void 0,w=void 0,_=void 0,T=void 0,E=void 0,L=void 0,S=void 0,A=void 0;return w=p-f,T=h-d,L=d*f-h*p,_=v-g,E=m-y,S=y*g-m*v,A=w*E-_*T,A===0?null:(x=(T*S-E*L)/A,b=(_*L-w*S)/A,new n(x,b))},i.angleOfVector=function(a,s,l,u){var h=void 0;return a!==l?(h=Math.atan((u-s)/(l-a)),l0?1:i<0?-1:0},n.floor=function(i){return i<0?Math.ceil(i):Math.floor(i)},n.ceil=function(i){return i<0?Math.floor(i):Math.ceil(i)},t.exports=n},function(t,e,r){"use strict";function n(){}o(n,"Integer"),n.MAX_VALUE=2147483647,n.MIN_VALUE=-2147483648,t.exports=n},function(t,e,r){"use strict";var n=function(){function h(f,d){for(var p=0;p"u"?"undefined":n(a);return a==null||s!="object"&&s!="function"},t.exports=i},function(t,e,r){"use strict";function n(m){if(Array.isArray(m)){for(var g=0,y=Array(m.length);g0&&g;){for(w.push(T[0]);w.length>0&&g;){var E=w[0];w.splice(0,1),b.add(E);for(var L=E.getEdges(),x=0;x-1&&T.splice(D,1)}b=new Set,_=new Map}}return m},p.prototype.createDummyNodesForBendpoints=function(m){for(var g=[],y=m.source,v=this.graphManager.calcLowestCommonAncestor(m.source,m.target),x=0;x0){for(var v=this.edgeToDummyNodes.get(y),x=0;x=0&&g.splice(S,1);var A=_.getNeighborsList();A.forEach(function(k){if(y.indexOf(k)<0){var R=v.get(k),C=R-1;C==1&&E.push(k),v.set(k,C)}})}y=y.concat(E),(g.length==1||g.length==2)&&(x=!0,b=g[0])}return b},p.prototype.setGraphManager=function(m){this.graphManager=m},t.exports=p},function(t,e,r){"use strict";function n(){}o(n,"RandomSeed"),n.seed=1,n.x=0,n.nextDouble=function(){return n.x=Math.sin(n.seed++)*1e4,n.x-Math.floor(n.x)},t.exports=n},function(t,e,r){"use strict";var n=r(4);function i(a,s){this.lworldOrgX=0,this.lworldOrgY=0,this.ldeviceOrgX=0,this.ldeviceOrgY=0,this.lworldExtX=1,this.lworldExtY=1,this.ldeviceExtX=1,this.ldeviceExtY=1}o(i,"Transform"),i.prototype.getWorldOrgX=function(){return this.lworldOrgX},i.prototype.setWorldOrgX=function(a){this.lworldOrgX=a},i.prototype.getWorldOrgY=function(){return this.lworldOrgY},i.prototype.setWorldOrgY=function(a){this.lworldOrgY=a},i.prototype.getWorldExtX=function(){return this.lworldExtX},i.prototype.setWorldExtX=function(a){this.lworldExtX=a},i.prototype.getWorldExtY=function(){return this.lworldExtY},i.prototype.setWorldExtY=function(a){this.lworldExtY=a},i.prototype.getDeviceOrgX=function(){return this.ldeviceOrgX},i.prototype.setDeviceOrgX=function(a){this.ldeviceOrgX=a},i.prototype.getDeviceOrgY=function(){return this.ldeviceOrgY},i.prototype.setDeviceOrgY=function(a){this.ldeviceOrgY=a},i.prototype.getDeviceExtX=function(){return this.ldeviceExtX},i.prototype.setDeviceExtX=function(a){this.ldeviceExtX=a},i.prototype.getDeviceExtY=function(){return this.ldeviceExtY},i.prototype.setDeviceExtY=function(a){this.ldeviceExtY=a},i.prototype.transformX=function(a){var s=0,l=this.lworldExtX;return l!=0&&(s=this.ldeviceOrgX+(a-this.lworldOrgX)*this.ldeviceExtX/l),s},i.prototype.transformY=function(a){var s=0,l=this.lworldExtY;return l!=0&&(s=this.ldeviceOrgY+(a-this.lworldOrgY)*this.ldeviceExtY/l),s},i.prototype.inverseTransformX=function(a){var s=0,l=this.ldeviceExtX;return l!=0&&(s=this.lworldOrgX+(a-this.ldeviceOrgX)*this.lworldExtX/l),s},i.prototype.inverseTransformY=function(a){var s=0,l=this.ldeviceExtY;return l!=0&&(s=this.lworldOrgY+(a-this.ldeviceOrgY)*this.lworldExtY/l),s},i.prototype.inverseTransformPoint=function(a){var s=new n(this.inverseTransformX(a.x),this.inverseTransformY(a.y));return s},t.exports=i},function(t,e,r){"use strict";function n(d){if(Array.isArray(d)){for(var p=0,m=Array(d.length);pa.ADAPTATION_LOWER_NODE_LIMIT&&(this.coolingFactor=Math.max(this.coolingFactor*a.COOLING_ADAPTATION_FACTOR,this.coolingFactor-(d-a.ADAPTATION_LOWER_NODE_LIMIT)/(a.ADAPTATION_UPPER_NODE_LIMIT-a.ADAPTATION_LOWER_NODE_LIMIT)*this.coolingFactor*(1-a.COOLING_ADAPTATION_FACTOR))),this.maxNodeDisplacement=a.MAX_NODE_DISPLACEMENT_INCREMENTAL):(d>a.ADAPTATION_LOWER_NODE_LIMIT?this.coolingFactor=Math.max(a.COOLING_ADAPTATION_FACTOR,1-(d-a.ADAPTATION_LOWER_NODE_LIMIT)/(a.ADAPTATION_UPPER_NODE_LIMIT-a.ADAPTATION_LOWER_NODE_LIMIT)*(1-a.COOLING_ADAPTATION_FACTOR)):this.coolingFactor=1,this.initialCoolingFactor=this.coolingFactor,this.maxNodeDisplacement=a.MAX_NODE_DISPLACEMENT),this.maxIterations=Math.max(this.getAllNodes().length*5,this.maxIterations),this.totalDisplacementThreshold=this.displacementThresholdPerNode*this.getAllNodes().length,this.repulsionRange=this.calcRepulsionRange()},h.prototype.calcSpringForces=function(){for(var d=this.getAllEdges(),p,m=0;m0&&arguments[0]!==void 0?arguments[0]:!0,p=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!1,m,g,y,v,x=this.getAllNodes(),b;if(this.useFRGridVariant)for(this.totalIterations%a.GRID_CALCULATION_CHECK_PERIOD==1&&d&&this.updateGrid(),b=new Set,m=0;mw||b>w)&&(d.gravitationForceX=-this.gravityConstant*y,d.gravitationForceY=-this.gravityConstant*v)):(w=p.getEstimatedSize()*this.compoundGravityRangeFactor,(x>w||b>w)&&(d.gravitationForceX=-this.gravityConstant*y*this.compoundGravityConstant,d.gravitationForceY=-this.gravityConstant*v*this.compoundGravityConstant))},h.prototype.isConverged=function(){var d,p=!1;return this.totalIterations>this.maxIterations/3&&(p=Math.abs(this.totalDisplacement-this.oldTotalDisplacement)<2),d=this.totalDisplacement=x.length||w>=x[0].length)){for(var _=0;_h},"_defaultCompareFunction")}]),l}();t.exports=s},function(t,e,r){"use strict";var n=function(){function s(l,u){for(var h=0;h2&&arguments[2]!==void 0?arguments[2]:1,f=arguments.length>3&&arguments[3]!==void 0?arguments[3]:-1,d=arguments.length>4&&arguments[4]!==void 0?arguments[4]:-1;i(this,s),this.sequence1=l,this.sequence2=u,this.match_score=h,this.mismatch_penalty=f,this.gap_penalty=d,this.iMax=l.length+1,this.jMax=u.length+1,this.grid=new Array(this.iMax);for(var p=0;p=0;l--){var u=this.listeners[l];u.event===a&&u.callback===s&&this.listeners.splice(l,1)}},i.emit=function(a,s){for(var l=0;l{"use strict";o(function(e,r){typeof kb=="object"&&typeof _B=="object"?_B.exports=r(AB()):typeof define=="function"&&define.amd?define(["layout-base"],r):typeof kb=="object"?kb.coseBase=r(AB()):e.coseBase=r(e.layoutBase)},"webpackUniversalModuleDefinition")(kb,function(t){return function(e){var r={};function n(i){if(r[i])return r[i].exports;var a=r[i]={i,l:!1,exports:{}};return e[i].call(a.exports,a,a.exports,n),a.l=!0,a.exports}return o(n,"__webpack_require__"),n.m=e,n.c=r,n.i=function(i){return i},n.d=function(i,a,s){n.o(i,a)||Object.defineProperty(i,a,{configurable:!1,enumerable:!0,get:s})},n.n=function(i){var a=i&&i.__esModule?o(function(){return i.default},"getDefault"):o(function(){return i},"getModuleExports");return n.d(a,"a",a),a},n.o=function(i,a){return Object.prototype.hasOwnProperty.call(i,a)},n.p="",n(n.s=7)}([function(e,r){e.exports=t},function(e,r,n){"use strict";var i=n(0).FDLayoutConstants;function a(){}o(a,"CoSEConstants");for(var s in i)a[s]=i[s];a.DEFAULT_USE_MULTI_LEVEL_SCALING=!1,a.DEFAULT_RADIAL_SEPARATION=i.DEFAULT_EDGE_LENGTH,a.DEFAULT_COMPONENT_SEPERATION=60,a.TILE=!0,a.TILING_PADDING_VERTICAL=10,a.TILING_PADDING_HORIZONTAL=10,a.TREE_REDUCTION_ON_INCREMENTAL=!1,e.exports=a},function(e,r,n){"use strict";var i=n(0).FDLayoutEdge;function a(l,u,h){i.call(this,l,u,h)}o(a,"CoSEEdge"),a.prototype=Object.create(i.prototype);for(var s in i)a[s]=i[s];e.exports=a},function(e,r,n){"use strict";var i=n(0).LGraph;function a(l,u,h){i.call(this,l,u,h)}o(a,"CoSEGraph"),a.prototype=Object.create(i.prototype);for(var s in i)a[s]=i[s];e.exports=a},function(e,r,n){"use strict";var i=n(0).LGraphManager;function a(l){i.call(this,l)}o(a,"CoSEGraphManager"),a.prototype=Object.create(i.prototype);for(var s in i)a[s]=i[s];e.exports=a},function(e,r,n){"use strict";var i=n(0).FDLayoutNode,a=n(0).IMath;function s(u,h,f,d){i.call(this,u,h,f,d)}o(s,"CoSENode"),s.prototype=Object.create(i.prototype);for(var l in i)s[l]=i[l];s.prototype.move=function(){var u=this.graphManager.getLayout();this.displacementX=u.coolingFactor*(this.springForceX+this.repulsionForceX+this.gravitationForceX)/this.noOfChildren,this.displacementY=u.coolingFactor*(this.springForceY+this.repulsionForceY+this.gravitationForceY)/this.noOfChildren,Math.abs(this.displacementX)>u.coolingFactor*u.maxNodeDisplacement&&(this.displacementX=u.coolingFactor*u.maxNodeDisplacement*a.sign(this.displacementX)),Math.abs(this.displacementY)>u.coolingFactor*u.maxNodeDisplacement&&(this.displacementY=u.coolingFactor*u.maxNodeDisplacement*a.sign(this.displacementY)),this.child==null?this.moveBy(this.displacementX,this.displacementY):this.child.getNodes().length==0?this.moveBy(this.displacementX,this.displacementY):this.propogateDisplacementToChildren(this.displacementX,this.displacementY),u.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},s.prototype.propogateDisplacementToChildren=function(u,h){for(var f=this.getChild().getNodes(),d,p=0;p0)this.positionNodesRadially(T);else{this.reduceTrees(),this.graphManager.resetAllNodesToApplyGravitation();var E=new Set(this.getAllNodes()),L=this.nodesWithGravity.filter(function(S){return E.has(S)});this.graphManager.setAllNodesToApplyGravitation(L),this.positionNodesRandomly()}}return this.initSpringEmbedder(),this.runSpringEmbedder(),!0},w.prototype.tick=function(){if(this.totalIterations++,this.totalIterations===this.maxIterations&&!this.isTreeGrowing&&!this.isGrowthFinished)if(this.prunedNodesAll.length>0)this.isTreeGrowing=!0;else return!0;if(this.totalIterations%f.CONVERGENCE_CHECK_PERIOD==0&&!this.isTreeGrowing&&!this.isGrowthFinished){if(this.isConverged())if(this.prunedNodesAll.length>0)this.isTreeGrowing=!0;else return!0;this.coolingCycle++,this.layoutQuality==0?this.coolingAdjuster=this.coolingCycle:this.layoutQuality==1&&(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 T=new Set(this.getAllNodes()),E=this.nodesWithGravity.filter(function(A){return T.has(A)});this.graphManager.setAllNodesToApplyGravitation(E),this.graphManager.updateBounds(),this.updateGrid(),this.coolingFactor=f.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=f.DEFAULT_COOLING_FACTOR_INCREMENTAL*((100-this.afterGrowthIterations)/100),this.afterGrowthIterations++}var L=!this.isTreeGrowing&&!this.isGrowthFinished,S=this.growTreeIterations%10==1&&this.isTreeGrowing||this.afterGrowthIterations%10==1&&this.isGrowthFinished;return this.totalDisplacement=0,this.graphManager.updateBounds(),this.calcSpringForces(),this.calcRepulsionForces(L,S),this.calcGravitationalForces(),this.moveNodes(),this.animate(),!1},w.prototype.getPositionsData=function(){for(var T=this.graphManager.getAllNodes(),E={},L=0;L1){var k;for(k=0;kS&&(S=Math.floor(D.y)),I=Math.floor(D.x+h.DEFAULT_COMPONENT_SEPERATION)}this.transform(new m(d.WORLD_CENTER_X-D.x/2,d.WORLD_CENTER_Y-D.y/2))},w.radialLayout=function(T,E,L){var S=Math.max(this.maxDiagonalInTree(T),h.DEFAULT_RADIAL_SEPARATION);w.branchRadialLayout(E,null,0,359,0,S);var A=x.calculateBounds(T),I=new b;I.setDeviceOrgX(A.getMinX()),I.setDeviceOrgY(A.getMinY()),I.setWorldOrgX(L.x),I.setWorldOrgY(L.y);for(var D=0;D1;){var Z=W[0];W.splice(0,1);var j=P.indexOf(Z);j>=0&&P.splice(j,1),G--,F--}E!=null?z=(P.indexOf(W[0])+1)%G:z=0;for(var oe=Math.abs(S-L)/F,K=z;B!=F;K=++K%G){var ee=P[K].getOtherEnd(T);if(ee!=E){var J=(L+B*oe)%360,H=(J+oe)%360;w.branchRadialLayout(ee,T,J,H,A+I,I),B++}}},w.maxDiagonalInTree=function(T){for(var E=y.MIN_VALUE,L=0;LE&&(E=A)}return E},w.prototype.calcRepulsionRange=function(){return 2*(this.level+1)*this.idealEdgeLength},w.prototype.groupZeroDegreeMembers=function(){var T=this,E={};this.memberGroups={},this.idToDummyNode={};for(var L=[],S=this.graphManager.getAllNodes(),A=0;A"u"&&(E[k]=[]),E[k]=E[k].concat(I)}Object.keys(E).forEach(function(R){if(E[R].length>1){var C="DummyCompound_"+R;T.memberGroups[C]=E[R];var O=E[R][0].getParent(),N=new l(T.graphManager);N.id=C,N.paddingLeft=O.paddingLeft||0,N.paddingRight=O.paddingRight||0,N.paddingBottom=O.paddingBottom||0,N.paddingTop=O.paddingTop||0,T.idToDummyNode[C]=N;var P=T.getGraphManager().add(T.newGraph(),N),F=O.getChild();F.add(N);for(var B=0;B=0;T--){var E=this.compoundOrder[T],L=E.id,S=E.paddingLeft,A=E.paddingTop;this.adjustLocations(this.tiledMemberPack[L],E.rect.x,E.rect.y,S,A)}},w.prototype.repopulateZeroDegreeMembers=function(){var T=this,E=this.tiledZeroDegreePack;Object.keys(E).forEach(function(L){var S=T.idToDummyNode[L],A=S.paddingLeft,I=S.paddingTop;T.adjustLocations(E[L],S.rect.x,S.rect.y,A,I)})},w.prototype.getToBeTiled=function(T){var E=T.id;if(this.toBeTiled[E]!=null)return this.toBeTiled[E];var L=T.getChild();if(L==null)return this.toBeTiled[E]=!1,!1;for(var S=L.getNodes(),A=0;A0)return this.toBeTiled[E]=!1,!1;if(I.getChild()==null){this.toBeTiled[I.id]=!1;continue}if(!this.getToBeTiled(I))return this.toBeTiled[E]=!1,!1}return this.toBeTiled[E]=!0,!0},w.prototype.getNodeDegree=function(T){for(var E=T.id,L=T.getEdges(),S=0,A=0;AR&&(R=O.rect.height)}L+=R+T.verticalPadding}},w.prototype.tileCompoundMembers=function(T,E){var L=this;this.tiledMemberPack=[],Object.keys(T).forEach(function(S){var A=E[S];L.tiledMemberPack[S]=L.tileNodes(T[S],A.paddingLeft+A.paddingRight),A.rect.width=L.tiledMemberPack[S].width,A.rect.height=L.tiledMemberPack[S].height})},w.prototype.tileNodes=function(T,E){var L=h.TILING_PADDING_VERTICAL,S=h.TILING_PADDING_HORIZONTAL,A={rows:[],rowWidth:[],rowHeight:[],width:0,height:E,verticalPadding:L,horizontalPadding:S};T.sort(function(k,R){return k.rect.width*k.rect.height>R.rect.width*R.rect.height?-1:k.rect.width*k.rect.height0&&(D+=T.horizontalPadding),T.rowWidth[L]=D,T.width0&&(k+=T.verticalPadding);var R=0;k>T.rowHeight[L]&&(R=T.rowHeight[L],T.rowHeight[L]=k,R=T.rowHeight[L]-R),T.height+=R,T.rows[L].push(E)},w.prototype.getShortestRowIndex=function(T){for(var E=-1,L=Number.MAX_VALUE,S=0;SL&&(E=S,L=T.rowWidth[S]);return E},w.prototype.canAddHorizontal=function(T,E,L){var S=this.getShortestRowIndex(T);if(S<0)return!0;var A=T.rowWidth[S];if(A+T.horizontalPadding+E<=T.width)return!0;var I=0;T.rowHeight[S]0&&(I=L+T.verticalPadding-T.rowHeight[S]);var D;T.width-A>=E+T.horizontalPadding?D=(T.height+I)/(A+E+T.horizontalPadding):D=(T.height+I)/T.width,I=L+T.verticalPadding;var k;return T.widthI&&E!=L){S.splice(-1,1),T.rows[L].push(A),T.rowWidth[E]=T.rowWidth[E]-I,T.rowWidth[L]=T.rowWidth[L]+I,T.width=T.rowWidth[instance.getLongestRowIndex(T)];for(var D=Number.MIN_VALUE,k=0;kD&&(D=S[k].height);E>0&&(D+=T.verticalPadding);var R=T.rowHeight[E]+T.rowHeight[L];T.rowHeight[E]=D,T.rowHeight[L]0)for(var F=A;F<=I;F++)P[0]+=this.grid[F][D-1].length+this.grid[F][D].length-1;if(I0)for(var F=D;F<=k;F++)P[3]+=this.grid[A-1][F].length+this.grid[A][F].length-1;for(var B=y.MAX_VALUE,G,z,W=0;W{"use strict";o(function(e,r){typeof Eb=="object"&&typeof DB=="object"?DB.exports=r(LB()):typeof define=="function"&&define.amd?define(["cose-base"],r):typeof Eb=="object"?Eb.cytoscapeCoseBilkent=r(LB()):e.cytoscapeCoseBilkent=r(e.coseBase)},"webpackUniversalModuleDefinition")(Eb,function(t){return function(e){var r={};function n(i){if(r[i])return r[i].exports;var a=r[i]={i,l:!1,exports:{}};return e[i].call(a.exports,a,a.exports,n),a.l=!0,a.exports}return o(n,"__webpack_require__"),n.m=e,n.c=r,n.i=function(i){return i},n.d=function(i,a,s){n.o(i,a)||Object.defineProperty(i,a,{configurable:!1,enumerable:!0,get:s})},n.n=function(i){var a=i&&i.__esModule?o(function(){return i.default},"getDefault"):o(function(){return i},"getModuleExports");return n.d(a,"a",a),a},n.o=function(i,a){return Object.prototype.hasOwnProperty.call(i,a)},n.p="",n(n.s=1)}([function(e,r){e.exports=t},function(e,r,n){"use strict";var i=n(0).layoutBase.LayoutConstants,a=n(0).layoutBase.FDLayoutConstants,s=n(0).CoSEConstants,l=n(0).CoSELayout,u=n(0).CoSENode,h=n(0).layoutBase.PointD,f=n(0).layoutBase.DimensionD,d={ready:o(function(){},"ready"),stop:o(function(){},"stop"),quality:"default",nodeDimensionsIncludeLabels:!1,refresh:30,fit:!0,padding:10,randomize:!0,nodeRepulsion:4500,idealEdgeLength:50,edgeElasticity:.45,nestingFactor:.1,gravity:.25,numIter:2500,tile:!0,animate:"end",animationDuration:500,tilingPaddingVertical:10,tilingPaddingHorizontal:10,gravityRangeCompound:1.5,gravityCompound:1,gravityRange:3.8,initialEnergyOnIncremental:.5};function p(v,x){var b={};for(var w in v)b[w]=v[w];for(var w in x)b[w]=x[w];return b}o(p,"extend");function m(v){this.options=p(d,v),g(this.options)}o(m,"_CoSELayout");var g=o(function(x){x.nodeRepulsion!=null&&(s.DEFAULT_REPULSION_STRENGTH=a.DEFAULT_REPULSION_STRENGTH=x.nodeRepulsion),x.idealEdgeLength!=null&&(s.DEFAULT_EDGE_LENGTH=a.DEFAULT_EDGE_LENGTH=x.idealEdgeLength),x.edgeElasticity!=null&&(s.DEFAULT_SPRING_STRENGTH=a.DEFAULT_SPRING_STRENGTH=x.edgeElasticity),x.nestingFactor!=null&&(s.PER_LEVEL_IDEAL_EDGE_LENGTH_FACTOR=a.PER_LEVEL_IDEAL_EDGE_LENGTH_FACTOR=x.nestingFactor),x.gravity!=null&&(s.DEFAULT_GRAVITY_STRENGTH=a.DEFAULT_GRAVITY_STRENGTH=x.gravity),x.numIter!=null&&(s.MAX_ITERATIONS=a.MAX_ITERATIONS=x.numIter),x.gravityRange!=null&&(s.DEFAULT_GRAVITY_RANGE_FACTOR=a.DEFAULT_GRAVITY_RANGE_FACTOR=x.gravityRange),x.gravityCompound!=null&&(s.DEFAULT_COMPOUND_GRAVITY_STRENGTH=a.DEFAULT_COMPOUND_GRAVITY_STRENGTH=x.gravityCompound),x.gravityRangeCompound!=null&&(s.DEFAULT_COMPOUND_GRAVITY_RANGE_FACTOR=a.DEFAULT_COMPOUND_GRAVITY_RANGE_FACTOR=x.gravityRangeCompound),x.initialEnergyOnIncremental!=null&&(s.DEFAULT_COOLING_FACTOR_INCREMENTAL=a.DEFAULT_COOLING_FACTOR_INCREMENTAL=x.initialEnergyOnIncremental),x.quality=="draft"?i.QUALITY=0:x.quality=="proof"?i.QUALITY=2:i.QUALITY=1,s.NODE_DIMENSIONS_INCLUDE_LABELS=a.NODE_DIMENSIONS_INCLUDE_LABELS=i.NODE_DIMENSIONS_INCLUDE_LABELS=x.nodeDimensionsIncludeLabels,s.DEFAULT_INCREMENTAL=a.DEFAULT_INCREMENTAL=i.DEFAULT_INCREMENTAL=!x.randomize,s.ANIMATE=a.ANIMATE=i.ANIMATE=x.animate,s.TILE=x.tile,s.TILING_PADDING_VERTICAL=typeof x.tilingPaddingVertical=="function"?x.tilingPaddingVertical.call():x.tilingPaddingVertical,s.TILING_PADDING_HORIZONTAL=typeof x.tilingPaddingHorizontal=="function"?x.tilingPaddingHorizontal.call():x.tilingPaddingHorizontal},"getUserOptions");m.prototype.run=function(){var v,x,b=this.options,w=this.idToLNode={},_=this.layout=new l,T=this;T.stopped=!1,this.cy=this.options.cy,this.cy.trigger({type:"layoutstart",layout:this});var E=_.newGraphManager();this.gm=E;var L=this.options.eles.nodes(),S=this.options.eles.edges();this.root=E.addRoot(),this.processChildrenList(this.root,this.getTopMostNodes(L),_);for(var A=0;A0){var k;k=b.getGraphManager().add(b.newGraph(),L),this.processChildrenList(k,E,b)}}},m.prototype.stop=function(){return this.stopped=!0,this};var y=o(function(x){x("layout","cose-bilkent",m)},"register");typeof cytoscape<"u"&&y(cytoscape),e.exports=y}])})});function itt(t,e,r,n,i){return t.insert("polygon",":first-child").attr("points",n.map(function(a){return a.x+","+a.y}).join(" ")).attr("transform","translate("+(i.width-e)/2+", "+r+")")}var Zet,Jet,ett,ttt,rtt,ntt,att,stt,A1e,_1e,L1e=M(()=>{"use strict";Pl();hr();Zet=12,Jet=o(function(t,e,r,n){e.append("path").attr("id","node-"+r.id).attr("class","node-bkg node-"+t.type2Str(r.type)).attr("d",`M0 ${r.height-5} v${-r.height+2*5} q0,-5 5,-5 h${r.width-2*5} q5,0 5,5 v${r.height-5} H0 Z`),e.append("line").attr("class","node-line-"+n).attr("x1",0).attr("y1",r.height).attr("x2",r.width).attr("y2",r.height)},"defaultBkg"),ett=o(function(t,e,r){e.append("rect").attr("id","node-"+r.id).attr("class","node-bkg node-"+t.type2Str(r.type)).attr("height",r.height).attr("width",r.width)},"rectBkg"),ttt=o(function(t,e,r){let n=r.width,i=r.height,a=.15*n,s=.25*n,l=.35*n,u=.2*n;e.append("path").attr("id","node-"+r.id).attr("class","node-bkg node-"+t.type2Str(r.type)).attr("d",`M0 0 a${a},${a} 0 0,1 ${n*.25},${-1*n*.1} + a${l},${l} 1 0,1 ${n*.4},${-1*n*.1} + a${s},${s} 1 0,1 ${n*.35},${1*n*.2} + + a${a},${a} 1 0,1 ${n*.15},${1*i*.35} + a${u},${u} 1 0,1 ${-1*n*.15},${1*i*.65} + + a${s},${a} 1 0,1 ${-1*n*.25},${n*.15} + a${l},${l} 1 0,1 ${-1*n*.5},0 + a${a},${a} 1 0,1 ${-1*n*.25},${-1*n*.15} + + a${a},${a} 1 0,1 ${-1*n*.1},${-1*i*.35} + a${u},${u} 1 0,1 ${n*.1},${-1*i*.65} + + H0 V0 Z`)},"cloudBkg"),rtt=o(function(t,e,r){let n=r.width,i=r.height,a=.15*n;e.append("path").attr("id","node-"+r.id).attr("class","node-bkg node-"+t.type2Str(r.type)).attr("d",`M0 0 a${a},${a} 1 0,0 ${n*.25},${-1*i*.1} + a${a},${a} 1 0,0 ${n*.25},0 + a${a},${a} 1 0,0 ${n*.25},0 + a${a},${a} 1 0,0 ${n*.25},${1*i*.1} + + a${a},${a} 1 0,0 ${n*.15},${1*i*.33} + a${a*.8},${a*.8} 1 0,0 0,${1*i*.34} + a${a},${a} 1 0,0 ${-1*n*.15},${1*i*.33} + + a${a},${a} 1 0,0 ${-1*n*.25},${i*.15} + a${a},${a} 1 0,0 ${-1*n*.25},0 + a${a},${a} 1 0,0 ${-1*n*.25},0 + a${a},${a} 1 0,0 ${-1*n*.25},${-1*i*.15} + + a${a},${a} 1 0,0 ${-1*n*.1},${-1*i*.33} + a${a*.8},${a*.8} 1 0,0 0,${-1*i*.34} + a${a},${a} 1 0,0 ${n*.1},${-1*i*.33} + + H0 V0 Z`)},"bangBkg"),ntt=o(function(t,e,r){e.append("circle").attr("id","node-"+r.id).attr("class","node-bkg node-"+t.type2Str(r.type)).attr("r",r.width/2)},"circleBkg");o(itt,"insertPolygonShape");att=o(function(t,e,r){let n=r.height,a=n/4,s=r.width-r.padding+2*a,l=[{x:a,y:0},{x:s-a,y:0},{x:s,y:-n/2},{x:s-a,y:-n},{x:a,y:-n},{x:0,y:-n/2}];itt(e,s,n,l,r)},"hexagonBkg"),stt=o(function(t,e,r){e.append("rect").attr("id","node-"+r.id).attr("class","node-bkg node-"+t.type2Str(r.type)).attr("height",r.height).attr("rx",r.padding).attr("ry",r.padding).attr("width",r.width)},"roundedRectBkg"),A1e=o(async function(t,e,r,n,i){let a=i.htmlLabels,s=n%(Zet-1),l=e.append("g");r.section=s;let u="section-"+s;s<0&&(u+=" section-root"),l.attr("class",(r.class?r.class+" ":"")+"mindmap-node "+u);let h=l.append("g"),f=l.append("g"),d=r.descr.replace(/()/g,` +`);await Li(f,d,{useHtmlLabels:a,width:r.width,classes:"mindmap-node-label"},i),a||f.attr("dy","1em").attr("alignment-baseline","middle").attr("dominant-baseline","middle").attr("text-anchor","middle");let p=f.node().getBBox(),[m]=Ho(i.fontSize);if(r.height=p.height+m*1.1*.5+r.padding,r.width=p.width+2*r.padding,r.icon)if(r.type===t.nodeType.CIRCLE)r.height+=50,r.width+=50,l.append("foreignObject").attr("height","50px").attr("width",r.width).attr("style","text-align: center;").append("div").attr("class","icon-container").append("i").attr("class","node-icon-"+s+" "+r.icon),f.attr("transform","translate("+r.width/2+", "+(r.height/2-1.5*r.padding)+")");else{r.width+=50;let g=r.height;r.height=Math.max(g,60);let y=Math.abs(r.height-g);l.append("foreignObject").attr("width","60px").attr("height",r.height).attr("style","text-align: center;margin-top:"+y/2+"px;").append("div").attr("class","icon-container").append("i").attr("class","node-icon-"+s+" "+r.icon),f.attr("transform","translate("+(25+r.width/2)+", "+(y/2+r.padding/2)+")")}else if(a){let g=(r.width-p.width)/2,y=(r.height-p.height)/2;f.attr("transform","translate("+g+", "+y+")")}else{let g=r.width/2,y=r.padding/2;f.attr("transform","translate("+g+", "+y+")")}switch(r.type){case t.nodeType.DEFAULT:Jet(t,h,r,s);break;case t.nodeType.ROUNDED_RECT:stt(t,h,r,s);break;case t.nodeType.RECT:ett(t,h,r,s);break;case t.nodeType.CIRCLE:h.attr("transform","translate("+r.width/2+", "+ +r.height/2+")"),ntt(t,h,r,s);break;case t.nodeType.CLOUD:ttt(t,h,r,s);break;case t.nodeType.BANG:rtt(t,h,r,s);break;case t.nodeType.HEXAGON:att(t,h,r,s);break}return t.setElementForId(r.id,l),r.height},"drawNode"),_1e=o(function(t,e){let r=t.getElementById(e.id),n=e.x||0,i=e.y||0;r.attr("transform","translate("+n+","+i+")")},"positionNode")});async function N1e(t,e,r,n,i){await A1e(t,e,r,n,i),r.children&&await Promise.all(r.children.map((a,s)=>N1e(t,e,a,n<0?s:n,i)))}function ott(t,e){e.edges().map((r,n)=>{let i=r.data();if(r[0]._private.bodyBounds){let a=r[0]._private.rscratch;Y.trace("Edge: ",n,i),t.insert("path").attr("d",`M ${a.startX},${a.startY} L ${a.midX},${a.midY} L${a.endX},${a.endY} `).attr("class","edge section-edge-"+i.section+" edge-depth-"+i.depth)}})}function R1e(t,e,r,n){e.add({group:"nodes",data:{id:t.id.toString(),labelText:t.descr,height:t.height,width:t.width,level:n,nodeId:t.id,padding:t.padding,type:t.type},position:{x:t.x,y:t.y}}),t.children&&t.children.forEach(i=>{R1e(i,e,r,n+1),e.add({group:"edges",data:{id:`${t.id}_${i.id}`,source:t.id,target:i.id,depth:n,section:i.section}})})}function ltt(t,e){return new Promise(r=>{let n=Ve("body").append("div").attr("id","cy").attr("style","display:none"),i=fl({container:document.getElementById("cy"),style:[{selector:"edge",style:{"curve-style":"bezier"}}]});n.remove(),R1e(t,i,e,0),i.nodes().forEach(function(a){a.layoutDimensions=()=>{let s=a.data();return{w:s.width,h:s.height}}}),i.layout({name:"cose-bilkent",quality:"proof",styleEnabled:!1,animate:!1}).run(),i.ready(a=>{Y.info("Ready",a),r(i)})})}function ctt(t,e){e.nodes().map((r,n)=>{let i=r.data();i.x=r.position().x,i.y=r.position().y,_1e(t,i);let a=t.getElementById(i.nodeId);Y.info("Id:",n,"Position: (",r.position().x,", ",r.position().y,")",i),a.attr("transform",`translate(${r.position().x-i.width/2}, ${r.position().y-i.height/2})`),a.attr("attr",`apa-${n})`)})}var D1e,utt,M1e,I1e=M(()=>{"use strict";SB();D1e=Ji(C1e(),1);pr();Vt();ut();eh();ai();L1e();bs();fl.use(D1e.default);o(N1e,"drawNodes");o(ott,"drawEdges");o(R1e,"addNodes");o(ltt,"layoutMindmap");o(ctt,"positionNodes");utt=o(async(t,e,r,n)=>{Y.debug(`Rendering mindmap diagram +`+t);let i=n.db,a=i.getMindmap();if(!a)return;let s=pe();s.htmlLabels=!1;let l=Va(e),u=l.append("g");u.attr("class","mindmap-edges");let h=l.append("g");h.attr("class","mindmap-nodes"),await N1e(i,h,a,-1,s);let f=await ltt(a,s);ott(u,f),ctt(i,f),Io(void 0,l,s.mindmap?.padding??ur.mindmap.padding,s.mindmap?.useMaxWidth??ur.mindmap.useMaxWidth)},"draw"),M1e={draw:utt}});var htt,ftt,O1e,P1e=M(()=>{"use strict";Lo();htt=o(t=>{let e="";for(let r=0;r` + .edge { + stroke-width: 3; + } + ${htt(t)} + .section-root rect, .section-root path, .section-root circle, .section-root polygon { + fill: ${t.git0}; + } + .section-root text { + fill: ${t.gitBranchLabel0}; + } + .icon-container { + height:100%; + display: flex; + justify-content: center; + align-items: center; + } + .edge { + fill: none; + } + .mindmap-node-label { + dy: 1em; + alignment-baseline: middle; + text-anchor: middle; + dominant-baseline: middle; + text-align: center; + } +`,"getStyles"),O1e=ftt});var B1e={};vr(B1e,{diagram:()=>dtt});var dtt,F1e=M(()=>{"use strict";kpe();Cpe();I1e();P1e();dtt={db:Spe,renderer:M1e,parser:Tpe,styles:O1e}});var NB,$1e,V1e=M(()=>{"use strict";NB=function(){var t=o(function(L,S,A,I){for(A=A||{},I=L.length;I--;A[L[I]]=S);return A},"o"),e=[1,4],r=[1,13],n=[1,12],i=[1,15],a=[1,16],s=[1,20],l=[1,19],u=[6,7,8],h=[1,26],f=[1,24],d=[1,25],p=[6,7,11],m=[1,31],g=[6,7,11,24],y=[1,6,13,16,17,20,23],v=[1,35],x=[1,36],b=[1,6,7,11,13,16,17,20,23],w=[1,38],_={trace:o(function(){},"trace"),yy:{},symbols_:{error:2,start:3,mindMap:4,spaceLines:5,SPACELINE:6,NL:7,KANBAN:8,document:9,stop:10,EOF:11,statement:12,SPACELIST:13,node:14,shapeData:15,ICON:16,CLASS:17,nodeWithId:18,nodeWithoutId:19,NODE_DSTART:20,NODE_DESCR:21,NODE_DEND:22,NODE_ID:23,SHAPE_DATA:24,$accept:0,$end:1},terminals_:{2:"error",6:"SPACELINE",7:"NL",8:"KANBAN",11:"EOF",13:"SPACELIST",16:"ICON",17:"CLASS",20:"NODE_DSTART",21:"NODE_DESCR",22:"NODE_DEND",23:"NODE_ID",24:"SHAPE_DATA"},productions_:[0,[3,1],[3,2],[5,1],[5,2],[5,2],[4,2],[4,3],[10,1],[10,1],[10,1],[10,2],[10,2],[9,3],[9,2],[12,3],[12,2],[12,2],[12,2],[12,1],[12,2],[12,1],[12,1],[12,1],[12,1],[14,1],[14,1],[19,3],[18,1],[18,4],[15,2],[15,1]],performAction:o(function(S,A,I,D,k,R,C){var O=R.length-1;switch(k){case 6:case 7:return D;case 8:D.getLogger().trace("Stop NL ");break;case 9:D.getLogger().trace("Stop EOF ");break;case 11:D.getLogger().trace("Stop NL2 ");break;case 12:D.getLogger().trace("Stop EOF2 ");break;case 15:D.getLogger().info("Node: ",R[O-1].id),D.addNode(R[O-2].length,R[O-1].id,R[O-1].descr,R[O-1].type,R[O]);break;case 16:D.getLogger().info("Node: ",R[O].id),D.addNode(R[O-1].length,R[O].id,R[O].descr,R[O].type);break;case 17:D.getLogger().trace("Icon: ",R[O]),D.decorateNode({icon:R[O]});break;case 18:case 23:D.decorateNode({class:R[O]});break;case 19:D.getLogger().trace("SPACELIST");break;case 20:D.getLogger().trace("Node: ",R[O-1].id),D.addNode(0,R[O-1].id,R[O-1].descr,R[O-1].type,R[O]);break;case 21:D.getLogger().trace("Node: ",R[O].id),D.addNode(0,R[O].id,R[O].descr,R[O].type);break;case 22:D.decorateNode({icon:R[O]});break;case 27:D.getLogger().trace("node found ..",R[O-2]),this.$={id:R[O-1],descr:R[O-1],type:D.getType(R[O-2],R[O])};break;case 28:this.$={id:R[O],descr:R[O],type:0};break;case 29:D.getLogger().trace("node found ..",R[O-3]),this.$={id:R[O-3],descr:R[O-1],type:D.getType(R[O-2],R[O])};break;case 30:this.$=R[O-1]+R[O];break;case 31:this.$=R[O];break}},"anonymous"),table:[{3:1,4:2,5:3,6:[1,5],8:e},{1:[3]},{1:[2,1]},{4:6,6:[1,7],7:[1,8],8:e},{6:r,7:[1,10],9:9,12:11,13:n,14:14,16:i,17:a,18:17,19:18,20:s,23:l},t(u,[2,3]),{1:[2,2]},t(u,[2,4]),t(u,[2,5]),{1:[2,6],6:r,12:21,13:n,14:14,16:i,17:a,18:17,19:18,20:s,23:l},{6:r,9:22,12:11,13:n,14:14,16:i,17:a,18:17,19:18,20:s,23:l},{6:h,7:f,10:23,11:d},t(p,[2,24],{18:17,19:18,14:27,16:[1,28],17:[1,29],20:s,23:l}),t(p,[2,19]),t(p,[2,21],{15:30,24:m}),t(p,[2,22]),t(p,[2,23]),t(g,[2,25]),t(g,[2,26]),t(g,[2,28],{20:[1,32]}),{21:[1,33]},{6:h,7:f,10:34,11:d},{1:[2,7],6:r,12:21,13:n,14:14,16:i,17:a,18:17,19:18,20:s,23:l},t(y,[2,14],{7:v,11:x}),t(b,[2,8]),t(b,[2,9]),t(b,[2,10]),t(p,[2,16],{15:37,24:m}),t(p,[2,17]),t(p,[2,18]),t(p,[2,20],{24:w}),t(g,[2,31]),{21:[1,39]},{22:[1,40]},t(y,[2,13],{7:v,11:x}),t(b,[2,11]),t(b,[2,12]),t(p,[2,15],{24:w}),t(g,[2,30]),{22:[1,41]},t(g,[2,27]),t(g,[2,29])],defaultActions:{2:[2,1],6:[2,2]},parseError:o(function(S,A){if(A.recoverable)this.trace(S);else{var I=new Error(S);throw I.hash=A,I}},"parseError"),parse:o(function(S){var A=this,I=[0],D=[],k=[null],R=[],C=this.table,O="",N=0,P=0,F=0,B=2,G=1,z=R.slice.call(arguments,1),W=Object.create(this.lexer),Z={yy:{}};for(var j in this.yy)Object.prototype.hasOwnProperty.call(this.yy,j)&&(Z.yy[j]=this.yy[j]);W.setInput(S,Z.yy),Z.yy.lexer=W,Z.yy.parser=this,typeof W.yylloc>"u"&&(W.yylloc={});var oe=W.yylloc;R.push(oe);var K=W.options&&W.options.ranges;typeof Z.yy.parseError=="function"?this.parseError=Z.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function ee(Pe){I.length=I.length-2*Pe,k.length=k.length-Pe,R.length=R.length-Pe}o(ee,"popStack");function J(){var Pe;return Pe=D.pop()||W.lex()||G,typeof Pe!="number"&&(Pe instanceof Array&&(D=Pe,Pe=D.pop()),Pe=A.symbols_[Pe]||Pe),Pe}o(J,"lex");for(var H,q,Q,ae,ue,ce,te={},Ne,se,ke,Re;;){if(Q=I[I.length-1],this.defaultActions[Q]?ae=this.defaultActions[Q]:((H===null||typeof H>"u")&&(H=J()),ae=C[Q]&&C[Q][H]),typeof ae>"u"||!ae.length||!ae[0]){var Ce="";Re=[];for(Ne in C[Q])this.terminals_[Ne]&&Ne>B&&Re.push("'"+this.terminals_[Ne]+"'");W.showPosition?Ce="Parse error on line "+(N+1)+`: +`+W.showPosition()+` +Expecting `+Re.join(", ")+", got '"+(this.terminals_[H]||H)+"'":Ce="Parse error on line "+(N+1)+": Unexpected "+(H==G?"end of input":"'"+(this.terminals_[H]||H)+"'"),this.parseError(Ce,{text:W.match,token:this.terminals_[H]||H,line:W.yylineno,loc:oe,expected:Re})}if(ae[0]instanceof Array&&ae.length>1)throw new Error("Parse Error: multiple actions possible at state: "+Q+", token: "+H);switch(ae[0]){case 1:I.push(H),k.push(W.yytext),R.push(W.yylloc),I.push(ae[1]),H=null,q?(H=q,q=null):(P=W.yyleng,O=W.yytext,N=W.yylineno,oe=W.yylloc,F>0&&F--);break;case 2:if(se=this.productions_[ae[1]][1],te.$=k[k.length-se],te._$={first_line:R[R.length-(se||1)].first_line,last_line:R[R.length-1].last_line,first_column:R[R.length-(se||1)].first_column,last_column:R[R.length-1].last_column},K&&(te._$.range=[R[R.length-(se||1)].range[0],R[R.length-1].range[1]]),ce=this.performAction.apply(te,[O,P,N,Z.yy,ae[1],k,R].concat(z)),typeof ce<"u")return ce;se&&(I=I.slice(0,-1*se*2),k=k.slice(0,-1*se),R=R.slice(0,-1*se)),I.push(this.productions_[ae[1]][0]),k.push(te.$),R.push(te._$),ke=C[I[I.length-2]][I[I.length-1]],I.push(ke);break;case 3:return!0}}return!0},"parse")},T=function(){var L={EOF:1,parseError:o(function(A,I){if(this.yy.parser)this.yy.parser.parseError(A,I);else throw new Error(A)},"parseError"),setInput:o(function(S,A){return this.yy=A||this.yy||{},this._input=S,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},"setInput"),input:o(function(){var S=this._input[0];this.yytext+=S,this.yyleng++,this.offset++,this.match+=S,this.matched+=S;var A=S.match(/(?:\r\n?|\n).*/g);return A?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),S},"input"),unput:o(function(S){var A=S.length,I=S.split(/(?:\r\n?|\n)/g);this._input=S+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-A),this.offset-=A;var D=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),I.length-1&&(this.yylineno-=I.length-1);var k=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:I?(I.length===D.length?this.yylloc.first_column:0)+D[D.length-I.length].length-I[0].length:this.yylloc.first_column-A},this.options.ranges&&(this.yylloc.range=[k[0],k[0]+this.yyleng-A]),this.yyleng=this.yytext.length,this},"unput"),more:o(function(){return this._more=!0,this},"more"),reject:o(function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true). +`+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},"reject"),less:o(function(S){this.unput(this.match.slice(S))},"less"),pastInput:o(function(){var S=this.matched.substr(0,this.matched.length-this.match.length);return(S.length>20?"...":"")+S.substr(-20).replace(/\n/g,"")},"pastInput"),upcomingInput:o(function(){var S=this.match;return S.length<20&&(S+=this._input.substr(0,20-S.length)),(S.substr(0,20)+(S.length>20?"...":"")).replace(/\n/g,"")},"upcomingInput"),showPosition:o(function(){var S=this.pastInput(),A=new Array(S.length+1).join("-");return S+this.upcomingInput()+` +`+A+"^"},"showPosition"),test_match:o(function(S,A){var I,D,k;if(this.options.backtrack_lexer&&(k={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(k.yylloc.range=this.yylloc.range.slice(0))),D=S[0].match(/(?:\r\n?|\n).*/g),D&&(this.yylineno+=D.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:D?D[D.length-1].length-D[D.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+S[0].length},this.yytext+=S[0],this.match+=S[0],this.matches=S,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(S[0].length),this.matched+=S[0],I=this.performAction.call(this,this.yy,this,A,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),I)return I;if(this._backtrack){for(var R in k)this[R]=k[R];return!1}return!1},"test_match"),next:o(function(){if(this.done)return this.EOF;this._input||(this.done=!0);var S,A,I,D;this._more||(this.yytext="",this.match="");for(var k=this._currentRules(),R=0;RA[0].length)){if(A=I,D=R,this.options.backtrack_lexer){if(S=this.test_match(I,k[R]),S!==!1)return S;if(this._backtrack){A=!1;continue}else return!1}else if(!this.options.flex)break}return A?(S=this.test_match(A,k[D]),S!==!1?S:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text. +`+this.showPosition(),{text:"",token:null,line:this.yylineno})},"next"),lex:o(function(){var A=this.next();return A||this.lex()},"lex"),begin:o(function(A){this.conditionStack.push(A)},"begin"),popState:o(function(){var A=this.conditionStack.length-1;return A>0?this.conditionStack.pop():this.conditionStack[0]},"popState"),_currentRules:o(function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},"_currentRules"),topState:o(function(A){return A=this.conditionStack.length-1-Math.abs(A||0),A>=0?this.conditionStack[A]:"INITIAL"},"topState"),pushState:o(function(A){this.begin(A)},"pushState"),stateStackSize:o(function(){return this.conditionStack.length},"stateStackSize"),options:{"case-insensitive":!0},performAction:o(function(A,I,D,k){var R=k;switch(D){case 0:return this.pushState("shapeData"),I.yytext="",24;break;case 1:return this.pushState("shapeDataStr"),24;break;case 2:return this.popState(),24;break;case 3:let C=/\n\s*/g;return I.yytext=I.yytext.replace(C,"
    "),24;break;case 4:return 24;case 5:this.popState();break;case 6:return A.getLogger().trace("Found comment",I.yytext),6;break;case 7:return 8;case 8:this.begin("CLASS");break;case 9:return this.popState(),17;break;case 10:this.popState();break;case 11:A.getLogger().trace("Begin icon"),this.begin("ICON");break;case 12:return A.getLogger().trace("SPACELINE"),6;break;case 13:return 7;case 14:return 16;case 15:A.getLogger().trace("end icon"),this.popState();break;case 16:return A.getLogger().trace("Exploding node"),this.begin("NODE"),20;break;case 17:return A.getLogger().trace("Cloud"),this.begin("NODE"),20;break;case 18:return A.getLogger().trace("Explosion Bang"),this.begin("NODE"),20;break;case 19:return A.getLogger().trace("Cloud Bang"),this.begin("NODE"),20;break;case 20:return this.begin("NODE"),20;break;case 21:return this.begin("NODE"),20;break;case 22:return this.begin("NODE"),20;break;case 23:return this.begin("NODE"),20;break;case 24:return 13;case 25:return 23;case 26:return 11;case 27:this.begin("NSTR2");break;case 28:return"NODE_DESCR";case 29:this.popState();break;case 30:A.getLogger().trace("Starting NSTR"),this.begin("NSTR");break;case 31:return A.getLogger().trace("description:",I.yytext),"NODE_DESCR";break;case 32:this.popState();break;case 33:return this.popState(),A.getLogger().trace("node end ))"),"NODE_DEND";break;case 34:return this.popState(),A.getLogger().trace("node end )"),"NODE_DEND";break;case 35:return this.popState(),A.getLogger().trace("node end ...",I.yytext),"NODE_DEND";break;case 36:return this.popState(),A.getLogger().trace("node end (("),"NODE_DEND";break;case 37:return this.popState(),A.getLogger().trace("node end (-"),"NODE_DEND";break;case 38:return this.popState(),A.getLogger().trace("node end (-"),"NODE_DEND";break;case 39:return this.popState(),A.getLogger().trace("node end (("),"NODE_DEND";break;case 40:return this.popState(),A.getLogger().trace("node end (("),"NODE_DEND";break;case 41:return A.getLogger().trace("Long description:",I.yytext),21;break;case 42:return A.getLogger().trace("Long description:",I.yytext),21;break}},"anonymous"),rules:[/^(?:@\{)/i,/^(?:["])/i,/^(?:["])/i,/^(?:[^\"]+)/i,/^(?:[^}^"]+)/i,/^(?:\})/i,/^(?:\s*%%.*)/i,/^(?:kanban\b)/i,/^(?::::)/i,/^(?:.+)/i,/^(?:\n)/i,/^(?:::icon\()/i,/^(?:[\s]+[\n])/i,/^(?:[\n]+)/i,/^(?:[^\)]+)/i,/^(?:\))/i,/^(?:-\))/i,/^(?:\(-)/i,/^(?:\)\))/i,/^(?:\))/i,/^(?:\(\()/i,/^(?:\{\{)/i,/^(?:\()/i,/^(?:\[)/i,/^(?:[\s]+)/i,/^(?:[^\(\[\n\)\{\}@]+)/i,/^(?:$)/i,/^(?:["][`])/i,/^(?:[^`"]+)/i,/^(?:[`]["])/i,/^(?:["])/i,/^(?:[^"]+)/i,/^(?:["])/i,/^(?:[\)]\))/i,/^(?:[\)])/i,/^(?:[\]])/i,/^(?:\}\})/i,/^(?:\(-)/i,/^(?:-\))/i,/^(?:\(\()/i,/^(?:\()/i,/^(?:[^\)\]\(\}]+)/i,/^(?:.+(?!\(\())/i],conditions:{shapeDataEndBracket:{rules:[],inclusive:!1},shapeDataStr:{rules:[2,3],inclusive:!1},shapeData:{rules:[1,4,5],inclusive:!1},CLASS:{rules:[9,10],inclusive:!1},ICON:{rules:[14,15],inclusive:!1},NSTR2:{rules:[28,29],inclusive:!1},NSTR:{rules:[31,32],inclusive:!1},NODE:{rules:[27,30,33,34,35,36,37,38,39,40,41,42],inclusive:!1},INITIAL:{rules:[0,6,7,8,11,12,13,16,17,18,19,20,21,22,23,24,25,26],inclusive:!0}}};return L}();_.lexer=T;function E(){this.yy={}}return o(E,"Parser"),E.prototype=_,_.Parser=E,new E}();NB.parser=NB;$1e=NB});var dl,MB,RB,IB,ytt,vtt,U1e,xtt,btt,Zi,wtt,Ttt,ktt,Ett,Stt,Ctt,Att,H1e,W1e=M(()=>{"use strict";Vt();fr();ut();bs();ew();dl=[],MB=[],RB=0,IB={},ytt=o(()=>{dl=[],MB=[],RB=0,IB={}},"clear"),vtt=o(t=>{if(dl.length===0)return null;let e=dl[0].level,r=null;for(let n=dl.length-1;n>=0;n--)if(dl[n].level===e&&!r&&(r=dl[n]),dl[n].levell.parentId===i.id);for(let l of s){let u={id:l.id,parentId:i.id,label:kr(l.label??"",n),isGroup:!1,ticket:l?.ticket,priority:l?.priority,assigned:l?.assigned,icon:l?.icon,shape:"kanbanItem",level:l.level,rx:5,ry:5,cssStyles:["text-align: left"]};e.push(u)}}return{nodes:e,edges:t,other:{},config:pe()}},"getData"),btt=o((t,e,r,n,i)=>{let a=pe(),s=a.mindmap?.padding??ur.mindmap.padding;switch(n){case Zi.ROUNDED_RECT:case Zi.RECT:case Zi.HEXAGON:s*=2}let l={id:kr(e,a)||"kbn"+RB++,level:t,label:kr(r,a),width:a.mindmap?.maxNodeWidth??ur.mindmap.maxNodeWidth,padding:s,isGroup:!1};if(i!==void 0){let h;i.includes(` +`)?h=i+` +`:h=`{ +`+i+` +}`;let f=Sm(h,{schema:Em});if(f.shape&&(f.shape!==f.shape.toLowerCase()||f.shape.includes("_")))throw new Error(`No such shape: ${f.shape}. Shape names should be lowercase.`);f?.shape&&f.shape==="kanbanItem"&&(l.shape=f?.shape),f?.label&&(l.label=f?.label),f?.icon&&(l.icon=f?.icon),f?.assigned&&(l.assigned=f?.assigned),f?.ticket&&(l.ticket=f?.ticket),f?.priority&&(l.priority=f?.priority)}let u=vtt(t);u?l.parentId=u.id||"kbn"+RB++:MB.push(l),dl.push(l)},"addNode"),Zi={DEFAULT:0,NO_BORDER:0,ROUNDED_RECT:1,RECT:2,CIRCLE:3,CLOUD:4,BANG:5,HEXAGON:6},wtt=o((t,e)=>{switch(Y.debug("In get type",t,e),t){case"[":return Zi.RECT;case"(":return e===")"?Zi.ROUNDED_RECT:Zi.CLOUD;case"((":return Zi.CIRCLE;case")":return Zi.CLOUD;case"))":return Zi.BANG;case"{{":return Zi.HEXAGON;default:return Zi.DEFAULT}},"getType"),Ttt=o((t,e)=>{IB[t]=e},"setElementForId"),ktt=o(t=>{if(!t)return;let e=pe(),r=dl[dl.length-1];t.icon&&(r.icon=kr(t.icon,e)),t.class&&(r.cssClasses=kr(t.class,e))},"decorateNode"),Ett=o(t=>{switch(t){case Zi.DEFAULT:return"no-border";case Zi.RECT:return"rect";case Zi.ROUNDED_RECT:return"rounded-rect";case Zi.CIRCLE:return"circle";case Zi.CLOUD:return"cloud";case Zi.BANG:return"bang";case Zi.HEXAGON:return"hexgon";default:return"no-border"}},"type2Str"),Stt=o(()=>Y,"getLogger"),Ctt=o(t=>IB[t],"getElementById"),Att={clear:ytt,addNode:btt,getSections:U1e,getData:xtt,nodeType:Zi,getType:wtt,setElementForId:Ttt,decorateNode:ktt,type2Str:Ett,getLogger:Stt,getElementById:Ctt},H1e=Att});var _tt,Y1e,q1e=M(()=>{"use strict";Vt();ut();eh();ai();bs();lw();vw();_tt=o(async(t,e,r,n)=>{Y.debug(`Rendering kanban diagram +`+t);let a=n.db.getData(),s=pe();s.htmlLabels=!1;let l=Va(e),u=l.append("g");u.attr("class","sections");let h=l.append("g");h.attr("class","items");let f=a.nodes.filter(v=>v.isGroup),d=0,p=10,m=[],g=25;for(let v of f){let x=s?.kanban?.sectionWidth||200;d=d+1,v.x=x*d+(d-1)*p/2,v.width=x,v.y=0,v.height=x*3,v.rx=5,v.ry=5,v.cssClasses=v.cssClasses+" section-"+d;let b=await _m(u,v);g=Math.max(g,b?.labelBBox?.height),m.push(b)}let y=0;for(let v of f){let x=m[y];y=y+1;let b=s?.kanban?.sectionWidth||200,w=-b*3/2+g,_=w,T=a.nodes.filter(S=>S.parentId===v.id);for(let S of T){if(S.isGroup)throw new Error("Groups within groups are not allowed in Kanban diagrams");S.x=v.x,S.width=b-1.5*p;let I=(await Lm(h,S,{config:s})).node().getBBox();S.y=_+I.height/2,await Uv(S),_=S.y+I.height/2+p/2}let E=x.cluster.select("rect"),L=Math.max(_-w+3*p,50)+(g-25);E.attr("height",L)}Io(void 0,l,s.mindmap?.padding??ur.kanban.padding,s.mindmap?.useMaxWidth??ur.kanban.useMaxWidth)},"draw"),Y1e={draw:_tt}});var Ltt,Dtt,X1e,j1e=M(()=>{"use strict";Lo();Ltt=o(t=>{let e="";for(let n=0;nt.darkMode?It(n,i):_t(n,i),"adjuster");for(let n=0;n` + .edge { + stroke-width: 3; + } + ${Ltt(t)} + .section-root rect, .section-root path, .section-root circle, .section-root polygon { + fill: ${t.git0}; + } + .section-root text { + fill: ${t.gitBranchLabel0}; + } + .icon-container { + height:100%; + display: flex; + justify-content: center; + align-items: center; + } + .edge { + fill: none; + } + .cluster-label, .label { + color: ${t.textColor}; + fill: ${t.textColor}; + } + .kanban-label { + dy: 1em; + alignment-baseline: middle; + text-anchor: middle; + dominant-baseline: middle; + text-align: center; + } +`,"getStyles"),X1e=Dtt});var K1e={};vr(K1e,{diagram:()=>Ntt});var Ntt,Q1e=M(()=>{"use strict";V1e();W1e();q1e();j1e();Ntt={db:H1e,renderer:Y1e,parser:$1e,styles:X1e}});var OB,Sb,eye=M(()=>{"use strict";OB=function(){var t=o(function(l,u,h,f){for(h=h||{},f=l.length;f--;h[l[f]]=u);return h},"o"),e=[1,9],r=[1,10],n=[1,5,10,12],i={trace:o(function(){},"trace"),yy:{},symbols_:{error:2,start:3,SANKEY:4,NEWLINE:5,csv:6,opt_eof:7,record:8,csv_tail:9,EOF:10,"field[source]":11,COMMA:12,"field[target]":13,"field[value]":14,field:15,escaped:16,non_escaped:17,DQUOTE:18,ESCAPED_TEXT:19,NON_ESCAPED_TEXT:20,$accept:0,$end:1},terminals_:{2:"error",4:"SANKEY",5:"NEWLINE",10:"EOF",11:"field[source]",12:"COMMA",13:"field[target]",14:"field[value]",18:"DQUOTE",19:"ESCAPED_TEXT",20:"NON_ESCAPED_TEXT"},productions_:[0,[3,4],[6,2],[9,2],[9,0],[7,1],[7,0],[8,5],[15,1],[15,1],[16,3],[17,1]],performAction:o(function(u,h,f,d,p,m,g){var y=m.length-1;switch(p){case 7:let v=d.findOrCreateNode(m[y-4].trim().replaceAll('""','"')),x=d.findOrCreateNode(m[y-2].trim().replaceAll('""','"')),b=parseFloat(m[y].trim());d.addLink(v,x,b);break;case 8:case 9:case 11:this.$=m[y];break;case 10:this.$=m[y-1];break}},"anonymous"),table:[{3:1,4:[1,2]},{1:[3]},{5:[1,3]},{6:4,8:5,15:6,16:7,17:8,18:e,20:r},{1:[2,6],7:11,10:[1,12]},t(r,[2,4],{9:13,5:[1,14]}),{12:[1,15]},t(n,[2,8]),t(n,[2,9]),{19:[1,16]},t(n,[2,11]),{1:[2,1]},{1:[2,5]},t(r,[2,2]),{6:17,8:5,15:6,16:7,17:8,18:e,20:r},{15:18,16:7,17:8,18:e,20:r},{18:[1,19]},t(r,[2,3]),{12:[1,20]},t(n,[2,10]),{15:21,16:7,17:8,18:e,20:r},t([1,5,10],[2,7])],defaultActions:{11:[2,1],12:[2,5]},parseError:o(function(u,h){if(h.recoverable)this.trace(u);else{var f=new Error(u);throw f.hash=h,f}},"parseError"),parse:o(function(u){var h=this,f=[0],d=[],p=[null],m=[],g=this.table,y="",v=0,x=0,b=0,w=2,_=1,T=m.slice.call(arguments,1),E=Object.create(this.lexer),L={yy:{}};for(var S in this.yy)Object.prototype.hasOwnProperty.call(this.yy,S)&&(L.yy[S]=this.yy[S]);E.setInput(u,L.yy),L.yy.lexer=E,L.yy.parser=this,typeof E.yylloc>"u"&&(E.yylloc={});var A=E.yylloc;m.push(A);var I=E.options&&E.options.ranges;typeof L.yy.parseError=="function"?this.parseError=L.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function D(oe){f.length=f.length-2*oe,p.length=p.length-oe,m.length=m.length-oe}o(D,"popStack");function k(){var oe;return oe=d.pop()||E.lex()||_,typeof oe!="number"&&(oe instanceof Array&&(d=oe,oe=d.pop()),oe=h.symbols_[oe]||oe),oe}o(k,"lex");for(var R,C,O,N,P,F,B={},G,z,W,Z;;){if(O=f[f.length-1],this.defaultActions[O]?N=this.defaultActions[O]:((R===null||typeof R>"u")&&(R=k()),N=g[O]&&g[O][R]),typeof N>"u"||!N.length||!N[0]){var j="";Z=[];for(G in g[O])this.terminals_[G]&&G>w&&Z.push("'"+this.terminals_[G]+"'");E.showPosition?j="Parse error on line "+(v+1)+`: +`+E.showPosition()+` +Expecting `+Z.join(", ")+", got '"+(this.terminals_[R]||R)+"'":j="Parse error on line "+(v+1)+": Unexpected "+(R==_?"end of input":"'"+(this.terminals_[R]||R)+"'"),this.parseError(j,{text:E.match,token:this.terminals_[R]||R,line:E.yylineno,loc:A,expected:Z})}if(N[0]instanceof Array&&N.length>1)throw new Error("Parse Error: multiple actions possible at state: "+O+", token: "+R);switch(N[0]){case 1:f.push(R),p.push(E.yytext),m.push(E.yylloc),f.push(N[1]),R=null,C?(R=C,C=null):(x=E.yyleng,y=E.yytext,v=E.yylineno,A=E.yylloc,b>0&&b--);break;case 2:if(z=this.productions_[N[1]][1],B.$=p[p.length-z],B._$={first_line:m[m.length-(z||1)].first_line,last_line:m[m.length-1].last_line,first_column:m[m.length-(z||1)].first_column,last_column:m[m.length-1].last_column},I&&(B._$.range=[m[m.length-(z||1)].range[0],m[m.length-1].range[1]]),F=this.performAction.apply(B,[y,x,v,L.yy,N[1],p,m].concat(T)),typeof F<"u")return F;z&&(f=f.slice(0,-1*z*2),p=p.slice(0,-1*z),m=m.slice(0,-1*z)),f.push(this.productions_[N[1]][0]),p.push(B.$),m.push(B._$),W=g[f[f.length-2]][f[f.length-1]],f.push(W);break;case 3:return!0}}return!0},"parse")},a=function(){var l={EOF:1,parseError:o(function(h,f){if(this.yy.parser)this.yy.parser.parseError(h,f);else throw new Error(h)},"parseError"),setInput:o(function(u,h){return this.yy=h||this.yy||{},this._input=u,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},"setInput"),input:o(function(){var u=this._input[0];this.yytext+=u,this.yyleng++,this.offset++,this.match+=u,this.matched+=u;var h=u.match(/(?:\r\n?|\n).*/g);return h?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),u},"input"),unput:o(function(u){var h=u.length,f=u.split(/(?:\r\n?|\n)/g);this._input=u+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-h),this.offset-=h;var d=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),f.length-1&&(this.yylineno-=f.length-1);var p=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:f?(f.length===d.length?this.yylloc.first_column:0)+d[d.length-f.length].length-f[0].length:this.yylloc.first_column-h},this.options.ranges&&(this.yylloc.range=[p[0],p[0]+this.yyleng-h]),this.yyleng=this.yytext.length,this},"unput"),more:o(function(){return this._more=!0,this},"more"),reject:o(function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true). +`+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},"reject"),less:o(function(u){this.unput(this.match.slice(u))},"less"),pastInput:o(function(){var u=this.matched.substr(0,this.matched.length-this.match.length);return(u.length>20?"...":"")+u.substr(-20).replace(/\n/g,"")},"pastInput"),upcomingInput:o(function(){var u=this.match;return u.length<20&&(u+=this._input.substr(0,20-u.length)),(u.substr(0,20)+(u.length>20?"...":"")).replace(/\n/g,"")},"upcomingInput"),showPosition:o(function(){var u=this.pastInput(),h=new Array(u.length+1).join("-");return u+this.upcomingInput()+` +`+h+"^"},"showPosition"),test_match:o(function(u,h){var f,d,p;if(this.options.backtrack_lexer&&(p={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(p.yylloc.range=this.yylloc.range.slice(0))),d=u[0].match(/(?:\r\n?|\n).*/g),d&&(this.yylineno+=d.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:d?d[d.length-1].length-d[d.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+u[0].length},this.yytext+=u[0],this.match+=u[0],this.matches=u,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(u[0].length),this.matched+=u[0],f=this.performAction.call(this,this.yy,this,h,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),f)return f;if(this._backtrack){for(var m in p)this[m]=p[m];return!1}return!1},"test_match"),next:o(function(){if(this.done)return this.EOF;this._input||(this.done=!0);var u,h,f,d;this._more||(this.yytext="",this.match="");for(var p=this._currentRules(),m=0;mh[0].length)){if(h=f,d=m,this.options.backtrack_lexer){if(u=this.test_match(f,p[m]),u!==!1)return u;if(this._backtrack){h=!1;continue}else return!1}else if(!this.options.flex)break}return h?(u=this.test_match(h,p[d]),u!==!1?u:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text. +`+this.showPosition(),{text:"",token:null,line:this.yylineno})},"next"),lex:o(function(){var h=this.next();return h||this.lex()},"lex"),begin:o(function(h){this.conditionStack.push(h)},"begin"),popState:o(function(){var h=this.conditionStack.length-1;return h>0?this.conditionStack.pop():this.conditionStack[0]},"popState"),_currentRules:o(function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},"_currentRules"),topState:o(function(h){return h=this.conditionStack.length-1-Math.abs(h||0),h>=0?this.conditionStack[h]:"INITIAL"},"topState"),pushState:o(function(h){this.begin(h)},"pushState"),stateStackSize:o(function(){return this.conditionStack.length},"stateStackSize"),options:{"case-insensitive":!0},performAction:o(function(h,f,d,p){var m=p;switch(d){case 0:return this.pushState("csv"),4;break;case 1:return 10;case 2:return 5;case 3:return 12;case 4:return this.pushState("escaped_text"),18;break;case 5:return 20;case 6:return this.popState("escaped_text"),18;break;case 7:return 19}},"anonymous"),rules:[/^(?:sankey-beta\b)/i,/^(?:$)/i,/^(?:((\u000D\u000A)|(\u000A)))/i,/^(?:(\u002C))/i,/^(?:(\u0022))/i,/^(?:([\u0020-\u0021\u0023-\u002B\u002D-\u007E])*)/i,/^(?:(\u0022)(?!(\u0022)))/i,/^(?:(([\u0020-\u0021\u0023-\u002B\u002D-\u007E])|(\u002C)|(\u000D)|(\u000A)|(\u0022)(\u0022))*)/i],conditions:{csv:{rules:[1,2,3,4,5,6,7],inclusive:!1},escaped_text:{rules:[6,7],inclusive:!1},INITIAL:{rules:[0,1,2,3,4,5,6,7],inclusive:!0}}};return l}();i.lexer=a;function s(){this.yy={}}return o(s,"Parser"),s.prototype=i,i.Parser=s,new s}();OB.parser=OB;Sb=OB});var rS,nS,tS,Ott,PB,Ptt,BB,Btt,Ftt,ztt,Gtt,tye,rye=M(()=>{"use strict";Vt();fr();Ai();rS=[],nS=[],tS=new Map,Ott=o(()=>{rS=[],nS=[],tS=new Map,Lr()},"clear"),PB=class{constructor(e,r,n=0){this.source=e;this.target=r;this.value=n}static{o(this,"SankeyLink")}},Ptt=o((t,e,r)=>{rS.push(new PB(t,e,r))},"addLink"),BB=class{constructor(e){this.ID=e}static{o(this,"SankeyNode")}},Btt=o(t=>{t=qe.sanitizeText(t,pe());let e=tS.get(t);return e===void 0&&(e=new BB(t),tS.set(t,e),nS.push(e)),e},"findOrCreateNode"),Ftt=o(()=>nS,"getNodes"),ztt=o(()=>rS,"getLinks"),Gtt=o(()=>({nodes:nS.map(t=>({id:t.ID})),links:rS.map(t=>({source:t.source.ID,target:t.target.ID,value:t.value}))}),"getGraph"),tye={nodesMap:tS,getConfig:o(()=>pe().sankey,"getConfig"),getNodes:Ftt,getLinks:ztt,getGraph:Gtt,addLink:Ptt,findOrCreateNode:Btt,getAccTitle:Br,setAccTitle:Mr,getAccDescription:zr,setAccDescription:Fr,getDiagramTitle:Jr,setDiagramTitle:cn,clear:Ott}});function Cb(t,e){let r;if(e===void 0)for(let n of t)n!=null&&(r=n)&&(r=n);else{let n=-1;for(let i of t)(i=e(i,++n,t))!=null&&(r=i)&&(r=i)}return r}var nye=M(()=>{"use strict";o(Cb,"max")});function O1(t,e){let r;if(e===void 0)for(let n of t)n!=null&&(r>n||r===void 0&&n>=n)&&(r=n);else{let n=-1;for(let i of t)(i=e(i,++n,t))!=null&&(r>i||r===void 0&&i>=i)&&(r=i)}return r}var iye=M(()=>{"use strict";o(O1,"min")});function P1(t,e){let r=0;if(e===void 0)for(let n of t)(n=+n)&&(r+=n);else{let n=-1;for(let i of t)(i=+e(i,++n,t))&&(r+=i)}return r}var aye=M(()=>{"use strict";o(P1,"sum")});var FB=M(()=>{"use strict";nye();iye();aye()});function $tt(t){return t.target.depth}function zB(t){return t.depth}function GB(t,e){return e-1-t.height}function Ab(t,e){return t.sourceLinks.length?t.depth:e-1}function $B(t){return t.targetLinks.length?t.depth:t.sourceLinks.length?O1(t.sourceLinks,$tt)-1:0}var VB=M(()=>{"use strict";FB();o($tt,"targetDepth");o(zB,"left");o(GB,"right");o(Ab,"justify");o($B,"center")});function B1(t){return function(){return t}}var sye=M(()=>{"use strict";o(B1,"constant")});function oye(t,e){return iS(t.source,e.source)||t.index-e.index}function lye(t,e){return iS(t.target,e.target)||t.index-e.index}function iS(t,e){return t.y0-e.y0}function UB(t){return t.value}function Vtt(t){return t.index}function Utt(t){return t.nodes}function Htt(t){return t.links}function cye(t,e){let r=t.get(e);if(!r)throw new Error("missing: "+e);return r}function uye({nodes:t}){for(let e of t){let r=e.y0,n=r;for(let i of e.sourceLinks)i.y0=r+i.width/2,r+=i.width;for(let i of e.targetLinks)i.y1=n+i.width/2,n+=i.width}}function aS(){let t=0,e=0,r=1,n=1,i=24,a=8,s,l=Vtt,u=Ab,h,f,d=Utt,p=Htt,m=6;function g(){let O={nodes:d.apply(null,arguments),links:p.apply(null,arguments)};return y(O),v(O),x(O),b(O),T(O),uye(O),O}o(g,"sankey"),g.update=function(O){return uye(O),O},g.nodeId=function(O){return arguments.length?(l=typeof O=="function"?O:B1(O),g):l},g.nodeAlign=function(O){return arguments.length?(u=typeof O=="function"?O:B1(O),g):u},g.nodeSort=function(O){return arguments.length?(h=O,g):h},g.nodeWidth=function(O){return arguments.length?(i=+O,g):i},g.nodePadding=function(O){return arguments.length?(a=s=+O,g):a},g.nodes=function(O){return arguments.length?(d=typeof O=="function"?O:B1(O),g):d},g.links=function(O){return arguments.length?(p=typeof O=="function"?O:B1(O),g):p},g.linkSort=function(O){return arguments.length?(f=O,g):f},g.size=function(O){return arguments.length?(t=e=0,r=+O[0],n=+O[1],g):[r-t,n-e]},g.extent=function(O){return arguments.length?(t=+O[0][0],r=+O[1][0],e=+O[0][1],n=+O[1][1],g):[[t,e],[r,n]]},g.iterations=function(O){return arguments.length?(m=+O,g):m};function y({nodes:O,links:N}){for(let[F,B]of O.entries())B.index=F,B.sourceLinks=[],B.targetLinks=[];let P=new Map(O.map((F,B)=>[l(F,B,O),F]));for(let[F,B]of N.entries()){B.index=F;let{source:G,target:z}=B;typeof G!="object"&&(G=B.source=cye(P,G)),typeof z!="object"&&(z=B.target=cye(P,z)),G.sourceLinks.push(B),z.targetLinks.push(B)}if(f!=null)for(let{sourceLinks:F,targetLinks:B}of O)F.sort(f),B.sort(f)}o(y,"computeNodeLinks");function v({nodes:O}){for(let N of O)N.value=N.fixedValue===void 0?Math.max(P1(N.sourceLinks,UB),P1(N.targetLinks,UB)):N.fixedValue}o(v,"computeNodeValues");function x({nodes:O}){let N=O.length,P=new Set(O),F=new Set,B=0;for(;P.size;){for(let G of P){G.depth=B;for(let{target:z}of G.sourceLinks)F.add(z)}if(++B>N)throw new Error("circular link");P=F,F=new Set}}o(x,"computeNodeDepths");function b({nodes:O}){let N=O.length,P=new Set(O),F=new Set,B=0;for(;P.size;){for(let G of P){G.height=B;for(let{source:z}of G.targetLinks)F.add(z)}if(++B>N)throw new Error("circular link");P=F,F=new Set}}o(b,"computeNodeHeights");function w({nodes:O}){let N=Cb(O,B=>B.depth)+1,P=(r-t-i)/(N-1),F=new Array(N);for(let B of O){let G=Math.max(0,Math.min(N-1,Math.floor(u.call(null,B,N))));B.layer=G,B.x0=t+G*P,B.x1=B.x0+i,F[G]?F[G].push(B):F[G]=[B]}if(h)for(let B of F)B.sort(h);return F}o(w,"computeNodeLayers");function _(O){let N=O1(O,P=>(n-e-(P.length-1)*s)/P1(P,UB));for(let P of O){let F=e;for(let B of P){B.y0=F,B.y1=F+B.value*N,F=B.y1+s;for(let G of B.sourceLinks)G.width=G.value*N}F=(n-F+s)/(P.length+1);for(let B=0;BP.length)-1)),_(N);for(let P=0;P0))continue;let j=(W/Z-z.y0)*N;z.y0+=j,z.y1+=j,D(z)}h===void 0&&G.sort(iS),S(G,P)}}o(E,"relaxLeftToRight");function L(O,N,P){for(let F=O.length,B=F-2;B>=0;--B){let G=O[B];for(let z of G){let W=0,Z=0;for(let{target:oe,value:K}of z.sourceLinks){let ee=K*(oe.layer-z.layer);W+=C(z,oe)*ee,Z+=ee}if(!(Z>0))continue;let j=(W/Z-z.y0)*N;z.y0+=j,z.y1+=j,D(z)}h===void 0&&G.sort(iS),S(G,P)}}o(L,"relaxRightToLeft");function S(O,N){let P=O.length>>1,F=O[P];I(O,F.y0-s,P-1,N),A(O,F.y1+s,P+1,N),I(O,n,O.length-1,N),A(O,e,0,N)}o(S,"resolveCollisions");function A(O,N,P,F){for(;P1e-6&&(B.y0+=G,B.y1+=G),N=B.y1+s}}o(A,"resolveCollisionsTopToBottom");function I(O,N,P,F){for(;P>=0;--P){let B=O[P],G=(B.y1-N)*F;G>1e-6&&(B.y0-=G,B.y1-=G),N=B.y0-s}}o(I,"resolveCollisionsBottomToTop");function D({sourceLinks:O,targetLinks:N}){if(f===void 0){for(let{source:{sourceLinks:P}}of N)P.sort(lye);for(let{target:{targetLinks:P}}of O)P.sort(oye)}}o(D,"reorderNodeLinks");function k(O){if(f===void 0)for(let{sourceLinks:N,targetLinks:P}of O)N.sort(lye),P.sort(oye)}o(k,"reorderLinks");function R(O,N){let P=O.y0-(O.sourceLinks.length-1)*s/2;for(let{target:F,width:B}of O.sourceLinks){if(F===N)break;P+=B+s}for(let{source:F,width:B}of N.targetLinks){if(F===O)break;P-=B}return P}o(R,"targetTop");function C(O,N){let P=N.y0-(N.targetLinks.length-1)*s/2;for(let{source:F,width:B}of N.targetLinks){if(F===O)break;P+=B+s}for(let{target:F,width:B}of O.sourceLinks){if(F===N)break;P-=B}return P}return o(C,"sourceTop"),g}var hye=M(()=>{"use strict";FB();VB();sye();o(oye,"ascendingSourceBreadth");o(lye,"ascendingTargetBreadth");o(iS,"ascendingBreadth");o(UB,"value");o(Vtt,"defaultId");o(Utt,"defaultNodes");o(Htt,"defaultLinks");o(cye,"find");o(uye,"computeLinkBreadths");o(aS,"Sankey")});function YB(){this._x0=this._y0=this._x1=this._y1=null,this._=""}function fye(){return new YB}var HB,WB,np,Wtt,qB,dye=M(()=>{"use strict";HB=Math.PI,WB=2*HB,np=1e-6,Wtt=WB-np;o(YB,"Path");o(fye,"path");YB.prototype=fye.prototype={constructor:YB,moveTo:o(function(t,e){this._+="M"+(this._x0=this._x1=+t)+","+(this._y0=this._y1=+e)},"moveTo"),closePath:o(function(){this._x1!==null&&(this._x1=this._x0,this._y1=this._y0,this._+="Z")},"closePath"),lineTo:o(function(t,e){this._+="L"+(this._x1=+t)+","+(this._y1=+e)},"lineTo"),quadraticCurveTo:o(function(t,e,r,n){this._+="Q"+ +t+","+ +e+","+(this._x1=+r)+","+(this._y1=+n)},"quadraticCurveTo"),bezierCurveTo:o(function(t,e,r,n,i,a){this._+="C"+ +t+","+ +e+","+ +r+","+ +n+","+(this._x1=+i)+","+(this._y1=+a)},"bezierCurveTo"),arcTo:o(function(t,e,r,n,i){t=+t,e=+e,r=+r,n=+n,i=+i;var a=this._x1,s=this._y1,l=r-t,u=n-e,h=a-t,f=s-e,d=h*h+f*f;if(i<0)throw new Error("negative radius: "+i);if(this._x1===null)this._+="M"+(this._x1=t)+","+(this._y1=e);else if(d>np)if(!(Math.abs(f*l-u*h)>np)||!i)this._+="L"+(this._x1=t)+","+(this._y1=e);else{var p=r-a,m=n-s,g=l*l+u*u,y=p*p+m*m,v=Math.sqrt(g),x=Math.sqrt(d),b=i*Math.tan((HB-Math.acos((g+d-y)/(2*v*x)))/2),w=b/x,_=b/v;Math.abs(w-1)>np&&(this._+="L"+(t+w*h)+","+(e+w*f)),this._+="A"+i+","+i+",0,0,"+ +(f*p>h*m)+","+(this._x1=t+_*l)+","+(this._y1=e+_*u)}},"arcTo"),arc:o(function(t,e,r,n,i,a){t=+t,e=+e,r=+r,a=!!a;var s=r*Math.cos(n),l=r*Math.sin(n),u=t+s,h=e+l,f=1^a,d=a?n-i:i-n;if(r<0)throw new Error("negative radius: "+r);this._x1===null?this._+="M"+u+","+h:(Math.abs(this._x1-u)>np||Math.abs(this._y1-h)>np)&&(this._+="L"+u+","+h),r&&(d<0&&(d=d%WB+WB),d>Wtt?this._+="A"+r+","+r+",0,1,"+f+","+(t-s)+","+(e-l)+"A"+r+","+r+",0,1,"+f+","+(this._x1=u)+","+(this._y1=h):d>np&&(this._+="A"+r+","+r+",0,"+ +(d>=HB)+","+f+","+(this._x1=t+r*Math.cos(i))+","+(this._y1=e+r*Math.sin(i))))},"arc"),rect:o(function(t,e,r,n){this._+="M"+(this._x0=this._x1=+t)+","+(this._y0=this._y1=+e)+"h"+ +r+"v"+ +n+"h"+-r+"Z"},"rect"),toString:o(function(){return this._},"toString")};qB=fye});var pye=M(()=>{"use strict";dye()});function sS(t){return o(function(){return t},"constant")}var mye=M(()=>{"use strict";o(sS,"default")});function gye(t){return t[0]}function yye(t){return t[1]}var vye=M(()=>{"use strict";o(gye,"x");o(yye,"y")});var xye,bye=M(()=>{"use strict";xye=Array.prototype.slice});function Ytt(t){return t.source}function qtt(t){return t.target}function Xtt(t){var e=Ytt,r=qtt,n=gye,i=yye,a=null;function s(){var l,u=xye.call(arguments),h=e.apply(this,u),f=r.apply(this,u);if(a||(a=l=qB()),t(a,+n.apply(this,(u[0]=h,u)),+i.apply(this,u),+n.apply(this,(u[0]=f,u)),+i.apply(this,u)),l)return a=null,l+""||null}return o(s,"link"),s.source=function(l){return arguments.length?(e=l,s):e},s.target=function(l){return arguments.length?(r=l,s):r},s.x=function(l){return arguments.length?(n=typeof l=="function"?l:sS(+l),s):n},s.y=function(l){return arguments.length?(i=typeof l=="function"?l:sS(+l),s):i},s.context=function(l){return arguments.length?(a=l??null,s):a},s}function jtt(t,e,r,n,i){t.moveTo(e,r),t.bezierCurveTo(e=(e+n)/2,r,e,i,n,i)}function XB(){return Xtt(jtt)}var wye=M(()=>{"use strict";pye();bye();mye();vye();o(Ytt,"linkSource");o(qtt,"linkTarget");o(Xtt,"link");o(jtt,"curveHorizontal");o(XB,"linkHorizontal")});var Tye=M(()=>{"use strict";wye()});function Ktt(t){return[t.source.x1,t.y0]}function Qtt(t){return[t.target.x0,t.y1]}function oS(){return XB().source(Ktt).target(Qtt)}var kye=M(()=>{"use strict";Tye();o(Ktt,"horizontalSource");o(Qtt,"horizontalTarget");o(oS,"default")});var Eye=M(()=>{"use strict";hye();VB();kye()});var _b,Sye=M(()=>{"use strict";_b=class t{static{o(this,"Uid")}static{this.count=0}static next(e){return new t(e+ ++t.count)}constructor(e){this.id=e,this.href=`#${e}`}toString(){return"url("+this.href+")"}}});var Ztt,Jtt,Cye,Aye=M(()=>{"use strict";Vt();pr();Eye();ai();Sye();Ztt={left:zB,right:GB,center:$B,justify:Ab},Jtt=o(function(t,e,r,n){let{securityLevel:i,sankey:a}=pe(),s=B4.sankey,l;i==="sandbox"&&(l=Ve("#i"+e));let u=i==="sandbox"?Ve(l.nodes()[0].contentDocument.body):Ve("body"),h=i==="sandbox"?u.select(`[id="${e}"]`):Ve(`[id="${e}"]`),f=a?.width??s.width,d=a?.height??s.width,p=a?.useMaxWidth??s.useMaxWidth,m=a?.nodeAlignment??s.nodeAlignment,g=a?.prefix??s.prefix,y=a?.suffix??s.suffix,v=a?.showValues??s.showValues,x=n.db.getGraph(),b=Ztt[m];aS().nodeId(I=>I.id).nodeWidth(10).nodePadding(10+(v?15:0)).nodeAlign(b).extent([[0,0],[f,d]])(x);let T=ku(e_);h.append("g").attr("class","nodes").selectAll(".node").data(x.nodes).join("g").attr("class","node").attr("id",I=>(I.uid=_b.next("node-")).id).attr("transform",function(I){return"translate("+I.x0+","+I.y0+")"}).attr("x",I=>I.x0).attr("y",I=>I.y0).append("rect").attr("height",I=>I.y1-I.y0).attr("width",I=>I.x1-I.x0).attr("fill",I=>T(I.id));let E=o(({id:I,value:D})=>v?`${I} +${g}${Math.round(D*100)/100}${y}`:I,"getText");h.append("g").attr("class","node-labels").attr("font-family","sans-serif").attr("font-size",14).selectAll("text").data(x.nodes).join("text").attr("x",I=>I.x0(I.y1+I.y0)/2).attr("dy",`${v?"0":"0.35"}em`).attr("text-anchor",I=>I.x0(D.uid=_b.next("linearGradient-")).id).attr("gradientUnits","userSpaceOnUse").attr("x1",D=>D.source.x1).attr("x2",D=>D.target.x0);I.append("stop").attr("offset","0%").attr("stop-color",D=>T(D.source.id)),I.append("stop").attr("offset","100%").attr("stop-color",D=>T(D.target.id))}let A;switch(S){case"gradient":A=o(I=>I.uid,"coloring");break;case"source":A=o(I=>T(I.source.id),"coloring");break;case"target":A=o(I=>T(I.target.id),"coloring");break;default:A=S}L.append("path").attr("d",oS()).attr("stroke",A).attr("stroke-width",I=>Math.max(1,I.width)),Io(void 0,h,0,p)},"draw"),Cye={draw:Jtt}});var _ye,Lye=M(()=>{"use strict";_ye=o(t=>t.replaceAll(/^[^\S\n\r]+|[^\S\n\r]+$/g,"").replaceAll(/([\n\r])+/g,` +`).trim(),"prepareTextForParsing")});var Dye={};vr(Dye,{diagram:()=>trt});var ert,trt,Nye=M(()=>{"use strict";eye();rye();Aye();Lye();ert=Sb.parse.bind(Sb);Sb.parse=t=>ert(_ye(t));trt={parser:Sb,db:tye,renderer:Cye}});var Iye,jB,art,srt,ort,lrt,crt,$f,KB=M(()=>{"use strict";Za();bs();hr();Ai();Iye={packet:[]},jB=structuredClone(Iye),art=ur.packet,srt=o(()=>{let t=Ds({...art,...Cr().packet});return t.showBits&&(t.paddingY+=10),t},"getConfig"),ort=o(()=>jB.packet,"getPacket"),lrt=o(t=>{t.length>0&&jB.packet.push(t)},"pushWord"),crt=o(()=>{Lr(),jB=structuredClone(Iye)},"clear"),$f={pushWord:lrt,getPacket:ort,getConfig:srt,clear:crt,setAccTitle:Mr,getAccTitle:Br,setDiagramTitle:cn,getDiagramTitle:Jr,getAccDescription:zr,setAccDescription:Fr}});var urt,hrt,frt,Oye,Pye=M(()=>{"use strict";Hg();ut();Tx();KB();urt=1e4,hrt=o(t=>{yf(t,$f);let e=-1,r=[],n=1,{bitsPerRow:i}=$f.getConfig();for(let{start:a,end:s,label:l}of t.blocks){if(s&&s{if(t.end===void 0&&(t.end=t.start),t.start>t.end)throw new Error(`Block start ${t.start} is greater than block end ${t.end}.`);return t.end+1<=e*r?[t,void 0]:[{start:t.start,end:e*r-1,label:t.label},{start:e*r,end:t.end,label:t.label}]},"getNextFittingBlock"),Oye={parse:o(async t=>{let e=await Yl("packet",t);Y.debug(e),hrt(e)},"parse")}});var drt,prt,Bye,Fye=M(()=>{"use strict";eh();ai();drt=o((t,e,r,n)=>{let i=n.db,a=i.getConfig(),{rowHeight:s,paddingY:l,bitWidth:u,bitsPerRow:h}=a,f=i.getPacket(),d=i.getDiagramTitle(),p=s+l,m=p*(f.length+1)-(d?0:s),g=u*h+2,y=Va(e);y.attr("viewbox",`0 0 ${g} ${m}`),Zr(y,m,g,a.useMaxWidth);for(let[v,x]of f.entries())prt(y,x,v,a);y.append("text").text(d).attr("x",g/2).attr("y",m-p/2).attr("dominant-baseline","middle").attr("text-anchor","middle").attr("class","packetTitle")},"draw"),prt=o((t,e,r,{rowHeight:n,paddingX:i,paddingY:a,bitWidth:s,bitsPerRow:l,showBits:u})=>{let h=t.append("g"),f=r*(n+a)+a;for(let d of e){let p=d.start%l*s+1,m=(d.end-d.start+1)*s-i;if(h.append("rect").attr("x",p).attr("y",f).attr("width",m).attr("height",n).attr("class","packetBlock"),h.append("text").attr("x",p+m/2).attr("y",f+n/2).attr("class","packetLabel").attr("dominant-baseline","middle").attr("text-anchor","middle").text(d.label),!u)continue;let g=d.end===d.start,y=f-2;h.append("text").attr("x",p+(g?m/2:0)).attr("y",y).attr("class","packetByte start").attr("dominant-baseline","auto").attr("text-anchor",g?"middle":"start").text(d.start),g||h.append("text").attr("x",p+m).attr("y",y).attr("class","packetByte end").attr("dominant-baseline","auto").attr("text-anchor","end").text(d.end)}},"drawWord"),Bye={draw:drt}});var mrt,zye,Gye=M(()=>{"use strict";hr();mrt={byteFontSize:"10px",startByteColor:"black",endByteColor:"black",labelColor:"black",labelFontSize:"12px",titleColor:"black",titleFontSize:"14px",blockStrokeColor:"black",blockStrokeWidth:"1",blockFillColor:"#efefef"},zye=o(({packet:t}={})=>{let e=Ds(mrt,t);return` + .packetByte { + font-size: ${e.byteFontSize}; + } + .packetByte.start { + fill: ${e.startByteColor}; + } + .packetByte.end { + fill: ${e.endByteColor}; + } + .packetLabel { + fill: ${e.labelColor}; + font-size: ${e.labelFontSize}; + } + .packetTitle { + fill: ${e.titleColor}; + font-size: ${e.titleFontSize}; + } + .packetBlock { + stroke: ${e.blockStrokeColor}; + stroke-width: ${e.blockStrokeWidth}; + fill: ${e.blockFillColor}; + } + `},"styles")});var $ye={};vr($ye,{diagram:()=>grt});var grt,Vye=M(()=>{"use strict";KB();Pye();Fye();Gye();grt={parser:Oye,db:$f,renderer:Bye,styles:zye}});var QB,Wye,Yye=M(()=>{"use strict";QB=function(){var t=o(function(w,_,T,E){for(T=T||{},E=w.length;E--;T[w[E]]=_);return T},"o"),e=[1,7],r=[1,13],n=[1,14],i=[1,15],a=[1,19],s=[1,16],l=[1,17],u=[1,18],h=[8,30],f=[8,21,28,29,30,31,32,40,44,47],d=[1,23],p=[1,24],m=[8,15,16,21,28,29,30,31,32,40,44,47],g=[8,15,16,21,27,28,29,30,31,32,40,44,47],y=[1,49],v={trace:o(function(){},"trace"),yy:{},symbols_:{error:2,spaceLines:3,SPACELINE:4,NL:5,separator:6,SPACE:7,EOF:8,start:9,BLOCK_DIAGRAM_KEY:10,document:11,stop:12,statement:13,link:14,LINK:15,START_LINK:16,LINK_LABEL:17,STR:18,nodeStatement:19,columnsStatement:20,SPACE_BLOCK:21,blockStatement:22,classDefStatement:23,cssClassStatement:24,styleStatement:25,node:26,SIZE:27,COLUMNS:28,"id-block":29,end:30,block:31,NODE_ID:32,nodeShapeNLabel:33,dirList:34,DIR:35,NODE_DSTART:36,NODE_DEND:37,BLOCK_ARROW_START:38,BLOCK_ARROW_END:39,classDef:40,CLASSDEF_ID:41,CLASSDEF_STYLEOPTS:42,DEFAULT:43,class:44,CLASSENTITY_IDS:45,STYLECLASS:46,style:47,STYLE_ENTITY_IDS:48,STYLE_DEFINITION_DATA:49,$accept:0,$end:1},terminals_:{2:"error",4:"SPACELINE",5:"NL",7:"SPACE",8:"EOF",10:"BLOCK_DIAGRAM_KEY",15:"LINK",16:"START_LINK",17:"LINK_LABEL",18:"STR",21:"SPACE_BLOCK",27:"SIZE",28:"COLUMNS",29:"id-block",30:"end",31:"block",32:"NODE_ID",35:"DIR",36:"NODE_DSTART",37:"NODE_DEND",38:"BLOCK_ARROW_START",39:"BLOCK_ARROW_END",40:"classDef",41:"CLASSDEF_ID",42:"CLASSDEF_STYLEOPTS",43:"DEFAULT",44:"class",45:"CLASSENTITY_IDS",46:"STYLECLASS",47:"style",48:"STYLE_ENTITY_IDS",49:"STYLE_DEFINITION_DATA"},productions_:[0,[3,1],[3,2],[3,2],[6,1],[6,1],[6,1],[9,3],[12,1],[12,1],[12,2],[12,2],[11,1],[11,2],[14,1],[14,4],[13,1],[13,1],[13,1],[13,1],[13,1],[13,1],[13,1],[19,3],[19,2],[19,1],[20,1],[22,4],[22,3],[26,1],[26,2],[34,1],[34,2],[33,3],[33,4],[23,3],[23,3],[24,3],[25,3]],performAction:o(function(_,T,E,L,S,A,I){var D=A.length-1;switch(S){case 4:L.getLogger().debug("Rule: separator (NL) ");break;case 5:L.getLogger().debug("Rule: separator (Space) ");break;case 6:L.getLogger().debug("Rule: separator (EOF) ");break;case 7:L.getLogger().debug("Rule: hierarchy: ",A[D-1]),L.setHierarchy(A[D-1]);break;case 8:L.getLogger().debug("Stop NL ");break;case 9:L.getLogger().debug("Stop EOF ");break;case 10:L.getLogger().debug("Stop NL2 ");break;case 11:L.getLogger().debug("Stop EOF2 ");break;case 12:L.getLogger().debug("Rule: statement: ",A[D]),typeof A[D].length=="number"?this.$=A[D]:this.$=[A[D]];break;case 13:L.getLogger().debug("Rule: statement #2: ",A[D-1]),this.$=[A[D-1]].concat(A[D]);break;case 14:L.getLogger().debug("Rule: link: ",A[D],_),this.$={edgeTypeStr:A[D],label:""};break;case 15:L.getLogger().debug("Rule: LABEL link: ",A[D-3],A[D-1],A[D]),this.$={edgeTypeStr:A[D],label:A[D-1]};break;case 18:let k=parseInt(A[D]),R=L.generateId();this.$={id:R,type:"space",label:"",width:k,children:[]};break;case 23:L.getLogger().debug("Rule: (nodeStatement link node) ",A[D-2],A[D-1],A[D]," typestr: ",A[D-1].edgeTypeStr);let C=L.edgeStrToEdgeData(A[D-1].edgeTypeStr);this.$=[{id:A[D-2].id,label:A[D-2].label,type:A[D-2].type,directions:A[D-2].directions},{id:A[D-2].id+"-"+A[D].id,start:A[D-2].id,end:A[D].id,label:A[D-1].label,type:"edge",directions:A[D].directions,arrowTypeEnd:C,arrowTypeStart:"arrow_open"},{id:A[D].id,label:A[D].label,type:L.typeStr2Type(A[D].typeStr),directions:A[D].directions}];break;case 24:L.getLogger().debug("Rule: nodeStatement (abc88 node size) ",A[D-1],A[D]),this.$={id:A[D-1].id,label:A[D-1].label,type:L.typeStr2Type(A[D-1].typeStr),directions:A[D-1].directions,widthInColumns:parseInt(A[D],10)};break;case 25:L.getLogger().debug("Rule: nodeStatement (node) ",A[D]),this.$={id:A[D].id,label:A[D].label,type:L.typeStr2Type(A[D].typeStr),directions:A[D].directions,widthInColumns:1};break;case 26:L.getLogger().debug("APA123",this?this:"na"),L.getLogger().debug("COLUMNS: ",A[D]),this.$={type:"column-setting",columns:A[D]==="auto"?-1:parseInt(A[D])};break;case 27:L.getLogger().debug("Rule: id-block statement : ",A[D-2],A[D-1]);let O=L.generateId();this.$={...A[D-2],type:"composite",children:A[D-1]};break;case 28:L.getLogger().debug("Rule: blockStatement : ",A[D-2],A[D-1],A[D]);let N=L.generateId();this.$={id:N,type:"composite",label:"",children:A[D-1]};break;case 29:L.getLogger().debug("Rule: node (NODE_ID separator): ",A[D]),this.$={id:A[D]};break;case 30:L.getLogger().debug("Rule: node (NODE_ID nodeShapeNLabel separator): ",A[D-1],A[D]),this.$={id:A[D-1],label:A[D].label,typeStr:A[D].typeStr,directions:A[D].directions};break;case 31:L.getLogger().debug("Rule: dirList: ",A[D]),this.$=[A[D]];break;case 32:L.getLogger().debug("Rule: dirList: ",A[D-1],A[D]),this.$=[A[D-1]].concat(A[D]);break;case 33:L.getLogger().debug("Rule: nodeShapeNLabel: ",A[D-2],A[D-1],A[D]),this.$={typeStr:A[D-2]+A[D],label:A[D-1]};break;case 34:L.getLogger().debug("Rule: BLOCK_ARROW nodeShapeNLabel: ",A[D-3],A[D-2]," #3:",A[D-1],A[D]),this.$={typeStr:A[D-3]+A[D],label:A[D-2],directions:A[D-1]};break;case 35:case 36:this.$={type:"classDef",id:A[D-1].trim(),css:A[D].trim()};break;case 37:this.$={type:"applyClass",id:A[D-1].trim(),styleClass:A[D].trim()};break;case 38:this.$={type:"applyStyles",id:A[D-1].trim(),stylesStr:A[D].trim()};break}},"anonymous"),table:[{9:1,10:[1,2]},{1:[3]},{11:3,13:4,19:5,20:6,21:e,22:8,23:9,24:10,25:11,26:12,28:r,29:n,31:i,32:a,40:s,44:l,47:u},{8:[1,20]},t(h,[2,12],{13:4,19:5,20:6,22:8,23:9,24:10,25:11,26:12,11:21,21:e,28:r,29:n,31:i,32:a,40:s,44:l,47:u}),t(f,[2,16],{14:22,15:d,16:p}),t(f,[2,17]),t(f,[2,18]),t(f,[2,19]),t(f,[2,20]),t(f,[2,21]),t(f,[2,22]),t(m,[2,25],{27:[1,25]}),t(f,[2,26]),{19:26,26:12,32:a},{11:27,13:4,19:5,20:6,21:e,22:8,23:9,24:10,25:11,26:12,28:r,29:n,31:i,32:a,40:s,44:l,47:u},{41:[1,28],43:[1,29]},{45:[1,30]},{48:[1,31]},t(g,[2,29],{33:32,36:[1,33],38:[1,34]}),{1:[2,7]},t(h,[2,13]),{26:35,32:a},{32:[2,14]},{17:[1,36]},t(m,[2,24]),{11:37,13:4,14:22,15:d,16:p,19:5,20:6,21:e,22:8,23:9,24:10,25:11,26:12,28:r,29:n,31:i,32:a,40:s,44:l,47:u},{30:[1,38]},{42:[1,39]},{42:[1,40]},{46:[1,41]},{49:[1,42]},t(g,[2,30]),{18:[1,43]},{18:[1,44]},t(m,[2,23]),{18:[1,45]},{30:[1,46]},t(f,[2,28]),t(f,[2,35]),t(f,[2,36]),t(f,[2,37]),t(f,[2,38]),{37:[1,47]},{34:48,35:y},{15:[1,50]},t(f,[2,27]),t(g,[2,33]),{39:[1,51]},{34:52,35:y,39:[2,31]},{32:[2,15]},t(g,[2,34]),{39:[2,32]}],defaultActions:{20:[2,7],23:[2,14],50:[2,15],52:[2,32]},parseError:o(function(_,T){if(T.recoverable)this.trace(_);else{var E=new Error(_);throw E.hash=T,E}},"parseError"),parse:o(function(_){var T=this,E=[0],L=[],S=[null],A=[],I=this.table,D="",k=0,R=0,C=0,O=2,N=1,P=A.slice.call(arguments,1),F=Object.create(this.lexer),B={yy:{}};for(var G in this.yy)Object.prototype.hasOwnProperty.call(this.yy,G)&&(B.yy[G]=this.yy[G]);F.setInput(_,B.yy),B.yy.lexer=F,B.yy.parser=this,typeof F.yylloc>"u"&&(F.yylloc={});var z=F.yylloc;A.push(z);var W=F.options&&F.options.ranges;typeof B.yy.parseError=="function"?this.parseError=B.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function Z(se){E.length=E.length-2*se,S.length=S.length-se,A.length=A.length-se}o(Z,"popStack");function j(){var se;return se=L.pop()||F.lex()||N,typeof se!="number"&&(se instanceof Array&&(L=se,se=L.pop()),se=T.symbols_[se]||se),se}o(j,"lex");for(var oe,K,ee,J,H,q,Q={},ae,ue,ce,te;;){if(ee=E[E.length-1],this.defaultActions[ee]?J=this.defaultActions[ee]:((oe===null||typeof oe>"u")&&(oe=j()),J=I[ee]&&I[ee][oe]),typeof J>"u"||!J.length||!J[0]){var Ne="";te=[];for(ae in I[ee])this.terminals_[ae]&&ae>O&&te.push("'"+this.terminals_[ae]+"'");F.showPosition?Ne="Parse error on line "+(k+1)+`: +`+F.showPosition()+` +Expecting `+te.join(", ")+", got '"+(this.terminals_[oe]||oe)+"'":Ne="Parse error on line "+(k+1)+": Unexpected "+(oe==N?"end of input":"'"+(this.terminals_[oe]||oe)+"'"),this.parseError(Ne,{text:F.match,token:this.terminals_[oe]||oe,line:F.yylineno,loc:z,expected:te})}if(J[0]instanceof Array&&J.length>1)throw new Error("Parse Error: multiple actions possible at state: "+ee+", token: "+oe);switch(J[0]){case 1:E.push(oe),S.push(F.yytext),A.push(F.yylloc),E.push(J[1]),oe=null,K?(oe=K,K=null):(R=F.yyleng,D=F.yytext,k=F.yylineno,z=F.yylloc,C>0&&C--);break;case 2:if(ue=this.productions_[J[1]][1],Q.$=S[S.length-ue],Q._$={first_line:A[A.length-(ue||1)].first_line,last_line:A[A.length-1].last_line,first_column:A[A.length-(ue||1)].first_column,last_column:A[A.length-1].last_column},W&&(Q._$.range=[A[A.length-(ue||1)].range[0],A[A.length-1].range[1]]),q=this.performAction.apply(Q,[D,R,k,B.yy,J[1],S,A].concat(P)),typeof q<"u")return q;ue&&(E=E.slice(0,-1*ue*2),S=S.slice(0,-1*ue),A=A.slice(0,-1*ue)),E.push(this.productions_[J[1]][0]),S.push(Q.$),A.push(Q._$),ce=I[E[E.length-2]][E[E.length-1]],E.push(ce);break;case 3:return!0}}return!0},"parse")},x=function(){var w={EOF:1,parseError:o(function(T,E){if(this.yy.parser)this.yy.parser.parseError(T,E);else throw new Error(T)},"parseError"),setInput:o(function(_,T){return this.yy=T||this.yy||{},this._input=_,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},"setInput"),input:o(function(){var _=this._input[0];this.yytext+=_,this.yyleng++,this.offset++,this.match+=_,this.matched+=_;var T=_.match(/(?:\r\n?|\n).*/g);return T?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),_},"input"),unput:o(function(_){var T=_.length,E=_.split(/(?:\r\n?|\n)/g);this._input=_+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-T),this.offset-=T;var L=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),E.length-1&&(this.yylineno-=E.length-1);var S=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:E?(E.length===L.length?this.yylloc.first_column:0)+L[L.length-E.length].length-E[0].length:this.yylloc.first_column-T},this.options.ranges&&(this.yylloc.range=[S[0],S[0]+this.yyleng-T]),this.yyleng=this.yytext.length,this},"unput"),more:o(function(){return this._more=!0,this},"more"),reject:o(function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true). +`+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},"reject"),less:o(function(_){this.unput(this.match.slice(_))},"less"),pastInput:o(function(){var _=this.matched.substr(0,this.matched.length-this.match.length);return(_.length>20?"...":"")+_.substr(-20).replace(/\n/g,"")},"pastInput"),upcomingInput:o(function(){var _=this.match;return _.length<20&&(_+=this._input.substr(0,20-_.length)),(_.substr(0,20)+(_.length>20?"...":"")).replace(/\n/g,"")},"upcomingInput"),showPosition:o(function(){var _=this.pastInput(),T=new Array(_.length+1).join("-");return _+this.upcomingInput()+` +`+T+"^"},"showPosition"),test_match:o(function(_,T){var E,L,S;if(this.options.backtrack_lexer&&(S={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(S.yylloc.range=this.yylloc.range.slice(0))),L=_[0].match(/(?:\r\n?|\n).*/g),L&&(this.yylineno+=L.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:L?L[L.length-1].length-L[L.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+_[0].length},this.yytext+=_[0],this.match+=_[0],this.matches=_,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(_[0].length),this.matched+=_[0],E=this.performAction.call(this,this.yy,this,T,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),E)return E;if(this._backtrack){for(var A in S)this[A]=S[A];return!1}return!1},"test_match"),next:o(function(){if(this.done)return this.EOF;this._input||(this.done=!0);var _,T,E,L;this._more||(this.yytext="",this.match="");for(var S=this._currentRules(),A=0;AT[0].length)){if(T=E,L=A,this.options.backtrack_lexer){if(_=this.test_match(E,S[A]),_!==!1)return _;if(this._backtrack){T=!1;continue}else return!1}else if(!this.options.flex)break}return T?(_=this.test_match(T,S[L]),_!==!1?_:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text. +`+this.showPosition(),{text:"",token:null,line:this.yylineno})},"next"),lex:o(function(){var T=this.next();return T||this.lex()},"lex"),begin:o(function(T){this.conditionStack.push(T)},"begin"),popState:o(function(){var T=this.conditionStack.length-1;return T>0?this.conditionStack.pop():this.conditionStack[0]},"popState"),_currentRules:o(function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},"_currentRules"),topState:o(function(T){return T=this.conditionStack.length-1-Math.abs(T||0),T>=0?this.conditionStack[T]:"INITIAL"},"topState"),pushState:o(function(T){this.begin(T)},"pushState"),stateStackSize:o(function(){return this.conditionStack.length},"stateStackSize"),options:{},performAction:o(function(T,E,L,S){var A=S;switch(L){case 0:return 10;case 1:return T.getLogger().debug("Found space-block"),31;break;case 2:return T.getLogger().debug("Found nl-block"),31;break;case 3:return T.getLogger().debug("Found space-block"),29;break;case 4:T.getLogger().debug(".",E.yytext);break;case 5:T.getLogger().debug("_",E.yytext);break;case 6:return 5;case 7:return E.yytext=-1,28;break;case 8:return E.yytext=E.yytext.replace(/columns\s+/,""),T.getLogger().debug("COLUMNS (LEX)",E.yytext),28;break;case 9:this.pushState("md_string");break;case 10:return"MD_STR";case 11:this.popState();break;case 12:this.pushState("string");break;case 13:T.getLogger().debug("LEX: POPPING STR:",E.yytext),this.popState();break;case 14:return T.getLogger().debug("LEX: STR end:",E.yytext),"STR";break;case 15:return E.yytext=E.yytext.replace(/space\:/,""),T.getLogger().debug("SPACE NUM (LEX)",E.yytext),21;break;case 16:return E.yytext="1",T.getLogger().debug("COLUMNS (LEX)",E.yytext),21;break;case 17:return 43;case 18:return"LINKSTYLE";case 19:return"INTERPOLATE";case 20:return this.pushState("CLASSDEF"),40;break;case 21:return this.popState(),this.pushState("CLASSDEFID"),"DEFAULT_CLASSDEF_ID";break;case 22:return this.popState(),this.pushState("CLASSDEFID"),41;break;case 23:return this.popState(),42;break;case 24:return this.pushState("CLASS"),44;break;case 25:return this.popState(),this.pushState("CLASS_STYLE"),45;break;case 26:return this.popState(),46;break;case 27:return this.pushState("STYLE_STMNT"),47;break;case 28:return this.popState(),this.pushState("STYLE_DEFINITION"),48;break;case 29:return this.popState(),49;break;case 30:return this.pushState("acc_title"),"acc_title";break;case 31:return this.popState(),"acc_title_value";break;case 32:return this.pushState("acc_descr"),"acc_descr";break;case 33:return this.popState(),"acc_descr_value";break;case 34:this.pushState("acc_descr_multiline");break;case 35:this.popState();break;case 36:return"acc_descr_multiline_value";case 37:return 30;case 38:return this.popState(),T.getLogger().debug("Lex: (("),"NODE_DEND";break;case 39:return this.popState(),T.getLogger().debug("Lex: (("),"NODE_DEND";break;case 40:return this.popState(),T.getLogger().debug("Lex: ))"),"NODE_DEND";break;case 41:return this.popState(),T.getLogger().debug("Lex: (("),"NODE_DEND";break;case 42:return this.popState(),T.getLogger().debug("Lex: (("),"NODE_DEND";break;case 43:return this.popState(),T.getLogger().debug("Lex: (-"),"NODE_DEND";break;case 44:return this.popState(),T.getLogger().debug("Lex: -)"),"NODE_DEND";break;case 45:return this.popState(),T.getLogger().debug("Lex: (("),"NODE_DEND";break;case 46:return this.popState(),T.getLogger().debug("Lex: ]]"),"NODE_DEND";break;case 47:return this.popState(),T.getLogger().debug("Lex: ("),"NODE_DEND";break;case 48:return this.popState(),T.getLogger().debug("Lex: ])"),"NODE_DEND";break;case 49:return this.popState(),T.getLogger().debug("Lex: /]"),"NODE_DEND";break;case 50:return this.popState(),T.getLogger().debug("Lex: /]"),"NODE_DEND";break;case 51:return this.popState(),T.getLogger().debug("Lex: )]"),"NODE_DEND";break;case 52:return this.popState(),T.getLogger().debug("Lex: )"),"NODE_DEND";break;case 53:return this.popState(),T.getLogger().debug("Lex: ]>"),"NODE_DEND";break;case 54:return this.popState(),T.getLogger().debug("Lex: ]"),"NODE_DEND";break;case 55:return T.getLogger().debug("Lexa: -)"),this.pushState("NODE"),36;break;case 56:return T.getLogger().debug("Lexa: (-"),this.pushState("NODE"),36;break;case 57:return T.getLogger().debug("Lexa: ))"),this.pushState("NODE"),36;break;case 58:return T.getLogger().debug("Lexa: )"),this.pushState("NODE"),36;break;case 59:return T.getLogger().debug("Lex: ((("),this.pushState("NODE"),36;break;case 60:return T.getLogger().debug("Lexa: )"),this.pushState("NODE"),36;break;case 61:return T.getLogger().debug("Lexa: )"),this.pushState("NODE"),36;break;case 62:return T.getLogger().debug("Lexa: )"),this.pushState("NODE"),36;break;case 63:return T.getLogger().debug("Lexc: >"),this.pushState("NODE"),36;break;case 64:return T.getLogger().debug("Lexa: (["),this.pushState("NODE"),36;break;case 65:return T.getLogger().debug("Lexa: )"),this.pushState("NODE"),36;break;case 66:return this.pushState("NODE"),36;break;case 67:return this.pushState("NODE"),36;break;case 68:return this.pushState("NODE"),36;break;case 69:return this.pushState("NODE"),36;break;case 70:return this.pushState("NODE"),36;break;case 71:return this.pushState("NODE"),36;break;case 72:return this.pushState("NODE"),36;break;case 73:return T.getLogger().debug("Lexa: ["),this.pushState("NODE"),36;break;case 74:return this.pushState("BLOCK_ARROW"),T.getLogger().debug("LEX ARR START"),38;break;case 75:return T.getLogger().debug("Lex: NODE_ID",E.yytext),32;break;case 76:return T.getLogger().debug("Lex: EOF",E.yytext),8;break;case 77:this.pushState("md_string");break;case 78:this.pushState("md_string");break;case 79:return"NODE_DESCR";case 80:this.popState();break;case 81:T.getLogger().debug("Lex: Starting string"),this.pushState("string");break;case 82:T.getLogger().debug("LEX ARR: Starting string"),this.pushState("string");break;case 83:return T.getLogger().debug("LEX: NODE_DESCR:",E.yytext),"NODE_DESCR";break;case 84:T.getLogger().debug("LEX POPPING"),this.popState();break;case 85:T.getLogger().debug("Lex: =>BAE"),this.pushState("ARROW_DIR");break;case 86:return E.yytext=E.yytext.replace(/^,\s*/,""),T.getLogger().debug("Lex (right): dir:",E.yytext),"DIR";break;case 87:return E.yytext=E.yytext.replace(/^,\s*/,""),T.getLogger().debug("Lex (left):",E.yytext),"DIR";break;case 88:return E.yytext=E.yytext.replace(/^,\s*/,""),T.getLogger().debug("Lex (x):",E.yytext),"DIR";break;case 89:return E.yytext=E.yytext.replace(/^,\s*/,""),T.getLogger().debug("Lex (y):",E.yytext),"DIR";break;case 90:return E.yytext=E.yytext.replace(/^,\s*/,""),T.getLogger().debug("Lex (up):",E.yytext),"DIR";break;case 91:return E.yytext=E.yytext.replace(/^,\s*/,""),T.getLogger().debug("Lex (down):",E.yytext),"DIR";break;case 92:return E.yytext="]>",T.getLogger().debug("Lex (ARROW_DIR end):",E.yytext),this.popState(),this.popState(),"BLOCK_ARROW_END";break;case 93:return T.getLogger().debug("Lex: LINK","#"+E.yytext+"#"),15;break;case 94:return T.getLogger().debug("Lex: LINK",E.yytext),15;break;case 95:return T.getLogger().debug("Lex: LINK",E.yytext),15;break;case 96:return T.getLogger().debug("Lex: LINK",E.yytext),15;break;case 97:return T.getLogger().debug("Lex: START_LINK",E.yytext),this.pushState("LLABEL"),16;break;case 98:return T.getLogger().debug("Lex: START_LINK",E.yytext),this.pushState("LLABEL"),16;break;case 99:return T.getLogger().debug("Lex: START_LINK",E.yytext),this.pushState("LLABEL"),16;break;case 100:this.pushState("md_string");break;case 101:return T.getLogger().debug("Lex: Starting string"),this.pushState("string"),"LINK_LABEL";break;case 102:return this.popState(),T.getLogger().debug("Lex: LINK","#"+E.yytext+"#"),15;break;case 103:return this.popState(),T.getLogger().debug("Lex: LINK",E.yytext),15;break;case 104:return this.popState(),T.getLogger().debug("Lex: LINK",E.yytext),15;break;case 105:return T.getLogger().debug("Lex: COLON",E.yytext),E.yytext=E.yytext.slice(1),27;break}},"anonymous"),rules:[/^(?:block-beta\b)/,/^(?:block\s+)/,/^(?:block\n+)/,/^(?:block:)/,/^(?:[\s]+)/,/^(?:[\n]+)/,/^(?:((\u000D\u000A)|(\u000A)))/,/^(?:columns\s+auto\b)/,/^(?:columns\s+[\d]+)/,/^(?:["][`])/,/^(?:[^`"]+)/,/^(?:[`]["])/,/^(?:["])/,/^(?:["])/,/^(?:[^"]*)/,/^(?:space[:]\d+)/,/^(?:space\b)/,/^(?:default\b)/,/^(?:linkStyle\b)/,/^(?:interpolate\b)/,/^(?:classDef\s+)/,/^(?:DEFAULT\s+)/,/^(?:\w+\s+)/,/^(?:[^\n]*)/,/^(?:class\s+)/,/^(?:(\w+)+((,\s*\w+)*))/,/^(?:[^\n]*)/,/^(?:style\s+)/,/^(?:(\w+)+((,\s*\w+)*))/,/^(?:[^\n]*)/,/^(?:accTitle\s*:\s*)/,/^(?:(?!\n||)*[^\n]*)/,/^(?:accDescr\s*:\s*)/,/^(?:(?!\n||)*[^\n]*)/,/^(?:accDescr\s*\{\s*)/,/^(?:[\}])/,/^(?:[^\}]*)/,/^(?:end\b\s*)/,/^(?:\(\(\()/,/^(?:\)\)\))/,/^(?:[\)]\))/,/^(?:\}\})/,/^(?:\})/,/^(?:\(-)/,/^(?:-\))/,/^(?:\(\()/,/^(?:\]\])/,/^(?:\()/,/^(?:\]\))/,/^(?:\\\])/,/^(?:\/\])/,/^(?:\)\])/,/^(?:[\)])/,/^(?:\]>)/,/^(?:[\]])/,/^(?:-\))/,/^(?:\(-)/,/^(?:\)\))/,/^(?:\))/,/^(?:\(\(\()/,/^(?:\(\()/,/^(?:\{\{)/,/^(?:\{)/,/^(?:>)/,/^(?:\(\[)/,/^(?:\()/,/^(?:\[\[)/,/^(?:\[\|)/,/^(?:\[\()/,/^(?:\)\)\))/,/^(?:\[\\)/,/^(?:\[\/)/,/^(?:\[\\)/,/^(?:\[)/,/^(?:<\[)/,/^(?:[^\(\[\n\-\)\{\}\s\<\>:]+)/,/^(?:$)/,/^(?:["][`])/,/^(?:["][`])/,/^(?:[^`"]+)/,/^(?:[`]["])/,/^(?:["])/,/^(?:["])/,/^(?:[^"]+)/,/^(?:["])/,/^(?:\]>\s*\()/,/^(?:,?\s*right\s*)/,/^(?:,?\s*left\s*)/,/^(?:,?\s*x\s*)/,/^(?:,?\s*y\s*)/,/^(?:,?\s*up\s*)/,/^(?:,?\s*down\s*)/,/^(?:\)\s*)/,/^(?:\s*[xo<]?--+[-xo>]\s*)/,/^(?:\s*[xo<]?==+[=xo>]\s*)/,/^(?:\s*[xo<]?-?\.+-[xo>]?\s*)/,/^(?:\s*~~[\~]+\s*)/,/^(?:\s*[xo<]?--\s*)/,/^(?:\s*[xo<]?==\s*)/,/^(?:\s*[xo<]?-\.\s*)/,/^(?:["][`])/,/^(?:["])/,/^(?:\s*[xo<]?--+[-xo>]\s*)/,/^(?:\s*[xo<]?==+[=xo>]\s*)/,/^(?:\s*[xo<]?-?\.+-[xo>]?\s*)/,/^(?::\d+)/],conditions:{STYLE_DEFINITION:{rules:[29],inclusive:!1},STYLE_STMNT:{rules:[28],inclusive:!1},CLASSDEFID:{rules:[23],inclusive:!1},CLASSDEF:{rules:[21,22],inclusive:!1},CLASS_STYLE:{rules:[26],inclusive:!1},CLASS:{rules:[25],inclusive:!1},LLABEL:{rules:[100,101,102,103,104],inclusive:!1},ARROW_DIR:{rules:[86,87,88,89,90,91,92],inclusive:!1},BLOCK_ARROW:{rules:[77,82,85],inclusive:!1},NODE:{rules:[38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,78,81],inclusive:!1},md_string:{rules:[10,11,79,80],inclusive:!1},space:{rules:[],inclusive:!1},string:{rules:[13,14,83,84],inclusive:!1},acc_descr_multiline:{rules:[35,36],inclusive:!1},acc_descr:{rules:[33],inclusive:!1},acc_title:{rules:[31],inclusive:!1},INITIAL:{rules:[0,1,2,3,4,5,6,7,8,9,12,15,16,17,18,19,20,24,27,30,32,34,37,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,93,94,95,96,97,98,99,105],inclusive:!0}}};return w}();v.lexer=x;function b(){this.yy={}}return o(b,"Parser"),b.prototype=v,v.Parser=b,new b}();QB.parser=QB;Wye=QB});function Crt(t){switch(Y.debug("typeStr2Type",t),t){case"[]":return"square";case"()":return Y.debug("we have a round"),"round";case"(())":return"circle";case">]":return"rect_left_inv_arrow";case"{}":return"diamond";case"{{}}":return"hexagon";case"([])":return"stadium";case"[[]]":return"subroutine";case"[()]":return"cylinder";case"((()))":return"doublecircle";case"[//]":return"lean_right";case"[\\\\]":return"lean_left";case"[/\\]":return"trapezoid";case"[\\/]":return"inv_trapezoid";case"<[]>":return"block_arrow";default:return"na"}}function Art(t){switch(Y.debug("typeStr2Type",t),t){case"==":return"thick";default:return"normal"}}function _rt(t){switch(t.trim()){case"--x":return"arrow_cross";case"--o":return"arrow_circle";default:return"arrow_point"}}var Jl,JB,ZB,qye,Xye,xrt,Kye,brt,lS,wrt,Trt,krt,Ert,Qye,eF,Lb,Srt,jye,Lrt,Drt,Nrt,Rrt,Mrt,Irt,Ort,Prt,Brt,Frt,zrt,Zye,Jye=M(()=>{"use strict";AL();Za();Vt();ut();fr();Ai();Jl=new Map,JB=[],ZB=new Map,qye="color",Xye="fill",xrt="bgFill",Kye=",",brt=pe(),lS=new Map,wrt=o(t=>qe.sanitizeText(t,brt),"sanitizeText"),Trt=o(function(t,e=""){let r=lS.get(t);r||(r={id:t,styles:[],textStyles:[]},lS.set(t,r)),e?.split(Kye).forEach(n=>{let i=n.replace(/([^;]*);/,"$1").trim();if(RegExp(qye).exec(n)){let s=i.replace(Xye,xrt).replace(qye,Xye);r.textStyles.push(s)}r.styles.push(i)})},"addStyleClass"),krt=o(function(t,e=""){let r=Jl.get(t);e!=null&&(r.styles=e.split(Kye))},"addStyle2Node"),Ert=o(function(t,e){t.split(",").forEach(function(r){let n=Jl.get(r);if(n===void 0){let i=r.trim();n={id:i,type:"na",children:[]},Jl.set(i,n)}n.classes||(n.classes=[]),n.classes.push(e)})},"setCssClass"),Qye=o((t,e)=>{let r=t.flat(),n=[];for(let i of r){if(i.label&&(i.label=wrt(i.label)),i.type==="classDef"){Trt(i.id,i.css);continue}if(i.type==="applyClass"){Ert(i.id,i?.styleClass??"");continue}if(i.type==="applyStyles"){i?.stylesStr&&krt(i.id,i?.stylesStr);continue}if(i.type==="column-setting")e.columns=i.columns??-1;else if(i.type==="edge"){let a=(ZB.get(i.id)??0)+1;ZB.set(i.id,a),i.id=a+"-"+i.id,JB.push(i)}else{i.label||(i.type==="composite"?i.label="":i.label=i.id);let a=Jl.get(i.id);if(a===void 0?Jl.set(i.id,i):(i.type!=="na"&&(a.type=i.type),i.label!==i.id&&(a.label=i.label)),i.children&&Qye(i.children,i),i.type==="space"){let s=i.width??1;for(let l=0;l{Y.debug("Clear called"),Lr(),Lb={id:"root",type:"composite",children:[],columns:-1},Jl=new Map([["root",Lb]]),eF=[],lS=new Map,JB=[],ZB=new Map},"clear");o(Crt,"typeStr2Type");o(Art,"edgeTypeStr2Type");o(_rt,"edgeStrToEdgeData");jye=0,Lrt=o(()=>(jye++,"id-"+Math.random().toString(36).substr(2,12)+"-"+jye),"generateId"),Drt=o(t=>{Lb.children=t,Qye(t,Lb),eF=Lb.children},"setHierarchy"),Nrt=o(t=>{let e=Jl.get(t);return e?e.columns?e.columns:e.children?e.children.length:-1:-1},"getColumns"),Rrt=o(()=>[...Jl.values()],"getBlocksFlat"),Mrt=o(()=>eF||[],"getBlocks"),Irt=o(()=>JB,"getEdges"),Ort=o(t=>Jl.get(t),"getBlock"),Prt=o(t=>{Jl.set(t.id,t)},"setBlock"),Brt=o(()=>console,"getLogger"),Frt=o(function(){return lS},"getClasses"),zrt={getConfig:o(()=>Cr().block,"getConfig"),typeStr2Type:Crt,edgeTypeStr2Type:Art,edgeStrToEdgeData:_rt,getLogger:Brt,getBlocksFlat:Rrt,getBlocks:Mrt,getEdges:Irt,setHierarchy:Drt,getBlock:Ort,setBlock:Prt,getColumns:Nrt,getClasses:Frt,clear:Srt,generateId:Lrt},Zye=zrt});var cS,Grt,eve,tve=M(()=>{"use strict";Lo();cS=o((t,e)=>{let r=ay,n=r(t,"r"),i=r(t,"g"),a=r(t,"b");return Zs(n,i,a,e)},"fade"),Grt=o(t=>`.label { + font-family: ${t.fontFamily}; + color: ${t.nodeTextColor||t.textColor}; + } + .cluster-label text { + fill: ${t.titleColor}; + } + .cluster-label span,p { + color: ${t.titleColor}; + } + + + + .label text,span,p { + fill: ${t.nodeTextColor||t.textColor}; + color: ${t.nodeTextColor||t.textColor}; + } + + .node rect, + .node circle, + .node ellipse, + .node polygon, + .node path { + fill: ${t.mainBkg}; + stroke: ${t.nodeBorder}; + stroke-width: 1px; + } + .flowchart-label text { + text-anchor: middle; + } + // .flowchart-label .text-outer-tspan { + // text-anchor: middle; + // } + // .flowchart-label .text-inner-tspan { + // text-anchor: start; + // } + + .node .label { + text-align: center; + } + .node.clickable { + cursor: pointer; + } + + .arrowheadPath { + fill: ${t.arrowheadColor}; + } + + .edgePath .path { + stroke: ${t.lineColor}; + stroke-width: 2.0px; + } + + .flowchart-link { + stroke: ${t.lineColor}; + fill: none; + } + + .edgeLabel { + background-color: ${t.edgeLabelBackground}; + rect { + opacity: 0.5; + background-color: ${t.edgeLabelBackground}; + fill: ${t.edgeLabelBackground}; + } + text-align: center; + } + + /* For html labels only */ + .labelBkg { + background-color: ${cS(t.edgeLabelBackground,.5)}; + // background-color: + } + + .node .cluster { + // fill: ${cS(t.mainBkg,.5)}; + fill: ${cS(t.clusterBkg,.5)}; + stroke: ${cS(t.clusterBorder,.2)}; + box-shadow: rgba(50, 50, 93, 0.25) 0px 13px 27px -5px, rgba(0, 0, 0, 0.3) 0px 8px 16px -8px; + stroke-width: 1px; + } + + .cluster text { + fill: ${t.titleColor}; + } + + .cluster span,p { + color: ${t.titleColor}; + } + /* .cluster div { + color: ${t.titleColor}; + } */ + + div.mermaidTooltip { + position: absolute; + text-align: center; + max-width: 200px; + padding: 2px; + font-family: ${t.fontFamily}; + font-size: 12px; + background: ${t.tertiaryColor}; + border: 1px solid ${t.border2}; + border-radius: 2px; + pointer-events: none; + z-index: 100; + } + + .flowchartTitleText { + text-anchor: middle; + font-size: 18px; + fill: ${t.textColor}; + } +`,"getStyles"),eve=Grt});var $rt,Vrt,Urt,Hrt,Wrt,Yrt,qrt,Xrt,jrt,Krt,Qrt,rve,nve=M(()=>{"use strict";ut();$rt=o((t,e,r,n)=>{e.forEach(i=>{Qrt[i](t,r,n)})},"insertMarkers"),Vrt=o((t,e,r)=>{Y.trace("Making markers for ",r),t.append("defs").append("marker").attr("id",r+"_"+e+"-extensionStart").attr("class","marker extension "+e).attr("refX",18).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("path").attr("d","M 1,7 L18,13 V 1 Z"),t.append("defs").append("marker").attr("id",r+"_"+e+"-extensionEnd").attr("class","marker extension "+e).attr("refX",1).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 1,1 V 13 L18,7 Z")},"extension"),Urt=o((t,e,r)=>{t.append("defs").append("marker").attr("id",r+"_"+e+"-compositionStart").attr("class","marker composition "+e).attr("refX",18).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z"),t.append("defs").append("marker").attr("id",r+"_"+e+"-compositionEnd").attr("class","marker composition "+e).attr("refX",1).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z")},"composition"),Hrt=o((t,e,r)=>{t.append("defs").append("marker").attr("id",r+"_"+e+"-aggregationStart").attr("class","marker aggregation "+e).attr("refX",18).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z"),t.append("defs").append("marker").attr("id",r+"_"+e+"-aggregationEnd").attr("class","marker aggregation "+e).attr("refX",1).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z")},"aggregation"),Wrt=o((t,e,r)=>{t.append("defs").append("marker").attr("id",r+"_"+e+"-dependencyStart").attr("class","marker dependency "+e).attr("refX",6).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("path").attr("d","M 5,7 L9,13 L1,7 L9,1 Z"),t.append("defs").append("marker").attr("id",r+"_"+e+"-dependencyEnd").attr("class","marker dependency "+e).attr("refX",13).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L14,7 L9,1 Z")},"dependency"),Yrt=o((t,e,r)=>{t.append("defs").append("marker").attr("id",r+"_"+e+"-lollipopStart").attr("class","marker lollipop "+e).attr("refX",13).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("circle").attr("stroke","black").attr("fill","transparent").attr("cx",7).attr("cy",7).attr("r",6),t.append("defs").append("marker").attr("id",r+"_"+e+"-lollipopEnd").attr("class","marker lollipop "+e).attr("refX",1).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("circle").attr("stroke","black").attr("fill","transparent").attr("cx",7).attr("cy",7).attr("r",6)},"lollipop"),qrt=o((t,e,r)=>{t.append("marker").attr("id",r+"_"+e+"-pointEnd").attr("class","marker "+e).attr("viewBox","0 0 10 10").attr("refX",6).attr("refY",5).attr("markerUnits","userSpaceOnUse").attr("markerWidth",12).attr("markerHeight",12).attr("orient","auto").append("path").attr("d","M 0 0 L 10 5 L 0 10 z").attr("class","arrowMarkerPath").style("stroke-width",1).style("stroke-dasharray","1,0"),t.append("marker").attr("id",r+"_"+e+"-pointStart").attr("class","marker "+e).attr("viewBox","0 0 10 10").attr("refX",4.5).attr("refY",5).attr("markerUnits","userSpaceOnUse").attr("markerWidth",12).attr("markerHeight",12).attr("orient","auto").append("path").attr("d","M 0 5 L 10 10 L 10 0 z").attr("class","arrowMarkerPath").style("stroke-width",1).style("stroke-dasharray","1,0")},"point"),Xrt=o((t,e,r)=>{t.append("marker").attr("id",r+"_"+e+"-circleEnd").attr("class","marker "+e).attr("viewBox","0 0 10 10").attr("refX",11).attr("refY",5).attr("markerUnits","userSpaceOnUse").attr("markerWidth",11).attr("markerHeight",11).attr("orient","auto").append("circle").attr("cx","5").attr("cy","5").attr("r","5").attr("class","arrowMarkerPath").style("stroke-width",1).style("stroke-dasharray","1,0"),t.append("marker").attr("id",r+"_"+e+"-circleStart").attr("class","marker "+e).attr("viewBox","0 0 10 10").attr("refX",-1).attr("refY",5).attr("markerUnits","userSpaceOnUse").attr("markerWidth",11).attr("markerHeight",11).attr("orient","auto").append("circle").attr("cx","5").attr("cy","5").attr("r","5").attr("class","arrowMarkerPath").style("stroke-width",1).style("stroke-dasharray","1,0")},"circle"),jrt=o((t,e,r)=>{t.append("marker").attr("id",r+"_"+e+"-crossEnd").attr("class","marker cross "+e).attr("viewBox","0 0 11 11").attr("refX",12).attr("refY",5.2).attr("markerUnits","userSpaceOnUse").attr("markerWidth",11).attr("markerHeight",11).attr("orient","auto").append("path").attr("d","M 1,1 l 9,9 M 10,1 l -9,9").attr("class","arrowMarkerPath").style("stroke-width",2).style("stroke-dasharray","1,0"),t.append("marker").attr("id",r+"_"+e+"-crossStart").attr("class","marker cross "+e).attr("viewBox","0 0 11 11").attr("refX",-1).attr("refY",5.2).attr("markerUnits","userSpaceOnUse").attr("markerWidth",11).attr("markerHeight",11).attr("orient","auto").append("path").attr("d","M 1,1 l 9,9 M 10,1 l -9,9").attr("class","arrowMarkerPath").style("stroke-width",2).style("stroke-dasharray","1,0")},"cross"),Krt=o((t,e,r)=>{t.append("defs").append("marker").attr("id",r+"_"+e+"-barbEnd").attr("refX",19).attr("refY",7).attr("markerWidth",20).attr("markerHeight",14).attr("markerUnits","strokeWidth").attr("orient","auto").append("path").attr("d","M 19,7 L9,13 L14,7 L9,1 Z")},"barb"),Qrt={extension:Vrt,composition:Urt,aggregation:Hrt,dependency:Wrt,lollipop:Yrt,point:qrt,circle:Xrt,cross:jrt,barb:Krt},rve=$rt});function Zrt(t,e){if(t===0||!Number.isInteger(t))throw new Error("Columns must be an integer !== 0.");if(e<0||!Number.isInteger(e))throw new Error("Position must be a non-negative integer."+e);if(t<0)return{px:e,py:0};if(t===1)return{px:0,py:e};let r=e%t,n=Math.floor(e/t);return{px:r,py:n}}function tF(t,e,r=0,n=0){Y.debug("setBlockSizes abc95 (start)",t.id,t?.size?.x,"block width =",t?.size,"sieblingWidth",r),t?.size?.width||(t.size={width:r,height:n,x:0,y:0});let i=0,a=0;if(t.children?.length>0){for(let m of t.children)tF(m,e);let s=Jrt(t);i=s.width,a=s.height,Y.debug("setBlockSizes abc95 maxWidth of",t.id,":s children is ",i,a);for(let m of t.children)m.size&&(Y.debug(`abc95 Setting size of children of ${t.id} id=${m.id} ${i} ${a} ${JSON.stringify(m.size)}`),m.size.width=i*(m.widthInColumns??1)+Ti*((m.widthInColumns??1)-1),m.size.height=a,m.size.x=0,m.size.y=0,Y.debug(`abc95 updating size of ${t.id} children child:${m.id} maxWidth:${i} maxHeight:${a}`));for(let m of t.children)tF(m,e,i,a);let l=t.columns??-1,u=0;for(let m of t.children)u+=m.widthInColumns??1;let h=t.children.length;l>0&&l0?Math.min(t.children.length,l):t.children.length;if(m>0){let g=(d-m*Ti-Ti)/m;Y.debug("abc95 (growing to fit) width",t.id,d,t.size?.width,g);for(let y of t.children)y.size&&(y.size.width=g)}}t.size={width:d,height:p,x:0,y:0}}Y.debug("setBlockSizes abc94 (done)",t.id,t?.size?.x,t?.size?.width,t?.size?.y,t?.size?.height)}function ive(t,e){Y.debug(`abc85 layout blocks (=>layoutBlocks) ${t.id} x: ${t?.size?.x} y: ${t?.size?.y} width: ${t?.size?.width}`);let r=t.columns??-1;if(Y.debug("layoutBlocks columns abc95",t.id,"=>",r,t),t.children&&t.children.length>0){let n=t?.children[0]?.size?.width??0,i=t.children.length*n+(t.children.length-1)*Ti;Y.debug("widthOfChildren 88",i,"posX");let a=0;Y.debug("abc91 block?.size?.x",t.id,t?.size?.x);let s=t?.size?.x?t?.size?.x+(-t?.size?.width/2||0):-Ti,l=0;for(let u of t.children){let h=t;if(!u.size)continue;let{width:f,height:d}=u.size,{px:p,py:m}=Zrt(r,a);if(m!=l&&(l=m,s=t?.size?.x?t?.size?.x+(-t?.size?.width/2||0):-Ti,Y.debug("New row in layout for block",t.id," and child ",u.id,l)),Y.debug(`abc89 layout blocks (child) id: ${u.id} Pos: ${a} (px, py) ${p},${m} (${h?.size?.x},${h?.size?.y}) parent: ${h.id} width: ${f}${Ti}`),h.size){let g=f/2;u.size.x=s+Ti+g,Y.debug(`abc91 layout blocks (calc) px, pyid:${u.id} startingPos=X${s} new startingPosX${u.size.x} ${g} padding=${Ti} width=${f} halfWidth=${g} => x:${u.size.x} y:${u.size.y} ${u.widthInColumns} (width * (child?.w || 1)) / 2 ${f*(u?.widthInColumns??1)/2}`),s=u.size.x+g,u.size.y=h.size.y-h.size.height/2+m*(d+Ti)+d/2+Ti,Y.debug(`abc88 layout blocks (calc) px, pyid:${u.id}startingPosX${s}${Ti}${g}=>x:${u.size.x}y:${u.size.y}${u.widthInColumns}(width * (child?.w || 1)) / 2${f*(u?.widthInColumns??1)/2}`)}u.children&&ive(u,e),a+=u?.widthInColumns??1,Y.debug("abc88 columnsPos",u,a)}}Y.debug(`layout blocks (<==layoutBlocks) ${t.id} x: ${t?.size?.x} y: ${t?.size?.y} width: ${t?.size?.width}`)}function ave(t,{minX:e,minY:r,maxX:n,maxY:i}={minX:0,minY:0,maxX:0,maxY:0}){if(t.size&&t.id!=="root"){let{x:a,y:s,width:l,height:u}=t.size;a-l/2n&&(n=a+l/2),s+u/2>i&&(i=s+u/2)}if(t.children)for(let a of t.children)({minX:e,minY:r,maxX:n,maxY:i}=ave(a,{minX:e,minY:r,maxX:n,maxY:i}));return{minX:e,minY:r,maxX:n,maxY:i}}function sve(t){let e=t.getBlock("root");if(!e)return;tF(e,t,0,0),ive(e,t),Y.debug("getBlocks",JSON.stringify(e,null,2));let{minX:r,minY:n,maxX:i,maxY:a}=ave(e),s=a-n,l=i-r;return{x:r,y:n,width:l,height:s}}var Ti,Jrt,ove=M(()=>{"use strict";ut();Vt();Ti=pe()?.block?.padding??8;o(Zrt,"calculateBlockPosition");Jrt=o(t=>{let e=0,r=0;for(let n of t.children){let{width:i,height:a,x:s,y:l}=n.size??{width:0,height:0,x:0,y:0};Y.debug("getMaxChildSize abc95 child:",n.id,"width:",i,"height:",a,"x:",s,"y:",l,n.type),n.type!=="space"&&(i>e&&(e=i/(t.widthInColumns??1)),a>r&&(r=a))}return{width:e,height:r}},"getMaxChildSize");o(tF,"setBlockSizes");o(ive,"layoutBlocks");o(ave,"findBounds");o(sve,"layout")});function lve(t,e){e&&t.attr("style",e)}function ent(t){let e=Ve(document.createElementNS("http://www.w3.org/2000/svg","foreignObject")),r=e.append("xhtml:div"),n=t.label,i=t.isNode?"nodeLabel":"edgeLabel",a=r.append("span");return a.html(n),lve(a,t.labelStyle),a.attr("class",i),lve(r,t.labelStyle),r.style("display","inline-block"),r.style("white-space","nowrap"),r.attr("xmlns","http://www.w3.org/1999/xhtml"),e.node()}var tnt,gs,uS=M(()=>{"use strict";pr();ut();Vt();fr();hr();Pl();o(lve,"applyStyle");o(ent,"addHtmlLabel");tnt=o((t,e,r,n)=>{let i=t||"";if(typeof i=="object"&&(i=i[0]),xr(pe().flowchart.htmlLabels)){i=i.replace(/\\n|\n/g,"
    "),Y.debug("vertexText"+i);let a={isNode:n,label:w9(Ma(i)),labelStyle:e.replace("fill:","color:")};return ent(a)}else{let a=document.createElementNS("http://www.w3.org/2000/svg","text");a.setAttribute("style",e.replace("color:","fill:"));let s=[];typeof i=="string"?s=i.split(/\\n|\n|/gi):Array.isArray(i)?s=i:s=[];for(let l of s){let u=document.createElementNS("http://www.w3.org/2000/svg","tspan");u.setAttributeNS("http://www.w3.org/XML/1998/namespace","xml:space","preserve"),u.setAttribute("dy","1em"),u.setAttribute("x","0"),r?u.setAttribute("class","title-row"):u.setAttribute("class","row"),u.textContent=l.trim(),a.appendChild(u)}return a}},"createLabel"),gs=tnt});var uve,rnt,cve,hve=M(()=>{"use strict";ut();uve=o((t,e,r,n,i)=>{e.arrowTypeStart&&cve(t,"start",e.arrowTypeStart,r,n,i),e.arrowTypeEnd&&cve(t,"end",e.arrowTypeEnd,r,n,i)},"addEdgeMarkers"),rnt={arrow_cross:"cross",arrow_point:"point",arrow_barb:"barb",arrow_circle:"circle",aggregation:"aggregation",extension:"extension",composition:"composition",dependency:"dependency",lollipop:"lollipop"},cve=o((t,e,r,n,i,a)=>{let s=rnt[r];if(!s){Y.warn(`Unknown arrow type: ${r}`);return}let l=e==="start"?"Start":"End";t.attr(`marker-${e}`,`url(${n}#${i}_${a}-${s}${l})`)},"addEdgeMarker")});function hS(t,e){pe().flowchart.htmlLabels&&t&&(t.style.width=e.length*9+"px",t.style.height="12px")}var rF,Xa,dve,pve,nnt,int,fve,mve,gve=M(()=>{"use strict";ut();uS();Pl();pr();Vt();hr();fr();uL();$v();hve();rF={},Xa={},dve=o((t,e)=>{let r=pe(),n=xr(r.flowchart.htmlLabels),i=e.labelType==="markdown"?Li(t,e.label,{style:e.labelStyle,useHtmlLabels:n,addSvgBackground:!0},r):gs(e.label,e.labelStyle),a=t.insert("g").attr("class","edgeLabel"),s=a.insert("g").attr("class","label");s.node().appendChild(i);let l=i.getBBox();if(n){let h=i.children[0],f=Ve(i);l=h.getBoundingClientRect(),f.attr("width",l.width),f.attr("height",l.height)}s.attr("transform","translate("+-l.width/2+", "+-l.height/2+")"),rF[e.id]=a,e.width=l.width,e.height=l.height;let u;if(e.startLabelLeft){let h=gs(e.startLabelLeft,e.labelStyle),f=t.insert("g").attr("class","edgeTerminals"),d=f.insert("g").attr("class","inner");u=d.node().appendChild(h);let p=h.getBBox();d.attr("transform","translate("+-p.width/2+", "+-p.height/2+")"),Xa[e.id]||(Xa[e.id]={}),Xa[e.id].startLeft=f,hS(u,e.startLabelLeft)}if(e.startLabelRight){let h=gs(e.startLabelRight,e.labelStyle),f=t.insert("g").attr("class","edgeTerminals"),d=f.insert("g").attr("class","inner");u=f.node().appendChild(h),d.node().appendChild(h);let p=h.getBBox();d.attr("transform","translate("+-p.width/2+", "+-p.height/2+")"),Xa[e.id]||(Xa[e.id]={}),Xa[e.id].startRight=f,hS(u,e.startLabelRight)}if(e.endLabelLeft){let h=gs(e.endLabelLeft,e.labelStyle),f=t.insert("g").attr("class","edgeTerminals"),d=f.insert("g").attr("class","inner");u=d.node().appendChild(h);let p=h.getBBox();d.attr("transform","translate("+-p.width/2+", "+-p.height/2+")"),f.node().appendChild(h),Xa[e.id]||(Xa[e.id]={}),Xa[e.id].endLeft=f,hS(u,e.endLabelLeft)}if(e.endLabelRight){let h=gs(e.endLabelRight,e.labelStyle),f=t.insert("g").attr("class","edgeTerminals"),d=f.insert("g").attr("class","inner");u=d.node().appendChild(h);let p=h.getBBox();d.attr("transform","translate("+-p.width/2+", "+-p.height/2+")"),f.node().appendChild(h),Xa[e.id]||(Xa[e.id]={}),Xa[e.id].endRight=f,hS(u,e.endLabelRight)}return i},"insertEdgeLabel");o(hS,"setTerminalWidth");pve=o((t,e)=>{Y.debug("Moving label abc88 ",t.id,t.label,rF[t.id],e);let r=e.updatedPath?e.updatedPath:e.originalPath,n=pe(),{subGraphTitleTotalMargin:i}=Fu(n);if(t.label){let a=rF[t.id],s=t.x,l=t.y;if(r){let u=Ut.calcLabelPosition(r);Y.debug("Moving label "+t.label+" from (",s,",",l,") to (",u.x,",",u.y,") abc88"),e.updatedPath&&(s=u.x,l=u.y)}a.attr("transform",`translate(${s}, ${l+i/2})`)}if(t.startLabelLeft){let a=Xa[t.id].startLeft,s=t.x,l=t.y;if(r){let u=Ut.calcTerminalLabelPosition(t.arrowTypeStart?10:0,"start_left",r);s=u.x,l=u.y}a.attr("transform",`translate(${s}, ${l})`)}if(t.startLabelRight){let a=Xa[t.id].startRight,s=t.x,l=t.y;if(r){let u=Ut.calcTerminalLabelPosition(t.arrowTypeStart?10:0,"start_right",r);s=u.x,l=u.y}a.attr("transform",`translate(${s}, ${l})`)}if(t.endLabelLeft){let a=Xa[t.id].endLeft,s=t.x,l=t.y;if(r){let u=Ut.calcTerminalLabelPosition(t.arrowTypeEnd?10:0,"end_left",r);s=u.x,l=u.y}a.attr("transform",`translate(${s}, ${l})`)}if(t.endLabelRight){let a=Xa[t.id].endRight,s=t.x,l=t.y;if(r){let u=Ut.calcTerminalLabelPosition(t.arrowTypeEnd?10:0,"end_right",r);s=u.x,l=u.y}a.attr("transform",`translate(${s}, ${l})`)}},"positionEdgeLabel"),nnt=o((t,e)=>{let r=t.x,n=t.y,i=Math.abs(e.x-r),a=Math.abs(e.y-n),s=t.width/2,l=t.height/2;return i>=s||a>=l},"outsideNode"),int=o((t,e,r)=>{Y.debug(`intersection calc abc89: + outsidePoint: ${JSON.stringify(e)} + insidePoint : ${JSON.stringify(r)} + node : x:${t.x} y:${t.y} w:${t.width} h:${t.height}`);let n=t.x,i=t.y,a=Math.abs(n-r.x),s=t.width/2,l=r.xMath.abs(n-e.x)*u){let d=r.y{Y.debug("abc88 cutPathAtIntersect",t,e);let r=[],n=t[0],i=!1;return t.forEach(a=>{if(!nnt(e,a)&&!i){let s=int(e,n,a),l=!1;r.forEach(u=>{l=l||u.x===s.x&&u.y===s.y}),r.some(u=>u.x===s.x&&u.y===s.y)||r.push(s),i=!0}else n=a,i||r.push(a)}),r},"cutPathAtIntersect"),mve=o(function(t,e,r,n,i,a,s){let l=r.points;Y.debug("abc88 InsertEdge: edge=",r,"e=",e);let u=!1,h=a.node(e.v);var f=a.node(e.w);f?.intersect&&h?.intersect&&(l=l.slice(1,r.points.length-1),l.unshift(h.intersect(l[0])),l.push(f.intersect(l[l.length-1]))),r.toCluster&&(Y.debug("to cluster abc88",n[r.toCluster]),l=fve(r.points,n[r.toCluster].node),u=!0),r.fromCluster&&(Y.debug("from cluster abc88",n[r.fromCluster]),l=fve(l.reverse(),n[r.fromCluster].node).reverse(),u=!0);let d=l.filter(_=>!Number.isNaN(_.y)),p=Po;r.curve&&(i==="graph"||i==="flowchart")&&(p=r.curve);let{x:m,y:g}=uw(r),y=ns().x(m).y(g).curve(p),v;switch(r.thickness){case"normal":v="edge-thickness-normal";break;case"thick":v="edge-thickness-thick";break;case"invisible":v="edge-thickness-thick";break;default:v=""}switch(r.pattern){case"solid":v+=" edge-pattern-solid";break;case"dotted":v+=" edge-pattern-dotted";break;case"dashed":v+=" edge-pattern-dashed";break}let x=t.append("path").attr("d",y(d)).attr("id",r.id).attr("class"," "+v+(r.classes?" "+r.classes:"")).attr("style",r.style),b="";(pe().flowchart.arrowMarkerAbsolute||pe().state.arrowMarkerAbsolute)&&(b=window.location.protocol+"//"+window.location.host+window.location.pathname+window.location.search,b=b.replace(/\(/g,"\\("),b=b.replace(/\)/g,"\\)")),uve(x,r,b,s,i);let w={};return u&&(w.updatedPath=l),w.originalPath=r.points,w},"insertEdge")});var ant,yve,vve=M(()=>{"use strict";ant=o(t=>{let e=new Set;for(let r of t)switch(r){case"x":e.add("right"),e.add("left");break;case"y":e.add("up"),e.add("down");break;default:e.add(r);break}return e},"expandAndDeduplicateDirections"),yve=o((t,e,r)=>{let n=ant(t),i=2,a=e.height+2*r.padding,s=a/i,l=e.width+2*s+r.padding,u=r.padding/2;return n.has("right")&&n.has("left")&&n.has("up")&&n.has("down")?[{x:0,y:0},{x:s,y:0},{x:l/2,y:2*u},{x:l-s,y:0},{x:l,y:0},{x:l,y:-a/3},{x:l+2*u,y:-a/2},{x:l,y:-2*a/3},{x:l,y:-a},{x:l-s,y:-a},{x:l/2,y:-a-2*u},{x:s,y:-a},{x:0,y:-a},{x:0,y:-2*a/3},{x:-2*u,y:-a/2},{x:0,y:-a/3}]:n.has("right")&&n.has("left")&&n.has("up")?[{x:s,y:0},{x:l-s,y:0},{x:l,y:-a/2},{x:l-s,y:-a},{x:s,y:-a},{x:0,y:-a/2}]:n.has("right")&&n.has("left")&&n.has("down")?[{x:0,y:0},{x:s,y:-a},{x:l-s,y:-a},{x:l,y:0}]:n.has("right")&&n.has("up")&&n.has("down")?[{x:0,y:0},{x:l,y:-s},{x:l,y:-a+s},{x:0,y:-a}]:n.has("left")&&n.has("up")&&n.has("down")?[{x:l,y:0},{x:0,y:-s},{x:0,y:-a+s},{x:l,y:-a}]:n.has("right")&&n.has("left")?[{x:s,y:0},{x:s,y:-u},{x:l-s,y:-u},{x:l-s,y:0},{x:l,y:-a/2},{x:l-s,y:-a},{x:l-s,y:-a+u},{x:s,y:-a+u},{x:s,y:-a},{x:0,y:-a/2}]:n.has("up")&&n.has("down")?[{x:l/2,y:0},{x:0,y:-u},{x:s,y:-u},{x:s,y:-a+u},{x:0,y:-a+u},{x:l/2,y:-a},{x:l,y:-a+u},{x:l-s,y:-a+u},{x:l-s,y:-u},{x:l,y:-u}]:n.has("right")&&n.has("up")?[{x:0,y:0},{x:l,y:-s},{x:0,y:-a}]:n.has("right")&&n.has("down")?[{x:0,y:0},{x:l,y:0},{x:0,y:-a}]:n.has("left")&&n.has("up")?[{x:l,y:0},{x:0,y:-s},{x:l,y:-a}]:n.has("left")&&n.has("down")?[{x:l,y:0},{x:0,y:0},{x:l,y:-a}]:n.has("right")?[{x:s,y:-u},{x:s,y:-u},{x:l-s,y:-u},{x:l-s,y:0},{x:l,y:-a/2},{x:l-s,y:-a},{x:l-s,y:-a+u},{x:s,y:-a+u},{x:s,y:-a+u}]:n.has("left")?[{x:s,y:0},{x:s,y:-u},{x:l-s,y:-u},{x:l-s,y:-a+u},{x:s,y:-a+u},{x:s,y:-a},{x:0,y:-a/2}]:n.has("up")?[{x:s,y:-u},{x:s,y:-a+u},{x:0,y:-a+u},{x:l/2,y:-a},{x:l,y:-a+u},{x:l-s,y:-a+u},{x:l-s,y:-u}]:n.has("down")?[{x:l/2,y:0},{x:0,y:-u},{x:s,y:-u},{x:s,y:-a+u},{x:l-s,y:-a+u},{x:l-s,y:-u},{x:l,y:-u}]:[{x:0,y:0}]},"getArrowPoints")});function snt(t,e){return t.intersect(e)}var xve,bve=M(()=>{"use strict";o(snt,"intersectNode");xve=snt});function ont(t,e,r,n){var i=t.x,a=t.y,s=i-n.x,l=a-n.y,u=Math.sqrt(e*e*l*l+r*r*s*s),h=Math.abs(e*r*s/u);n.x{"use strict";o(ont,"intersectEllipse");fS=ont});function lnt(t,e,r){return fS(t,e,e,r)}var wve,Tve=M(()=>{"use strict";nF();o(lnt,"intersectCircle");wve=lnt});function cnt(t,e,r,n){var i,a,s,l,u,h,f,d,p,m,g,y,v,x,b;if(i=e.y-t.y,s=t.x-e.x,u=e.x*t.y-t.x*e.y,p=i*r.x+s*r.y+u,m=i*n.x+s*n.y+u,!(p!==0&&m!==0&&kve(p,m))&&(a=n.y-r.y,l=r.x-n.x,h=n.x*r.y-r.x*n.y,f=a*t.x+l*t.y+h,d=a*e.x+l*e.y+h,!(f!==0&&d!==0&&kve(f,d))&&(g=i*l-a*s,g!==0)))return y=Math.abs(g/2),v=s*h-l*u,x=v<0?(v-y)/g:(v+y)/g,v=a*u-i*h,b=v<0?(v-y)/g:(v+y)/g,{x,y:b}}function kve(t,e){return t*e>0}var Eve,Sve=M(()=>{"use strict";o(cnt,"intersectLine");o(kve,"sameSign");Eve=cnt});function unt(t,e,r){var n=t.x,i=t.y,a=[],s=Number.POSITIVE_INFINITY,l=Number.POSITIVE_INFINITY;typeof e.forEach=="function"?e.forEach(function(g){s=Math.min(s,g.x),l=Math.min(l,g.y)}):(s=Math.min(s,e.x),l=Math.min(l,e.y));for(var u=n-t.width/2-s,h=i-t.height/2-l,f=0;f1&&a.sort(function(g,y){var v=g.x-r.x,x=g.y-r.y,b=Math.sqrt(v*v+x*x),w=y.x-r.x,_=y.y-r.y,T=Math.sqrt(w*w+_*_);return b{"use strict";Sve();Cve=unt;o(unt,"intersectPolygon")});var hnt,_ve,Lve=M(()=>{"use strict";hnt=o((t,e)=>{var r=t.x,n=t.y,i=e.x-r,a=e.y-n,s=t.width/2,l=t.height/2,u,h;return Math.abs(a)*s>Math.abs(i)*l?(a<0&&(l=-l),u=a===0?0:l*i/a,h=l):(i<0&&(s=-s),u=s,h=i===0?0:s*a/i),{x:r+u,y:n+h}},"intersectRect"),_ve=hnt});var In,iF=M(()=>{"use strict";bve();Tve();nF();Ave();Lve();In={node:xve,circle:wve,ellipse:fS,polygon:Cve,rect:_ve}});function ec(t,e,r,n){return t.insert("polygon",":first-child").attr("points",n.map(function(i){return i.x+","+i.y}).join(" ")).attr("class","label-container").attr("transform","translate("+-e/2+","+r/2+")")}var Ri,jn,aF=M(()=>{"use strict";uS();Pl();Vt();pr();fr();hr();Ri=o(async(t,e,r,n)=>{let i=pe(),a,s=e.useHtmlLabels||xr(i.flowchart.htmlLabels);r?a=r:a="node default";let l=t.insert("g").attr("class",a).attr("id",e.domId||e.id),u=l.insert("g").attr("class","label").attr("style",e.labelStyle),h;e.labelText===void 0?h="":h=typeof e.labelText=="string"?e.labelText:e.labelText[0];let f=u.node(),d;e.labelType==="markdown"?d=Li(u,kr(Ma(h),i),{useHtmlLabels:s,width:e.width||i.flowchart.wrappingWidth,classes:"markdown-node-label"},i):d=f.appendChild(gs(kr(Ma(h),i),e.labelStyle,!1,n));let p=d.getBBox(),m=e.padding/2;if(xr(i.flowchart.htmlLabels)){let g=d.children[0],y=Ve(d),v=g.getElementsByTagName("img");if(v){let x=h.replace(/]*>/g,"").trim()==="";await Promise.all([...v].map(b=>new Promise(w=>{function _(){if(b.style.display="flex",b.style.flexDirection="column",x){let T=i.fontSize?i.fontSize:window.getComputedStyle(document.body).fontSize,L=parseInt(T,10)*5+"px";b.style.minWidth=L,b.style.maxWidth=L}else b.style.width="100%";w(b)}o(_,"setupImage"),setTimeout(()=>{b.complete&&_()}),b.addEventListener("error",_),b.addEventListener("load",_)})))}p=g.getBoundingClientRect(),y.attr("width",p.width),y.attr("height",p.height)}return s?u.attr("transform","translate("+-p.width/2+", "+-p.height/2+")"):u.attr("transform","translate(0, "+-p.height/2+")"),e.centerLabel&&u.attr("transform","translate("+-p.width/2+", "+-p.height/2+")"),u.insert("rect",":first-child"),{shapeSvg:l,bbox:p,halfPadding:m,label:u}},"labelHelper"),jn=o((t,e)=>{let r=e.node().getBBox();t.width=r.width,t.height=r.height},"updateNodeBounds");o(ec,"insertPolygonShape")});var fnt,Dve,Nve=M(()=>{"use strict";aF();ut();Vt();iF();fnt=o(async(t,e)=>{e.useHtmlLabels||pe().flowchart.htmlLabels||(e.centerLabel=!0);let{shapeSvg:n,bbox:i,halfPadding:a}=await Ri(t,e,"node "+e.classes,!0);Y.info("Classes = ",e.classes);let s=n.insert("rect",":first-child");return s.attr("rx",e.rx).attr("ry",e.ry).attr("x",-i.width/2-a).attr("y",-i.height/2-a).attr("width",i.width+e.padding).attr("height",i.height+e.padding),jn(e,s),e.intersect=function(l){return In.rect(e,l)},n},"note"),Dve=fnt});function sF(t,e,r,n){let i=[],a=o(l=>{i.push(l,0)},"addBorder"),s=o(l=>{i.push(0,l)},"skipBorder");e.includes("t")?(Y.debug("add top border"),a(r)):s(r),e.includes("r")?(Y.debug("add right border"),a(n)):s(n),e.includes("b")?(Y.debug("add bottom border"),a(r)):s(r),e.includes("l")?(Y.debug("add left border"),a(n)):s(n),t.attr("stroke-dasharray",i.join(" "))}var Rve,ko,Mve,dnt,pnt,mnt,gnt,ynt,vnt,xnt,bnt,wnt,Tnt,knt,Ent,Snt,Cnt,Ant,_nt,Lnt,Dnt,Nnt,Ive,Rnt,Mnt,Ove,dS,oF,Pve,Bve=M(()=>{"use strict";pr();Vt();fr();ut();vve();uS();iF();Nve();aF();Rve=o(t=>t?" "+t:"","formatClass"),ko=o((t,e)=>`${e||"node default"}${Rve(t.classes)} ${Rve(t.class)}`,"getClassesFromNode"),Mve=o(async(t,e)=>{let{shapeSvg:r,bbox:n}=await Ri(t,e,ko(e,void 0),!0),i=n.width+e.padding,a=n.height+e.padding,s=i+a,l=[{x:s/2,y:0},{x:s,y:-s/2},{x:s/2,y:-s},{x:0,y:-s/2}];Y.info("Question main (Circle)");let u=ec(r,s,s,l);return u.attr("style",e.style),jn(e,u),e.intersect=function(h){return Y.warn("Intersect called"),In.polygon(e,l,h)},r},"question"),dnt=o((t,e)=>{let r=t.insert("g").attr("class","node default").attr("id",e.domId||e.id),n=28,i=[{x:0,y:n/2},{x:n/2,y:0},{x:0,y:-n/2},{x:-n/2,y:0}];return r.insert("polygon",":first-child").attr("points",i.map(function(s){return s.x+","+s.y}).join(" ")).attr("class","state-start").attr("r",7).attr("width",28).attr("height",28),e.width=28,e.height=28,e.intersect=function(s){return In.circle(e,14,s)},r},"choice"),pnt=o(async(t,e)=>{let{shapeSvg:r,bbox:n}=await Ri(t,e,ko(e,void 0),!0),i=4,a=n.height+e.padding,s=a/i,l=n.width+2*s+e.padding,u=[{x:s,y:0},{x:l-s,y:0},{x:l,y:-a/2},{x:l-s,y:-a},{x:s,y:-a},{x:0,y:-a/2}],h=ec(r,l,a,u);return h.attr("style",e.style),jn(e,h),e.intersect=function(f){return In.polygon(e,u,f)},r},"hexagon"),mnt=o(async(t,e)=>{let{shapeSvg:r,bbox:n}=await Ri(t,e,void 0,!0),i=2,a=n.height+2*e.padding,s=a/i,l=n.width+2*s+e.padding,u=yve(e.directions,n,e),h=ec(r,l,a,u);return h.attr("style",e.style),jn(e,h),e.intersect=function(f){return In.polygon(e,u,f)},r},"block_arrow"),gnt=o(async(t,e)=>{let{shapeSvg:r,bbox:n}=await Ri(t,e,ko(e,void 0),!0),i=n.width+e.padding,a=n.height+e.padding,s=[{x:-a/2,y:0},{x:i,y:0},{x:i,y:-a},{x:-a/2,y:-a},{x:0,y:-a/2}];return ec(r,i,a,s).attr("style",e.style),e.width=i+a,e.height=a,e.intersect=function(u){return In.polygon(e,s,u)},r},"rect_left_inv_arrow"),ynt=o(async(t,e)=>{let{shapeSvg:r,bbox:n}=await Ri(t,e,ko(e),!0),i=n.width+e.padding,a=n.height+e.padding,s=[{x:-2*a/6,y:0},{x:i-a/6,y:0},{x:i+2*a/6,y:-a},{x:a/6,y:-a}],l=ec(r,i,a,s);return l.attr("style",e.style),jn(e,l),e.intersect=function(u){return In.polygon(e,s,u)},r},"lean_right"),vnt=o(async(t,e)=>{let{shapeSvg:r,bbox:n}=await Ri(t,e,ko(e,void 0),!0),i=n.width+e.padding,a=n.height+e.padding,s=[{x:2*a/6,y:0},{x:i+a/6,y:0},{x:i-2*a/6,y:-a},{x:-a/6,y:-a}],l=ec(r,i,a,s);return l.attr("style",e.style),jn(e,l),e.intersect=function(u){return In.polygon(e,s,u)},r},"lean_left"),xnt=o(async(t,e)=>{let{shapeSvg:r,bbox:n}=await Ri(t,e,ko(e,void 0),!0),i=n.width+e.padding,a=n.height+e.padding,s=[{x:-2*a/6,y:0},{x:i+2*a/6,y:0},{x:i-a/6,y:-a},{x:a/6,y:-a}],l=ec(r,i,a,s);return l.attr("style",e.style),jn(e,l),e.intersect=function(u){return In.polygon(e,s,u)},r},"trapezoid"),bnt=o(async(t,e)=>{let{shapeSvg:r,bbox:n}=await Ri(t,e,ko(e,void 0),!0),i=n.width+e.padding,a=n.height+e.padding,s=[{x:a/6,y:0},{x:i-a/6,y:0},{x:i+2*a/6,y:-a},{x:-2*a/6,y:-a}],l=ec(r,i,a,s);return l.attr("style",e.style),jn(e,l),e.intersect=function(u){return In.polygon(e,s,u)},r},"inv_trapezoid"),wnt=o(async(t,e)=>{let{shapeSvg:r,bbox:n}=await Ri(t,e,ko(e,void 0),!0),i=n.width+e.padding,a=n.height+e.padding,s=[{x:0,y:0},{x:i+a/2,y:0},{x:i,y:-a/2},{x:i+a/2,y:-a},{x:0,y:-a}],l=ec(r,i,a,s);return l.attr("style",e.style),jn(e,l),e.intersect=function(u){return In.polygon(e,s,u)},r},"rect_right_inv_arrow"),Tnt=o(async(t,e)=>{let{shapeSvg:r,bbox:n}=await Ri(t,e,ko(e,void 0),!0),i=n.width+e.padding,a=i/2,s=a/(2.5+i/50),l=n.height+s+e.padding,u="M 0,"+s+" a "+a+","+s+" 0,0,0 "+i+" 0 a "+a+","+s+" 0,0,0 "+-i+" 0 l 0,"+l+" a "+a+","+s+" 0,0,0 "+i+" 0 l 0,"+-l,h=r.attr("label-offset-y",s).insert("path",":first-child").attr("style",e.style).attr("d",u).attr("transform","translate("+-i/2+","+-(l/2+s)+")");return jn(e,h),e.intersect=function(f){let d=In.rect(e,f),p=d.x-e.x;if(a!=0&&(Math.abs(p)e.height/2-s)){let m=s*s*(1-p*p/(a*a));m!=0&&(m=Math.sqrt(m)),m=s-m,f.y-e.y>0&&(m=-m),d.y+=m}return d},r},"cylinder"),knt=o(async(t,e)=>{let{shapeSvg:r,bbox:n,halfPadding:i}=await Ri(t,e,"node "+e.classes+" "+e.class,!0),a=r.insert("rect",":first-child"),s=e.positioned?e.width:n.width+e.padding,l=e.positioned?e.height:n.height+e.padding,u=e.positioned?-s/2:-n.width/2-i,h=e.positioned?-l/2:-n.height/2-i;if(a.attr("class","basic label-container").attr("style",e.style).attr("rx",e.rx).attr("ry",e.ry).attr("x",u).attr("y",h).attr("width",s).attr("height",l),e.props){let f=new Set(Object.keys(e.props));e.props.borders&&(sF(a,e.props.borders,s,l),f.delete("borders")),f.forEach(d=>{Y.warn(`Unknown node property ${d}`)})}return jn(e,a),e.intersect=function(f){return In.rect(e,f)},r},"rect"),Ent=o(async(t,e)=>{let{shapeSvg:r,bbox:n,halfPadding:i}=await Ri(t,e,"node "+e.classes,!0),a=r.insert("rect",":first-child"),s=e.positioned?e.width:n.width+e.padding,l=e.positioned?e.height:n.height+e.padding,u=e.positioned?-s/2:-n.width/2-i,h=e.positioned?-l/2:-n.height/2-i;if(a.attr("class","basic cluster composite label-container").attr("style",e.style).attr("rx",e.rx).attr("ry",e.ry).attr("x",u).attr("y",h).attr("width",s).attr("height",l),e.props){let f=new Set(Object.keys(e.props));e.props.borders&&(sF(a,e.props.borders,s,l),f.delete("borders")),f.forEach(d=>{Y.warn(`Unknown node property ${d}`)})}return jn(e,a),e.intersect=function(f){return In.rect(e,f)},r},"composite"),Snt=o(async(t,e)=>{let{shapeSvg:r}=await Ri(t,e,"label",!0);Y.trace("Classes = ",e.class);let n=r.insert("rect",":first-child"),i=0,a=0;if(n.attr("width",i).attr("height",a),r.attr("class","label edgeLabel"),e.props){let s=new Set(Object.keys(e.props));e.props.borders&&(sF(n,e.props.borders,i,a),s.delete("borders")),s.forEach(l=>{Y.warn(`Unknown node property ${l}`)})}return jn(e,n),e.intersect=function(s){return In.rect(e,s)},r},"labelRect");o(sF,"applyNodePropertyBorders");Cnt=o((t,e)=>{let r;e.classes?r="node "+e.classes:r="node default";let n=t.insert("g").attr("class",r).attr("id",e.domId||e.id),i=n.insert("rect",":first-child"),a=n.insert("line"),s=n.insert("g").attr("class","label"),l=e.labelText.flat?e.labelText.flat():e.labelText,u="";typeof l=="object"?u=l[0]:u=l,Y.info("Label text abc79",u,l,typeof l=="object");let h=s.node().appendChild(gs(u,e.labelStyle,!0,!0)),f={width:0,height:0};if(xr(pe().flowchart.htmlLabels)){let y=h.children[0],v=Ve(h);f=y.getBoundingClientRect(),v.attr("width",f.width),v.attr("height",f.height)}Y.info("Text 2",l);let d=l.slice(1,l.length),p=h.getBBox(),m=s.node().appendChild(gs(d.join?d.join("
    "):d,e.labelStyle,!0,!0));if(xr(pe().flowchart.htmlLabels)){let y=m.children[0],v=Ve(m);f=y.getBoundingClientRect(),v.attr("width",f.width),v.attr("height",f.height)}let g=e.padding/2;return Ve(m).attr("transform","translate( "+(f.width>p.width?0:(p.width-f.width)/2)+", "+(p.height+g+5)+")"),Ve(h).attr("transform","translate( "+(f.width{let{shapeSvg:r,bbox:n}=await Ri(t,e,ko(e,void 0),!0),i=n.height+e.padding,a=n.width+i/4+e.padding,s=r.insert("rect",":first-child").attr("style",e.style).attr("rx",i/2).attr("ry",i/2).attr("x",-a/2).attr("y",-i/2).attr("width",a).attr("height",i);return jn(e,s),e.intersect=function(l){return In.rect(e,l)},r},"stadium"),_nt=o(async(t,e)=>{let{shapeSvg:r,bbox:n,halfPadding:i}=await Ri(t,e,ko(e,void 0),!0),a=r.insert("circle",":first-child");return a.attr("style",e.style).attr("rx",e.rx).attr("ry",e.ry).attr("r",n.width/2+i).attr("width",n.width+e.padding).attr("height",n.height+e.padding),Y.info("Circle main"),jn(e,a),e.intersect=function(s){return Y.info("Circle intersect",e,n.width/2+i,s),In.circle(e,n.width/2+i,s)},r},"circle"),Lnt=o(async(t,e)=>{let{shapeSvg:r,bbox:n,halfPadding:i}=await Ri(t,e,ko(e,void 0),!0),a=5,s=r.insert("g",":first-child"),l=s.insert("circle"),u=s.insert("circle");return s.attr("class",e.class),l.attr("style",e.style).attr("rx",e.rx).attr("ry",e.ry).attr("r",n.width/2+i+a).attr("width",n.width+e.padding+a*2).attr("height",n.height+e.padding+a*2),u.attr("style",e.style).attr("rx",e.rx).attr("ry",e.ry).attr("r",n.width/2+i).attr("width",n.width+e.padding).attr("height",n.height+e.padding),Y.info("DoubleCircle main"),jn(e,l),e.intersect=function(h){return Y.info("DoubleCircle intersect",e,n.width/2+i+a,h),In.circle(e,n.width/2+i+a,h)},r},"doublecircle"),Dnt=o(async(t,e)=>{let{shapeSvg:r,bbox:n}=await Ri(t,e,ko(e,void 0),!0),i=n.width+e.padding,a=n.height+e.padding,s=[{x:0,y:0},{x:i,y:0},{x:i,y:-a},{x:0,y:-a},{x:0,y:0},{x:-8,y:0},{x:i+8,y:0},{x:i+8,y:-a},{x:-8,y:-a},{x:-8,y:0}],l=ec(r,i,a,s);return l.attr("style",e.style),jn(e,l),e.intersect=function(u){return In.polygon(e,s,u)},r},"subroutine"),Nnt=o((t,e)=>{let r=t.insert("g").attr("class","node default").attr("id",e.domId||e.id),n=r.insert("circle",":first-child");return n.attr("class","state-start").attr("r",7).attr("width",14).attr("height",14),jn(e,n),e.intersect=function(i){return In.circle(e,7,i)},r},"start"),Ive=o((t,e,r)=>{let n=t.insert("g").attr("class","node default").attr("id",e.domId||e.id),i=70,a=10;r==="LR"&&(i=10,a=70);let s=n.append("rect").attr("x",-1*i/2).attr("y",-1*a/2).attr("width",i).attr("height",a).attr("class","fork-join");return jn(e,s),e.height=e.height+e.padding/2,e.width=e.width+e.padding/2,e.intersect=function(l){return In.rect(e,l)},n},"forkJoin"),Rnt=o((t,e)=>{let r=t.insert("g").attr("class","node default").attr("id",e.domId||e.id),n=r.insert("circle",":first-child"),i=r.insert("circle",":first-child");return i.attr("class","state-start").attr("r",7).attr("width",14).attr("height",14),n.attr("class","state-end").attr("r",5).attr("width",10).attr("height",10),jn(e,i),e.intersect=function(a){return In.circle(e,7,a)},r},"end"),Mnt=o((t,e)=>{let r=e.padding/2,n=4,i=8,a;e.classes?a="node "+e.classes:a="node default";let s=t.insert("g").attr("class",a).attr("id",e.domId||e.id),l=s.insert("rect",":first-child"),u=s.insert("line"),h=s.insert("line"),f=0,d=n,p=s.insert("g").attr("class","label"),m=0,g=e.classData.annotations?.[0],y=e.classData.annotations[0]?"\xAB"+e.classData.annotations[0]+"\xBB":"",v=p.node().appendChild(gs(y,e.labelStyle,!0,!0)),x=v.getBBox();if(xr(pe().flowchart.htmlLabels)){let S=v.children[0],A=Ve(v);x=S.getBoundingClientRect(),A.attr("width",x.width),A.attr("height",x.height)}e.classData.annotations[0]&&(d+=x.height+n,f+=x.width);let b=e.classData.label;e.classData.type!==void 0&&e.classData.type!==""&&(pe().flowchart.htmlLabels?b+="<"+e.classData.type+">":b+="<"+e.classData.type+">");let w=p.node().appendChild(gs(b,e.labelStyle,!0,!0));Ve(w).attr("class","classTitle");let _=w.getBBox();if(xr(pe().flowchart.htmlLabels)){let S=w.children[0],A=Ve(w);_=S.getBoundingClientRect(),A.attr("width",_.width),A.attr("height",_.height)}d+=_.height+n,_.width>f&&(f=_.width);let T=[];e.classData.members.forEach(S=>{let A=S.getDisplayDetails(),I=A.displayText;pe().flowchart.htmlLabels&&(I=I.replace(//g,">"));let D=p.node().appendChild(gs(I,A.cssStyle?A.cssStyle:e.labelStyle,!0,!0)),k=D.getBBox();if(xr(pe().flowchart.htmlLabels)){let R=D.children[0],C=Ve(D);k=R.getBoundingClientRect(),C.attr("width",k.width),C.attr("height",k.height)}k.width>f&&(f=k.width),d+=k.height+n,T.push(D)}),d+=i;let E=[];if(e.classData.methods.forEach(S=>{let A=S.getDisplayDetails(),I=A.displayText;pe().flowchart.htmlLabels&&(I=I.replace(//g,">"));let D=p.node().appendChild(gs(I,A.cssStyle?A.cssStyle:e.labelStyle,!0,!0)),k=D.getBBox();if(xr(pe().flowchart.htmlLabels)){let R=D.children[0],C=Ve(D);k=R.getBoundingClientRect(),C.attr("width",k.width),C.attr("height",k.height)}k.width>f&&(f=k.width),d+=k.height+n,E.push(D)}),d+=i,g){let S=(f-x.width)/2;Ve(v).attr("transform","translate( "+(-1*f/2+S)+", "+-1*d/2+")"),m=x.height+n}let L=(f-_.width)/2;return Ve(w).attr("transform","translate( "+(-1*f/2+L)+", "+(-1*d/2+m)+")"),m+=_.height+n,u.attr("class","divider").attr("x1",-f/2-r).attr("x2",f/2+r).attr("y1",-d/2-r+i+m).attr("y2",-d/2-r+i+m),m+=i,T.forEach(S=>{Ve(S).attr("transform","translate( "+-f/2+", "+(-1*d/2+m+i/2)+")");let A=S?.getBBox();m+=(A?.height??0)+n}),m+=i,h.attr("class","divider").attr("x1",-f/2-r).attr("x2",f/2+r).attr("y1",-d/2-r+i+m).attr("y2",-d/2-r+i+m),m+=i,E.forEach(S=>{Ve(S).attr("transform","translate( "+-f/2+", "+(-1*d/2+m)+")");let A=S?.getBBox();m+=(A?.height??0)+n}),l.attr("style",e.style).attr("class","outer title-state").attr("x",-f/2-r).attr("y",-(d/2)-r).attr("width",f+e.padding).attr("height",d+e.padding),jn(e,l),e.intersect=function(S){return In.rect(e,S)},s},"class_box"),Ove={rhombus:Mve,composite:Ent,question:Mve,rect:knt,labelRect:Snt,rectWithTitle:Cnt,choice:dnt,circle:_nt,doublecircle:Lnt,stadium:Ant,hexagon:pnt,block_arrow:mnt,rect_left_inv_arrow:gnt,lean_right:ynt,lean_left:vnt,trapezoid:xnt,inv_trapezoid:bnt,rect_right_inv_arrow:wnt,cylinder:Tnt,start:Nnt,end:Rnt,note:Dve,subroutine:Dnt,fork:Ive,join:Ive,class_box:Mnt},dS={},oF=o(async(t,e,r)=>{let n,i;if(e.link){let a;pe().securityLevel==="sandbox"?a="_top":e.linkTarget&&(a=e.linkTarget||"_blank"),n=t.insert("svg:a").attr("xlink:href",e.link).attr("target",a),i=await Ove[e.shape](n,e,r)}else i=await Ove[e.shape](t,e,r),n=i;return e.tooltip&&i.attr("title",e.tooltip),e.class&&i.attr("class","node default "+e.class),dS[e.id]=n,e.haveCallback&&dS[e.id].attr("class",dS[e.id].attr("class")+" clickable"),n},"insertNode"),Pve=o(t=>{let e=dS[t.id];Y.trace("Transforming node",t.diff,t,"translate("+(t.x-t.width/2-5)+", "+t.width/2+")");let r=8,n=t.diff||0;return t.clusterNode?e.attr("transform","translate("+(t.x+n-t.width/2)+", "+(t.y-t.height/2-r)+")"):e.attr("transform","translate("+t.x+", "+t.y+")"),n},"positionNode")});function Fve(t,e,r=!1){let n=t,i="default";(n?.classes?.length||0)>0&&(i=(n?.classes??[]).join(" ")),i=i+" flowchart-label";let a=0,s="",l;switch(n.type){case"round":a=5,s="rect";break;case"composite":a=0,s="composite",l=0;break;case"square":s="rect";break;case"diamond":s="question";break;case"hexagon":s="hexagon";break;case"block_arrow":s="block_arrow";break;case"odd":s="rect_left_inv_arrow";break;case"lean_right":s="lean_right";break;case"lean_left":s="lean_left";break;case"trapezoid":s="trapezoid";break;case"inv_trapezoid":s="inv_trapezoid";break;case"rect_left_inv_arrow":s="rect_left_inv_arrow";break;case"circle":s="circle";break;case"ellipse":s="ellipse";break;case"stadium":s="stadium";break;case"subroutine":s="subroutine";break;case"cylinder":s="cylinder";break;case"group":s="rect";break;case"doublecircle":s="doublecircle";break;default:s="rect"}let u=t9(n?.styles??[]),h=n.label,f=n.size??{width:0,height:0,x:0,y:0};return{labelStyle:u.labelStyle,shape:s,labelText:h,rx:a,ry:a,class:i,style:u.style,id:n.id,directions:n.directions,width:f.width,height:f.height,x:f.x,y:f.y,positioned:r,intersect:void 0,type:n.type,padding:l??Cr()?.block?.padding??0}}async function Int(t,e,r){let n=Fve(e,r,!1);if(n.type==="group")return;let i=Cr(),a=await oF(t,n,{config:i}),s=a.node().getBBox(),l=r.getBlock(n.id);l.size={width:s.width,height:s.height,x:0,y:0,node:a},r.setBlock(l),a.remove()}async function Ont(t,e,r){let n=Fve(e,r,!0);if(r.getBlock(n.id).type!=="space"){let a=Cr();await oF(t,n,{config:a}),e.intersect=n?.intersect,Pve(n)}}async function lF(t,e,r,n){for(let i of e)await n(t,i,r),i.children&&await lF(t,i.children,r,n)}async function zve(t,e,r){await lF(t,e,r,Int)}async function Gve(t,e,r){await lF(t,e,r,Ont)}async function $ve(t,e,r,n,i){let a=new Ir({multigraph:!0,compound:!0});a.setGraph({rankdir:"TB",nodesep:10,ranksep:10,marginx:8,marginy:8});for(let s of r)s.size&&a.setNode(s.id,{width:s.size.width,height:s.size.height,intersect:s.intersect});for(let s of e)if(s.start&&s.end){let l=n.getBlock(s.start),u=n.getBlock(s.end);if(l?.size&&u?.size){let h=l.size,f=u.size,d=[{x:h.x,y:h.y},{x:h.x+(f.x-h.x)/2,y:h.y+(f.y-h.y)/2},{x:f.x,y:f.y}];mve(t,{v:s.start,w:s.end,name:s.id},{...s,arrowTypeEnd:s.arrowTypeEnd,arrowTypeStart:s.arrowTypeStart,points:d,classes:"edge-thickness-normal edge-pattern-solid flowchart-link LS-a1 LE-b1"},void 0,"block",a,i),s.label&&(await dve(t,{...s,label:s.label,labelStyle:"stroke: #333; stroke-width: 1.5px;fill:none;",arrowTypeEnd:s.arrowTypeEnd,arrowTypeStart:s.arrowTypeStart,points:d,classes:"edge-thickness-normal edge-pattern-solid flowchart-link LS-a1 LE-b1"}),pve({...s,x:d[1].x,y:d[1].y},{originalPath:d}))}}}var Vve=M(()=>{"use strict";Gs();Za();gve();Bve();hr();o(Fve,"getNodeFromBlock");o(Int,"calculateBlockSize");o(Ont,"insertBlockPositioned");o(lF,"performOperations");o(zve,"calculateBlockSizes");o(Gve,"insertBlocks");o($ve,"insertEdges")});var Pnt,Bnt,Uve,Hve=M(()=>{"use strict";pr();Za();nve();ut();ai();ove();Vve();Pnt=o(function(t,e){return e.db.getClasses()},"getClasses"),Bnt=o(async function(t,e,r,n){let{securityLevel:i,block:a}=Cr(),s=n.db,l;i==="sandbox"&&(l=Ve("#i"+e));let u=i==="sandbox"?Ve(l.nodes()[0].contentDocument.body):Ve("body"),h=i==="sandbox"?u.select(`[id="${e}"]`):Ve(`[id="${e}"]`);rve(h,["point","circle","cross"],n.type,e);let d=s.getBlocks(),p=s.getBlocksFlat(),m=s.getEdges(),g=h.insert("g").attr("class","block");await zve(g,d,s);let y=sve(s);if(await Gve(g,d,s),await $ve(g,m,p,s,e),y){let v=y,x=Math.max(1,Math.round(.125*(v.width/v.height))),b=v.height+x+10,w=v.width+10,{useMaxWidth:_}=a;Zr(h,b,w,!!_),Y.debug("Here Bounds",y,v),h.attr("viewBox",`${v.x-5} ${v.y-5} ${v.width+10} ${v.height+10}`)}},"draw"),Uve={draw:Bnt,getClasses:Pnt}});var Wve={};vr(Wve,{diagram:()=>Fnt});var Fnt,Yve=M(()=>{"use strict";Yye();Jye();tve();Hve();Fnt={parser:Wye,db:Zye,renderer:Uve,styles:eve}});var cF,uF,Db,jve,hF,ys,nu,pS,Kve,Vnt,Nb,Qve,Zve,Jve,e2e,mS,Vf,gS=M(()=>{"use strict";cF={L:"left",R:"right",T:"top",B:"bottom"},uF={L:o(t=>`${t},${t/2} 0,${t} 0,0`,"L"),R:o(t=>`0,${t/2} ${t},0 ${t},${t}`,"R"),T:o(t=>`0,0 ${t},0 ${t/2},${t}`,"T"),B:o(t=>`${t/2},0 ${t},${t} 0,${t}`,"B")},Db={L:o((t,e)=>t-e+2,"L"),R:o((t,e)=>t-2,"R"),T:o((t,e)=>t-e+2,"T"),B:o((t,e)=>t-2,"B")},jve=o(function(t){return ys(t)?t==="L"?"R":"L":t==="T"?"B":"T"},"getOppositeArchitectureDirection"),hF=o(function(t){let e=t;return e==="L"||e==="R"||e==="T"||e==="B"},"isArchitectureDirection"),ys=o(function(t){let e=t;return e==="L"||e==="R"},"isArchitectureDirectionX"),nu=o(function(t){let e=t;return e==="T"||e==="B"},"isArchitectureDirectionY"),pS=o(function(t,e){let r=ys(t)&&nu(e),n=nu(t)&&ys(e);return r||n},"isArchitectureDirectionXY"),Kve=o(function(t){let e=t[0],r=t[1],n=ys(e)&&nu(r),i=nu(e)&&ys(r);return n||i},"isArchitecturePairXY"),Vnt=o(function(t){return t!=="LL"&&t!=="RR"&&t!=="TT"&&t!=="BB"},"isValidArchitectureDirectionPair"),Nb=o(function(t,e){let r=`${t}${e}`;return Vnt(r)?r:void 0},"getArchitectureDirectionPair"),Qve=o(function([t,e],r){let n=r[0],i=r[1];return ys(n)?nu(i)?[t+(n==="L"?-1:1),e+(i==="T"?1:-1)]:[t+(n==="L"?-1:1),e]:ys(i)?[t+(i==="L"?1:-1),e+(n==="T"?1:-1)]:[t,e+(n==="T"?1:-1)]},"shiftPositionByArchitectureDirectionPair"),Zve=o(function(t){return t==="LT"||t==="TL"?[1,1]:t==="BL"||t==="LB"?[1,-1]:t==="BR"||t==="RB"?[-1,-1]:[-1,1]},"getArchitectureDirectionXYFactors"),Jve=o(function(t){return t.type==="service"},"isArchitectureService"),e2e=o(function(t){return t.type==="junction"},"isArchitectureJunction"),mS=o(t=>t.data(),"edgeData"),Vf=o(t=>t.data(),"nodeData")});function Mi(t){let e=pe().architecture;return e?.[t]?e[t]:t2e[t]}var t2e,mr,Unt,Hnt,Wnt,Ynt,qnt,Xnt,jnt,Knt,Qnt,Znt,Jnt,eit,tit,rit,ip,Rb=M(()=>{"use strict";bs();Vt();dE();Ai();gS();t2e=ur.architecture,mr=new vf(()=>({nodes:{},groups:{},edges:[],registeredIds:{},config:t2e,dataStructures:void 0,elements:{}})),Unt=o(()=>{mr.reset(),Lr()},"clear"),Hnt=o(function({id:t,icon:e,in:r,title:n,iconText:i}){if(mr.records.registeredIds[t]!==void 0)throw new Error(`The service id [${t}] is already in use by another ${mr.records.registeredIds[t]}`);if(r!==void 0){if(t===r)throw new Error(`The service [${t}] cannot be placed within itself`);if(mr.records.registeredIds[r]===void 0)throw new Error(`The service [${t}]'s parent does not exist. Please make sure the parent is created before this service`);if(mr.records.registeredIds[r]==="node")throw new Error(`The service [${t}]'s parent is not a group`)}mr.records.registeredIds[t]="node",mr.records.nodes[t]={id:t,type:"service",icon:e,iconText:i,title:n,edges:[],in:r}},"addService"),Wnt=o(()=>Object.values(mr.records.nodes).filter(Jve),"getServices"),Ynt=o(function({id:t,in:e}){mr.records.registeredIds[t]="node",mr.records.nodes[t]={id:t,type:"junction",edges:[],in:e}},"addJunction"),qnt=o(()=>Object.values(mr.records.nodes).filter(e2e),"getJunctions"),Xnt=o(()=>Object.values(mr.records.nodes),"getNodes"),jnt=o(t=>mr.records.nodes[t],"getNode"),Knt=o(function({id:t,icon:e,in:r,title:n}){if(mr.records.registeredIds[t]!==void 0)throw new Error(`The group id [${t}] is already in use by another ${mr.records.registeredIds[t]}`);if(r!==void 0){if(t===r)throw new Error(`The group [${t}] cannot be placed within itself`);if(mr.records.registeredIds[r]===void 0)throw new Error(`The group [${t}]'s parent does not exist. Please make sure the parent is created before this group`);if(mr.records.registeredIds[r]==="node")throw new Error(`The group [${t}]'s parent is not a group`)}mr.records.registeredIds[t]="group",mr.records.groups[t]={id:t,icon:e,title:n,in:r}},"addGroup"),Qnt=o(()=>Object.values(mr.records.groups),"getGroups"),Znt=o(function({lhsId:t,rhsId:e,lhsDir:r,rhsDir:n,lhsInto:i,rhsInto:a,lhsGroup:s,rhsGroup:l,title:u}){if(!hF(r))throw new Error(`Invalid direction given for left hand side of edge ${t}--${e}. Expected (L,R,T,B) got ${r}`);if(!hF(n))throw new Error(`Invalid direction given for right hand side of edge ${t}--${e}. Expected (L,R,T,B) got ${n}`);if(mr.records.nodes[t]===void 0&&mr.records.groups[t]===void 0)throw new Error(`The left-hand id [${t}] does not yet exist. Please create the service/group before declaring an edge to it.`);if(mr.records.nodes[e]===void 0&&mr.records.groups[t]===void 0)throw new Error(`The right-hand id [${e}] does not yet exist. Please create the service/group before declaring an edge to it.`);let h=mr.records.nodes[t].in,f=mr.records.nodes[e].in;if(s&&h&&f&&h==f)throw new Error(`The left-hand id [${t}] is modified to traverse the group boundary, but the edge does not pass through two groups.`);if(l&&h&&f&&h==f)throw new Error(`The right-hand id [${e}] is modified to traverse the group boundary, but the edge does not pass through two groups.`);let d={lhsId:t,lhsDir:r,lhsInto:i,lhsGroup:s,rhsId:e,rhsDir:n,rhsInto:a,rhsGroup:l,title:u};mr.records.edges.push(d),mr.records.nodes[t]&&mr.records.nodes[e]&&(mr.records.nodes[t].edges.push(mr.records.edges[mr.records.edges.length-1]),mr.records.nodes[e].edges.push(mr.records.edges[mr.records.edges.length-1]))},"addEdge"),Jnt=o(()=>mr.records.edges,"getEdges"),eit=o(()=>{if(mr.records.dataStructures===void 0){let t=Object.entries(mr.records.nodes).reduce((s,[l,u])=>(s[l]=u.edges.reduce((h,f)=>{if(f.lhsId===l){let d=Nb(f.lhsDir,f.rhsDir);d&&(h[d]=f.rhsId)}else{let d=Nb(f.rhsDir,f.lhsDir);d&&(h[d]=f.lhsId)}return h},{}),s),{}),e=Object.keys(t)[0],r={[e]:1},n=Object.keys(t).reduce((s,l)=>l===e?s:{...s,[l]:1},{}),i=o(s=>{let l={[s]:[0,0]},u=[s];for(;u.length>0;){let h=u.shift();if(h){r[h]=1,delete n[h];let f=t[h],[d,p]=l[h];Object.entries(f).forEach(([m,g])=>{r[g]||(l[g]=Qve([d,p],m),u.push(g))})}}return l},"BFS"),a=[i(e)];for(;Object.keys(n).length>0;)a.push(i(Object.keys(n)[0]));mr.records.dataStructures={adjList:t,spatialMaps:a}}return mr.records.dataStructures},"getDataStructures"),tit=o((t,e)=>{mr.records.elements[t]=e},"setElementForId"),rit=o(t=>mr.records.elements[t],"getElementById"),ip={clear:Unt,setDiagramTitle:cn,getDiagramTitle:Jr,setAccTitle:Mr,getAccTitle:Br,setAccDescription:Fr,getAccDescription:zr,addService:Hnt,getServices:Wnt,addJunction:Ynt,getJunctions:qnt,getNodes:Xnt,getNode:jnt,addGroup:Knt,getGroups:Qnt,addEdge:Znt,getEdges:Jnt,setElementForId:tit,getElementById:rit,getDataStructures:eit};o(Mi,"getConfigField")});var nit,r2e,n2e=M(()=>{"use strict";Hg();ut();Tx();Rb();nit=o((t,e)=>{yf(t,e),t.groups.map(e.addGroup),t.services.map(r=>e.addService({...r,type:"service"})),t.junctions.map(r=>e.addJunction({...r,type:"junction"})),t.edges.map(e.addEdge)},"populateDb"),r2e={parse:o(async t=>{let e=await Yl("architecture",t);Y.debug(e),nit(e,ip)},"parse")}});var iit,i2e,a2e=M(()=>{"use strict";iit=o(t=>` + .edge { + stroke-width: ${t.archEdgeWidth}; + stroke: ${t.archEdgeColor}; + fill: none; + } + + .arrow { + fill: ${t.archEdgeArrowColor}; + } + + .node-bkg { + fill: none; + stroke: ${t.archGroupBorderColor}; + stroke-width: ${t.archGroupBorderWidth}; + stroke-dasharray: 8; + } + .node-icon-text { + display: flex; + align-items: center; + } + + .node-icon-text > div { + color: #fff; + margin: 1px; + height: fit-content; + text-align: center; + overflow: hidden; + display: -webkit-box; + -webkit-box-orient: vertical; + } +`,"getStyles"),i2e=iit});var dF=Ei((Mb,fF)=>{"use strict";o(function(e,r){typeof Mb=="object"&&typeof fF=="object"?fF.exports=r():typeof define=="function"&&define.amd?define([],r):typeof Mb=="object"?Mb.layoutBase=r():e.layoutBase=r()},"webpackUniversalModuleDefinition")(Mb,function(){return function(t){var e={};function r(n){if(e[n])return e[n].exports;var i=e[n]={i:n,l:!1,exports:{}};return t[n].call(i.exports,i,i.exports,r),i.l=!0,i.exports}return o(r,"__webpack_require__"),r.m=t,r.c=e,r.i=function(n){return n},r.d=function(n,i,a){r.o(n,i)||Object.defineProperty(n,i,{configurable:!1,enumerable:!0,get:a})},r.n=function(n){var i=n&&n.__esModule?o(function(){return n.default},"getDefault"):o(function(){return n},"getModuleExports");return r.d(i,"a",i),i},r.o=function(n,i){return Object.prototype.hasOwnProperty.call(n,i)},r.p="",r(r.s=28)}([function(t,e,r){"use strict";function n(){}o(n,"LayoutConstants"),n.QUALITY=1,n.DEFAULT_CREATE_BENDS_AS_NEEDED=!1,n.DEFAULT_INCREMENTAL=!1,n.DEFAULT_ANIMATION_ON_LAYOUT=!0,n.DEFAULT_ANIMATION_DURING_LAYOUT=!1,n.DEFAULT_ANIMATION_PERIOD=50,n.DEFAULT_UNIFORM_LEAF_NODE_SIZES=!1,n.DEFAULT_GRAPH_MARGIN=15,n.NODE_DIMENSIONS_INCLUDE_LABELS=!1,n.SIMPLE_NODE_SIZE=40,n.SIMPLE_NODE_HALF_SIZE=n.SIMPLE_NODE_SIZE/2,n.EMPTY_COMPOUND_NODE_SIZE=40,n.MIN_EDGE_LENGTH=1,n.WORLD_BOUNDARY=1e6,n.INITIAL_WORLD_BOUNDARY=n.WORLD_BOUNDARY/1e3,n.WORLD_CENTER_X=1200,n.WORLD_CENTER_Y=900,t.exports=n},function(t,e,r){"use strict";var n=r(2),i=r(8),a=r(9);function s(u,h,f){n.call(this,f),this.isOverlapingSourceAndTarget=!1,this.vGraphObject=f,this.bendpoints=[],this.source=u,this.target=h}o(s,"LEdge"),s.prototype=Object.create(n.prototype);for(var l in n)s[l]=n[l];s.prototype.getSource=function(){return this.source},s.prototype.getTarget=function(){return this.target},s.prototype.isInterGraph=function(){return this.isInterGraph},s.prototype.getLength=function(){return this.length},s.prototype.isOverlapingSourceAndTarget=function(){return this.isOverlapingSourceAndTarget},s.prototype.getBendpoints=function(){return this.bendpoints},s.prototype.getLca=function(){return this.lca},s.prototype.getSourceInLca=function(){return this.sourceInLca},s.prototype.getTargetInLca=function(){return this.targetInLca},s.prototype.getOtherEnd=function(u){if(this.source===u)return this.target;if(this.target===u)return this.source;throw"Node is not incident with this edge"},s.prototype.getOtherEndInGraph=function(u,h){for(var f=this.getOtherEnd(u),d=h.getGraphManager().getRoot();;){if(f.getOwner()==h)return f;if(f.getOwner()==d)break;f=f.getOwner().getParent()}return null},s.prototype.updateLength=function(){var u=new Array(4);this.isOverlapingSourceAndTarget=i.getIntersection(this.target.getRect(),this.source.getRect(),u),this.isOverlapingSourceAndTarget||(this.lengthX=u[0]-u[2],this.lengthY=u[1]-u[3],Math.abs(this.lengthX)<1&&(this.lengthX=a.sign(this.lengthX)),Math.abs(this.lengthY)<1&&(this.lengthY=a.sign(this.lengthY)),this.length=Math.sqrt(this.lengthX*this.lengthX+this.lengthY*this.lengthY))},s.prototype.updateLengthSimple=function(){this.lengthX=this.target.getCenterX()-this.source.getCenterX(),this.lengthY=this.target.getCenterY()-this.source.getCenterY(),Math.abs(this.lengthX)<1&&(this.lengthX=a.sign(this.lengthX)),Math.abs(this.lengthY)<1&&(this.lengthY=a.sign(this.lengthY)),this.length=Math.sqrt(this.lengthX*this.lengthX+this.lengthY*this.lengthY)},t.exports=s},function(t,e,r){"use strict";function n(i){this.vGraphObject=i}o(n,"LGraphObject"),t.exports=n},function(t,e,r){"use strict";var n=r(2),i=r(10),a=r(13),s=r(0),l=r(16),u=r(5);function h(d,p,m,g){m==null&&g==null&&(g=p),n.call(this,g),d.graphManager!=null&&(d=d.graphManager),this.estimatedSize=i.MIN_VALUE,this.inclusionTreeDepth=i.MAX_VALUE,this.vGraphObject=g,this.edges=[],this.graphManager=d,m!=null&&p!=null?this.rect=new a(p.x,p.y,m.width,m.height):this.rect=new a}o(h,"LNode"),h.prototype=Object.create(n.prototype);for(var f in n)h[f]=n[f];h.prototype.getEdges=function(){return this.edges},h.prototype.getChild=function(){return this.child},h.prototype.getOwner=function(){return this.owner},h.prototype.getWidth=function(){return this.rect.width},h.prototype.setWidth=function(d){this.rect.width=d},h.prototype.getHeight=function(){return this.rect.height},h.prototype.setHeight=function(d){this.rect.height=d},h.prototype.getCenterX=function(){return this.rect.x+this.rect.width/2},h.prototype.getCenterY=function(){return this.rect.y+this.rect.height/2},h.prototype.getCenter=function(){return new u(this.rect.x+this.rect.width/2,this.rect.y+this.rect.height/2)},h.prototype.getLocation=function(){return new u(this.rect.x,this.rect.y)},h.prototype.getRect=function(){return this.rect},h.prototype.getDiagonal=function(){return Math.sqrt(this.rect.width*this.rect.width+this.rect.height*this.rect.height)},h.prototype.getHalfTheDiagonal=function(){return Math.sqrt(this.rect.height*this.rect.height+this.rect.width*this.rect.width)/2},h.prototype.setRect=function(d,p){this.rect.x=d.x,this.rect.y=d.y,this.rect.width=p.width,this.rect.height=p.height},h.prototype.setCenter=function(d,p){this.rect.x=d-this.rect.width/2,this.rect.y=p-this.rect.height/2},h.prototype.setLocation=function(d,p){this.rect.x=d,this.rect.y=p},h.prototype.moveBy=function(d,p){this.rect.x+=d,this.rect.y+=p},h.prototype.getEdgeListToNode=function(d){var p=[],m,g=this;return g.edges.forEach(function(y){if(y.target==d){if(y.source!=g)throw"Incorrect edge source!";p.push(y)}}),p},h.prototype.getEdgesBetween=function(d){var p=[],m,g=this;return g.edges.forEach(function(y){if(!(y.source==g||y.target==g))throw"Incorrect edge source and/or target";(y.target==d||y.source==d)&&p.push(y)}),p},h.prototype.getNeighborsList=function(){var d=new Set,p=this;return p.edges.forEach(function(m){if(m.source==p)d.add(m.target);else{if(m.target!=p)throw"Incorrect incidency!";d.add(m.source)}}),d},h.prototype.withChildren=function(){var d=new Set,p,m;if(d.add(this),this.child!=null)for(var g=this.child.getNodes(),y=0;yp?(this.rect.x-=(this.labelWidth-p)/2,this.setWidth(this.labelWidth)):this.labelPosHorizontal=="right"&&this.setWidth(p+this.labelWidth)),this.labelHeight&&(this.labelPosVertical=="top"?(this.rect.y-=this.labelHeight,this.setHeight(m+this.labelHeight)):this.labelPosVertical=="center"&&this.labelHeight>m?(this.rect.y-=(this.labelHeight-m)/2,this.setHeight(this.labelHeight)):this.labelPosVertical=="bottom"&&this.setHeight(m+this.labelHeight))}}},h.prototype.getInclusionTreeDepth=function(){if(this.inclusionTreeDepth==i.MAX_VALUE)throw"assert failed";return this.inclusionTreeDepth},h.prototype.transform=function(d){var p=this.rect.x;p>s.WORLD_BOUNDARY?p=s.WORLD_BOUNDARY:p<-s.WORLD_BOUNDARY&&(p=-s.WORLD_BOUNDARY);var m=this.rect.y;m>s.WORLD_BOUNDARY?m=s.WORLD_BOUNDARY:m<-s.WORLD_BOUNDARY&&(m=-s.WORLD_BOUNDARY);var g=new u(p,m),y=d.inverseTransformPoint(g);this.setLocation(y.x,y.y)},h.prototype.getLeft=function(){return this.rect.x},h.prototype.getRight=function(){return this.rect.x+this.rect.width},h.prototype.getTop=function(){return this.rect.y},h.prototype.getBottom=function(){return this.rect.y+this.rect.height},h.prototype.getParent=function(){return this.owner==null?null:this.owner.getParent()},t.exports=h},function(t,e,r){"use strict";var n=r(0);function i(){}o(i,"FDLayoutConstants");for(var a in n)i[a]=n[a];i.MAX_ITERATIONS=2500,i.DEFAULT_EDGE_LENGTH=50,i.DEFAULT_SPRING_STRENGTH=.45,i.DEFAULT_REPULSION_STRENGTH=4500,i.DEFAULT_GRAVITY_STRENGTH=.4,i.DEFAULT_COMPOUND_GRAVITY_STRENGTH=1,i.DEFAULT_GRAVITY_RANGE_FACTOR=3.8,i.DEFAULT_COMPOUND_GRAVITY_RANGE_FACTOR=1.5,i.DEFAULT_USE_SMART_IDEAL_EDGE_LENGTH_CALCULATION=!0,i.DEFAULT_USE_SMART_REPULSION_RANGE_CALCULATION=!0,i.DEFAULT_COOLING_FACTOR_INCREMENTAL=.3,i.COOLING_ADAPTATION_FACTOR=.33,i.ADAPTATION_LOWER_NODE_LIMIT=1e3,i.ADAPTATION_UPPER_NODE_LIMIT=5e3,i.MAX_NODE_DISPLACEMENT_INCREMENTAL=100,i.MAX_NODE_DISPLACEMENT=i.MAX_NODE_DISPLACEMENT_INCREMENTAL*3,i.MIN_REPULSION_DIST=i.DEFAULT_EDGE_LENGTH/10,i.CONVERGENCE_CHECK_PERIOD=100,i.PER_LEVEL_IDEAL_EDGE_LENGTH_FACTOR=.1,i.MIN_EDGE_LENGTH=1,i.GRID_CALCULATION_CHECK_PERIOD=10,t.exports=i},function(t,e,r){"use strict";function n(i,a){i==null&&a==null?(this.x=0,this.y=0):(this.x=i,this.y=a)}o(n,"PointD"),n.prototype.getX=function(){return this.x},n.prototype.getY=function(){return this.y},n.prototype.setX=function(i){this.x=i},n.prototype.setY=function(i){this.y=i},n.prototype.getDifference=function(i){return new DimensionD(this.x-i.x,this.y-i.y)},n.prototype.getCopy=function(){return new n(this.x,this.y)},n.prototype.translate=function(i){return this.x+=i.width,this.y+=i.height,this},t.exports=n},function(t,e,r){"use strict";var n=r(2),i=r(10),a=r(0),s=r(7),l=r(3),u=r(1),h=r(13),f=r(12),d=r(11);function p(g,y,v){n.call(this,v),this.estimatedSize=i.MIN_VALUE,this.margin=a.DEFAULT_GRAPH_MARGIN,this.edges=[],this.nodes=[],this.isConnected=!1,this.parent=g,y!=null&&y instanceof s?this.graphManager=y:y!=null&&y instanceof Layout&&(this.graphManager=y.graphManager)}o(p,"LGraph"),p.prototype=Object.create(n.prototype);for(var m in n)p[m]=n[m];p.prototype.getNodes=function(){return this.nodes},p.prototype.getEdges=function(){return this.edges},p.prototype.getGraphManager=function(){return this.graphManager},p.prototype.getParent=function(){return this.parent},p.prototype.getLeft=function(){return this.left},p.prototype.getRight=function(){return this.right},p.prototype.getTop=function(){return this.top},p.prototype.getBottom=function(){return this.bottom},p.prototype.isConnected=function(){return this.isConnected},p.prototype.add=function(g,y,v){if(y==null&&v==null){var x=g;if(this.graphManager==null)throw"Graph has no graph mgr!";if(this.getNodes().indexOf(x)>-1)throw"Node already in graph!";return x.owner=this,this.getNodes().push(x),x}else{var b=g;if(!(this.getNodes().indexOf(y)>-1&&this.getNodes().indexOf(v)>-1))throw"Source or target not in graph!";if(!(y.owner==v.owner&&y.owner==this))throw"Both owners must be this graph!";return y.owner!=v.owner?null:(b.source=y,b.target=v,b.isInterGraph=!1,this.getEdges().push(b),y.edges.push(b),v!=y&&v.edges.push(b),b)}},p.prototype.remove=function(g){var y=g;if(g instanceof l){if(y==null)throw"Node is null!";if(!(y.owner!=null&&y.owner==this))throw"Owner graph is invalid!";if(this.graphManager==null)throw"Owner graph manager is invalid!";for(var v=y.edges.slice(),x,b=v.length,w=0;w-1&&E>-1))throw"Source and/or target doesn't know this edge!";x.source.edges.splice(T,1),x.target!=x.source&&x.target.edges.splice(E,1);var _=x.source.owner.getEdges().indexOf(x);if(_==-1)throw"Not in owner's edge list!";x.source.owner.getEdges().splice(_,1)}},p.prototype.updateLeftTop=function(){for(var g=i.MAX_VALUE,y=i.MAX_VALUE,v,x,b,w=this.getNodes(),_=w.length,T=0;T<_;T++){var E=w[T];v=E.getTop(),x=E.getLeft(),g>v&&(g=v),y>x&&(y=x)}return g==i.MAX_VALUE?null:(w[0].getParent().paddingLeft!=null?b=w[0].getParent().paddingLeft:b=this.margin,this.left=y-b,this.top=g-b,new f(this.left,this.top))},p.prototype.updateBounds=function(g){for(var y=i.MAX_VALUE,v=-i.MAX_VALUE,x=i.MAX_VALUE,b=-i.MAX_VALUE,w,_,T,E,L,S=this.nodes,A=S.length,I=0;Iw&&(y=w),v<_&&(v=_),x>T&&(x=T),bw&&(y=w),v<_&&(v=_),x>T&&(x=T),b=this.nodes.length){var A=0;v.forEach(function(I){I.owner==g&&A++}),A==this.nodes.length&&(this.isConnected=!0)}},t.exports=p},function(t,e,r){"use strict";var n,i=r(1);function a(s){n=r(6),this.layout=s,this.graphs=[],this.edges=[]}o(a,"LGraphManager"),a.prototype.addRoot=function(){var s=this.layout.newGraph(),l=this.layout.newNode(null),u=this.add(s,l);return this.setRootGraph(u),this.rootGraph},a.prototype.add=function(s,l,u,h,f){if(u==null&&h==null&&f==null){if(s==null)throw"Graph is null!";if(l==null)throw"Parent node is null!";if(this.graphs.indexOf(s)>-1)throw"Graph already in this graph mgr!";if(this.graphs.push(s),s.parent!=null)throw"Already has a parent!";if(l.child!=null)throw"Already has a child!";return s.parent=l,l.child=s,s}else{f=u,h=l,u=s;var d=h.getOwner(),p=f.getOwner();if(!(d!=null&&d.getGraphManager()==this))throw"Source not in this graph mgr!";if(!(p!=null&&p.getGraphManager()==this))throw"Target not in this graph mgr!";if(d==p)return u.isInterGraph=!1,d.add(u,h,f);if(u.isInterGraph=!0,u.source=h,u.target=f,this.edges.indexOf(u)>-1)throw"Edge already in inter-graph edge list!";if(this.edges.push(u),!(u.source!=null&&u.target!=null))throw"Edge source and/or target is null!";if(!(u.source.edges.indexOf(u)==-1&&u.target.edges.indexOf(u)==-1))throw"Edge already in source and/or target incidency list!";return u.source.edges.push(u),u.target.edges.push(u),u}},a.prototype.remove=function(s){if(s instanceof n){var l=s;if(l.getGraphManager()!=this)throw"Graph not in this graph mgr";if(!(l==this.rootGraph||l.parent!=null&&l.parent.graphManager==this))throw"Invalid parent node!";var u=[];u=u.concat(l.getEdges());for(var h,f=u.length,d=0;d=s.getRight()?l[0]+=Math.min(s.getX()-a.getX(),a.getRight()-s.getRight()):s.getX()<=a.getX()&&s.getRight()>=a.getRight()&&(l[0]+=Math.min(a.getX()-s.getX(),s.getRight()-a.getRight())),a.getY()<=s.getY()&&a.getBottom()>=s.getBottom()?l[1]+=Math.min(s.getY()-a.getY(),a.getBottom()-s.getBottom()):s.getY()<=a.getY()&&s.getBottom()>=a.getBottom()&&(l[1]+=Math.min(a.getY()-s.getY(),s.getBottom()-a.getBottom()));var f=Math.abs((s.getCenterY()-a.getCenterY())/(s.getCenterX()-a.getCenterX()));s.getCenterY()===a.getCenterY()&&s.getCenterX()===a.getCenterX()&&(f=1);var d=f*l[0],p=l[1]/f;l[0]d)return l[0]=u,l[1]=m,l[2]=f,l[3]=S,!1;if(hf)return l[0]=p,l[1]=h,l[2]=E,l[3]=d,!1;if(uf?(l[0]=y,l[1]=v,k=!0):(l[0]=g,l[1]=m,k=!0):C===N&&(u>f?(l[0]=p,l[1]=m,k=!0):(l[0]=x,l[1]=v,k=!0)),-O===N?f>u?(l[2]=L,l[3]=S,R=!0):(l[2]=E,l[3]=T,R=!0):O===N&&(f>u?(l[2]=_,l[3]=T,R=!0):(l[2]=A,l[3]=S,R=!0)),k&&R)return!1;if(u>f?h>d?(P=this.getCardinalDirection(C,N,4),F=this.getCardinalDirection(O,N,2)):(P=this.getCardinalDirection(-C,N,3),F=this.getCardinalDirection(-O,N,1)):h>d?(P=this.getCardinalDirection(-C,N,1),F=this.getCardinalDirection(-O,N,3)):(P=this.getCardinalDirection(C,N,2),F=this.getCardinalDirection(O,N,4)),!k)switch(P){case 1:G=m,B=u+-w/N,l[0]=B,l[1]=G;break;case 2:B=x,G=h+b*N,l[0]=B,l[1]=G;break;case 3:G=v,B=u+w/N,l[0]=B,l[1]=G;break;case 4:B=y,G=h+-b*N,l[0]=B,l[1]=G;break}if(!R)switch(F){case 1:W=T,z=f+-D/N,l[2]=z,l[3]=W;break;case 2:z=A,W=d+I*N,l[2]=z,l[3]=W;break;case 3:W=S,z=f+D/N,l[2]=z,l[3]=W;break;case 4:z=L,W=d+-I*N,l[2]=z,l[3]=W;break}}return!1},i.getCardinalDirection=function(a,s,l){return a>s?l:1+l%4},i.getIntersection=function(a,s,l,u){if(u==null)return this.getIntersection2(a,s,l);var h=a.x,f=a.y,d=s.x,p=s.y,m=l.x,g=l.y,y=u.x,v=u.y,x=void 0,b=void 0,w=void 0,_=void 0,T=void 0,E=void 0,L=void 0,S=void 0,A=void 0;return w=p-f,T=h-d,L=d*f-h*p,_=v-g,E=m-y,S=y*g-m*v,A=w*E-_*T,A===0?null:(x=(T*S-E*L)/A,b=(_*L-w*S)/A,new n(x,b))},i.angleOfVector=function(a,s,l,u){var h=void 0;return a!==l?(h=Math.atan((u-s)/(l-a)),l=0){var v=(-m+Math.sqrt(m*m-4*p*g))/(2*p),x=(-m-Math.sqrt(m*m-4*p*g))/(2*p),b=null;return v>=0&&v<=1?[v]:x>=0&&x<=1?[x]:b}else return null},i.HALF_PI=.5*Math.PI,i.ONE_AND_HALF_PI=1.5*Math.PI,i.TWO_PI=2*Math.PI,i.THREE_PI=3*Math.PI,t.exports=i},function(t,e,r){"use strict";function n(){}o(n,"IMath"),n.sign=function(i){return i>0?1:i<0?-1:0},n.floor=function(i){return i<0?Math.ceil(i):Math.floor(i)},n.ceil=function(i){return i<0?Math.floor(i):Math.ceil(i)},t.exports=n},function(t,e,r){"use strict";function n(){}o(n,"Integer"),n.MAX_VALUE=2147483647,n.MIN_VALUE=-2147483648,t.exports=n},function(t,e,r){"use strict";var n=function(){function h(f,d){for(var p=0;p"u"?"undefined":n(a);return a==null||s!="object"&&s!="function"},t.exports=i},function(t,e,r){"use strict";function n(m){if(Array.isArray(m)){for(var g=0,y=Array(m.length);g0&&g;){for(w.push(T[0]);w.length>0&&g;){var E=w[0];w.splice(0,1),b.add(E);for(var L=E.getEdges(),x=0;x-1&&T.splice(D,1)}b=new Set,_=new Map}}return m},p.prototype.createDummyNodesForBendpoints=function(m){for(var g=[],y=m.source,v=this.graphManager.calcLowestCommonAncestor(m.source,m.target),x=0;x0){for(var v=this.edgeToDummyNodes.get(y),x=0;x=0&&g.splice(S,1);var A=_.getNeighborsList();A.forEach(function(k){if(y.indexOf(k)<0){var R=v.get(k),C=R-1;C==1&&E.push(k),v.set(k,C)}})}y=y.concat(E),(g.length==1||g.length==2)&&(x=!0,b=g[0])}return b},p.prototype.setGraphManager=function(m){this.graphManager=m},t.exports=p},function(t,e,r){"use strict";function n(){}o(n,"RandomSeed"),n.seed=1,n.x=0,n.nextDouble=function(){return n.x=Math.sin(n.seed++)*1e4,n.x-Math.floor(n.x)},t.exports=n},function(t,e,r){"use strict";var n=r(5);function i(a,s){this.lworldOrgX=0,this.lworldOrgY=0,this.ldeviceOrgX=0,this.ldeviceOrgY=0,this.lworldExtX=1,this.lworldExtY=1,this.ldeviceExtX=1,this.ldeviceExtY=1}o(i,"Transform"),i.prototype.getWorldOrgX=function(){return this.lworldOrgX},i.prototype.setWorldOrgX=function(a){this.lworldOrgX=a},i.prototype.getWorldOrgY=function(){return this.lworldOrgY},i.prototype.setWorldOrgY=function(a){this.lworldOrgY=a},i.prototype.getWorldExtX=function(){return this.lworldExtX},i.prototype.setWorldExtX=function(a){this.lworldExtX=a},i.prototype.getWorldExtY=function(){return this.lworldExtY},i.prototype.setWorldExtY=function(a){this.lworldExtY=a},i.prototype.getDeviceOrgX=function(){return this.ldeviceOrgX},i.prototype.setDeviceOrgX=function(a){this.ldeviceOrgX=a},i.prototype.getDeviceOrgY=function(){return this.ldeviceOrgY},i.prototype.setDeviceOrgY=function(a){this.ldeviceOrgY=a},i.prototype.getDeviceExtX=function(){return this.ldeviceExtX},i.prototype.setDeviceExtX=function(a){this.ldeviceExtX=a},i.prototype.getDeviceExtY=function(){return this.ldeviceExtY},i.prototype.setDeviceExtY=function(a){this.ldeviceExtY=a},i.prototype.transformX=function(a){var s=0,l=this.lworldExtX;return l!=0&&(s=this.ldeviceOrgX+(a-this.lworldOrgX)*this.ldeviceExtX/l),s},i.prototype.transformY=function(a){var s=0,l=this.lworldExtY;return l!=0&&(s=this.ldeviceOrgY+(a-this.lworldOrgY)*this.ldeviceExtY/l),s},i.prototype.inverseTransformX=function(a){var s=0,l=this.ldeviceExtX;return l!=0&&(s=this.lworldOrgX+(a-this.ldeviceOrgX)*this.lworldExtX/l),s},i.prototype.inverseTransformY=function(a){var s=0,l=this.ldeviceExtY;return l!=0&&(s=this.lworldOrgY+(a-this.ldeviceOrgY)*this.lworldExtY/l),s},i.prototype.inverseTransformPoint=function(a){var s=new n(this.inverseTransformX(a.x),this.inverseTransformY(a.y));return s},t.exports=i},function(t,e,r){"use strict";function n(d){if(Array.isArray(d)){for(var p=0,m=Array(d.length);pa.ADAPTATION_LOWER_NODE_LIMIT&&(this.coolingFactor=Math.max(this.coolingFactor*a.COOLING_ADAPTATION_FACTOR,this.coolingFactor-(d-a.ADAPTATION_LOWER_NODE_LIMIT)/(a.ADAPTATION_UPPER_NODE_LIMIT-a.ADAPTATION_LOWER_NODE_LIMIT)*this.coolingFactor*(1-a.COOLING_ADAPTATION_FACTOR))),this.maxNodeDisplacement=a.MAX_NODE_DISPLACEMENT_INCREMENTAL):(d>a.ADAPTATION_LOWER_NODE_LIMIT?this.coolingFactor=Math.max(a.COOLING_ADAPTATION_FACTOR,1-(d-a.ADAPTATION_LOWER_NODE_LIMIT)/(a.ADAPTATION_UPPER_NODE_LIMIT-a.ADAPTATION_LOWER_NODE_LIMIT)*(1-a.COOLING_ADAPTATION_FACTOR)):this.coolingFactor=1,this.initialCoolingFactor=this.coolingFactor,this.maxNodeDisplacement=a.MAX_NODE_DISPLACEMENT),this.maxIterations=Math.max(this.getAllNodes().length*5,this.maxIterations),this.displacementThresholdPerNode=3*a.DEFAULT_EDGE_LENGTH/100,this.totalDisplacementThreshold=this.displacementThresholdPerNode*this.getAllNodes().length,this.repulsionRange=this.calcRepulsionRange()},h.prototype.calcSpringForces=function(){for(var d=this.getAllEdges(),p,m=0;m0&&arguments[0]!==void 0?arguments[0]:!0,p=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!1,m,g,y,v,x=this.getAllNodes(),b;if(this.useFRGridVariant)for(this.totalIterations%a.GRID_CALCULATION_CHECK_PERIOD==1&&d&&this.updateGrid(),b=new Set,m=0;mw||b>w)&&(d.gravitationForceX=-this.gravityConstant*y,d.gravitationForceY=-this.gravityConstant*v)):(w=p.getEstimatedSize()*this.compoundGravityRangeFactor,(x>w||b>w)&&(d.gravitationForceX=-this.gravityConstant*y*this.compoundGravityConstant,d.gravitationForceY=-this.gravityConstant*v*this.compoundGravityConstant))},h.prototype.isConverged=function(){var d,p=!1;return this.totalIterations>this.maxIterations/3&&(p=Math.abs(this.totalDisplacement-this.oldTotalDisplacement)<2),d=this.totalDisplacement=x.length||w>=x[0].length)){for(var _=0;_h},"_defaultCompareFunction")}]),l}();t.exports=s},function(t,e,r){"use strict";function n(){}o(n,"SVD"),n.svd=function(i){this.U=null,this.V=null,this.s=null,this.m=0,this.n=0,this.m=i.length,this.n=i[0].length;var a=Math.min(this.m,this.n);this.s=function(dt){for(var Je=[];dt-- >0;)Je.push(0);return Je}(Math.min(this.m+1,this.n)),this.U=function(dt){var Je=o(function ct(Ct){if(Ct.length==0)return 0;for(var pt=[],Bt=0;Bt0;)Je.push(0);return Je}(this.n),l=function(dt){for(var Je=[];dt-- >0;)Je.push(0);return Je}(this.m),u=!0,h=!0,f=Math.min(this.m-1,this.n),d=Math.max(0,Math.min(this.n-2,this.m)),p=0;p=0;N--)if(this.s[N]!==0){for(var P=N+1;P=0;j--){if(function(dt,Je){return dt&&Je}(j0;){var ce=void 0,te=void 0;for(ce=R-2;ce>=-1&&ce!==-1;ce--)if(Math.abs(s[ce])<=ue+ae*(Math.abs(this.s[ce])+Math.abs(this.s[ce+1]))){s[ce]=0;break}if(ce===R-2)te=4;else{var Ne=void 0;for(Ne=R-1;Ne>=ce&&Ne!==ce;Ne--){var se=(Ne!==R?Math.abs(s[Ne]):0)+(Ne!==ce+1?Math.abs(s[Ne-1]):0);if(Math.abs(this.s[Ne])<=ue+ae*se){this.s[Ne]=0;break}}Ne===ce?te=3:Ne===R-1?te=1:(te=2,ce=Ne)}switch(ce++,te){case 1:{var ke=s[R-2];s[R-2]=0;for(var Re=R-2;Re>=ce;Re--){var Ce=n.hypot(this.s[Re],ke),Pe=this.s[Re]/Ce,Ie=ke/Ce;if(this.s[Re]=Ce,Re!==ce&&(ke=-Ie*s[Re-1],s[Re-1]=Pe*s[Re-1]),h)for(var $e=0;$e=this.s[ce+1]);){var tt=this.s[ce];if(this.s[ce]=this.s[ce+1],this.s[ce+1]=tt,h&&ceMath.abs(a)?(s=a/i,s=Math.abs(i)*Math.sqrt(1+s*s)):a!=0?(s=i/a,s=Math.abs(a)*Math.sqrt(1+s*s)):s=0,s},t.exports=n},function(t,e,r){"use strict";var n=function(){function s(l,u){for(var h=0;h2&&arguments[2]!==void 0?arguments[2]:1,f=arguments.length>3&&arguments[3]!==void 0?arguments[3]:-1,d=arguments.length>4&&arguments[4]!==void 0?arguments[4]:-1;i(this,s),this.sequence1=l,this.sequence2=u,this.match_score=h,this.mismatch_penalty=f,this.gap_penalty=d,this.iMax=l.length+1,this.jMax=u.length+1,this.grid=new Array(this.iMax);for(var p=0;p=0;l--){var u=this.listeners[l];u.event===a&&u.callback===s&&this.listeners.splice(l,1)}},i.emit=function(a,s){for(var l=0;l{"use strict";o(function(e,r){typeof Ib=="object"&&typeof pF=="object"?pF.exports=r(dF()):typeof define=="function"&&define.amd?define(["layout-base"],r):typeof Ib=="object"?Ib.coseBase=r(dF()):e.coseBase=r(e.layoutBase)},"webpackUniversalModuleDefinition")(Ib,function(t){return(()=>{"use strict";var e={45:(a,s,l)=>{var u={};u.layoutBase=l(551),u.CoSEConstants=l(806),u.CoSEEdge=l(767),u.CoSEGraph=l(880),u.CoSEGraphManager=l(578),u.CoSELayout=l(765),u.CoSENode=l(991),u.ConstraintHandler=l(902),a.exports=u},806:(a,s,l)=>{var u=l(551).FDLayoutConstants;function h(){}o(h,"CoSEConstants");for(var f in u)h[f]=u[f];h.DEFAULT_USE_MULTI_LEVEL_SCALING=!1,h.DEFAULT_RADIAL_SEPARATION=u.DEFAULT_EDGE_LENGTH,h.DEFAULT_COMPONENT_SEPERATION=60,h.TILE=!0,h.TILING_PADDING_VERTICAL=10,h.TILING_PADDING_HORIZONTAL=10,h.TRANSFORM_ON_CONSTRAINT_HANDLING=!0,h.ENFORCE_CONSTRAINTS=!0,h.APPLY_LAYOUT=!0,h.RELAX_MOVEMENT_ON_CONSTRAINTS=!0,h.TREE_REDUCTION_ON_INCREMENTAL=!0,h.PURE_INCREMENTAL=h.DEFAULT_INCREMENTAL,a.exports=h},767:(a,s,l)=>{var u=l(551).FDLayoutEdge;function h(d,p,m){u.call(this,d,p,m)}o(h,"CoSEEdge"),h.prototype=Object.create(u.prototype);for(var f in u)h[f]=u[f];a.exports=h},880:(a,s,l)=>{var u=l(551).LGraph;function h(d,p,m){u.call(this,d,p,m)}o(h,"CoSEGraph"),h.prototype=Object.create(u.prototype);for(var f in u)h[f]=u[f];a.exports=h},578:(a,s,l)=>{var u=l(551).LGraphManager;function h(d){u.call(this,d)}o(h,"CoSEGraphManager"),h.prototype=Object.create(u.prototype);for(var f in u)h[f]=u[f];a.exports=h},765:(a,s,l)=>{var u=l(551).FDLayout,h=l(578),f=l(880),d=l(991),p=l(767),m=l(806),g=l(902),y=l(551).FDLayoutConstants,v=l(551).LayoutConstants,x=l(551).Point,b=l(551).PointD,w=l(551).DimensionD,_=l(551).Layout,T=l(551).Integer,E=l(551).IGeometry,L=l(551).LGraph,S=l(551).Transform,A=l(551).LinkedList;function I(){u.call(this),this.toBeTiled={},this.constraints={}}o(I,"CoSELayout"),I.prototype=Object.create(u.prototype);for(var D in u)I[D]=u[D];I.prototype.newGraphManager=function(){var k=new h(this);return this.graphManager=k,k},I.prototype.newGraph=function(k){return new f(null,this.graphManager,k)},I.prototype.newNode=function(k){return new d(this.graphManager,k)},I.prototype.newEdge=function(k){return new p(null,null,k)},I.prototype.initParameters=function(){u.prototype.initParameters.call(this,arguments),this.isSubLayout||(m.DEFAULT_EDGE_LENGTH<10?this.idealEdgeLength=10:this.idealEdgeLength=m.DEFAULT_EDGE_LENGTH,this.useSmartIdealEdgeLengthCalculation=m.DEFAULT_USE_SMART_IDEAL_EDGE_LENGTH_CALCULATION,this.gravityConstant=y.DEFAULT_GRAVITY_STRENGTH,this.compoundGravityConstant=y.DEFAULT_COMPOUND_GRAVITY_STRENGTH,this.gravityRangeFactor=y.DEFAULT_GRAVITY_RANGE_FACTOR,this.compoundGravityRangeFactor=y.DEFAULT_COMPOUND_GRAVITY_RANGE_FACTOR,this.prunedNodesAll=[],this.growTreeIterations=0,this.afterGrowthIterations=0,this.isTreeGrowing=!1,this.isGrowthFinished=!1)},I.prototype.initSpringEmbedder=function(){u.prototype.initSpringEmbedder.call(this),this.coolingCycle=0,this.maxCoolingCycle=this.maxIterations/y.CONVERGENCE_CHECK_PERIOD,this.finalTemperature=.04,this.coolingAdjuster=1},I.prototype.layout=function(){var k=v.DEFAULT_CREATE_BENDS_AS_NEEDED;return k&&(this.createBendpoints(),this.graphManager.resetAllEdges()),this.level=0,this.classicLayout()},I.prototype.classicLayout=function(){if(this.nodesWithGravity=this.calculateNodesToApplyGravitationTo(),this.graphManager.setAllNodesToApplyGravitation(this.nodesWithGravity),this.calcNoOfChildrenForAllNodes(),this.graphManager.calcLowestCommonAncestors(),this.graphManager.calcInclusionTreeDepths(),this.graphManager.getRoot().calcEstimatedSize(),this.calcIdealEdgeLengths(),this.incremental){if(m.TREE_REDUCTION_ON_INCREMENTAL){this.reduceTrees(),this.graphManager.resetAllNodesToApplyGravitation();var R=new Set(this.getAllNodes()),C=this.nodesWithGravity.filter(function(P){return R.has(P)});this.graphManager.setAllNodesToApplyGravitation(C)}}else{var k=this.getFlatForest();if(k.length>0)this.positionNodesRadially(k);else{this.reduceTrees(),this.graphManager.resetAllNodesToApplyGravitation();var R=new Set(this.getAllNodes()),C=this.nodesWithGravity.filter(function(O){return R.has(O)});this.graphManager.setAllNodesToApplyGravitation(C),this.positionNodesRandomly()}}return Object.keys(this.constraints).length>0&&(g.handleConstraints(this),this.initConstraintVariables()),this.initSpringEmbedder(),m.APPLY_LAYOUT&&this.runSpringEmbedder(),!0},I.prototype.tick=function(){if(this.totalIterations++,this.totalIterations===this.maxIterations&&!this.isTreeGrowing&&!this.isGrowthFinished)if(this.prunedNodesAll.length>0)this.isTreeGrowing=!0;else return!0;if(this.totalIterations%y.CONVERGENCE_CHECK_PERIOD==0&&!this.isTreeGrowing&&!this.isGrowthFinished){if(this.isConverged())if(this.prunedNodesAll.length>0)this.isTreeGrowing=!0;else return!0;this.coolingCycle++,this.layoutQuality==0?this.coolingAdjuster=this.coolingCycle:this.layoutQuality==1&&(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 k=new Set(this.getAllNodes()),R=this.nodesWithGravity.filter(function(N){return k.has(N)});this.graphManager.setAllNodesToApplyGravitation(R),this.graphManager.updateBounds(),this.updateGrid(),m.PURE_INCREMENTAL?this.coolingFactor=y.DEFAULT_COOLING_FACTOR_INCREMENTAL/2:this.coolingFactor=y.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()),m.PURE_INCREMENTAL?this.coolingFactor=y.DEFAULT_COOLING_FACTOR_INCREMENTAL/2*((100-this.afterGrowthIterations)/100):this.coolingFactor=y.DEFAULT_COOLING_FACTOR_INCREMENTAL*((100-this.afterGrowthIterations)/100),this.afterGrowthIterations++}var C=!this.isTreeGrowing&&!this.isGrowthFinished,O=this.growTreeIterations%10==1&&this.isTreeGrowing||this.afterGrowthIterations%10==1&&this.isGrowthFinished;return this.totalDisplacement=0,this.graphManager.updateBounds(),this.calcSpringForces(),this.calcRepulsionForces(C,O),this.calcGravitationalForces(),this.moveNodes(),this.animate(),!1},I.prototype.getPositionsData=function(){for(var k=this.graphManager.getAllNodes(),R={},C=0;C0&&this.updateDisplacements();for(var C=0;C0&&(O.fixedNodeWeight=P)}}if(this.constraints.relativePlacementConstraint){var F=new Map,B=new Map;if(this.dummyToNodeForVerticalAlignment=new Map,this.dummyToNodeForHorizontalAlignment=new Map,this.fixedNodesOnHorizontal=new Set,this.fixedNodesOnVertical=new Set,this.fixedNodeSet.forEach(function(ee){k.fixedNodesOnHorizontal.add(ee),k.fixedNodesOnVertical.add(ee)}),this.constraints.alignmentConstraint){if(this.constraints.alignmentConstraint.vertical)for(var G=this.constraints.alignmentConstraint.vertical,C=0;C=2*ee.length/3;q--)J=Math.floor(Math.random()*(q+1)),H=ee[q],ee[q]=ee[J],ee[J]=H;return ee},this.nodesInRelativeHorizontal=[],this.nodesInRelativeVertical=[],this.nodeToRelativeConstraintMapHorizontal=new Map,this.nodeToRelativeConstraintMapVertical=new Map,this.nodeToTempPositionMapHorizontal=new Map,this.nodeToTempPositionMapVertical=new Map,this.constraints.relativePlacementConstraint.forEach(function(ee){if(ee.left){var J=F.has(ee.left)?F.get(ee.left):ee.left,H=F.has(ee.right)?F.get(ee.right):ee.right;k.nodesInRelativeHorizontal.includes(J)||(k.nodesInRelativeHorizontal.push(J),k.nodeToRelativeConstraintMapHorizontal.set(J,[]),k.dummyToNodeForVerticalAlignment.has(J)?k.nodeToTempPositionMapHorizontal.set(J,k.idToNodeMap.get(k.dummyToNodeForVerticalAlignment.get(J)[0]).getCenterX()):k.nodeToTempPositionMapHorizontal.set(J,k.idToNodeMap.get(J).getCenterX())),k.nodesInRelativeHorizontal.includes(H)||(k.nodesInRelativeHorizontal.push(H),k.nodeToRelativeConstraintMapHorizontal.set(H,[]),k.dummyToNodeForVerticalAlignment.has(H)?k.nodeToTempPositionMapHorizontal.set(H,k.idToNodeMap.get(k.dummyToNodeForVerticalAlignment.get(H)[0]).getCenterX()):k.nodeToTempPositionMapHorizontal.set(H,k.idToNodeMap.get(H).getCenterX())),k.nodeToRelativeConstraintMapHorizontal.get(J).push({right:H,gap:ee.gap}),k.nodeToRelativeConstraintMapHorizontal.get(H).push({left:J,gap:ee.gap})}else{var q=B.has(ee.top)?B.get(ee.top):ee.top,Q=B.has(ee.bottom)?B.get(ee.bottom):ee.bottom;k.nodesInRelativeVertical.includes(q)||(k.nodesInRelativeVertical.push(q),k.nodeToRelativeConstraintMapVertical.set(q,[]),k.dummyToNodeForHorizontalAlignment.has(q)?k.nodeToTempPositionMapVertical.set(q,k.idToNodeMap.get(k.dummyToNodeForHorizontalAlignment.get(q)[0]).getCenterY()):k.nodeToTempPositionMapVertical.set(q,k.idToNodeMap.get(q).getCenterY())),k.nodesInRelativeVertical.includes(Q)||(k.nodesInRelativeVertical.push(Q),k.nodeToRelativeConstraintMapVertical.set(Q,[]),k.dummyToNodeForHorizontalAlignment.has(Q)?k.nodeToTempPositionMapVertical.set(Q,k.idToNodeMap.get(k.dummyToNodeForHorizontalAlignment.get(Q)[0]).getCenterY()):k.nodeToTempPositionMapVertical.set(Q,k.idToNodeMap.get(Q).getCenterY())),k.nodeToRelativeConstraintMapVertical.get(q).push({bottom:Q,gap:ee.gap}),k.nodeToRelativeConstraintMapVertical.get(Q).push({top:q,gap:ee.gap})}});else{var W=new Map,Z=new Map;this.constraints.relativePlacementConstraint.forEach(function(ee){if(ee.left){var J=F.has(ee.left)?F.get(ee.left):ee.left,H=F.has(ee.right)?F.get(ee.right):ee.right;W.has(J)?W.get(J).push(H):W.set(J,[H]),W.has(H)?W.get(H).push(J):W.set(H,[J])}else{var q=B.has(ee.top)?B.get(ee.top):ee.top,Q=B.has(ee.bottom)?B.get(ee.bottom):ee.bottom;Z.has(q)?Z.get(q).push(Q):Z.set(q,[Q]),Z.has(Q)?Z.get(Q).push(q):Z.set(Q,[q])}});var j=o(function(J,H){var q=[],Q=[],ae=new A,ue=new Set,ce=0;return J.forEach(function(te,Ne){if(!ue.has(Ne)){q[ce]=[],Q[ce]=!1;var se=Ne;for(ae.push(se),ue.add(se),q[ce].push(se);ae.length!=0;){se=ae.shift(),H.has(se)&&(Q[ce]=!0);var ke=J.get(se);ke.forEach(function(Re){ue.has(Re)||(ae.push(Re),ue.add(Re),q[ce].push(Re))})}ce++}}),{components:q,isFixed:Q}},"constructComponents"),oe=j(W,k.fixedNodesOnHorizontal);this.componentsOnHorizontal=oe.components,this.fixedComponentsOnHorizontal=oe.isFixed;var K=j(Z,k.fixedNodesOnVertical);this.componentsOnVertical=K.components,this.fixedComponentsOnVertical=K.isFixed}}},I.prototype.updateDisplacements=function(){var k=this;if(this.constraints.fixedNodeConstraint&&this.constraints.fixedNodeConstraint.forEach(function(K){var ee=k.idToNodeMap.get(K.nodeId);ee.displacementX=0,ee.displacementY=0}),this.constraints.alignmentConstraint){if(this.constraints.alignmentConstraint.vertical)for(var R=this.constraints.alignmentConstraint.vertical,C=0;C1){var B;for(B=0;BO&&(O=Math.floor(F.y)),P=Math.floor(F.x+m.DEFAULT_COMPONENT_SEPERATION)}this.transform(new b(v.WORLD_CENTER_X-F.x/2,v.WORLD_CENTER_Y-F.y/2))},I.radialLayout=function(k,R,C){var O=Math.max(this.maxDiagonalInTree(k),m.DEFAULT_RADIAL_SEPARATION);I.branchRadialLayout(R,null,0,359,0,O);var N=L.calculateBounds(k),P=new S;P.setDeviceOrgX(N.getMinX()),P.setDeviceOrgY(N.getMinY()),P.setWorldOrgX(C.x),P.setWorldOrgY(C.y);for(var F=0;F1;){var q=H[0];H.splice(0,1);var Q=j.indexOf(q);Q>=0&&j.splice(Q,1),ee--,oe--}R!=null?J=(j.indexOf(H[0])+1)%ee:J=0;for(var ae=Math.abs(O-C)/oe,ue=J;K!=oe;ue=++ue%ee){var ce=j[ue].getOtherEnd(k);if(ce!=R){var te=(C+K*ae)%360,Ne=(te+ae)%360;I.branchRadialLayout(ce,k,te,Ne,N+P,P),K++}}},I.maxDiagonalInTree=function(k){for(var R=T.MIN_VALUE,C=0;CR&&(R=N)}return R},I.prototype.calcRepulsionRange=function(){return 2*(this.level+1)*this.idealEdgeLength},I.prototype.groupZeroDegreeMembers=function(){var k=this,R={};this.memberGroups={},this.idToDummyNode={};for(var C=[],O=this.graphManager.getAllNodes(),N=0;N"u"&&(R[B]=[]),R[B]=R[B].concat(P)}Object.keys(R).forEach(function(G){if(R[G].length>1){var z="DummyCompound_"+G;k.memberGroups[z]=R[G];var W=R[G][0].getParent(),Z=new d(k.graphManager);Z.id=z,Z.paddingLeft=W.paddingLeft||0,Z.paddingRight=W.paddingRight||0,Z.paddingBottom=W.paddingBottom||0,Z.paddingTop=W.paddingTop||0,k.idToDummyNode[z]=Z;var j=k.getGraphManager().add(k.newGraph(),Z),oe=W.getChild();oe.add(Z);for(var K=0;KN?(O.rect.x-=(O.labelWidth-N)/2,O.setWidth(O.labelWidth),O.labelMarginLeft=(O.labelWidth-N)/2):O.labelPosHorizontal=="right"&&O.setWidth(N+O.labelWidth)),O.labelHeight&&(O.labelPosVertical=="top"?(O.rect.y-=O.labelHeight,O.setHeight(P+O.labelHeight),O.labelMarginTop=O.labelHeight):O.labelPosVertical=="center"&&O.labelHeight>P?(O.rect.y-=(O.labelHeight-P)/2,O.setHeight(O.labelHeight),O.labelMarginTop=(O.labelHeight-P)/2):O.labelPosVertical=="bottom"&&O.setHeight(P+O.labelHeight))}})},I.prototype.repopulateCompounds=function(){for(var k=this.compoundOrder.length-1;k>=0;k--){var R=this.compoundOrder[k],C=R.id,O=R.paddingLeft,N=R.paddingTop,P=R.labelMarginLeft,F=R.labelMarginTop;this.adjustLocations(this.tiledMemberPack[C],R.rect.x,R.rect.y,O,N,P,F)}},I.prototype.repopulateZeroDegreeMembers=function(){var k=this,R=this.tiledZeroDegreePack;Object.keys(R).forEach(function(C){var O=k.idToDummyNode[C],N=O.paddingLeft,P=O.paddingTop,F=O.labelMarginLeft,B=O.labelMarginTop;k.adjustLocations(R[C],O.rect.x,O.rect.y,N,P,F,B)})},I.prototype.getToBeTiled=function(k){var R=k.id;if(this.toBeTiled[R]!=null)return this.toBeTiled[R];var C=k.getChild();if(C==null)return this.toBeTiled[R]=!1,!1;for(var O=C.getNodes(),N=0;N0)return this.toBeTiled[R]=!1,!1;if(P.getChild()==null){this.toBeTiled[P.id]=!1;continue}if(!this.getToBeTiled(P))return this.toBeTiled[R]=!1,!1}return this.toBeTiled[R]=!0,!0},I.prototype.getNodeDegree=function(k){for(var R=k.id,C=k.getEdges(),O=0,N=0;NW&&(W=j.rect.height)}C+=W+k.verticalPadding}},I.prototype.tileCompoundMembers=function(k,R){var C=this;this.tiledMemberPack=[],Object.keys(k).forEach(function(O){var N=R[O];if(C.tiledMemberPack[O]=C.tileNodes(k[O],N.paddingLeft+N.paddingRight),N.rect.width=C.tiledMemberPack[O].width,N.rect.height=C.tiledMemberPack[O].height,N.setCenter(C.tiledMemberPack[O].centerX,C.tiledMemberPack[O].centerY),N.labelMarginLeft=0,N.labelMarginTop=0,m.NODE_DIMENSIONS_INCLUDE_LABELS){var P=N.rect.width,F=N.rect.height;N.labelWidth&&(N.labelPosHorizontal=="left"?(N.rect.x-=N.labelWidth,N.setWidth(P+N.labelWidth),N.labelMarginLeft=N.labelWidth):N.labelPosHorizontal=="center"&&N.labelWidth>P?(N.rect.x-=(N.labelWidth-P)/2,N.setWidth(N.labelWidth),N.labelMarginLeft=(N.labelWidth-P)/2):N.labelPosHorizontal=="right"&&N.setWidth(P+N.labelWidth)),N.labelHeight&&(N.labelPosVertical=="top"?(N.rect.y-=N.labelHeight,N.setHeight(F+N.labelHeight),N.labelMarginTop=N.labelHeight):N.labelPosVertical=="center"&&N.labelHeight>F?(N.rect.y-=(N.labelHeight-F)/2,N.setHeight(N.labelHeight),N.labelMarginTop=(N.labelHeight-F)/2):N.labelPosVertical=="bottom"&&N.setHeight(F+N.labelHeight))}})},I.prototype.tileNodes=function(k,R){var C=this.tileNodesByFavoringDim(k,R,!0),O=this.tileNodesByFavoringDim(k,R,!1),N=this.getOrgRatio(C),P=this.getOrgRatio(O),F;return PB&&(B=K.getWidth())});var G=P/N,z=F/N,W=Math.pow(C-O,2)+4*(G+O)*(z+C)*N,Z=(O-C+Math.sqrt(W))/(2*(G+O)),j;R?(j=Math.ceil(Z),j==Z&&j++):j=Math.floor(Z);var oe=j*(G+O)-O;return B>oe&&(oe=B),oe+=O*2,oe},I.prototype.tileNodesByFavoringDim=function(k,R,C){var O=m.TILING_PADDING_VERTICAL,N=m.TILING_PADDING_HORIZONTAL,P=m.TILING_COMPARE_BY,F={rows:[],rowWidth:[],rowHeight:[],width:0,height:R,verticalPadding:O,horizontalPadding:N,centerX:0,centerY:0};P&&(F.idealRowWidth=this.calcIdealRowWidth(k,C));var B=o(function(ee){return ee.rect.width*ee.rect.height},"getNodeArea"),G=o(function(ee,J){return B(J)-B(ee)},"areaCompareFcn");k.sort(function(K,ee){var J=G;return F.idealRowWidth?(J=P,J(K.id,ee.id)):J(K,ee)});for(var z=0,W=0,Z=0;Z0&&(F+=k.horizontalPadding),k.rowWidth[C]=F,k.width0&&(B+=k.verticalPadding);var G=0;B>k.rowHeight[C]&&(G=k.rowHeight[C],k.rowHeight[C]=B,G=k.rowHeight[C]-G),k.height+=G,k.rows[C].push(R)},I.prototype.getShortestRowIndex=function(k){for(var R=-1,C=Number.MAX_VALUE,O=0;OC&&(R=O,C=k.rowWidth[O]);return R},I.prototype.canAddHorizontal=function(k,R,C){if(k.idealRowWidth){var O=k.rows.length-1,N=k.rowWidth[O];return N+R+k.horizontalPadding<=k.idealRowWidth}var P=this.getShortestRowIndex(k);if(P<0)return!0;var F=k.rowWidth[P];if(F+k.horizontalPadding+R<=k.width)return!0;var B=0;k.rowHeight[P]0&&(B=C+k.verticalPadding-k.rowHeight[P]);var G;k.width-F>=R+k.horizontalPadding?G=(k.height+B)/(F+R+k.horizontalPadding):G=(k.height+B)/k.width,B=C+k.verticalPadding;var z;return k.widthP&&R!=C){O.splice(-1,1),k.rows[C].push(N),k.rowWidth[R]=k.rowWidth[R]-P,k.rowWidth[C]=k.rowWidth[C]+P,k.width=k.rowWidth[instance.getLongestRowIndex(k)];for(var F=Number.MIN_VALUE,B=0;BF&&(F=O[B].height);R>0&&(F+=k.verticalPadding);var G=k.rowHeight[R]+k.rowHeight[C];k.rowHeight[R]=F,k.rowHeight[C]0)for(var oe=N;oe<=P;oe++)j[0]+=this.grid[oe][F-1].length+this.grid[oe][F].length-1;if(P0)for(var oe=F;oe<=B;oe++)j[3]+=this.grid[N-1][oe].length+this.grid[N][oe].length-1;for(var K=T.MAX_VALUE,ee,J,H=0;H{var u=l(551).FDLayoutNode,h=l(551).IMath;function f(p,m,g,y){u.call(this,p,m,g,y)}o(f,"CoSENode"),f.prototype=Object.create(u.prototype);for(var d in u)f[d]=u[d];f.prototype.calculateDisplacement=function(){var p=this.graphManager.getLayout();this.getChild()!=null&&this.fixedNodeWeight?(this.displacementX+=p.coolingFactor*(this.springForceX+this.repulsionForceX+this.gravitationForceX)/this.fixedNodeWeight,this.displacementY+=p.coolingFactor*(this.springForceY+this.repulsionForceY+this.gravitationForceY)/this.fixedNodeWeight):(this.displacementX+=p.coolingFactor*(this.springForceX+this.repulsionForceX+this.gravitationForceX)/this.noOfChildren,this.displacementY+=p.coolingFactor*(this.springForceY+this.repulsionForceY+this.gravitationForceY)/this.noOfChildren),Math.abs(this.displacementX)>p.coolingFactor*p.maxNodeDisplacement&&(this.displacementX=p.coolingFactor*p.maxNodeDisplacement*h.sign(this.displacementX)),Math.abs(this.displacementY)>p.coolingFactor*p.maxNodeDisplacement&&(this.displacementY=p.coolingFactor*p.maxNodeDisplacement*h.sign(this.displacementY)),this.child&&this.child.getNodes().length>0&&this.propogateDisplacementToChildren(this.displacementX,this.displacementY)},f.prototype.propogateDisplacementToChildren=function(p,m){for(var g=this.getChild().getNodes(),y,v=0;v{function u(g){if(Array.isArray(g)){for(var y=0,v=Array(g.length);y0){var yt=0;rt.forEach(function(tt){Te=="horizontal"?(me.set(tt,x.has(tt)?b[x.get(tt)]:Ee.get(tt)),yt+=me.get(tt)):(me.set(tt,x.has(tt)?w[x.get(tt)]:Ee.get(tt)),yt+=me.get(tt))}),yt=yt/rt.length,vt.forEach(function(tt){ie.has(tt)||me.set(tt,yt)})}else{var Ue=0;vt.forEach(function(tt){Te=="horizontal"?Ue+=x.has(tt)?b[x.get(tt)]:Ee.get(tt):Ue+=x.has(tt)?w[x.get(tt)]:Ee.get(tt)}),Ue=Ue/vt.length,vt.forEach(function(tt){me.set(tt,Ue)})}});for(var et=o(function(){var rt=Oe.shift(),yt=U.get(rt);yt.forEach(function(Ue){if(me.get(Ue.id)tt&&(tt=pt),Btht&&(ht=Bt)}}catch(On){er=!0,dt=On}finally{try{!Et&&Je.return&&Je.return()}finally{if(er)throw dt}}var Tr=(yt+tt)/2-(Ue+ht)/2,yr=!0,or=!1,ln=void 0;try{for(var Or=vt[Symbol.iterator](),ii;!(yr=(ii=Or.next()).done);yr=!0){var mn=ii.value;me.set(mn,me.get(mn)+Tr)}}catch(On){or=!0,ln=On}finally{try{!yr&&Or.return&&Or.return()}finally{if(or)throw ln}}})}return me},"findAppropriatePositionForRelativePlacement"),D=o(function(U){var Te=0,ie=0,Ee=0,Ae=0;if(U.forEach(function(He){He.left?b[x.get(He.left)]-b[x.get(He.right)]>=0?Te++:ie++:w[x.get(He.top)]-w[x.get(He.bottom)]>=0?Ee++:Ae++}),Te>ie&&Ee>Ae)for(var Ge=0;Geie)for(var Be=0;BeAe)for(var me=0;me1)y.fixedNodeConstraint.forEach(function(ve,U){O[U]=[ve.position.x,ve.position.y],N[U]=[b[x.get(ve.nodeId)],w[x.get(ve.nodeId)]]}),P=!0;else if(y.alignmentConstraint)(function(){var ve=0;if(y.alignmentConstraint.vertical){for(var U=y.alignmentConstraint.vertical,Te=o(function(me){var He=new Set;U[me].forEach(function(bt){He.add(bt)});var Oe=new Set([].concat(u(He)).filter(function(bt){return B.has(bt)})),et=void 0;Oe.size>0?et=b[x.get(Oe.values().next().value)]:et=A(He).x,U[me].forEach(function(bt){O[ve]=[et,w[x.get(bt)]],N[ve]=[b[x.get(bt)],w[x.get(bt)]],ve++})},"_loop2"),ie=0;ie0?et=b[x.get(Oe.values().next().value)]:et=A(He).y,Ee[me].forEach(function(bt){O[ve]=[b[x.get(bt)],et],N[ve]=[b[x.get(bt)],w[x.get(bt)]],ve++})},"_loop3"),Ge=0;GeZ&&(Z=W[oe].length,j=oe);if(Z0){var Pe={x:0,y:0};y.fixedNodeConstraint.forEach(function(ve,U){var Te={x:b[x.get(ve.nodeId)],y:w[x.get(ve.nodeId)]},ie=ve.position,Ee=S(ie,Te);Pe.x+=Ee.x,Pe.y+=Ee.y}),Pe.x/=y.fixedNodeConstraint.length,Pe.y/=y.fixedNodeConstraint.length,b.forEach(function(ve,U){b[U]+=Pe.x}),w.forEach(function(ve,U){w[U]+=Pe.y}),y.fixedNodeConstraint.forEach(function(ve){b[x.get(ve.nodeId)]=ve.position.x,w[x.get(ve.nodeId)]=ve.position.y})}if(y.alignmentConstraint){if(y.alignmentConstraint.vertical)for(var Ie=y.alignmentConstraint.vertical,$e=o(function(U){var Te=new Set;Ie[U].forEach(function(Ae){Te.add(Ae)});var ie=new Set([].concat(u(Te)).filter(function(Ae){return B.has(Ae)})),Ee=void 0;ie.size>0?Ee=b[x.get(ie.values().next().value)]:Ee=A(Te).x,Te.forEach(function(Ae){B.has(Ae)||(b[x.get(Ae)]=Ee)})},"_loop4"),ye=0;ye0?Ee=w[x.get(ie.values().next().value)]:Ee=A(Te).y,Te.forEach(function(Ae){B.has(Ae)||(w[x.get(Ae)]=Ee)})},"_loop5"),he=0;he{a.exports=t}},r={};function n(a){var s=r[a];if(s!==void 0)return s.exports;var l=r[a]={exports:{}};return e[a](l,l.exports,n),l.exports}o(n,"__webpack_require__");var i=n(45);return i})()})});var s2e=Ei((Ob,gF)=>{"use strict";o(function(e,r){typeof Ob=="object"&&typeof gF=="object"?gF.exports=r(mF()):typeof define=="function"&&define.amd?define(["cose-base"],r):typeof Ob=="object"?Ob.cytoscapeFcose=r(mF()):e.cytoscapeFcose=r(e.coseBase)},"webpackUniversalModuleDefinition")(Ob,function(t){return(()=>{"use strict";var e={658:a=>{a.exports=Object.assign!=null?Object.assign.bind(Object):function(s){for(var l=arguments.length,u=Array(l>1?l-1:0),h=1;h{var u=function(){function d(p,m){var g=[],y=!0,v=!1,x=void 0;try{for(var b=p[Symbol.iterator](),w;!(y=(w=b.next()).done)&&(g.push(w.value),!(m&&g.length===m));y=!0);}catch(_){v=!0,x=_}finally{try{!y&&b.return&&b.return()}finally{if(v)throw x}}return g}return o(d,"sliceIterator"),function(p,m){if(Array.isArray(p))return p;if(Symbol.iterator in Object(p))return d(p,m);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}(),h=l(140).layoutBase.LinkedList,f={};f.getTopMostNodes=function(d){for(var p={},m=0;m0&&P.merge(z)});for(var F=0;F1){w=x[0],_=w.connectedEdges().length,x.forEach(function(N){N.connectedEdges().length<_&&(_=N.connectedEdges().length,w=N)}),L.push(w.id());var O=d.collection();O.merge(x[0]),x.forEach(function(N){O.merge(N)}),x=[],m=m.difference(O),E++}},"_loop");do A();while(!T);return g&&L.length>0&&g.set("dummy"+(g.size+1),L),S},f.relocateComponent=function(d,p,m){if(!m.fixedNodeConstraint){var g=Number.POSITIVE_INFINITY,y=Number.NEGATIVE_INFINITY,v=Number.POSITIVE_INFINITY,x=Number.NEGATIVE_INFINITY;if(m.quality=="draft"){var b=!0,w=!1,_=void 0;try{for(var T=p.nodeIndexes[Symbol.iterator](),E;!(b=(E=T.next()).done);b=!0){var L=E.value,S=u(L,2),A=S[0],I=S[1],D=m.cy.getElementById(A);if(D){var k=D.boundingBox(),R=p.xCoords[I]-k.w/2,C=p.xCoords[I]+k.w/2,O=p.yCoords[I]-k.h/2,N=p.yCoords[I]+k.h/2;Ry&&(y=C),Ox&&(x=N)}}}catch(z){w=!0,_=z}finally{try{!b&&T.return&&T.return()}finally{if(w)throw _}}var P=d.x-(y+g)/2,F=d.y-(x+v)/2;p.xCoords=p.xCoords.map(function(z){return z+P}),p.yCoords=p.yCoords.map(function(z){return z+F})}else{Object.keys(p).forEach(function(z){var W=p[z],Z=W.getRect().x,j=W.getRect().x+W.getRect().width,oe=W.getRect().y,K=W.getRect().y+W.getRect().height;Zy&&(y=j),oex&&(x=K)});var B=d.x-(y+g)/2,G=d.y-(x+v)/2;Object.keys(p).forEach(function(z){var W=p[z];W.setCenter(W.getCenterX()+B,W.getCenterY()+G)})}}},f.calcBoundingBox=function(d,p,m,g){for(var y=Number.MAX_SAFE_INTEGER,v=Number.MIN_SAFE_INTEGER,x=Number.MAX_SAFE_INTEGER,b=Number.MIN_SAFE_INTEGER,w=void 0,_=void 0,T=void 0,E=void 0,L=d.descendants().not(":parent"),S=L.length,A=0;Aw&&(y=w),v<_&&(v=_),x>T&&(x=T),b{var u=l(548),h=l(140).CoSELayout,f=l(140).CoSENode,d=l(140).layoutBase.PointD,p=l(140).layoutBase.DimensionD,m=l(140).layoutBase.LayoutConstants,g=l(140).layoutBase.FDLayoutConstants,y=l(140).CoSEConstants,v=o(function(b,w){var _=b.cy,T=b.eles,E=T.nodes(),L=T.edges(),S=void 0,A=void 0,I=void 0,D={};b.randomize&&(S=w.nodeIndexes,A=w.xCoords,I=w.yCoords);var k=o(function(z){return typeof z=="function"},"isFn"),R=o(function(z,W){return k(z)?z(W):z},"optFn"),C=u.calcParentsWithoutChildren(_,T),O=o(function G(z,W,Z,j){for(var oe=W.length,K=0;K0){var ae=void 0;ae=Z.getGraphManager().add(Z.newGraph(),H),G(ae,J,Z,j)}}},"processChildrenList"),N=o(function(z,W,Z){for(var j=0,oe=0,K=0;K0?y.DEFAULT_EDGE_LENGTH=g.DEFAULT_EDGE_LENGTH=j/oe:k(b.idealEdgeLength)?y.DEFAULT_EDGE_LENGTH=g.DEFAULT_EDGE_LENGTH=50:y.DEFAULT_EDGE_LENGTH=g.DEFAULT_EDGE_LENGTH=b.idealEdgeLength,y.MIN_REPULSION_DIST=g.MIN_REPULSION_DIST=g.DEFAULT_EDGE_LENGTH/10,y.DEFAULT_RADIAL_SEPARATION=g.DEFAULT_EDGE_LENGTH)},"processEdges"),P=o(function(z,W){W.fixedNodeConstraint&&(z.constraints.fixedNodeConstraint=W.fixedNodeConstraint),W.alignmentConstraint&&(z.constraints.alignmentConstraint=W.alignmentConstraint),W.relativePlacementConstraint&&(z.constraints.relativePlacementConstraint=W.relativePlacementConstraint)},"processConstraints");b.nestingFactor!=null&&(y.PER_LEVEL_IDEAL_EDGE_LENGTH_FACTOR=g.PER_LEVEL_IDEAL_EDGE_LENGTH_FACTOR=b.nestingFactor),b.gravity!=null&&(y.DEFAULT_GRAVITY_STRENGTH=g.DEFAULT_GRAVITY_STRENGTH=b.gravity),b.numIter!=null&&(y.MAX_ITERATIONS=g.MAX_ITERATIONS=b.numIter),b.gravityRange!=null&&(y.DEFAULT_GRAVITY_RANGE_FACTOR=g.DEFAULT_GRAVITY_RANGE_FACTOR=b.gravityRange),b.gravityCompound!=null&&(y.DEFAULT_COMPOUND_GRAVITY_STRENGTH=g.DEFAULT_COMPOUND_GRAVITY_STRENGTH=b.gravityCompound),b.gravityRangeCompound!=null&&(y.DEFAULT_COMPOUND_GRAVITY_RANGE_FACTOR=g.DEFAULT_COMPOUND_GRAVITY_RANGE_FACTOR=b.gravityRangeCompound),b.initialEnergyOnIncremental!=null&&(y.DEFAULT_COOLING_FACTOR_INCREMENTAL=g.DEFAULT_COOLING_FACTOR_INCREMENTAL=b.initialEnergyOnIncremental),b.tilingCompareBy!=null&&(y.TILING_COMPARE_BY=b.tilingCompareBy),b.quality=="proof"?m.QUALITY=2:m.QUALITY=0,y.NODE_DIMENSIONS_INCLUDE_LABELS=g.NODE_DIMENSIONS_INCLUDE_LABELS=m.NODE_DIMENSIONS_INCLUDE_LABELS=b.nodeDimensionsIncludeLabels,y.DEFAULT_INCREMENTAL=g.DEFAULT_INCREMENTAL=m.DEFAULT_INCREMENTAL=!b.randomize,y.ANIMATE=g.ANIMATE=m.ANIMATE=b.animate,y.TILE=b.tile,y.TILING_PADDING_VERTICAL=typeof b.tilingPaddingVertical=="function"?b.tilingPaddingVertical.call():b.tilingPaddingVertical,y.TILING_PADDING_HORIZONTAL=typeof b.tilingPaddingHorizontal=="function"?b.tilingPaddingHorizontal.call():b.tilingPaddingHorizontal,y.DEFAULT_INCREMENTAL=g.DEFAULT_INCREMENTAL=m.DEFAULT_INCREMENTAL=!0,y.PURE_INCREMENTAL=!b.randomize,m.DEFAULT_UNIFORM_LEAF_NODE_SIZES=b.uniformNodeDimensions,b.step=="transformed"&&(y.TRANSFORM_ON_CONSTRAINT_HANDLING=!0,y.ENFORCE_CONSTRAINTS=!1,y.APPLY_LAYOUT=!1),b.step=="enforced"&&(y.TRANSFORM_ON_CONSTRAINT_HANDLING=!1,y.ENFORCE_CONSTRAINTS=!0,y.APPLY_LAYOUT=!1),b.step=="cose"&&(y.TRANSFORM_ON_CONSTRAINT_HANDLING=!1,y.ENFORCE_CONSTRAINTS=!1,y.APPLY_LAYOUT=!0),b.step=="all"&&(b.randomize?y.TRANSFORM_ON_CONSTRAINT_HANDLING=!0:y.TRANSFORM_ON_CONSTRAINT_HANDLING=!1,y.ENFORCE_CONSTRAINTS=!0,y.APPLY_LAYOUT=!0),b.fixedNodeConstraint||b.alignmentConstraint||b.relativePlacementConstraint?y.TREE_REDUCTION_ON_INCREMENTAL=!1:y.TREE_REDUCTION_ON_INCREMENTAL=!0;var F=new h,B=F.newGraphManager();return O(B.addRoot(),u.getTopMostNodes(E),F,b),N(F,B,L),P(F,b),F.runLayout(),D},"coseLayout");a.exports={coseLayout:v}},212:(a,s,l)=>{var u=function(){function b(w,_){for(var T=0;T<_.length;T++){var E=_[T];E.enumerable=E.enumerable||!1,E.configurable=!0,"value"in E&&(E.writable=!0),Object.defineProperty(w,E.key,E)}}return o(b,"defineProperties"),function(w,_,T){return _&&b(w.prototype,_),T&&b(w,T),w}}();function h(b,w){if(!(b instanceof w))throw new TypeError("Cannot call a class as a function")}o(h,"_classCallCheck");var f=l(658),d=l(548),p=l(657),m=p.spectralLayout,g=l(816),y=g.coseLayout,v=Object.freeze({quality:"default",randomize:!0,animate:!0,animationDuration:1e3,animationEasing:void 0,fit:!0,padding:30,nodeDimensionsIncludeLabels:!1,uniformNodeDimensions:!1,packComponents:!0,step:"all",samplingType:!0,sampleSize:25,nodeSeparation:75,piTol:1e-7,nodeRepulsion:o(function(w){return 4500},"nodeRepulsion"),idealEdgeLength:o(function(w){return 50},"idealEdgeLength"),edgeElasticity:o(function(w){return .45},"edgeElasticity"),nestingFactor:.1,gravity:.25,numIter:2500,tile:!0,tilingCompareBy:void 0,tilingPaddingVertical:10,tilingPaddingHorizontal:10,gravityRangeCompound:1.5,gravityCompound:1,gravityRange:3.8,initialEnergyOnIncremental:.3,fixedNodeConstraint:void 0,alignmentConstraint:void 0,relativePlacementConstraint:void 0,ready:o(function(){},"ready"),stop:o(function(){},"stop")}),x=function(){function b(w){h(this,b),this.options=f({},v,w)}return o(b,"Layout"),u(b,[{key:"run",value:o(function(){var _=this,T=this.options,E=T.cy,L=T.eles,S=[],A=void 0,I=void 0,D=[],k=void 0,R=[];T.fixedNodeConstraint&&(!Array.isArray(T.fixedNodeConstraint)||T.fixedNodeConstraint.length==0)&&(T.fixedNodeConstraint=void 0),T.alignmentConstraint&&(T.alignmentConstraint.vertical&&(!Array.isArray(T.alignmentConstraint.vertical)||T.alignmentConstraint.vertical.length==0)&&(T.alignmentConstraint.vertical=void 0),T.alignmentConstraint.horizontal&&(!Array.isArray(T.alignmentConstraint.horizontal)||T.alignmentConstraint.horizontal.length==0)&&(T.alignmentConstraint.horizontal=void 0)),T.relativePlacementConstraint&&(!Array.isArray(T.relativePlacementConstraint)||T.relativePlacementConstraint.length==0)&&(T.relativePlacementConstraint=void 0);var C=T.fixedNodeConstraint||T.alignmentConstraint||T.relativePlacementConstraint;C&&(T.tile=!1,T.packComponents=!1);var O=void 0,N=!1;if(E.layoutUtilities&&T.packComponents&&(O=E.layoutUtilities("get"),O||(O=E.layoutUtilities()),N=!0),L.nodes().length>0)if(N){var B=d.getTopMostNodes(T.eles.nodes());if(k=d.connectComponents(E,T.eles,B),k.forEach(function(se){var ke=se.boundingBox();R.push({x:ke.x1+ke.w/2,y:ke.y1+ke.h/2})}),T.randomize&&k.forEach(function(se){T.eles=se,S.push(m(T))}),T.quality=="default"||T.quality=="proof"){var G=E.collection();if(T.tile){var z=new Map,W=[],Z=[],j=0,oe={nodeIndexes:z,xCoords:W,yCoords:Z},K=[];if(k.forEach(function(se,ke){se.edges().length==0&&(se.nodes().forEach(function(Re,Ce){G.merge(se.nodes()[Ce]),Re.isParent()||(oe.nodeIndexes.set(se.nodes()[Ce].id(),j++),oe.xCoords.push(se.nodes()[0].position().x),oe.yCoords.push(se.nodes()[0].position().y))}),K.push(ke))}),G.length>1){var ee=G.boundingBox();R.push({x:ee.x1+ee.w/2,y:ee.y1+ee.h/2}),k.push(G),S.push(oe);for(var J=K.length-1;J>=0;J--)k.splice(K[J],1),S.splice(K[J],1),R.splice(K[J],1)}}k.forEach(function(se,ke){T.eles=se,D.push(y(T,S[ke])),d.relocateComponent(R[ke],D[ke],T)})}else k.forEach(function(se,ke){d.relocateComponent(R[ke],S[ke],T)});var H=new Set;if(k.length>1){var q=[],Q=L.filter(function(se){return se.css("display")=="none"});k.forEach(function(se,ke){var Re=void 0;if(T.quality=="draft"&&(Re=S[ke].nodeIndexes),se.nodes().not(Q).length>0){var Ce={};Ce.edges=[],Ce.nodes=[];var Pe=void 0;se.nodes().not(Q).forEach(function(Ie){if(T.quality=="draft")if(!Ie.isParent())Pe=Re.get(Ie.id()),Ce.nodes.push({x:S[ke].xCoords[Pe]-Ie.boundingbox().w/2,y:S[ke].yCoords[Pe]-Ie.boundingbox().h/2,width:Ie.boundingbox().w,height:Ie.boundingbox().h});else{var $e=d.calcBoundingBox(Ie,S[ke].xCoords,S[ke].yCoords,Re);Ce.nodes.push({x:$e.topLeftX,y:$e.topLeftY,width:$e.width,height:$e.height})}else D[ke][Ie.id()]&&Ce.nodes.push({x:D[ke][Ie.id()].getLeft(),y:D[ke][Ie.id()].getTop(),width:D[ke][Ie.id()].getWidth(),height:D[ke][Ie.id()].getHeight()})}),se.edges().forEach(function(Ie){var $e=Ie.source(),ye=Ie.target();if($e.css("display")!="none"&&ye.css("display")!="none")if(T.quality=="draft"){var X=Re.get($e.id()),fe=Re.get(ye.id()),he=[],ge=[];if($e.isParent()){var ne=d.calcBoundingBox($e,S[ke].xCoords,S[ke].yCoords,Re);he.push(ne.topLeftX+ne.width/2),he.push(ne.topLeftY+ne.height/2)}else he.push(S[ke].xCoords[X]),he.push(S[ke].yCoords[X]);if(ye.isParent()){var ve=d.calcBoundingBox(ye,S[ke].xCoords,S[ke].yCoords,Re);ge.push(ve.topLeftX+ve.width/2),ge.push(ve.topLeftY+ve.height/2)}else ge.push(S[ke].xCoords[fe]),ge.push(S[ke].yCoords[fe]);Ce.edges.push({startX:he[0],startY:he[1],endX:ge[0],endY:ge[1]})}else D[ke][$e.id()]&&D[ke][ye.id()]&&Ce.edges.push({startX:D[ke][$e.id()].getCenterX(),startY:D[ke][$e.id()].getCenterY(),endX:D[ke][ye.id()].getCenterX(),endY:D[ke][ye.id()].getCenterY()})}),Ce.nodes.length>0&&(q.push(Ce),H.add(ke))}});var ae=O.packComponents(q,T.randomize).shifts;if(T.quality=="draft")S.forEach(function(se,ke){var Re=se.xCoords.map(function(Pe){return Pe+ae[ke].dx}),Ce=se.yCoords.map(function(Pe){return Pe+ae[ke].dy});se.xCoords=Re,se.yCoords=Ce});else{var ue=0;H.forEach(function(se){Object.keys(D[se]).forEach(function(ke){var Re=D[se][ke];Re.setCenter(Re.getCenterX()+ae[ue].dx,Re.getCenterY()+ae[ue].dy)}),ue++})}}}else{var P=T.eles.boundingBox();if(R.push({x:P.x1+P.w/2,y:P.y1+P.h/2}),T.randomize){var F=m(T);S.push(F)}T.quality=="default"||T.quality=="proof"?(D.push(y(T,S[0])),d.relocateComponent(R[0],D[0],T)):d.relocateComponent(R[0],S[0],T)}var ce=o(function(ke,Re){if(T.quality=="default"||T.quality=="proof"){typeof ke=="number"&&(ke=Re);var Ce=void 0,Pe=void 0,Ie=ke.data("id");return D.forEach(function(ye){Ie in ye&&(Ce={x:ye[Ie].getRect().getCenterX(),y:ye[Ie].getRect().getCenterY()},Pe=ye[Ie])}),T.nodeDimensionsIncludeLabels&&(Pe.labelWidth&&(Pe.labelPosHorizontal=="left"?Ce.x+=Pe.labelWidth/2:Pe.labelPosHorizontal=="right"&&(Ce.x-=Pe.labelWidth/2)),Pe.labelHeight&&(Pe.labelPosVertical=="top"?Ce.y+=Pe.labelHeight/2:Pe.labelPosVertical=="bottom"&&(Ce.y-=Pe.labelHeight/2))),Ce==null&&(Ce={x:ke.position("x"),y:ke.position("y")}),{x:Ce.x,y:Ce.y}}else{var $e=void 0;return S.forEach(function(ye){var X=ye.nodeIndexes.get(ke.id());X!=null&&($e={x:ye.xCoords[X],y:ye.yCoords[X]})}),$e==null&&($e={x:ke.position("x"),y:ke.position("y")}),{x:$e.x,y:$e.y}}},"getPositions");if(T.quality=="default"||T.quality=="proof"||T.randomize){var te=d.calcParentsWithoutChildren(E,L),Ne=L.filter(function(se){return se.css("display")=="none"});T.eles=L.not(Ne),L.nodes().not(":parent").not(Ne).layoutPositions(_,T,ce),te.length>0&&te.forEach(function(se){se.position(ce(se))})}else console.log("If randomize option is set to false, then quality option must be 'default' or 'proof'.")},"run")}]),b}();a.exports=x},657:(a,s,l)=>{var u=l(548),h=l(140).layoutBase.Matrix,f=l(140).layoutBase.SVD,d=o(function(m){var g=m.cy,y=m.eles,v=y.nodes(),x=y.nodes(":parent"),b=new Map,w=new Map,_=new Map,T=[],E=[],L=[],S=[],A=[],I=[],D=[],k=[],R=void 0,C=void 0,O=1e8,N=1e-9,P=m.piTol,F=m.samplingType,B=m.nodeSeparation,G=void 0,z=o(function(){for(var Te=0,ie=0,Ee=!1;ie=Ge;){me=Ae[Ge++];for(var vt=T[me],rt=0;rtet&&(et=A[Ue],bt=Ue)}return bt},"BFS"),Z=o(function(Te){var ie=void 0;if(Te){ie=Math.floor(Math.random()*C),R=ie;for(var Ae=0;Ae=1)break;et=Oe}for(var vt=0;vt=1)break;et=Oe}for(var yt=0;yt0&&(ie.isParent()?T[Te].push(_.get(ie.id())):T[Te].push(ie.id()))})});var te=o(function(Te){var ie=w.get(Te),Ee=void 0;b.get(Te).forEach(function(Ae){g.getElementById(Ae).isParent()?Ee=_.get(Ae):Ee=Ae,T[ie].push(Ee),T[w.get(Ee)].push(Te)})},"_loop"),Ne=!0,se=!1,ke=void 0;try{for(var Re=b.keys()[Symbol.iterator](),Ce;!(Ne=(Ce=Re.next()).done);Ne=!0){var Pe=Ce.value;te(Pe)}}catch(U){se=!0,ke=U}finally{try{!Ne&&Re.return&&Re.return()}finally{if(se)throw ke}}C=w.size;var Ie=void 0;if(C>2){G=C{var u=l(212),h=o(function(d){d&&d("layout","fcose",u)},"register");typeof cytoscape<"u"&&h(cytoscape),a.exports=h},140:a=>{a.exports=t}},r={};function n(a){var s=r[a];if(s!==void 0)return s.exports;var l=r[a]={exports:{}};return e[a](l,l.exports,n),l.exports}o(n,"__webpack_require__");var i=n(579);return i})()})});var F1,ap,yF=M(()=>{"use strict";su();F1=o(t=>`${t}`,"wrapIcon"),ap={prefix:"mermaid-architecture",height:80,width:80,icons:{database:{body:F1('')},server:{body:F1('')},disk:{body:F1('')},internet:{body:F1('')},cloud:{body:F1('')},unknown:zS,blank:{body:F1("")}}}});var o2e,l2e,c2e,u2e,h2e=M(()=>{"use strict";su();Vt();Pl();Rb();yF();gS();o2e=o(async function(t,e){let r=Mi("padding"),n=Mi("iconSize"),i=n/2,a=n/6,s=a/2;await Promise.all(e.edges().map(async l=>{let{source:u,sourceDir:h,sourceArrow:f,sourceGroup:d,target:p,targetDir:m,targetArrow:g,targetGroup:y,label:v}=mS(l),{x,y:b}=l[0].sourceEndpoint(),{x:w,y:_}=l[0].midpoint(),{x:T,y:E}=l[0].targetEndpoint(),L=r+4;if(d&&(ys(h)?x+=h==="L"?-L:L:b+=h==="T"?-L:L+18),y&&(ys(m)?T+=m==="L"?-L:L:E+=m==="T"?-L:L+18),!d&&ip.getNode(u)?.type==="junction"&&(ys(h)?x+=h==="L"?i:-i:b+=h==="T"?i:-i),!y&&ip.getNode(p)?.type==="junction"&&(ys(m)?T+=m==="L"?i:-i:E+=m==="T"?i:-i),l[0]._private.rscratch){let S=t.insert("g");if(S.insert("path").attr("d",`M ${x},${b} L ${w},${_} L${T},${E} `).attr("class","edge"),f){let A=ys(h)?Db[h](x,a):x-s,I=nu(h)?Db[h](b,a):b-s;S.insert("polygon").attr("points",uF[h](a)).attr("transform",`translate(${A},${I})`).attr("class","arrow")}if(g){let A=ys(m)?Db[m](T,a):T-s,I=nu(m)?Db[m](E,a):E-s;S.insert("polygon").attr("points",uF[m](a)).attr("transform",`translate(${A},${I})`).attr("class","arrow")}if(v){let A=pS(h,m)?"XY":ys(h)?"X":"Y",I=0;A==="X"?I=Math.abs(x-T):A==="Y"?I=Math.abs(b-E)/1.5:I=Math.abs(x-T)/2;let D=S.append("g");if(await Li(D,v,{useHtmlLabels:!1,width:I,classes:"architecture-service-label"},pe()),D.attr("dy","1em").attr("alignment-baseline","middle").attr("dominant-baseline","middle").attr("text-anchor","middle"),A==="X")D.attr("transform","translate("+w+", "+_+")");else if(A==="Y")D.attr("transform","translate("+w+", "+_+") rotate(-90)");else if(A==="XY"){let k=Nb(h,m);if(k&&Kve(k)){let R=D.node().getBoundingClientRect(),[C,O]=Zve(k);D.attr("dominant-baseline","auto").attr("transform",`rotate(${-1*C*O*45})`);let N=D.node().getBoundingClientRect();D.attr("transform",` + translate(${w}, ${_-R.height/2}) + translate(${C*N.width/2}, ${O*N.height/2}) + rotate(${-1*C*O*45}, 0, ${R.height/2}) + `)}}}}}))},"drawEdges"),l2e=o(async function(t,e){let n=Mi("padding")*.75,i=Mi("fontSize"),s=Mi("iconSize")/2;await Promise.all(e.nodes().map(async l=>{let u=Vf(l);if(u.type==="group"){let{h,w:f,x1:d,y1:p}=l.boundingBox();t.append("rect").attr("x",d+s).attr("y",p+s).attr("width",f).attr("height",h).attr("class","node-bkg");let m=t.append("g"),g=d,y=p;if(u.icon){let v=m.append("g");v.html(`${await _o(u.icon,{height:n,width:n,fallbackPrefix:ap.prefix})}`),v.attr("transform","translate("+(g+s+1)+", "+(y+s+1)+")"),g+=n,y+=i/2-1-2}if(u.label){let v=m.append("g");await Li(v,u.label,{useHtmlLabels:!1,width:f,classes:"architecture-service-label"},pe()),v.attr("dy","1em").attr("alignment-baseline","middle").attr("dominant-baseline","start").attr("text-anchor","start"),v.attr("transform","translate("+(g+s+4)+", "+(y+s+2)+")")}}}))},"drawGroups"),c2e=o(async function(t,e,r){for(let n of r){let i=e.append("g"),a=Mi("iconSize");if(n.title){let h=i.append("g");await Li(h,n.title,{useHtmlLabels:!1,width:a*1.5,classes:"architecture-service-label"},pe()),h.attr("dy","1em").attr("alignment-baseline","middle").attr("dominant-baseline","middle").attr("text-anchor","middle"),h.attr("transform","translate("+a/2+", "+a+")")}let s=i.append("g");if(n.icon)s.html(`${await _o(n.icon,{height:a,width:a,fallbackPrefix:ap.prefix})}`);else if(n.iconText){s.html(`${await _o("blank",{height:a,width:a,fallbackPrefix:ap.prefix})}`);let d=s.append("g").append("foreignObject").attr("width",a).attr("height",a).append("div").attr("class","node-icon-text").attr("style",`height: ${a}px;`).append("div").html(n.iconText),p=parseInt(window.getComputedStyle(d.node(),null).getPropertyValue("font-size").replace(/\D/g,""))??16;d.attr("style",`-webkit-line-clamp: ${Math.floor((a-2)/p)};`)}else s.append("path").attr("class","node-bkg").attr("id","node-"+n.id).attr("d",`M0 ${a} v${-a} q0,-5 5,-5 h${a} q5,0 5,5 v${a} H0 Z`);i.attr("class","architecture-service");let{width:l,height:u}=i._groups[0][0].getBBox();n.width=l,n.height=u,t.setElementForId(n.id,i)}return 0},"drawServices"),u2e=o(function(t,e,r){r.forEach(n=>{let i=e.append("g"),a=Mi("iconSize");i.append("g").append("rect").attr("id","node-"+n.id).attr("fill-opacity","0").attr("width",a).attr("height",a),i.attr("class","architecture-junction");let{width:l,height:u}=i._groups[0][0].getBBox();i.width=l,i.height=u,t.setElementForId(n.id,i)})},"drawJunctions")});function ait(t,e){t.forEach(r=>{e.add({group:"nodes",data:{type:"service",id:r.id,icon:r.icon,label:r.title,parent:r.in,width:Mi("iconSize"),height:Mi("iconSize")},classes:"node-service"})})}function sit(t,e){t.forEach(r=>{e.add({group:"nodes",data:{type:"junction",id:r.id,parent:r.in,width:Mi("iconSize"),height:Mi("iconSize")},classes:"node-junction"})})}function oit(t,e){e.nodes().map(r=>{let n=Vf(r);if(n.type==="group")return;n.x=r.position().x,n.y=r.position().y,t.getElementById(n.id).attr("transform","translate("+(n.x||0)+","+(n.y||0)+")")})}function lit(t,e){t.forEach(r=>{e.add({group:"nodes",data:{type:"group",id:r.id,icon:r.icon,label:r.title,parent:r.in},classes:"node-group"})})}function cit(t,e){t.forEach(r=>{let{lhsId:n,rhsId:i,lhsInto:a,lhsGroup:s,rhsInto:l,lhsDir:u,rhsDir:h,rhsGroup:f,title:d}=r,p=pS(r.lhsDir,r.rhsDir)?"segments":"straight",m={id:`${n}-${i}`,label:d,source:n,sourceDir:u,sourceArrow:a,sourceGroup:s,sourceEndpoint:u==="L"?"0 50%":u==="R"?"100% 50%":u==="T"?"50% 0":"50% 100%",target:i,targetDir:h,targetArrow:l,targetGroup:f,targetEndpoint:h==="L"?"0 50%":h==="R"?"100% 50%":h==="T"?"50% 0":"50% 100%"};e.add({group:"edges",data:m,classes:p})})}function uit(t){let e=t.map(i=>{let a={},s={};return Object.entries(i).forEach(([l,[u,h]])=>{a[h]||(a[h]=[]),s[u]||(s[u]=[]),a[h].push(l),s[u].push(l)}),{horiz:Object.values(a).filter(l=>l.length>1),vert:Object.values(s).filter(l=>l.length>1)}}),[r,n]=e.reduce(([i,a],{horiz:s,vert:l})=>[[...i,...s],[...a,...l]],[[],[]]);return{horizontal:r,vertical:n}}function hit(t){let e=[],r=o(i=>`${i[0]},${i[1]}`,"posToStr"),n=o(i=>i.split(",").map(a=>parseInt(a)),"strToPos");return t.forEach(i=>{let a=Object.fromEntries(Object.entries(i).map(([h,f])=>[r(f),h])),s=[r([0,0])],l={},u={L:[-1,0],R:[1,0],T:[0,1],B:[0,-1]};for(;s.length>0;){let h=s.shift();if(h){l[h]=1;let f=a[h];if(f){let d=n(h);Object.entries(u).forEach(([p,m])=>{let g=r([d[0]+m[0],d[1]+m[1]]),y=a[g];y&&!l[g]&&(s.push(g),e.push({[cF[p]]:y,[cF[jve(p)]]:f,gap:1.5*Mi("iconSize")}))})}}}}),e}function fit(t,e,r,n,{spatialMaps:i}){return new Promise(a=>{let s=Ve("body").append("div").attr("id","cy").attr("style","display:none"),l=fl({container:document.getElementById("cy"),style:[{selector:"edge",style:{"curve-style":"straight",label:"data(label)","source-endpoint":"data(sourceEndpoint)","target-endpoint":"data(targetEndpoint)"}},{selector:"edge.segments",style:{"curve-style":"segments","segment-weights":"0","segment-distances":[.5],"edge-distances":"endpoints","source-endpoint":"data(sourceEndpoint)","target-endpoint":"data(targetEndpoint)"}},{selector:"node",style:{"compound-sizing-wrt-labels":"include"}},{selector:"node[label]",style:{"text-valign":"bottom","text-halign":"center","font-size":`${Mi("fontSize")}px`}},{selector:".node-service",style:{label:"data(label)",width:"data(width)",height:"data(height)"}},{selector:".node-junction",style:{width:"data(width)",height:"data(height)"}},{selector:".node-group",style:{padding:`${Mi("padding")}px`}}]});s.remove(),lit(r,l),ait(t,l),sit(e,l),cit(n,l);let u=uit(i),h=hit(i),f=l.layout({name:"fcose",quality:"proof",styleEnabled:!1,animate:!1,nodeDimensionsIncludeLabels:!1,idealEdgeLength(d){let[p,m]=d.connectedNodes(),{parent:g}=Vf(p),{parent:y}=Vf(m);return g===y?1.5*Mi("iconSize"):.5*Mi("iconSize")},edgeElasticity(d){let[p,m]=d.connectedNodes(),{parent:g}=Vf(p),{parent:y}=Vf(m);return g===y?.45:.001},alignmentConstraint:u,relativePlacementConstraint:h});f.one("layoutstop",()=>{function d(p,m,g,y){let v,x,{x:b,y:w}=p,{x:_,y:T}=m;x=(y-w+(b-g)*(w-T)/(b-_))/Math.sqrt(1+Math.pow((w-T)/(b-_),2)),v=Math.sqrt(Math.pow(y-w,2)+Math.pow(g-b,2)-Math.pow(x,2));let E=Math.sqrt(Math.pow(_-b,2)+Math.pow(T-w,2));v=v/E;let L=(_-b)*(y-w)-(T-w)*(g-b);switch(!0){case L>=0:L=1;break;case L<0:L=-1;break}let S=(_-b)*(g-b)+(T-w)*(y-w);switch(!0){case S>=0:S=1;break;case S<0:S=-1;break}return x=Math.abs(x)*L,v=v*S,{distances:x,weights:v}}o(d,"getSegmentWeights"),l.startBatch();for(let p of Object.values(l.edges()))if(p.data?.()){let{x:m,y:g}=p.source().position(),{x:y,y:v}=p.target().position();if(m!==y&&g!==v){let x=p.sourceEndpoint(),b=p.targetEndpoint(),{sourceDir:w}=mS(p),[_,T]=nu(w)?[x.x,b.y]:[b.x,x.y],{weights:E,distances:L}=d(x,b,_,T);p.style("segment-distances",L),p.style("segment-weights",E)}}l.endBatch(),f.run()}),f.run(),l.ready(d=>{Y.info("Ready",d),a(l)})})}var f2e,dit,d2e,p2e=M(()=>{"use strict";su();SB();f2e=Ji(s2e(),1);pr();ut();eh();ai();Rb();yF();gS();h2e();Xb([{name:ap.prefix,icons:ap}]);fl.use(f2e.default);o(ait,"addServices");o(sit,"addJunctions");o(oit,"positionNodes");o(lit,"addGroups");o(cit,"addEdges");o(uit,"getAlignments");o(hit,"getRelativeConstraints");o(fit,"layoutArchitecture");dit=o(async(t,e,r,n)=>{let i=n.db,a=i.getServices(),s=i.getJunctions(),l=i.getGroups(),u=i.getEdges(),h=i.getDataStructures(),f=Va(e),d=f.append("g");d.attr("class","architecture-edges");let p=f.append("g");p.attr("class","architecture-services");let m=f.append("g");m.attr("class","architecture-groups"),await c2e(i,p,a),u2e(i,p,s);let g=await fit(a,s,l,u,h);await o2e(d,g),await l2e(m,g),oit(i,g),Io(void 0,f,Mi("padding"),Mi("useMaxWidth"))},"draw"),d2e={draw:dit}});var m2e={};vr(m2e,{diagram:()=>pit});var pit,g2e=M(()=>{"use strict";n2e();Rb();a2e();p2e();pit={parser:r2e,db:ip,renderer:d2e,styles:i2e}});var eat={};vr(eat,{default:()=>Jit});su();GS();Zf();var VX="c4",PCe=o(t=>/^\s*C4Context|C4Container|C4Component|C4Dynamic|C4Deployment/.test(t),"detector"),BCe=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>($X(),GX));return{id:VX,diagram:t}},"loader"),FCe={id:VX,detector:PCe,loader:BCe},UX=FCe;var Yie="flowchart",UOe=o((t,e)=>e?.flowchart?.defaultRenderer==="dagre-wrapper"||e?.flowchart?.defaultRenderer==="elk"?!1:/^\s*graph/.test(t),"detector"),HOe=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(ET(),kT));return{id:Yie,diagram:t}},"loader"),WOe={id:Yie,detector:UOe,loader:HOe},qie=WOe;var Xie="flowchart-v2",YOe=o((t,e)=>e?.flowchart?.defaultRenderer==="dagre-d3"?!1:(e?.flowchart?.defaultRenderer==="elk"&&(e.layout="elk"),/^\s*graph/.test(t)&&e?.flowchart?.defaultRenderer==="dagre-wrapper"?!0:/^\s*flowchart/.test(t)),"detector"),qOe=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(ET(),kT));return{id:Xie,diagram:t}},"loader"),XOe={id:Xie,detector:YOe,loader:qOe},jie=XOe;var Eae="er",kPe=o(t=>/^\s*erDiagram/.test(t),"detector"),EPe=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(kae(),Tae));return{id:Eae,diagram:t}},"loader"),SPe={id:Eae,detector:kPe,loader:EPe},Sae=SPe;var Oue="gitGraph",jGe=o(t=>/^\s*gitGraph/.test(t),"detector"),KGe=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(Iue(),Mue));return{id:Oue,diagram:t}},"loader"),QGe={id:Oue,detector:jGe,loader:KGe},Pue=QGe;var fhe="gantt",F$e=o(t=>/^\s*gantt/.test(t),"detector"),z$e=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(hhe(),uhe));return{id:fhe,diagram:t}},"loader"),G$e={id:fhe,detector:F$e,loader:z$e},dhe=G$e;var The="info",Y$e=o(t=>/^\s*info/.test(t),"detector"),q$e=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(whe(),bhe));return{id:The,diagram:t}},"loader"),khe={id:The,detector:Y$e,loader:q$e};var Mhe="pie",sVe=o(t=>/^\s*pie/.test(t),"detector"),oVe=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(Rhe(),Nhe));return{id:Mhe,diagram:t}},"loader"),Ihe={id:Mhe,detector:sVe,loader:oVe};var qhe="quadrantChart",SVe=o(t=>/^\s*quadrantChart/.test(t),"detector"),CVe=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(Yhe(),Whe));return{id:qhe,diagram:t}},"loader"),AVe={id:qhe,detector:SVe,loader:CVe},Xhe=AVe;var wfe="xychart",UVe=o(t=>/^\s*xychart-beta/.test(t),"detector"),HVe=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(bfe(),xfe));return{id:wfe,diagram:t}},"loader"),WVe={id:wfe,detector:UVe,loader:HVe},Tfe=WVe;var Ffe="requirement",xUe=o(t=>/^\s*requirement(Diagram)?/.test(t),"detector"),bUe=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(Bfe(),Pfe));return{id:Ffe,diagram:t}},"loader"),wUe={id:Ffe,detector:xUe,loader:bUe},zfe=wUe;var fde="sequence",EHe=o(t=>/^\s*sequenceDiagram/.test(t),"detector"),SHe=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(hde(),ude));return{id:fde,diagram:t}},"loader"),CHe={id:fde,detector:EHe,loader:SHe},dde=CHe;var Cde="class",iWe=o((t,e)=>e?.class?.defaultRenderer==="dagre-wrapper"?!1:/^\s*classDiagram/.test(t),"detector"),aWe=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(Sde(),Ede));return{id:Cde,diagram:t}},"loader"),sWe={id:Cde,detector:iWe,loader:aWe},Ade=sWe;var Dde="classDiagram",lWe=o((t,e)=>/^\s*classDiagram/.test(t)&&e?.class?.defaultRenderer==="dagre-wrapper"?!0:/^\s*classDiagram-v2/.test(t),"detector"),cWe=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(Lde(),_de));return{id:Dde,diagram:t}},"loader"),uWe={id:Dde,detector:lWe,loader:cWe},Nde=uWe;var T0e="state",aYe=o((t,e)=>e?.state?.defaultRenderer==="dagre-wrapper"?!1:/^\s*stateDiagram/.test(t),"detector"),sYe=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(w0e(),b0e));return{id:T0e,diagram:t}},"loader"),oYe={id:T0e,detector:aYe,loader:sYe},k0e=oYe;var C0e="stateDiagram",cYe=o((t,e)=>!!(/^\s*stateDiagram-v2/.test(t)||/^\s*stateDiagram/.test(t)&&e?.state?.defaultRenderer==="dagre-wrapper"),"detector"),uYe=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(S0e(),E0e));return{id:C0e,diagram:t}},"loader"),hYe={id:C0e,detector:cYe,loader:uYe},A0e=hYe;var U0e="journey",RYe=o(t=>/^\s*journey/.test(t),"detector"),MYe=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(V0e(),$0e));return{id:U0e,diagram:t}},"loader"),IYe={id:U0e,detector:RYe,loader:MYe},H0e=IYe;ut();eh();ai();var OYe=o((t,e,r)=>{Y.debug(`rendering svg for syntax error +`);let n=Va(e),i=n.append("g");n.attr("viewBox","0 0 2412 512"),Zr(n,100,512,!0),i.append("path").attr("class","error-icon").attr("d","m411.313,123.313c6.25-6.25 6.25-16.375 0-22.625s-16.375-6.25-22.625,0l-32,32-9.375,9.375-20.688-20.688c-12.484-12.5-32.766-12.5-45.25,0l-16,16c-1.261,1.261-2.304,2.648-3.31,4.051-21.739-8.561-45.324-13.426-70.065-13.426-105.867,0-192,86.133-192,192s86.133,192 192,192 192-86.133 192-192c0-24.741-4.864-48.327-13.426-70.065 1.402-1.007 2.79-2.049 4.051-3.31l16-16c12.5-12.492 12.5-32.758 0-45.25l-20.688-20.688 9.375-9.375 32.001-31.999zm-219.313,100.687c-52.938,0-96,43.063-96,96 0,8.836-7.164,16-16,16s-16-7.164-16-16c0-70.578 57.422-128 128-128 8.836,0 16,7.164 16,16s-7.164,16-16,16z"),i.append("path").attr("class","error-icon").attr("d","m459.02,148.98c-6.25-6.25-16.375-6.25-22.625,0s-6.25,16.375 0,22.625l16,16c3.125,3.125 7.219,4.688 11.313,4.688 4.094,0 8.188-1.563 11.313-4.688 6.25-6.25 6.25-16.375 0-22.625l-16.001-16z"),i.append("path").attr("class","error-icon").attr("d","m340.395,75.605c3.125,3.125 7.219,4.688 11.313,4.688 4.094,0 8.188-1.563 11.313-4.688 6.25-6.25 6.25-16.375 0-22.625l-16-16c-6.25-6.25-16.375-6.25-22.625,0s-6.25,16.375 0,22.625l15.999,16z"),i.append("path").attr("class","error-icon").attr("d","m400,64c8.844,0 16-7.164 16-16v-32c0-8.836-7.156-16-16-16-8.844,0-16,7.164-16,16v32c0,8.836 7.156,16 16,16z"),i.append("path").attr("class","error-icon").attr("d","m496,96.586h-32c-8.844,0-16,7.164-16,16 0,8.836 7.156,16 16,16h32c8.844,0 16-7.164 16-16 0-8.836-7.156-16-16-16z"),i.append("path").attr("class","error-icon").attr("d","m436.98,75.605c3.125,3.125 7.219,4.688 11.313,4.688 4.094,0 8.188-1.563 11.313-4.688l32-32c6.25-6.25 6.25-16.375 0-22.625s-16.375-6.25-22.625,0l-32,32c-6.251,6.25-6.251,16.375-0.001,22.625z"),i.append("text").attr("class","error-text").attr("x",1440).attr("y",250).attr("font-size","150px").style("text-anchor","middle").text("Syntax error in text"),i.append("text").attr("class","error-text").attr("x",1250).attr("y",400).attr("font-size","100px").style("text-anchor","middle").text(`mermaid version ${r}`)},"draw"),xP={draw:OYe},W0e=xP;var PYe={db:{},renderer:xP,parser:{parse:o(()=>{},"parse")}},Y0e=PYe;var q0e="flowchart-elk",BYe=o((t,e={})=>/^\s*flowchart-elk/.test(t)||/^\s*flowchart|graph/.test(t)&&e?.flowchart?.defaultRenderer==="elk"?(e.layout="elk",!0):!1,"detector"),FYe=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(ET(),kT));return{id:q0e,diagram:t}},"loader"),zYe={id:q0e,detector:BYe,loader:FYe},X0e=zYe;var bpe="timeline",iqe=o(t=>/^\s*timeline/.test(t),"detector"),aqe=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(xpe(),vpe));return{id:bpe,diagram:t}},"loader"),sqe={id:bpe,detector:iqe,loader:aqe},wpe=sqe;var z1e="mindmap",ptt=o(t=>/^\s*mindmap/.test(t),"detector"),mtt=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(F1e(),B1e));return{id:z1e,diagram:t}},"loader"),gtt={id:z1e,detector:ptt,loader:mtt},G1e=gtt;var Z1e="kanban",Rtt=o(t=>/^\s*kanban/.test(t),"detector"),Mtt=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(Q1e(),K1e));return{id:Z1e,diagram:t}},"loader"),Itt={id:Z1e,detector:Rtt,loader:Mtt},J1e=Itt;var Rye="sankey",rrt=o(t=>/^\s*sankey-beta/.test(t),"detector"),nrt=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(Nye(),Dye));return{id:Rye,diagram:t}},"loader"),irt={id:Rye,detector:rrt,loader:nrt},Mye=irt;var Uye="packet",yrt=o(t=>/^\s*packet-beta/.test(t),"detector"),vrt=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(Vye(),$ye));return{id:Uye,diagram:t}},"loader"),Hye={id:Uye,detector:yrt,loader:vrt};var qve="block",znt=o(t=>/^\s*block-beta/.test(t),"detector"),Gnt=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(Yve(),Wve));return{id:qve,diagram:t}},"loader"),$nt={id:qve,detector:znt,loader:Gnt},Xve=$nt;var y2e="architecture",mit=o(t=>/^\s*architecture/.test(t),"detector"),git=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(g2e(),m2e));return{id:y2e,diagram:t}},"loader"),yit={id:y2e,detector:mit,loader:git},v2e=yit;Zf();Vt();var x2e=!1,z1=o(()=>{x2e||(x2e=!0,od("error",Y0e,t=>t.toLowerCase().trim()==="error"),od("---",{db:{clear:o(()=>{},"clear")},styles:{},renderer:{draw:o(()=>{},"draw")},parser:{parse:o(()=>{throw new Error("Diagrams beginning with --- are not valid. If you were trying to use a YAML front-matter, please ensure that you've correctly opened and closed the YAML front-matter with un-indented `---` blocks")},"parse")},init:o(()=>null,"init")},t=>t.toLowerCase().trimStart().startsWith("---")),Zb(UX,J1e,Nde,Ade,Sae,dhe,khe,Ihe,zfe,dde,X0e,jie,qie,G1e,wpe,Pue,A0e,k0e,H0e,Xhe,Mye,Hye,Tfe,Xve,v2e))},"addDiagrams");ut();Zf();Vt();var b2e=o(async()=>{Y.debug("Loading registered diagrams");let e=(await Promise.allSettled(Object.entries(Qf).map(async([r,{detector:n,loader:i}])=>{if(i)try{by(r)}catch{try{let{diagram:a,id:s}=await i();od(s,a,n)}catch(a){throw Y.error(`Failed to load external diagram with key ${r}. Removing from detectors.`),delete Qf[r],a}}}))).filter(r=>r.status==="rejected");if(e.length>0){Y.error(`Failed to load ${e.length} external diagrams`);for(let r of e)Y.error(r);throw new Error(`Failed to load ${e.length} external diagrams`)}},"loadRegisteredDiagrams");ut();pr();var yS="comm",vS="rule",xS="decl";var w2e="@import";var T2e="@keyframes";var k2e="@layer";var vF=Math.abs,Pb=String.fromCharCode;function bS(t){return t.trim()}o(bS,"trim");function Bb(t,e,r){return t.replace(e,r)}o(Bb,"replace");function E2e(t,e,r){return t.indexOf(e,r)}o(E2e,"indexof");function sp(t,e){return t.charCodeAt(e)|0}o(sp,"charat");function Uf(t,e,r){return t.slice(e,r)}o(Uf,"substr");function Eo(t){return t.length}o(Eo,"strlen");function S2e(t){return t.length}o(S2e,"sizeof");function G1(t,e){return e.push(t),t}o(G1,"append");var wS=1,$1=1,C2e=0,pl=0,Ii=0,U1="";function TS(t,e,r,n,i,a,s,l){return{value:t,root:e,parent:r,type:n,props:i,children:a,line:wS,column:$1,length:s,return:"",siblings:l}}o(TS,"node");function A2e(){return Ii}o(A2e,"char");function _2e(){return Ii=pl>0?sp(U1,--pl):0,$1--,Ii===10&&($1=1,wS--),Ii}o(_2e,"prev");function ml(){return Ii=pl2||V1(Ii)>3?"":" "}o(N2e,"whitespace");function R2e(t,e){for(;--e&&ml()&&!(Ii<48||Ii>102||Ii>57&&Ii<65||Ii>70&&Ii<97););return kS(t,Fb()+(e<6&&ch()==32&&ml()==32))}o(R2e,"escaping");function xF(t){for(;ml();)switch(Ii){case t:return pl;case 34:case 39:t!==34&&t!==39&&xF(Ii);break;case 40:t===41&&xF(t);break;case 92:ml();break}return pl}o(xF,"delimiter");function M2e(t,e){for(;ml()&&t+Ii!==57;)if(t+Ii===84&&ch()===47)break;return"/*"+kS(e,pl-1)+"*"+Pb(t===47?t:ml())}o(M2e,"commenter");function I2e(t){for(;!V1(ch());)ml();return kS(t,pl)}o(I2e,"identifier");function B2e(t){return D2e(SS("",null,null,null,[""],t=L2e(t),0,[0],t))}o(B2e,"compile");function SS(t,e,r,n,i,a,s,l,u){for(var h=0,f=0,d=s,p=0,m=0,g=0,y=1,v=1,x=1,b=0,w="",_=i,T=a,E=n,L=w;v;)switch(g=b,b=ml()){case 40:if(g!=108&&sp(L,d-1)==58){E2e(L+=Bb(ES(b),"&","&\f"),"&\f",vF(h?l[h-1]:0))!=-1&&(x=-1);break}case 34:case 39:case 91:L+=ES(b);break;case 9:case 10:case 13:case 32:L+=N2e(g);break;case 92:L+=R2e(Fb()-1,7);continue;case 47:switch(ch()){case 42:case 47:G1(vit(M2e(ml(),Fb()),e,r,u),u),(V1(g||1)==5||V1(ch()||1)==5)&&Eo(L)&&Uf(L,-1,void 0)!==" "&&(L+=" ");break;default:L+="/"}break;case 123*y:l[h++]=Eo(L)*x;case 125*y:case 59:case 0:switch(b){case 0:case 125:v=0;case 59+f:x==-1&&(L=Bb(L,/\f/g,"")),m>0&&(Eo(L)-d||y===0&&g===47)&&G1(m>32?P2e(L+";",n,r,d-1,u):P2e(Bb(L," ","")+";",n,r,d-2,u),u);break;case 59:L+=";";default:if(G1(E=O2e(L,e,r,h,f,i,l,w,_=[],T=[],d,a),a),b===123)if(f===0)SS(L,e,E,E,_,a,d,l,T);else switch(p===99&&sp(L,3)===110?100:p){case 100:case 108:case 109:case 115:SS(t,E,E,n&&G1(O2e(t,E,E,0,0,i,l,w,i,_=[],d,T),T),i,T,d,l,n?_:T);break;default:SS(L,E,E,E,[""],T,0,l,T)}}h=f=m=0,y=x=1,w=L="",d=s;break;case 58:d=1+Eo(L),m=g;default:if(y<1){if(b==123)--y;else if(b==125&&y++==0&&_2e()==125)continue}switch(L+=Pb(b),b*y){case 38:x=f>0?1:(L+="\f",-1);break;case 44:l[h++]=(Eo(L)-1)*x,x=1;break;case 64:ch()===45&&(L+=ES(ml())),p=ch(),f=d=Eo(w=L+=I2e(Fb())),b++;break;case 45:g===45&&Eo(L)==2&&(y=0)}}return a}o(SS,"parse");function O2e(t,e,r,n,i,a,s,l,u,h,f,d){for(var p=i-1,m=i===0?a:[""],g=S2e(m),y=0,v=0,x=0;y0?m[b]+" "+w:Bb(w,/&\f/g,m[b])))&&(u[x++]=_);return TS(t,e,r,i===0?vS:l,u,h,f,d)}o(O2e,"ruleset");function vit(t,e,r,n){return TS(t,e,r,yS,Pb(A2e()),Uf(t,2,-2),0,n)}o(vit,"comment");function P2e(t,e,r,n,i){return TS(t,e,r,xS,Uf(t,0,n),Uf(t,n+1,-1),n,i)}o(P2e,"declaration");function CS(t,e){for(var r="",n=0;n{$2e.forEach(t=>{t()}),$2e=[]},"attachFunctions");ut();var U2e=o(t=>t.replace(/^\s*%%(?!{)[^\n]+\n?/gm,"").trimStart(),"cleanupComments");Qb();ew();function H2e(t){let e=t.match(Kb);if(!e)return{text:t,metadata:{}};let r=Sm(e[1],{schema:Em})??{};r=typeof r=="object"&&!Array.isArray(r)?r:{};let n={};return r.displayMode&&(n.displayMode=r.displayMode.toString()),r.title&&(n.title=r.title.toString()),r.config&&(n.config=r.config),{text:t.slice(e[0].length),metadata:n}}o(H2e,"extractFrontMatter");hr();var bit=o(t=>t.replace(/\r\n?/g,` +`).replace(/<(\w+)([^>]*)>/g,(e,r,n)=>"<"+r+n.replace(/="([^"]*)"/g,"='$1'")+">"),"cleanupText"),wit=o(t=>{let{text:e,metadata:r}=H2e(t),{displayMode:n,title:i,config:a={}}=r;return n&&(a.gantt||(a.gantt={}),a.gantt.displayMode=n),{title:i,config:a,text:e}},"processFrontmatter"),Tit=o(t=>{let e=Ut.detectInit(t)??{},r=Ut.detectDirective(t,"wrap");return Array.isArray(r)?e.wrap=r.some(({type:n})=>n==="wrap"):r?.type==="wrap"&&(e.wrap=!0),{text:LX(t),directive:e}},"processDirectives");function bF(t){let e=bit(t),r=wit(e),n=Tit(r.text),i=Ds(r.config,n.directive);return t=U2e(n.text),{code:t,title:r.title,config:i}}o(bF,"preprocessDiagram");JC();a4();hr();function W2e(t){let e=new TextEncoder().encode(t),r=Array.from(e,n=>String.fromCodePoint(n)).join("");return btoa(r)}o(W2e,"toBase64");var kit=5e4,Eit="graph TB;a[Maximum text size in diagram exceeded];style a fill:#faa",Sit="sandbox",Cit="loose",Ait="http://www.w3.org/2000/svg",_it="http://www.w3.org/1999/xlink",Lit="http://www.w3.org/1999/xhtml",Dit="100%",Nit="100%",Rit="border:0;margin:0;",Mit="margin:0",Iit="allow-top-navigation-by-user-activation allow-popups",Oit='The "iframe" tag is not supported by your browser.',Pit=["foreignobject"],Bit=["dominant-baseline"];function K2e(t){let e=bF(t);return ly(),eG(e.config??{}),e}o(K2e,"processAndSetConfigs");async function Fit(t,e){z1();try{let{code:r,config:n}=K2e(t);return{diagramType:(await Q2e(r)).type,config:n}}catch(r){if(e?.suppressErrors)return!1;throw r}}o(Fit,"parse");var Y2e=o((t,e,r=[])=>` +.${t} ${e} { ${r.join(" !important; ")} !important; }`,"cssImportantStyles"),zit=o((t,e=new Map)=>{let r="";if(t.themeCSS!==void 0&&(r+=` +${t.themeCSS}`),t.fontFamily!==void 0&&(r+=` +:root { --mermaid-font-family: ${t.fontFamily}}`),t.altFontFamily!==void 0&&(r+=` +:root { --mermaid-alt-font-family: ${t.altFontFamily}}`),e instanceof Map){let s=t.htmlLabels??t.flowchart?.htmlLabels?["> *","span"]:["rect","polygon","ellipse","circle","path"];e.forEach(l=>{cr(l.styles)||s.forEach(u=>{r+=Y2e(l.id,u,l.styles)}),cr(l.textStyles)||(r+=Y2e(l.id,"tspan",(l?.textStyles||[]).map(u=>u.replace("color","fill"))))})}return r},"createCssStyles"),Git=o((t,e,r,n)=>{let i=zit(t,r),a=O$(e,i,t.themeVariables);return CS(B2e(`${n}{${a}}`),F2e)},"createUserStyles"),$it=o((t="",e,r)=>{let n=t;return!r&&!e&&(n=n.replace(/marker-end="url\([\d+./:=?A-Za-z-]*?#/g,'marker-end="url(#')),n=Ma(n),n=n.replace(/
    /g,"
    "),n},"cleanUpSvgCode"),Vit=o((t="",e)=>{let r=e?.viewBox?.baseVal?.height?e.viewBox.baseVal.height+"px":Nit,n=W2e(`${t}`);return``},"putIntoIFrame"),q2e=o((t,e,r,n,i)=>{let a=t.append("div");a.attr("id",r),n&&a.attr("style",n);let s=a.append("svg").attr("id",e).attr("width","100%").attr("xmlns",Ait);return i&&s.attr("xmlns:xlink",i),s.append("g"),t},"appendDivSvgG");function X2e(t,e){return t.append("iframe").attr("id",e).attr("style","width: 100%; height: 100%;").attr("sandbox","")}o(X2e,"sandboxedIframe");var Uit=o((t,e,r,n)=>{t.getElementById(e)?.remove(),t.getElementById(r)?.remove(),t.getElementById(n)?.remove()},"removeExistingElements"),Hit=o(async function(t,e,r){z1();let n=K2e(e);e=n.code;let i=Cr();Y.debug(i),e.length>(i?.maxTextSize??kit)&&(e=Eit);let a="#"+t,s="i"+t,l="#"+s,u="d"+t,h="#"+u,f=o(()=>{let R=Ve(p?l:h).node();R&&"remove"in R&&R.remove()},"removeTempElements"),d=Ve("body"),p=i.securityLevel===Sit,m=i.securityLevel===Cit,g=i.fontFamily;if(r!==void 0){if(r&&(r.innerHTML=""),p){let k=X2e(Ve(r),s);d=Ve(k.nodes()[0].contentDocument.body),d.node().style.margin=0}else d=Ve(r);q2e(d,t,u,`font-family: ${g}`,_it)}else{if(Uit(document,t,u,s),p){let k=X2e(Ve("body"),s);d=Ve(k.nodes()[0].contentDocument.body),d.node().style.margin=0}else d=Ve("body");q2e(d,t,u)}let y,v;try{y=await H1.fromText(e,{title:n.title})}catch(k){if(i.suppressErrorRendering)throw f(),k;y=await H1.fromText("error"),v=k}let x=d.select(h).node(),b=y.type,w=x.firstChild,_=w.firstChild,T=y.renderer.getClasses?.(e,y),E=Git(i,b,T,a),L=document.createElement("style");L.innerHTML=E,w.insertBefore(L,_);try{await y.renderer.draw(e,t,_x,y)}catch(k){throw i.suppressErrorRendering?f():W0e.draw(e,t,_x),k}let S=d.select(`${h} svg`),A=y.db.getAccTitle?.(),I=y.db.getAccDescription?.();Yit(b,S,A,I),d.select(`[id="${t}"]`).selectAll("foreignobject > *").attr("xmlns",Lit);let D=d.select(h).node().innerHTML;if(Y.debug("config.arrowMarkerAbsolute",i.arrowMarkerAbsolute),D=$it(D,p,xr(i.arrowMarkerAbsolute)),p){let k=d.select(h+" svg").node();D=Vit(D,k)}else m||(D=j2e.default.sanitize(D,{ADD_TAGS:Pit,ADD_ATTR:Bit}));if(V2e(),v)throw v;return f(),{diagramType:b,svg:D,bindFunctions:y.db.bindFunctions}},"render");function Wit(t={}){let e=Vn({},t);e?.fontFamily&&!e.themeVariables?.fontFamily&&(e.themeVariables||(e.themeVariables={}),e.themeVariables.fontFamily=e.fontFamily),Qz(e),e?.theme&&e.theme in Do?e.themeVariables=Do[e.theme].getThemeVariables(e.themeVariables):e&&(e.themeVariables=Do.default.getThemeVariables(e.themeVariables));let r=typeof e=="object"?iC(e):aC();J1(r.logLevel),z1()}o(Wit,"initialize");var Q2e=o((t,e={})=>{let{code:r}=bF(t);return H1.fromText(r,e)},"getDiagramFromText");function Yit(t,e,r,n){z2e(e,t),G2e(e,r,n,e.attr("id"))}o(Yit,"addA11yInfo");var Hf=Object.freeze({render:Hit,parse:Fit,getDiagramFromText:Q2e,initialize:Wit,getConfig:Cr,setConfig:o4,getSiteConfig:aC,updateSiteConfig:Zz,reset:o(()=>{ly()},"reset"),globalReset:o(()=>{ly(ph)},"globalReset"),defaultConfig:ph});J1(Cr().logLevel);ly(Cr());Jv();hr();var qit=o((t,e,r)=>{Y.warn(t),s9(t)?(r&&r(t.str,t.hash),e.push({...t,message:t.str,error:t})):(r&&r(t),t instanceof Error&&e.push({str:t.message,message:t.message,hash:t.name,error:t}))},"handleError"),Z2e=o(async function(t={querySelector:".mermaid"}){try{await Xit(t)}catch(e){if(s9(e)&&Y.error(e.str),uh.parseError&&uh.parseError(e),!t.suppressErrors)throw Y.error("Use the suppressErrors option to suppress these errors"),e}},"run"),Xit=o(async function({postRenderCallback:t,querySelector:e,nodes:r}={querySelector:".mermaid"}){let n=Hf.getConfig();Y.debug(`${t?"":"No "}Callback function found`);let i;if(r)i=r;else if(e)i=document.querySelectorAll(e);else throw new Error("Nodes and querySelector are both undefined");Y.debug(`Found ${i.length} diagrams`),n?.startOnLoad!==void 0&&(Y.debug("Start On Load: "+n?.startOnLoad),Hf.updateSiteConfig({startOnLoad:n?.startOnLoad}));let a=new Ut.InitIDGenerator(n.deterministicIds,n.deterministicIDSeed),s,l=[];for(let u of Array.from(i)){Y.info("Rendering diagram: "+u.id);if(u.getAttribute("data-processed"))continue;u.setAttribute("data-processed","true");let h=`mermaid-${a.next()}`;s=u.innerHTML,s=jb(Ut.entityDecode(s)).trim().replace(//gi,"
    ");let f=Ut.detectInit(s);f&&Y.debug("Detected early reinit: ",f);try{let{svg:d,bindFunctions:p}=await rxe(h,s,u);u.innerHTML=d,t&&await t(h),p&&p(u)}catch(d){qit(d,l,uh.parseError)}}if(l.length>0)throw l[0]},"runThrowsErrors"),J2e=o(function(t){Hf.initialize(t)},"initialize"),jit=o(async function(t,e,r){Y.warn("mermaid.init is deprecated. Please use run instead."),t&&J2e(t);let n={postRenderCallback:r,querySelector:".mermaid"};typeof e=="string"?n.querySelector=e:e&&(e instanceof HTMLElement?n.nodes=[e]:n.nodes=e),await Z2e(n)},"init"),Kit=o(async(t,{lazyLoad:e=!0}={})=>{z1(),Zb(...t),e===!1&&await b2e()},"registerExternalDiagrams"),exe=o(function(){if(uh.startOnLoad){let{startOnLoad:t}=Hf.getConfig();t&&uh.run().catch(e=>Y.error("Mermaid failed to initialize",e))}},"contentLoaded");if(typeof document<"u"){window.addEventListener("load",exe,!1)}var Qit=o(function(t){uh.parseError=t},"setParseErrorHandler"),AS=[],wF=!1,txe=o(async()=>{if(!wF){for(wF=!0;AS.length>0;){let t=AS.shift();if(t)try{await t()}catch(e){Y.error("Error executing queue",e)}}wF=!1}},"executeQueue"),Zit=o(async(t,e)=>new Promise((r,n)=>{let i=o(()=>new Promise((a,s)=>{Hf.parse(t,e).then(l=>{a(l),r(l)},l=>{Y.error("Error parsing",l),uh.parseError?.(l),s(l),n(l)})}),"performCall");AS.push(i),txe().catch(n)}),"parse"),rxe=o((t,e,r)=>new Promise((n,i)=>{let a=o(()=>new Promise((s,l)=>{Hf.render(t,e,r).then(u=>{s(u),n(u)},u=>{Y.error("Error parsing",u),uh.parseError?.(u),l(u),i(u)})}),"performCall");AS.push(a),txe().catch(i)}),"render"),uh={startOnLoad:!0,mermaidAPI:Hf,parse:Zit,render:rxe,init:jit,run:Z2e,registerExternalDiagrams:Kit,registerLayoutLoaders:_D,initialize:J2e,parseError:void 0,contentLoaded:exe,setParseErrorHandler:Qit,detectType:mp,registerIconPacks:Xb},Jit=uh;return cxe(eat);})(); +/*! Check if previously processed */ +/*! + * Wait for document loaded before starting the execution + */ +/*! Bundled license information: + +dompurify/dist/purify.js: + (*! @license DOMPurify 3.1.6 | (c) Cure53 and other contributors | Released under the Apache license 2.0 and Mozilla Public License 2.0 | github.com/cure53/DOMPurify/blob/3.1.6/LICENSE *) + +js-yaml/dist/js-yaml.mjs: + (*! js-yaml 4.1.0 https://github.com/nodeca/js-yaml @license MIT *) + +lodash-es/lodash.js: + (** + * @license + * Lodash (Custom Build) + * Build: `lodash modularize exports="es" -o ./` + * Copyright OpenJS Foundation and other contributors + * Released under MIT license + * Based on Underscore.js 1.8.3 + * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors + *) + +cytoscape/dist/cytoscape.esm.mjs: + (*! + Embeddable Minimum Strictly-Compliant Promises/A+ 1.1.1 Thenable + Copyright (c) 2013-2014 Ralf S. Engelschall (http://engelschall.com) + Licensed under The MIT License (http://opensource.org/licenses/MIT) + *) + (*! + Event object based on jQuery events, MIT license + + https://jquery.org/license/ + https://tldrlegal.com/license/mit-license + https://github.com/jquery/jquery/blob/master/src/event.js + *) + (*! Bezier curve function generator. Copyright Gaetan Renaudeau. MIT License: http://en.wikipedia.org/wiki/MIT_License *) + (*! Runge-Kutta spring physics function generator. Adapted from Framer.js, copyright Koen Bok. MIT License: http://en.wikipedia.org/wiki/MIT_License *) +*/ +globalThis.mermaid = globalThis.__esbuild_esm_mermaid.default; diff --git a/Documentation/Assets/mingcute.json.js b/Documentation/Assets/mingcute.json.js new file mode 100644 index 000000000..2c54c2da1 --- /dev/null +++ b/Documentation/Assets/mingcute.json.js @@ -0,0 +1,12323 @@ +window.mingcute = +{ + "prefix": "mingcute", + "info": { + "name": "MingCute Icon", + "total": 3040, + "author": { + "name": "MingCute Design", + "url": "https://github.com/Richard9394/MingCute" + }, + "license": { + "title": "Apache 2.0", + "spdx": "Apache-2.0", + "url": "https://github.com/Richard9394/MingCute/blob/main/LICENSE" + }, + "samples": [ + "edit-3-line", + "alert-fill", + "riding-line", + "layout-9-line", + "currency-dollar-2-line", + "trello-board-fill" + ], + "height": 24, + "category": "UI 24px", + "palette": false + }, + "lastModified": 1724430106, + "icons": { + "abs-fill": { + "body": "" + }, + "abs-line": { + "body": "" + }, + "ad-circle-fill": { + "body": "" + }, + "ad-circle-line": { + "body": "" + }, + "ad-circle-off-fill": { + "body": "" + }, + "ad-circle-off-line": { + "body": "" + }, + "ad-rectangle-fill": { + "body": "" + }, + "ad-rectangle-line": { + "body": "" + }, + "ad-rectangle-off-fill": { + "body": "" + }, + "ad-rectangle-off-line": { + "body": "" + }, + "add-circle-fill": { + "body": "" + }, + "add-circle-line": { + "body": "" + }, + "add-fill": { + "body": "" + }, + "add-line": { + "body": "" + }, + "add-square-fill": { + "body": "" + }, + "add-square-line": { + "body": "" + }, + "aerial-lift-fill": { + "body": "" + }, + "aerial-lift-line": { + "body": "" + }, + "ai-fill": { + "body": "" + }, + "ai-line": { + "body": "" + }, + "aiming-2-fill": { + "body": "" + }, + "aiming-2-line": { + "body": "" + }, + "aiming-fill": { + "body": "" + }, + "aiming-line": { + "body": "" + }, + "air-balloon-fill": { + "body": "" + }, + "air-balloon-line": { + "body": "" + }, + "air-condition-fill": { + "body": "" + }, + "air-condition-line": { + "body": "" + }, + "air-condition-open-fill": { + "body": "" + }, + "air-condition-open-line": { + "body": "" + }, + "airbnb-fill": { + "body": "" + }, + "airbnb-line": { + "body": "" + }, + "airdrop-fill": { + "body": "" + }, + "airdrop-line": { + "body": "" + }, + "airplane-fill": { + "body": "" + }, + "airplane-line": { + "body": "" + }, + "airplay-fill": { + "body": "" + }, + "airplay-line": { + "body": "" + }, + "airpods-2-fill": { + "body": "" + }, + "airpods-2-line": { + "body": "" + }, + "airpods-fill": { + "body": "" + }, + "airpods-line": { + "body": "" + }, + "alarm-1-fill": { + "body": "" + }, + "alarm-1-line": { + "body": "" + }, + "alarm-2-fill": { + "body": "" + }, + "alarm-2-line": { + "body": "" + }, + "album-2-fill": { + "body": "" + }, + "album-2-line": { + "body": "" + }, + "album-fill": { + "body": "" + }, + "album-line": { + "body": "" + }, + "alert-diamond-fill": { + "body": "" + }, + "alert-diamond-line": { + "body": "" + }, + "alert-fill": { + "body": "" + }, + "alert-line": { + "body": "" + }, + "alert-octagon-fill": { + "body": "" + }, + "alert-octagon-line": { + "body": "" + }, + "align-arrow-down-fill": { + "body": "" + }, + "align-arrow-down-line": { + "body": "" + }, + "align-arrow-left-fill": { + "body": "" + }, + "align-arrow-left-line": { + "body": "" + }, + "align-arrow-right-fill": { + "body": "" + }, + "align-arrow-right-line": { + "body": "" + }, + "align-arrow-up-fill": { + "body": "" + }, + "align-arrow-up-line": { + "body": "" + }, + "align-bottom-fill": { + "body": "" + }, + "align-bottom-line": { + "body": "" + }, + "align-center-fill": { + "body": "" + }, + "align-center-line": { + "body": "" + }, + "align-horizontal-center-fill": { + "body": "" + }, + "align-horizontal-center-line": { + "body": "" + }, + "align-justify-fill": { + "body": "" + }, + "align-justify-line": { + "body": "" + }, + "align-left-2-fill": { + "body": "" + }, + "align-left-2-line": { + "body": "" + }, + "align-left-fill": { + "body": "" + }, + "align-left-line": { + "body": "" + }, + "align-right-2-fill": { + "body": "" + }, + "align-right-2-line": { + "body": "" + }, + "align-right-fill": { + "body": "" + }, + "align-right-line": { + "body": "" + }, + "align-top-fill": { + "body": "" + }, + "align-top-line": { + "body": "" + }, + "align-vertical-center-fill": { + "body": "" + }, + "align-vertical-center-line": { + "body": "" + }, + "alipay-fill": { + "body": "" + }, + "alipay-line": { + "body": "" + }, + "american-football-fill": { + "body": "" + }, + "american-football-line": { + "body": "" + }, + "anchor-fill": { + "body": "" + }, + "anchor-line": { + "body": "" + }, + "and-fill": { + "body": "" + }, + "and-line": { + "body": "" + }, + "android-2-fill": { + "body": "" + }, + "android-2-line": { + "body": "" + }, + "android-fill": { + "body": "" + }, + "android-line": { + "body": "" + }, + "angel-fill": { + "body": "" + }, + "angel-line": { + "body": "" + }, + "angry-fill": { + "body": "" + }, + "angry-line": { + "body": "" + }, + "anniversary-fill": { + "body": "" + }, + "anniversary-line": { + "body": "" + }, + "announcement-fill": { + "body": "" + }, + "announcement-line": { + "body": "" + }, + "anticlockwise-alt-fill": { + "body": "" + }, + "anticlockwise-alt-line": { + "body": "" + }, + "anticlockwise-fill": { + "body": "" + }, + "anticlockwise-line": { + "body": "" + }, + "apple-fill": { + "body": "" + }, + "apple-line": { + "body": "" + }, + "appstore-fill": { + "body": "" + }, + "appstore-line": { + "body": "" + }, + "arc-browser-fill": { + "body": "" + }, + "arc-browser-line": { + "body": "" + }, + "archive-fill": { + "body": "" + }, + "archive-line": { + "body": "" + }, + "arrow-down-circle-fill": { + "body": "" + }, + "arrow-down-circle-line": { + "body": "" + }, + "arrow-down-fill": { + "body": "" + }, + "arrow-down-line": { + "body": "" + }, + "arrow-left-circle-fill": { + "body": "" + }, + "arrow-left-circle-line": { + "body": "" + }, + "arrow-left-down-circle-fill": { + "body": "" + }, + "arrow-left-down-circle-line": { + "body": "" + }, + "arrow-left-down-fill": { + "body": "" + }, + "arrow-left-down-line": { + "body": "" + }, + "arrow-left-fill": { + "body": "" + }, + "arrow-left-line": { + "body": "" + }, + "arrow-left-up-circle-fill": { + "body": "" + }, + "arrow-left-up-circle-line": { + "body": "" + }, + "arrow-left-up-fill": { + "body": "" + }, + "arrow-left-up-line": { + "body": "" + }, + "arrow-right-circle-fill": { + "body": "" + }, + "arrow-right-circle-line": { + "body": "" + }, + "arrow-right-down-circle-fill": { + "body": "" + }, + "arrow-right-down-circle-line": { + "body": "" + }, + "arrow-right-down-fill": { + "body": "" + }, + "arrow-right-down-line": { + "body": "" + }, + "arrow-right-fill": { + "body": "" + }, + "arrow-right-line": { + "body": "" + }, + "arrow-right-up-circle-fill": { + "body": "" + }, + "arrow-right-up-circle-line": { + "body": "" + }, + "arrow-right-up-fill": { + "body": "" + }, + "arrow-right-up-line": { + "body": "" + }, + "arrow-to-down-fill": { + "body": "" + }, + "arrow-to-down-line": { + "body": "" + }, + "arrow-to-left-fill": { + "body": "" + }, + "arrow-to-left-line": { + "body": "" + }, + "arrow-to-right-fill": { + "body": "" + }, + "arrow-to-right-line": { + "body": "" + }, + "arrow-to-up-fill": { + "body": "" + }, + "arrow-to-up-line": { + "body": "" + }, + "arrow-up-circle-fill": { + "body": "" + }, + "arrow-up-circle-line": { + "body": "" + }, + "arrow-up-fill": { + "body": "" + }, + "arrow-up-line": { + "body": "" + }, + "arrows-down-fill": { + "body": "" + }, + "arrows-down-line": { + "body": "" + }, + "arrows-left-fill": { + "body": "" + }, + "arrows-left-line": { + "body": "" + }, + "arrows-right-fill": { + "body": "" + }, + "arrows-right-line": { + "body": "" + }, + "arrows-up-fill": { + "body": "" + }, + "arrows-up-line": { + "body": "" + }, + "artboard-fill": { + "body": "" + }, + "artboard-line": { + "body": "" + }, + "aspect-ratio-fill": { + "body": "" + }, + "aspect-ratio-line": { + "body": "" + }, + "asterisk-2-fill": { + "body": "" + }, + "asterisk-2-line": { + "body": "" + }, + "asterisk-fill": { + "body": "" + }, + "asterisk-line": { + "body": "" + }, + "at-fill": { + "body": "" + }, + "at-line": { + "body": "" + }, + "attachment-2-fill": { + "body": "" + }, + "attachment-2-line": { + "body": "" + }, + "attachment-fill": { + "body": "" + }, + "attachment-line": { + "body": "" + }, + "auction-fill": { + "body": "" + }, + "auction-line": { + "body": "" + }, + "audio-tape-fill": { + "body": "" + }, + "audio-tape-line": { + "body": "" + }, + "auto-hold-fill": { + "body": "" + }, + "auto-hold-line": { + "body": "" + }, + "avalanche-avax-fill": { + "body": "" + }, + "avalanche-avax-line": { + "body": "" + }, + "award-fill": { + "body": "" + }, + "award-line": { + "body": "" + }, + "axe-fill": { + "body": "" + }, + "axe-line": { + "body": "" + }, + "az-sort-ascending-letters-fill": { + "body": "" + }, + "az-sort-ascending-letters-line": { + "body": "" + }, + "az-sort-descending-letters-fill": { + "body": "" + }, + "az-sort-descending-letters-line": { + "body": "" + }, + "baby-carriage-fill": { + "body": "" + }, + "baby-carriage-line": { + "body": "" + }, + "baby-fill": { + "body": "" + }, + "baby-line": { + "body": "" + }, + "back-2-fill": { + "body": "" + }, + "back-2-line": { + "body": "" + }, + "back-fill": { + "body": "" + }, + "back-line": { + "body": "" + }, + "backboard-fill": { + "body": "" + }, + "backboard-line": { + "body": "" + }, + "background-fill": { + "body": "" + }, + "background-line": { + "body": "" + }, + "backpack-fill": { + "body": "" + }, + "backpack-line": { + "body": "" + }, + "badge-fill": { + "body": "" + }, + "badge-line": { + "body": "" + }, + "badminton-fill": { + "body": "" + }, + "badminton-line": { + "body": "" + }, + "balance-fill": { + "body": "" + }, + "balance-line": { + "body": "" + }, + "balloon-2-fill": { + "body": "" + }, + "balloon-2-line": { + "body": "" + }, + "bank-card-fill": { + "body": "" + }, + "bank-card-line": { + "body": "" + }, + "bank-fill": { + "body": "" + }, + "bank-line": { + "body": "" + }, + "bank-of-china-tower-fill": { + "body": "" + }, + "bank-of-china-tower-line": { + "body": "" + }, + "barbell-fill": { + "body": "" + }, + "barbell-line": { + "body": "" + }, + "barcode-fill": { + "body": "" + }, + "barcode-line": { + "body": "" + }, + "barcode-scan-fill": { + "body": "" + }, + "barcode-scan-line": { + "body": "" + }, + "base-station-2-fill": { + "body": "" + }, + "base-station-2-line": { + "body": "" + }, + "base-station-fill": { + "body": "" + }, + "base-station-line": { + "body": "" + }, + "baseball-2-fill": { + "body": "" + }, + "baseball-2-line": { + "body": "" + }, + "baseball-fill": { + "body": "" + }, + "baseball-line": { + "body": "" + }, + "basket-2-fill": { + "body": "" + }, + "basket-2-line": { + "body": "" + }, + "basket-fill": { + "body": "" + }, + "basket-line": { + "body": "" + }, + "basketball-fill": { + "body": "" + }, + "basketball-line": { + "body": "" + }, + "bath-fill": { + "body": "" + }, + "bath-line": { + "body": "" + }, + "battery-1-fill": { + "body": "" + }, + "battery-1-line": { + "body": "" + }, + "battery-2-fill": { + "body": "" + }, + "battery-2-line": { + "body": "" + }, + "battery-3-fill": { + "body": "" + }, + "battery-3-line": { + "body": "" + }, + "battery-4-fill": { + "body": "" + }, + "battery-4-line": { + "body": "" + }, + "battery-automotive-fill": { + "body": "" + }, + "battery-automotive-line": { + "body": "" + }, + "battery-charging-fill": { + "body": "" + }, + "battery-charging-line": { + "body": "" + }, + "battery-fill": { + "body": "" + }, + "battery-line": { + "body": "" + }, + "beachball-fill": { + "body": "" + }, + "beachball-line": { + "body": "" + }, + "bear-fill": { + "body": "" + }, + "bear-line": { + "body": "" + }, + "beard-fill": { + "body": "" + }, + "beard-line": { + "body": "" + }, + "bed-2-fill": { + "body": "" + }, + "bed-2-line": { + "body": "" + }, + "bed-fill": { + "body": "" + }, + "bed-line": { + "body": "" + }, + "bedside-table-2-fill": { + "body": "" + }, + "bedside-table-2-line": { + "body": "" + }, + "bedside-table-fill": { + "body": "" + }, + "bedside-table-line": { + "body": "" + }, + "behance-fill": { + "body": "" + }, + "behance-line": { + "body": "" + }, + "bell-ringing-fill": { + "body": "" + }, + "bell-ringing-line": { + "body": "" + }, + "big-ben-fill": { + "body": "" + }, + "big-ben-line": { + "body": "" + }, + "bike-fill": { + "body": "" + }, + "bike-line": { + "body": "" + }, + "bill-2-fill": { + "body": "" + }, + "bill-2-line": { + "body": "" + }, + "bill-fill": { + "body": "" + }, + "bill-line": { + "body": "" + }, + "binance-coin-bnb-fill": { + "body": "" + }, + "binance-coin-bnb-line": { + "body": "" + }, + "binance-usd-busd-fill": { + "body": "" + }, + "binance-usd-busd-line": { + "body": "" + }, + "bird-fill": { + "body": "" + }, + "bird-line": { + "body": "" + }, + "birthday-2-fill": { + "body": "" + }, + "birthday-2-line": { + "body": "" + }, + "black-board-2-fill": { + "body": "" + }, + "black-board-2-line": { + "body": "" + }, + "black-board-fill": { + "body": "" + }, + "black-board-line": { + "body": "" + }, + "blessing-fill": { + "body": "" + }, + "blessing-line": { + "body": "" + }, + "bling-fill": { + "body": "" + }, + "bling-line": { + "body": "" + }, + "blockquote-fill": { + "body": "" + }, + "blockquote-line": { + "body": "" + }, + "bluesky-social-fill": { + "body": "" + }, + "bluesky-social-line": { + "body": "" + }, + "bluetooth-fill": { + "body": "" + }, + "bluetooth-line": { + "body": "" + }, + "bluetooth-off-fill": { + "body": "" + }, + "bluetooth-off-line": { + "body": "" + }, + "bnb-fill": { + "body": "" + }, + "bnb-line": { + "body": "" + }, + "board-fill": { + "body": "" + }, + "board-line": { + "body": "" + }, + "body-fill": { + "body": "" + }, + "body-line": { + "body": "" + }, + "bold-fill": { + "body": "" + }, + "bold-line": { + "body": "" + }, + "bomb-fill": { + "body": "" + }, + "bomb-line": { + "body": "" + }, + "bone-fill": { + "body": "" + }, + "bone-line": { + "body": "" + }, + "book-2-fill": { + "body": "" + }, + "book-2-line": { + "body": "" + }, + "book-3-fill": { + "body": "" + }, + "book-3-line": { + "body": "" + }, + "book-4-fill": { + "body": "" + }, + "book-4-line": { + "body": "" + }, + "book-5-fill": { + "body": "" + }, + "book-5-line": { + "body": "" + }, + "book-6-fill": { + "body": "" + }, + "book-6-line": { + "body": "" + }, + "book-fill": { + "body": "" + }, + "book-line": { + "body": "" + }, + "bookmark-fill": { + "body": "" + }, + "bookmark-line": { + "body": "" + }, + "bookmarks-fill": { + "body": "" + }, + "bookmarks-line": { + "body": "" + }, + "boom-fill": { + "body": "" + }, + "boom-line": { + "body": "" + }, + "border-blank-fill": { + "body": "" + }, + "border-blank-line": { + "body": "" + }, + "border-bottom-fill": { + "body": "" + }, + "border-bottom-line": { + "body": "" + }, + "border-horizontal-fill": { + "body": "" + }, + "border-horizontal-line": { + "body": "" + }, + "border-inner-fill": { + "body": "" + }, + "border-inner-line": { + "body": "" + }, + "border-left-fill": { + "body": "" + }, + "border-left-line": { + "body": "" + }, + "border-outer-fill": { + "body": "" + }, + "border-outer-line": { + "body": "" + }, + "border-radius-fill": { + "body": "" + }, + "border-radius-line": { + "body": "" + }, + "border-right-fill": { + "body": "" + }, + "border-right-line": { + "body": "" + }, + "border-top-fill": { + "body": "" + }, + "border-top-line": { + "body": "" + }, + "border-vertical-fill": { + "body": "" + }, + "border-vertical-line": { + "body": "" + }, + "bottle-fill": { + "body": "" + }, + "bottle-glass-fill": { + "body": "" + }, + "bottle-glass-line": { + "body": "" + }, + "bottle-line": { + "body": "" + }, + "bow-tie-fill": { + "body": "" + }, + "bow-tie-line": { + "body": "" + }, + "bowknot-fill": { + "body": "" + }, + "bowknot-line": { + "body": "" + }, + "bowl-2-fill": { + "body": "" + }, + "bowl-2-line": { + "body": "" + }, + "bowl-fill": { + "body": "" + }, + "bowl-line": { + "body": "" + }, + "box-2-fill": { + "body": "" + }, + "box-2-line": { + "body": "" + }, + "box-3-fill": { + "body": "" + }, + "box-3-line": { + "body": "" + }, + "box-fill": { + "body": "" + }, + "box-line": { + "body": "" + }, + "braces-fill": { + "body": "" + }, + "braces-line": { + "body": "" + }, + "brackets-angle-fill": { + "body": "" + }, + "brackets-angle-line": { + "body": "" + }, + "brackets-fill": { + "body": "" + }, + "brackets-line": { + "body": "" + }, + "brain-fill": { + "body": "" + }, + "brain-line": { + "body": "" + }, + "brake-fill": { + "body": "" + }, + "brake-line": { + "body": "" + }, + "bread-fill": { + "body": "" + }, + "bread-line": { + "body": "" + }, + "bridge-2-fill": { + "body": "" + }, + "bridge-2-line": { + "body": "" + }, + "bridge-fill": { + "body": "" + }, + "bridge-line": { + "body": "" + }, + "brief-fill": { + "body": "" + }, + "brief-line": { + "body": "" + }, + "briefcase-2-fill": { + "body": "" + }, + "briefcase-2-line": { + "body": "" + }, + "briefcase-fill": { + "body": "" + }, + "briefcase-line": { + "body": "" + }, + "brightness-fill": { + "body": "" + }, + "brightness-line": { + "body": "" + }, + "broom-fill": { + "body": "" + }, + "broom-line": { + "body": "" + }, + "brush-2-fill": { + "body": "" + }, + "brush-2-line": { + "body": "" + }, + "brush-3-fill": { + "body": "" + }, + "brush-3-line": { + "body": "" + }, + "brush-fill": { + "body": "" + }, + "brush-line": { + "body": "" + }, + "bubble-fill": { + "body": "" + }, + "bubble-line": { + "body": "" + }, + "bug-fill": { + "body": "" + }, + "bug-line": { + "body": "" + }, + "building-1-fill": { + "body": "" + }, + "building-1-line": { + "body": "" + }, + "building-2-fill": { + "body": "" + }, + "building-2-line": { + "body": "" + }, + "building-3-fill": { + "body": "" + }, + "building-3-line": { + "body": "" + }, + "building-4-fill": { + "body": "" + }, + "building-4-line": { + "body": "" + }, + "building-5-fill": { + "body": "" + }, + "building-5-line": { + "body": "" + }, + "building-6-fill": { + "body": "" + }, + "building-6-line": { + "body": "" + }, + "bulb-2-fill": { + "body": "" + }, + "bulb-2-line": { + "body": "" + }, + "bulb-fill": { + "body": "" + }, + "bulb-line": { + "body": "" + }, + "burj-al-arab-fill": { + "body": "" + }, + "burj-al-arab-line": { + "body": "" + }, + "burj-khalifa-tower-fill": { + "body": "" + }, + "burj-khalifa-tower-line": { + "body": "" + }, + "bus-2-fill": { + "body": "" + }, + "bus-2-line": { + "body": "" + }, + "bus-fill": { + "body": "" + }, + "bus-line": { + "body": "" + }, + "butterfly-2-fill": { + "body": "" + }, + "butterfly-2-line": { + "body": "" + }, + "butterfly-fill": { + "body": "" + }, + "butterfly-line": { + "body": "" + }, + "cactus-2-fill": { + "body": "" + }, + "cactus-2-line": { + "body": "" + }, + "cactus-fill": { + "body": "" + }, + "cactus-line": { + "body": "" + }, + "cake-fill": { + "body": "" + }, + "cake-line": { + "body": "" + }, + "calendar-2-fill": { + "body": "" + }, + "calendar-2-line": { + "body": "" + }, + "calendar-3-fill": { + "body": "" + }, + "calendar-3-line": { + "body": "" + }, + "calendar-add-fill": { + "body": "" + }, + "calendar-add-line": { + "body": "" + }, + "calendar-day-fill": { + "body": "" + }, + "calendar-day-line": { + "body": "" + }, + "calendar-fill": { + "body": "" + }, + "calendar-line": { + "body": "" + }, + "calendar-month-fill": { + "body": "" + }, + "calendar-month-line": { + "body": "" + }, + "calendar-time-add-fill": { + "body": "" + }, + "calendar-time-add-line": { + "body": "" + }, + "calendar-week-fill": { + "body": "" + }, + "calendar-week-line": { + "body": "" + }, + "camcorder-2-fill": { + "body": "" + }, + "camcorder-2-line": { + "body": "" + }, + "camcorder-3-fill": { + "body": "" + }, + "camcorder-3-line": { + "body": "" + }, + "camcorder-fill": { + "body": "" + }, + "camcorder-line": { + "body": "" + }, + "camcorder-off-fill": { + "body": "" + }, + "camcorder-off-line": { + "body": "" + }, + "camera-2-ai-fill": { + "body": "" + }, + "camera-2-ai-line": { + "body": "" + }, + "camera-2-fill": { + "body": "" + }, + "camera-2-line": { + "body": "" + }, + "camera-2-off-fill": { + "body": "" + }, + "camera-2-off-line": { + "body": "" + }, + "camera-fill": { + "body": "" + }, + "camera-line": { + "body": "" + }, + "camera-rotate-fill": { + "body": "" + }, + "camera-rotate-line": { + "body": "" + }, + "campfire-fill": { + "body": "" + }, + "campfire-line": { + "body": "" + }, + "campground-fill": { + "body": "" + }, + "campground-line": { + "body": "" + }, + "candle-fill": { + "body": "" + }, + "candle-line": { + "body": "" + }, + "candles-fill": { + "body": "" + }, + "candles-line": { + "body": "" + }, + "candy-2-fill": { + "body": "" + }, + "candy-2-line": { + "body": "" + }, + "candy-fill": { + "body": "" + }, + "candy-line": { + "body": "" + }, + "canton-tower-fill": { + "body": "" + }, + "canton-tower-line": { + "body": "" + }, + "capsule-fill": { + "body": "" + }, + "capsule-line": { + "body": "" + }, + "car-2-fill": { + "body": "" + }, + "car-2-line": { + "body": "" + }, + "car-3-fill": { + "body": "" + }, + "car-3-line": { + "body": "" + }, + "car-door-fill": { + "body": "" + }, + "car-door-line": { + "body": "" + }, + "car-fill": { + "body": "" + }, + "car-line": { + "body": "" + }, + "car-window-fill": { + "body": "" + }, + "car-window-line": { + "body": "" + }, + "card-pay-fill": { + "body": "" + }, + "card-pay-line": { + "body": "" + }, + "card-refund-fill": { + "body": "" + }, + "card-refund-line": { + "body": "" + }, + "cardano-ada-fill": { + "body": "" + }, + "cardano-ada-line": { + "body": "" + }, + "cardboard-vr-fill": { + "body": "" + }, + "cardboard-vr-line": { + "body": "" + }, + "carplay-fill": { + "body": "" + }, + "carplay-line": { + "body": "" + }, + "carrot-fill": { + "body": "" + }, + "carrot-line": { + "body": "" + }, + "cash-2-fill": { + "body": "" + }, + "cash-2-line": { + "body": "" + }, + "cash-fill": { + "body": "" + }, + "cash-line": { + "body": "" + }, + "cat-fill": { + "body": "" + }, + "cat-line": { + "body": "" + }, + "ceiling-lamp-fill": { + "body": "" + }, + "ceiling-lamp-line": { + "body": "" + }, + "celebrate-fill": { + "body": "" + }, + "celebrate-line": { + "body": "" + }, + "cellphone-2-ai-fill": { + "body": "" + }, + "cellphone-2-ai-line": { + "body": "" + }, + "cellphone-2-fill": { + "body": "" + }, + "cellphone-2-horizontal-fill": { + "body": "" + }, + "cellphone-2-horizontal-line": { + "body": "" + }, + "cellphone-2-line": { + "body": "" + }, + "cellphone-fill": { + "body": "" + }, + "cellphone-line": { + "body": "" + }, + "cellphone-vibration-fill": { + "body": "" + }, + "cellphone-vibration-line": { + "body": "" + }, + "celsius-fill": { + "body": "" + }, + "celsius-line": { + "body": "" + }, + "certificate-2-fill": { + "body": "" + }, + "certificate-2-line": { + "body": "" + }, + "certificate-fill": { + "body": "" + }, + "certificate-line": { + "body": "" + }, + "champagne-fill": { + "body": "" + }, + "champagne-line": { + "body": "" + }, + "charging-pile-fill": { + "body": "" + }, + "charging-pile-line": { + "body": "" + }, + "chart-bar-2-fill": { + "body": "" + }, + "chart-bar-2-line": { + "body": "" + }, + "chart-bar-fill": { + "body": "" + }, + "chart-bar-line": { + "body": "" + }, + "chart-decrease-fill": { + "body": "" + }, + "chart-decrease-line": { + "body": "" + }, + "chart-horizontal-fill": { + "body": "" + }, + "chart-horizontal-line": { + "body": "" + }, + "chart-line-fill": { + "body": "" + }, + "chart-line-line": { + "body": "" + }, + "chart-pie-2-fill": { + "body": "" + }, + "chart-pie-2-line": { + "body": "" + }, + "chart-pie-fill": { + "body": "" + }, + "chart-pie-line": { + "body": "" + }, + "chart-vertical-fill": { + "body": "" + }, + "chart-vertical-line": { + "body": "" + }, + "chat-1-fill": { + "body": "" + }, + "chat-1-line": { + "body": "" + }, + "chat-2-fill": { + "body": "" + }, + "chat-2-line": { + "body": "" + }, + "chat-3-fill": { + "body": "" + }, + "chat-3-line": { + "body": "" + }, + "chat-4-fill": { + "body": "" + }, + "chat-4-line": { + "body": "" + }, + "check-2-fill": { + "body": "" + }, + "check-2-line": { + "body": "" + }, + "check-circle-fill": { + "body": "" + }, + "check-circle-line": { + "body": "" + }, + "check-fill": { + "body": "" + }, + "check-line": { + "body": "" + }, + "checkbox-fill": { + "body": "" + }, + "checkbox-line": { + "body": "" + }, + "checks-fill": { + "body": "" + }, + "checks-line": { + "body": "" + }, + "chef-hat-fill": { + "body": "" + }, + "chef-hat-line": { + "body": "" + }, + "chess-fill": { + "body": "" + }, + "chess-line": { + "body": "" + }, + "chicken-fill": { + "body": "" + }, + "chicken-line": { + "body": "" + }, + "chines-knot-fill": { + "body": "" + }, + "chines-knot-line": { + "body": "" + }, + "chip-fill": { + "body": "" + }, + "chip-line": { + "body": "" + }, + "choice-fill": { + "body": "" + }, + "choice-line": { + "body": "" + }, + "chopsticks-fill": { + "body": "" + }, + "chopsticks-line": { + "body": "" + }, + "christ-the-redeemer-fill": { + "body": "" + }, + "christ-the-redeemer-line": { + "body": "" + }, + "christmas-ball-fill": { + "body": "" + }, + "christmas-ball-line": { + "body": "" + }, + "christmas-hat-fill": { + "body": "" + }, + "christmas-hat-line": { + "body": "" + }, + "chrome-fill": { + "body": "" + }, + "chrome-line": { + "body": "" + }, + "church-fill": { + "body": "" + }, + "church-line": { + "body": "" + }, + "clapperboard-fill": { + "body": "" + }, + "clapperboard-line": { + "body": "" + }, + "classify-2-fill": { + "body": "" + }, + "classify-2-line": { + "body": "" + }, + "classify-3-fill": { + "body": "" + }, + "classify-3-line": { + "body": "" + }, + "classify-add-2-fill": { + "body": "" + }, + "classify-add-2-line": { + "body": "" + }, + "classify-add-fill": { + "body": "" + }, + "classify-add-line": { + "body": "" + }, + "classify-fill": { + "body": "" + }, + "classify-line": { + "body": "" + }, + "clipboard-fill": { + "body": "" + }, + "clipboard-line": { + "body": "" + }, + "clock-2-fill": { + "body": "" + }, + "clock-2-line": { + "body": "" + }, + "clock-fill": { + "body": "" + }, + "clock-line": { + "body": "" + }, + "clockwise-alt-fill": { + "body": "" + }, + "clockwise-alt-line": { + "body": "" + }, + "clockwise-fill": { + "body": "" + }, + "clockwise-line": { + "body": "" + }, + "close-circle-fill": { + "body": "" + }, + "close-circle-line": { + "body": "" + }, + "close-fill": { + "body": "" + }, + "close-line": { + "body": "" + }, + "close-square-fill": { + "body": "" + }, + "close-square-line": { + "body": "" + }, + "cloud-2-fill": { + "body": "" + }, + "cloud-2-line": { + "body": "" + }, + "cloud-fill": { + "body": "" + }, + "cloud-lightning-fill": { + "body": "" + }, + "cloud-lightning-line": { + "body": "" + }, + "cloud-line": { + "body": "" + }, + "cloud-snow-fill": { + "body": "" + }, + "cloud-snow-line": { + "body": "" + }, + "cloud-windy-fill": { + "body": "" + }, + "cloud-windy-line": { + "body": "" + }, + "clouds-fill": { + "body": "" + }, + "clouds-line": { + "body": "" + }, + "clubs-fill": { + "body": "" + }, + "clubs-line": { + "body": "" + }, + "coat-fill": { + "body": "" + }, + "coat-line": { + "body": "" + }, + "coathanger-fill": { + "body": "" + }, + "coathanger-line": { + "body": "" + }, + "code-fill": { + "body": "" + }, + "code-line": { + "body": "" + }, + "codepen-fill": { + "body": "" + }, + "codepen-line": { + "body": "" + }, + "coin-2-fill": { + "body": "" + }, + "coin-2-line": { + "body": "" + }, + "coin-3-fill": { + "body": "" + }, + "coin-3-line": { + "body": "" + }, + "coin-fill": { + "body": "" + }, + "coin-line": { + "body": "" + }, + "color-filter-fill": { + "body": "" + }, + "color-filter-line": { + "body": "" + }, + "color-picker-fill": { + "body": "" + }, + "color-picker-line": { + "body": "" + }, + "column-fill": { + "body": "" + }, + "column-line": { + "body": "" + }, + "columns-2-fill": { + "body": "" + }, + "columns-2-line": { + "body": "" + }, + "columns-3-fill": { + "body": "" + }, + "columns-3-line": { + "body": "" + }, + "combine-fill": { + "body": "" + }, + "combine-line": { + "body": "" + }, + "command-fill": { + "body": "" + }, + "command-line": { + "body": "" + }, + "comment-2-fill": { + "body": "" + }, + "comment-2-line": { + "body": "" + }, + "comment-fill": { + "body": "" + }, + "comment-line": { + "body": "" + }, + "compass-2-fill": { + "body": "" + }, + "compass-2-line": { + "body": "" + }, + "compass-3-fill": { + "body": "" + }, + "compass-3-line": { + "body": "" + }, + "compass-fill": { + "body": "" + }, + "compass-line": { + "body": "" + }, + "components-fill": { + "body": "" + }, + "components-line": { + "body": "" + }, + "computer-camera-fill": { + "body": "" + }, + "computer-camera-line": { + "body": "" + }, + "computer-camera-off-fill": { + "body": "" + }, + "computer-camera-off-line": { + "body": "" + }, + "computer-fill": { + "body": "" + }, + "computer-line": { + "body": "" + }, + "confused-fill": { + "body": "" + }, + "confused-line": { + "body": "" + }, + "contacts-2-fill": { + "body": "" + }, + "contacts-2-line": { + "body": "" + }, + "contacts-3-fill": { + "body": "" + }, + "contacts-3-line": { + "body": "" + }, + "contacts-4-fill": { + "body": "" + }, + "contacts-4-line": { + "body": "" + }, + "contacts-fill": { + "body": "" + }, + "contacts-line": { + "body": "" + }, + "content-ai-fill": { + "body": "" + }, + "content-ai-line": { + "body": "" + }, + "cookie-fill": { + "body": "" + }, + "cookie-line": { + "body": "" + }, + "cookie-man-fill": { + "body": "" + }, + "cookie-man-line": { + "body": "" + }, + "copper-coin-fill": { + "body": "" + }, + "copper-coin-line": { + "body": "" + }, + "copy-2-fill": { + "body": "" + }, + "copy-2-line": { + "body": "" + }, + "copy-3-fill": { + "body": "" + }, + "copy-3-line": { + "body": "" + }, + "copy-fill": { + "body": "" + }, + "copy-line": { + "body": "" + }, + "copyright-fill": { + "body": "" + }, + "copyright-line": { + "body": "" + }, + "corner-down-left-fill": { + "body": "" + }, + "corner-down-left-line": { + "body": "" + }, + "corner-down-right-fill": { + "body": "" + }, + "corner-down-right-line": { + "body": "" + }, + "corner-up-left-fill": { + "body": "" + }, + "corner-up-left-line": { + "body": "" + }, + "corner-up-right-fill": { + "body": "" + }, + "corner-up-right-line": { + "body": "" + }, + "counter-2-fill": { + "body": "" + }, + "counter-2-line": { + "body": "" + }, + "counter-fill": { + "body": "" + }, + "counter-line": { + "body": "" + }, + "coupon-fill": { + "body": "" + }, + "coupon-line": { + "body": "" + }, + "cross-2-fill": { + "body": "" + }, + "cross-2-line": { + "body": "" + }, + "cross-fill": { + "body": "" + }, + "cross-line": { + "body": "" + }, + "crutch-fill": { + "body": "" + }, + "crutch-line": { + "body": "" + }, + "crystal-ball-fill": { + "body": "" + }, + "crystal-ball-line": { + "body": "" + }, + "cube-3d-fill": { + "body": "" + }, + "cube-3d-line": { + "body": "" + }, + "cube-fill": { + "body": "" + }, + "cube-line": { + "body": "" + }, + "cupcake-fill": { + "body": "" + }, + "cupcake-line": { + "body": "" + }, + "currency-baht-2-fill": { + "body": "" + }, + "currency-baht-2-line": { + "body": "" + }, + "currency-baht-fill": { + "body": "" + }, + "currency-baht-line": { + "body": "" + }, + "currency-bitcoin-2-fill": { + "body": "" + }, + "currency-bitcoin-2-line": { + "body": "" + }, + "currency-bitcoin-fill": { + "body": "" + }, + "currency-bitcoin-line": { + "body": "" + }, + "currency-cny-2-fill": { + "body": "" + }, + "currency-cny-2-line": { + "body": "" + }, + "currency-cny-fill": { + "body": "" + }, + "currency-cny-line": { + "body": "" + }, + "currency-dollar-2-fill": { + "body": "" + }, + "currency-dollar-2-line": { + "body": "" + }, + "currency-dollar-fill": { + "body": "" + }, + "currency-dollar-line": { + "body": "" + }, + "currency-euro-2-fill": { + "body": "" + }, + "currency-euro-2-line": { + "body": "" + }, + "currency-euro-fill": { + "body": "" + }, + "currency-euro-line": { + "body": "" + }, + "currency-lira-2-fill": { + "body": "" + }, + "currency-lira-2-line": { + "body": "" + }, + "currency-lira-fill": { + "body": "" + }, + "currency-lira-line": { + "body": "" + }, + "currency-nigeria-2-fill": { + "body": "" + }, + "currency-nigeria-2-line": { + "body": "" + }, + "currency-nigeria-fill": { + "body": "" + }, + "currency-nigeria-line": { + "body": "" + }, + "currency-pound-2-fill": { + "body": "" + }, + "currency-pound-2-line": { + "body": "" + }, + "currency-pound-fill": { + "body": "" + }, + "currency-pound-line": { + "body": "" + }, + "currency-rubel-2-fill": { + "body": "" + }, + "currency-rubel-2-line": { + "body": "" + }, + "currency-rubel-fill": { + "body": "" + }, + "currency-rubel-line": { + "body": "" + }, + "currency-rupee-2-fill": { + "body": "" + }, + "currency-rupee-2-line": { + "body": "" + }, + "currency-rupee-fill": { + "body": "" + }, + "currency-rupee-line": { + "body": "" + }, + "currency-shekel-2-fill": { + "body": "" + }, + "currency-shekel-2-line": { + "body": "" + }, + "currency-shekel-fill": { + "body": "" + }, + "currency-shekel-line": { + "body": "" + }, + "currency-won-2-fill": { + "body": "" + }, + "currency-won-2-line": { + "body": "" + }, + "currency-won-fill": { + "body": "" + }, + "currency-won-line": { + "body": "" + }, + "cursor-2-fill": { + "body": "" + }, + "cursor-2-line": { + "body": "" + }, + "cursor-3-fill": { + "body": "" + }, + "cursor-3-line": { + "body": "" + }, + "cursor-fill": { + "body": "" + }, + "cursor-line": { + "body": "" + }, + "cursor-text-fill": { + "body": "" + }, + "cursor-text-line": { + "body": "" + }, + "curtain-fill": { + "body": "" + }, + "curtain-line": { + "body": "" + }, + "cylinder-2-fill": { + "body": "" + }, + "cylinder-2-line": { + "body": "" + }, + "cylinder-fill": { + "body": "" + }, + "cylinder-line": { + "body": "" + }, + "dandelion-fill": { + "body": "" + }, + "dandelion-line": { + "body": "" + }, + "danmaku-fill": { + "body": "" + }, + "danmaku-line": { + "body": "" + }, + "danmaku-off-fill": { + "body": "" + }, + "danmaku-off-line": { + "body": "" + }, + "danmaku-on-fill": { + "body": "" + }, + "danmaku-on-line": { + "body": "" + }, + "dashboard-2-fill": { + "body": "" + }, + "dashboard-2-line": { + "body": "" + }, + "dashboard-3-fill": { + "body": "" + }, + "dashboard-3-line": { + "body": "" + }, + "dashboard-4-fill": { + "body": "" + }, + "dashboard-4-line": { + "body": "" + }, + "dashboard-fill": { + "body": "" + }, + "dashboard-line": { + "body": "" + }, + "deer-fill": { + "body": "" + }, + "deer-line": { + "body": "" + }, + "delete-2-fill": { + "body": "" + }, + "delete-2-line": { + "body": "" + }, + "delete-3-fill": { + "body": "" + }, + "delete-3-line": { + "body": "" + }, + "delete-back-fill": { + "body": "" + }, + "delete-back-line": { + "body": "" + }, + "delete-fill": { + "body": "" + }, + "delete-line": { + "body": "" + }, + "dental-fill": { + "body": "" + }, + "dental-line": { + "body": "" + }, + "department-fill": { + "body": "" + }, + "department-line": { + "body": "" + }, + "desk-fill": { + "body": "" + }, + "desk-lamp-2-fill": { + "body": "" + }, + "desk-lamp-2-line": { + "body": "" + }, + "desk-lamp-fill": { + "body": "" + }, + "desk-lamp-line": { + "body": "" + }, + "desk-line": { + "body": "" + }, + "device-fill": { + "body": "" + }, + "device-line": { + "body": "" + }, + "diamond-2-fill": { + "body": "" + }, + "diamond-2-line": { + "body": "" + }, + "diamond-fill": { + "body": "" + }, + "diamond-line": { + "body": "" + }, + "diamond-square-fill": { + "body": "" + }, + "diamond-square-line": { + "body": "" + }, + "diary-fill": { + "body": "" + }, + "diary-line": { + "body": "" + }, + "dingtalk-fill": { + "body": "" + }, + "dingtalk-line": { + "body": "" + }, + "dinner-fill": { + "body": "" + }, + "dinner-line": { + "body": "" + }, + "direction-arrow-fill": { + "body": "" + }, + "direction-arrow-line": { + "body": "" + }, + "direction-dot-fill": { + "body": "" + }, + "direction-dot-line": { + "body": "" + }, + "directions-2-fill": { + "body": "" + }, + "directions-2-line": { + "body": "" + }, + "directions-fill": { + "body": "" + }, + "directions-line": { + "body": "" + }, + "directory-fill": { + "body": "" + }, + "directory-line": { + "body": "" + }, + "disabled-2-fill": { + "body": "" + }, + "disabled-2-line": { + "body": "" + }, + "disabled-fill": { + "body": "" + }, + "disabled-line": { + "body": "" + }, + "disc-fill": { + "body": "" + }, + "disc-line": { + "body": "" + }, + "discord-fill": { + "body": "" + }, + "discord-line": { + "body": "" + }, + "dish-cover-fill": { + "body": "" + }, + "dish-cover-line": { + "body": "" + }, + "display-fill": { + "body": "" + }, + "display-line": { + "body": "" + }, + "distribute-spacing-horizontal-fill": { + "body": "" + }, + "distribute-spacing-horizontal-line": { + "body": "" + }, + "distribute-spacing-vertical-fill": { + "body": "" + }, + "distribute-spacing-vertical-line": { + "body": "" + }, + "dividing-line-fill": { + "body": "" + }, + "dividing-line-line": { + "body": "" + }, + "doc-fill": { + "body": "" + }, + "doc-line": { + "body": "" + }, + "document-2-fill": { + "body": "" + }, + "document-2-line": { + "body": "" + }, + "document-3-fill": { + "body": "" + }, + "document-3-line": { + "body": "" + }, + "document-fill": { + "body": "" + }, + "document-line": { + "body": "" + }, + "documents-fill": { + "body": "" + }, + "documents-line": { + "body": "" + }, + "dog-fill": { + "body": "" + }, + "dog-line": { + "body": "" + }, + "dogecoin-doge-fill": { + "body": "" + }, + "dogecoin-doge-line": { + "body": "" + }, + "donut-fill": { + "body": "" + }, + "donut-line": { + "body": "" + }, + "door-fill": { + "body": "" + }, + "door-line": { + "body": "" + }, + "dot-grid-fill": { + "body": "" + }, + "dot-grid-line": { + "body": "" + }, + "dots-fill": { + "body": "" + }, + "dots-line": { + "body": "" + }, + "dots-vertical-fill": { + "body": "" + }, + "dots-vertical-line": { + "body": "" + }, + "down-fill": { + "body": "" + }, + "down-line": { + "body": "" + }, + "down-small-fill": { + "body": "" + }, + "down-small-line": { + "body": "" + }, + "download-2-fill": { + "body": "" + }, + "download-2-line": { + "body": "" + }, + "download-3-fill": { + "body": "" + }, + "download-3-line": { + "body": "" + }, + "download-fill": { + "body": "" + }, + "download-line": { + "body": "" + }, + "dragonfly-fill": { + "body": "" + }, + "dragonfly-line": { + "body": "" + }, + "drawer-2-fill": { + "body": "" + }, + "drawer-2-line": { + "body": "" + }, + "drawer-fill": { + "body": "" + }, + "drawer-line": { + "body": "" + }, + "drawing-board-fill": { + "body": "" + }, + "drawing-board-line": { + "body": "" + }, + "dress-fill": { + "body": "" + }, + "dress-line": { + "body": "" + }, + "dribbble-fill": { + "body": "" + }, + "dribbble-line": { + "body": "" + }, + "drink-fill": { + "body": "" + }, + "drink-line": { + "body": "" + }, + "drive-fill": { + "body": "" + }, + "drive-line": { + "body": "" + }, + "drizzle-fill": { + "body": "" + }, + "drizzle-line": { + "body": "" + }, + "drone-fill": { + "body": "" + }, + "drone-line": { + "body": "" + }, + "drop-fill": { + "body": "" + }, + "drop-line": { + "body": "" + }, + "dropbox-fill": { + "body": "" + }, + "dropbox-line": { + "body": "" + }, + "drum-fill": { + "body": "" + }, + "drum-line": { + "body": "" + }, + "dry-fill": { + "body": "" + }, + "dry-line": { + "body": "" + }, + "dutch-windmill-fill": { + "body": "" + }, + "dutch-windmill-line": { + "body": "" + }, + "ear-fill": { + "body": "" + }, + "ear-line": { + "body": "" + }, + "earth-2-fill": { + "body": "" + }, + "earth-2-line": { + "body": "" + }, + "earth-3-fill": { + "body": "" + }, + "earth-3-line": { + "body": "" + }, + "earth-fill": { + "body": "" + }, + "earth-latitude-fill": { + "body": "" + }, + "earth-latitude-line": { + "body": "" + }, + "earth-line": { + "body": "" + }, + "earth-longitude-fill": { + "body": "" + }, + "earth-longitude-line": { + "body": "" + }, + "ease-in-control-point-fill": { + "body": "" + }, + "ease-in-control-point-line": { + "body": "" + }, + "ease-in-fill": { + "body": "" + }, + "ease-in-line": { + "body": "" + }, + "ease-in-out-control-point-fill": { + "body": "" + }, + "ease-in-out-control-point-line": { + "body": "" + }, + "ease-out-control-point-fill": { + "body": "" + }, + "ease-out-control-point-line": { + "body": "" + }, + "ease-out-fill": { + "body": "" + }, + "ease-out-line": { + "body": "" + }, + "easy-in-out-fill": { + "body": "" + }, + "easy-in-out-line": { + "body": "" + }, + "ebike-fill": { + "body": "" + }, + "ebike-line": { + "body": "" + }, + "edge-fill": { + "body": "" + }, + "edge-line": { + "body": "" + }, + "edit-2-fill": { + "body": "" + }, + "edit-2-line": { + "body": "" + }, + "edit-3-fill": { + "body": "" + }, + "edit-3-line": { + "body": "" + }, + "edit-4-fill": { + "body": "" + }, + "edit-4-line": { + "body": "" + }, + "edit-fill": { + "body": "" + }, + "edit-line": { + "body": "" + }, + "egg-crack-fill": { + "body": "" + }, + "egg-crack-line": { + "body": "" + }, + "egg-fill": { + "body": "" + }, + "egg-line": { + "body": "" + }, + "egyptian-pyramids-fill": { + "body": "" + }, + "egyptian-pyramids-line": { + "body": "" + }, + "eiffel-tower-fill": { + "body": "" + }, + "eiffel-tower-line": { + "body": "" + }, + "electric-cooker-fill": { + "body": "" + }, + "electric-cooker-line": { + "body": "" + }, + "emergency-flashers-fill": { + "body": "" + }, + "emergency-flashers-line": { + "body": "" + }, + "emoji-2-fill": { + "body": "" + }, + "emoji-2-line": { + "body": "" + }, + "emoji-fill": { + "body": "" + }, + "emoji-line": { + "body": "" + }, + "engine-fill": { + "body": "" + }, + "engine-line": { + "body": "" + }, + "enter-door-fill": { + "body": "" + }, + "enter-door-line": { + "body": "" + }, + "entrance-fill": { + "body": "" + }, + "entrance-line": { + "body": "" + }, + "eraser-fill": { + "body": "" + }, + "eraser-line": { + "body": "" + }, + "escalator-down-fill": { + "body": "" + }, + "escalator-down-line": { + "body": "" + }, + "escalator-up-fill": { + "body": "" + }, + "escalator-up-line": { + "body": "" + }, + "ethereum-fill": { + "body": "" + }, + "ethereum-line": { + "body": "" + }, + "exchange-baht-fill": { + "body": "" + }, + "exchange-baht-line": { + "body": "" + }, + "exchange-bitcoin-fill": { + "body": "" + }, + "exchange-bitcoin-line": { + "body": "" + }, + "exchange-cny-fill": { + "body": "" + }, + "exchange-cny-line": { + "body": "" + }, + "exchange-dollar-fill": { + "body": "" + }, + "exchange-dollar-line": { + "body": "" + }, + "exchange-euro-fill": { + "body": "" + }, + "exchange-euro-line": { + "body": "" + }, + "exclude-fill": { + "body": "" + }, + "exclude-line": { + "body": "" + }, + "exit-door-fill": { + "body": "" + }, + "exit-door-line": { + "body": "" + }, + "exit-fill": { + "body": "" + }, + "exit-line": { + "body": "" + }, + "expand-player-fill": { + "body": "" + }, + "expand-player-line": { + "body": "" + }, + "exposure-fill": { + "body": "" + }, + "exposure-line": { + "body": "" + }, + "external-link-fill": { + "body": "" + }, + "external-link-line": { + "body": "" + }, + "eye-2-fill": { + "body": "" + }, + "eye-2-line": { + "body": "" + }, + "eye-close-fill": { + "body": "" + }, + "eye-close-line": { + "body": "" + }, + "eye-fill": { + "body": "" + }, + "eye-line": { + "body": "" + }, + "eyebrow-fill": { + "body": "" + }, + "eyebrow-line": { + "body": "" + }, + "eyeglass-fill": { + "body": "" + }, + "eyeglass-line": { + "body": "" + }, + "face-fill": { + "body": "" + }, + "face-line": { + "body": "" + }, + "face-mask-fill": { + "body": "" + }, + "face-mask-line": { + "body": "" + }, + "facebook-fill": { + "body": "" + }, + "facebook-line": { + "body": "" + }, + "faceid-fill": { + "body": "" + }, + "faceid-line": { + "body": "" + }, + "factory-2-fill": { + "body": "" + }, + "factory-2-line": { + "body": "" + }, + "factory-fill": { + "body": "" + }, + "factory-line": { + "body": "" + }, + "fahrenheit-fill": { + "body": "" + }, + "fahrenheit-line": { + "body": "" + }, + "fan-2-fill": { + "body": "" + }, + "fan-2-line": { + "body": "" + }, + "fan-direction-down-fill": { + "body": "" + }, + "fan-direction-down-line": { + "body": "" + }, + "fan-direction-front-fill": { + "body": "" + }, + "fan-direction-front-line": { + "body": "" + }, + "fan-direction-up-fill": { + "body": "" + }, + "fan-direction-up-line": { + "body": "" + }, + "fan-fill": { + "body": "" + }, + "fan-line": { + "body": "" + }, + "fast-forward-fill": { + "body": "" + }, + "fast-forward-line": { + "body": "" + }, + "fast-rewind-fill": { + "body": "" + }, + "fast-rewind-line": { + "body": "" + }, + "father-christmas-fill": { + "body": "" + }, + "father-christmas-line": { + "body": "" + }, + "fault-fill": { + "body": "" + }, + "fault-line": { + "body": "" + }, + "fax-fill": { + "body": "" + }, + "fax-line": { + "body": "" + }, + "feeder-fill": { + "body": "" + }, + "feeder-line": { + "body": "" + }, + "female-fill": { + "body": "" + }, + "female-line": { + "body": "" + }, + "ferris-wheel-fill": { + "body": "" + }, + "ferris-wheel-line": { + "body": "" + }, + "figma-fill": { + "body": "" + }, + "figma-line": { + "body": "" + }, + "file-certificate-fill": { + "body": "" + }, + "file-certificate-line": { + "body": "" + }, + "file-check-fill": { + "body": "" + }, + "file-check-line": { + "body": "" + }, + "file-code-fill": { + "body": "" + }, + "file-code-line": { + "body": "" + }, + "file-download-fill": { + "body": "" + }, + "file-download-line": { + "body": "" + }, + "file-export-fill": { + "body": "" + }, + "file-export-line": { + "body": "" + }, + "file-fill": { + "body": "" + }, + "file-forbid-fill": { + "body": "" + }, + "file-forbid-line": { + "body": "" + }, + "file-import-fill": { + "body": "" + }, + "file-import-line": { + "body": "" + }, + "file-info-fill": { + "body": "" + }, + "file-info-line": { + "body": "" + }, + "file-line": { + "body": "" + }, + "file-locked-fill": { + "body": "" + }, + "file-locked-line": { + "body": "" + }, + "file-more-fill": { + "body": "" + }, + "file-more-line": { + "body": "" + }, + "file-music-fill": { + "body": "" + }, + "file-music-line": { + "body": "" + }, + "file-new-fill": { + "body": "" + }, + "file-new-line": { + "body": "" + }, + "file-search-fill": { + "body": "" + }, + "file-search-line": { + "body": "" + }, + "file-security-fill": { + "body": "" + }, + "file-security-line": { + "body": "" + }, + "file-star-fill": { + "body": "" + }, + "file-star-line": { + "body": "" + }, + "file-unknown-fill": { + "body": "" + }, + "file-unknown-line": { + "body": "" + }, + "file-upload-fill": { + "body": "" + }, + "file-upload-line": { + "body": "" + }, + "file-warning-fill": { + "body": "" + }, + "file-warning-line": { + "body": "" + }, + "file-zip-fill": { + "body": "" + }, + "file-zip-line": { + "body": "" + }, + "film-fill": { + "body": "" + }, + "film-line": { + "body": "" + }, + "filter-2-fill": { + "body": "" + }, + "filter-2-line": { + "body": "" + }, + "filter-3-fill": { + "body": "" + }, + "filter-3-line": { + "body": "" + }, + "filter-fill": { + "body": "" + }, + "filter-line": { + "body": "" + }, + "finger-press-fill": { + "body": "" + }, + "finger-press-line": { + "body": "" + }, + "finger-rock-fill": { + "body": "" + }, + "finger-rock-line": { + "body": "" + }, + "finger-swipe-fill": { + "body": "" + }, + "finger-swipe-line": { + "body": "" + }, + "finger-tap-fill": { + "body": "" + }, + "finger-tap-line": { + "body": "" + }, + "fingerprint-2-fill": { + "body": "" + }, + "fingerprint-2-line": { + "body": "" + }, + "fingerprint-fill": { + "body": "" + }, + "fingerprint-line": { + "body": "" + }, + "fire-fill": { + "body": "" + }, + "fire-line": { + "body": "" + }, + "firecracker-fill": { + "body": "" + }, + "firecracker-line": { + "body": "" + }, + "firefox-fill": { + "body": "" + }, + "firefox-line": { + "body": "" + }, + "firework-fill": { + "body": "" + }, + "firework-line": { + "body": "" + }, + "first-aid-kit-fill": { + "body": "" + }, + "first-aid-kit-line": { + "body": "" + }, + "fish-fill": { + "body": "" + }, + "fish-line": { + "body": "" + }, + "fitness-fill": { + "body": "" + }, + "fitness-line": { + "body": "" + }, + "flag-1-fill": { + "body": "" + }, + "flag-1-line": { + "body": "" + }, + "flag-2-fill": { + "body": "" + }, + "flag-2-line": { + "body": "" + }, + "flag-3-fill": { + "body": "" + }, + "flag-3-line": { + "body": "" + }, + "flag-4-fill": { + "body": "" + }, + "flag-4-line": { + "body": "" + }, + "flame-fill": { + "body": "" + }, + "flame-line": { + "body": "" + }, + "flash-fill": { + "body": "" + }, + "flash-line": { + "body": "" + }, + "flashlight-fill": { + "body": "" + }, + "flashlight-line": { + "body": "" + }, + "flask-2-fill": { + "body": "" + }, + "flask-2-line": { + "body": "" + }, + "flask-3-fill": { + "body": "" + }, + "flask-3-line": { + "body": "" + }, + "flask-fill": { + "body": "" + }, + "flask-line": { + "body": "" + }, + "flight-inflight-fill": { + "body": "" + }, + "flight-inflight-line": { + "body": "" + }, + "flight-land-fill": { + "body": "" + }, + "flight-land-line": { + "body": "" + }, + "flight-takeoff-fill": { + "body": "" + }, + "flight-takeoff-line": { + "body": "" + }, + "flip-horizontal-fill": { + "body": "" + }, + "flip-horizontal-line": { + "body": "" + }, + "flip-vertical-fill": { + "body": "" + }, + "flip-vertical-line": { + "body": "" + }, + "floating-dust-fill": { + "body": "" + }, + "floating-dust-line": { + "body": "" + }, + "flower-2-fill": { + "body": "" + }, + "flower-2-line": { + "body": "" + }, + "flower-3-fill": { + "body": "" + }, + "flower-3-line": { + "body": "" + }, + "flower-4-fill": { + "body": "" + }, + "flower-4-line": { + "body": "" + }, + "flower-fill": { + "body": "" + }, + "flower-line": { + "body": "" + }, + "flowerpot-fill": { + "body": "" + }, + "flowerpot-line": { + "body": "" + }, + "fog-fill": { + "body": "" + }, + "fog-line": { + "body": "" + }, + "fold-horizontal-fill": { + "body": "" + }, + "fold-horizontal-line": { + "body": "" + }, + "fold-vertical-fill": { + "body": "" + }, + "fold-vertical-line": { + "body": "" + }, + "folder-2-fill": { + "body": "" + }, + "folder-2-line": { + "body": "" + }, + "folder-3-fill": { + "body": "" + }, + "folder-3-line": { + "body": "" + }, + "folder-check-fill": { + "body": "" + }, + "folder-check-line": { + "body": "" + }, + "folder-delete-fill": { + "body": "" + }, + "folder-delete-line": { + "body": "" + }, + "folder-download-fill": { + "body": "" + }, + "folder-download-line": { + "body": "" + }, + "folder-fill": { + "body": "" + }, + "folder-forbid-fill": { + "body": "" + }, + "folder-forbid-line": { + "body": "" + }, + "folder-info-fill": { + "body": "" + }, + "folder-info-line": { + "body": "" + }, + "folder-line": { + "body": "" + }, + "folder-locked-2-fill": { + "body": "" + }, + "folder-locked-2-line": { + "body": "" + }, + "folder-locked-fill": { + "body": "" + }, + "folder-locked-line": { + "body": "" + }, + "folder-minus-fill": { + "body": "" + }, + "folder-minus-line": { + "body": "" + }, + "folder-more-fill": { + "body": "" + }, + "folder-more-line": { + "body": "" + }, + "folder-open-2-fill": { + "body": "" + }, + "folder-open-2-line": { + "body": "" + }, + "folder-open-fill": { + "body": "" + }, + "folder-open-line": { + "body": "" + }, + "folder-security-fill": { + "body": "" + }, + "folder-security-line": { + "body": "" + }, + "folder-star-fill": { + "body": "" + }, + "folder-star-line": { + "body": "" + }, + "folder-upload-fill": { + "body": "" + }, + "folder-upload-line": { + "body": "" + }, + "folder-warning-fill": { + "body": "" + }, + "folder-warning-line": { + "body": "" + }, + "folder-zip-fill": { + "body": "" + }, + "folder-zip-line": { + "body": "" + }, + "folders-fill": { + "body": "" + }, + "folders-line": { + "body": "" + }, + "folding-fan-fill": { + "body": "" + }, + "folding-fan-line": { + "body": "" + }, + "font-fill": { + "body": "" + }, + "font-line": { + "body": "" + }, + "font-size-fill": { + "body": "" + }, + "font-size-line": { + "body": "" + }, + "foot-fill": { + "body": "" + }, + "foot-line": { + "body": "" + }, + "football-fill": { + "body": "" + }, + "football-line": { + "body": "" + }, + "forbid-circle-fill": { + "body": "" + }, + "forbid-circle-line": { + "body": "" + }, + "fork-fill": { + "body": "" + }, + "fork-knife-fill": { + "body": "" + }, + "fork-knife-line": { + "body": "" + }, + "fork-line": { + "body": "" + }, + "fork-spoon-fill": { + "body": "" + }, + "fork-spoon-line": { + "body": "" + }, + "formula-fill": { + "body": "" + }, + "formula-line": { + "body": "" + }, + "forward-2-fill": { + "body": "" + }, + "forward-2-line": { + "body": "" + }, + "forward-fill": { + "body": "" + }, + "forward-line": { + "body": "" + }, + "four-wheel-drive-fill": { + "body": "" + }, + "four-wheel-drive-line": { + "body": "" + }, + "frame-fill": { + "body": "" + }, + "frame-line": { + "body": "" + }, + "fridge-fill": { + "body": "" + }, + "fridge-line": { + "body": "" + }, + "fried-egg-fill": { + "body": "" + }, + "fried-egg-line": { + "body": "" + }, + "fries-fill": { + "body": "" + }, + "fries-line": { + "body": "" + }, + "front-fog-lights-fill": { + "body": "" + }, + "front-fog-lights-line": { + "body": "" + }, + "front-windshield-defroster-fill": { + "body": "" + }, + "front-windshield-defroster-line": { + "body": "" + }, + "full-moon-fill": { + "body": "" + }, + "full-moon-line": { + "body": "" + }, + "fullscreen-2-fill": { + "body": "" + }, + "fullscreen-2-line": { + "body": "" + }, + "fullscreen-exit-2-fill": { + "body": "" + }, + "fullscreen-exit-2-line": { + "body": "" + }, + "fullscreen-exit-fill": { + "body": "" + }, + "fullscreen-exit-line": { + "body": "" + }, + "fullscreen-fill": { + "body": "" + }, + "fullscreen-line": { + "body": "" + }, + "game-1-fill": { + "body": "" + }, + "game-1-line": { + "body": "" + }, + "game-2-fill": { + "body": "" + }, + "game-2-line": { + "body": "" + }, + "gas-station-fill": { + "body": "" + }, + "gas-station-line": { + "body": "" + }, + "gesture-unlock-fill": { + "body": "" + }, + "gesture-unlock-line": { + "body": "" + }, + "ghost-fill": { + "body": "" + }, + "ghost-line": { + "body": "" + }, + "gift-2-fill": { + "body": "" + }, + "gift-2-line": { + "body": "" + }, + "gift-card-fill": { + "body": "" + }, + "gift-card-line": { + "body": "" + }, + "gift-fill": { + "body": "" + }, + "gift-line": { + "body": "" + }, + "git-branch-fill": { + "body": "" + }, + "git-branch-line": { + "body": "" + }, + "git-commit-fill": { + "body": "" + }, + "git-commit-line": { + "body": "" + }, + "git-compare-fill": { + "body": "" + }, + "git-compare-line": { + "body": "" + }, + "git-lab-fill": { + "body": "" + }, + "git-lab-line": { + "body": "" + }, + "git-merge-fill": { + "body": "" + }, + "git-merge-line": { + "body": "" + }, + "git-pull-request-close-fill": { + "body": "" + }, + "git-pull-request-close-line": { + "body": "" + }, + "git-pull-request-fill": { + "body": "" + }, + "git-pull-request-line": { + "body": "" + }, + "github-2-fill": { + "body": "" + }, + "github-2-line": { + "body": "" + }, + "github-fill": { + "body": "" + }, + "github-line": { + "body": "" + }, + "glass-cup-fill": { + "body": "" + }, + "glass-cup-line": { + "body": "" + }, + "globe-2-fill": { + "body": "" + }, + "globe-2-line": { + "body": "" + }, + "globe-fill": { + "body": "" + }, + "globe-line": { + "body": "" + }, + "glove-fill": { + "body": "" + }, + "glove-line": { + "body": "" + }, + "google-fill": { + "body": "" + }, + "google-line": { + "body": "" + }, + "google-play-fill": { + "body": "" + }, + "google-play-line": { + "body": "" + }, + "government-fill": { + "body": "" + }, + "government-line": { + "body": "" + }, + "gradienter-fill": { + "body": "" + }, + "gradienter-line": { + "body": "" + }, + "grass-fill": { + "body": "" + }, + "grass-line": { + "body": "" + }, + "greatwall-fill": { + "body": "" + }, + "greatwall-line": { + "body": "" + }, + "grid-2-fill": { + "body": "" + }, + "grid-2-line": { + "body": "" + }, + "grid-fill": { + "body": "" + }, + "grid-line": { + "body": "" + }, + "grok-fill": { + "body": "" + }, + "grok-line": { + "body": "" + }, + "group-2-fill": { + "body": "" + }, + "group-2-line": { + "body": "" + }, + "group-3-fill": { + "body": "" + }, + "group-3-line": { + "body": "" + }, + "group-fill": { + "body": "" + }, + "group-line": { + "body": "" + }, + "guitar-fill": { + "body": "" + }, + "guitar-line": { + "body": "" + }, + "gumroad-fill": { + "body": "" + }, + "gumroad-line": { + "body": "" + }, + "hail-fill": { + "body": "" + }, + "hail-line": { + "body": "" + }, + "hair-2-fill": { + "body": "" + }, + "hair-2-line": { + "body": "" + }, + "hair-fill": { + "body": "" + }, + "hair-line": { + "body": "" + }, + "hamburger-fill": { + "body": "" + }, + "hamburger-line": { + "body": "" + }, + "hammer-fill": { + "body": "" + }, + "hammer-line": { + "body": "" + }, + "hand-card-fill": { + "body": "" + }, + "hand-card-line": { + "body": "" + }, + "hand-fill": { + "body": "" + }, + "hand-finger-2-fill": { + "body": "" + }, + "hand-finger-2-line": { + "body": "" + }, + "hand-finger-fill": { + "body": "" + }, + "hand-finger-line": { + "body": "" + }, + "hand-grab-fill": { + "body": "" + }, + "hand-grab-line": { + "body": "" + }, + "hand-heart-fill": { + "body": "" + }, + "hand-heart-line": { + "body": "" + }, + "hand-line": { + "body": "" + }, + "hand-two-fingers-fill": { + "body": "" + }, + "hand-two-fingers-line": { + "body": "" + }, + "hands-clapping-fill": { + "body": "" + }, + "hands-clapping-line": { + "body": "" + }, + "happy-fill": { + "body": "" + }, + "happy-line": { + "body": "" + }, + "hashtag-fill": { + "body": "" + }, + "hashtag-line": { + "body": "" + }, + "hat-2-fill": { + "body": "" + }, + "hat-2-line": { + "body": "" + }, + "hat-fill": { + "body": "" + }, + "hat-line": { + "body": "" + }, + "haze-fill": { + "body": "" + }, + "haze-line": { + "body": "" + }, + "head-fill": { + "body": "" + }, + "head-line": { + "body": "" + }, + "heading-1-fill": { + "body": "" + }, + "heading-1-line": { + "body": "" + }, + "heading-2-fill": { + "body": "" + }, + "heading-2-line": { + "body": "" + }, + "heading-3-fill": { + "body": "" + }, + "heading-3-line": { + "body": "" + }, + "headphone-2-fill": { + "body": "" + }, + "headphone-2-line": { + "body": "" + }, + "headphone-fill": { + "body": "" + }, + "headphone-line": { + "body": "" + }, + "heart-crack-fill": { + "body": "" + }, + "heart-crack-line": { + "body": "" + }, + "heart-fill": { + "body": "" + }, + "heart-half-fill": { + "body": "" + }, + "heart-half-line": { + "body": "" + }, + "heart-hand-fill": { + "body": "" + }, + "heart-hand-line": { + "body": "" + }, + "heart-line": { + "body": "" + }, + "heartbeat-2-fill": { + "body": "" + }, + "heartbeat-2-line": { + "body": "" + }, + "heartbeat-fill": { + "body": "" + }, + "heartbeat-line": { + "body": "" + }, + "heavy-rain-fill": { + "body": "" + }, + "heavy-rain-line": { + "body": "" + }, + "heavy-rainstorm-fill": { + "body": "" + }, + "heavy-rainstorm-line": { + "body": "" + }, + "heavy-snow-fill": { + "body": "" + }, + "heavy-snow-line": { + "body": "" + }, + "heavy-snowstorm-fill": { + "body": "" + }, + "heavy-snowstorm-line": { + "body": "" + }, + "hemisphere-2-fill": { + "body": "" + }, + "hemisphere-2-line": { + "body": "" + }, + "hemisphere-fill": { + "body": "" + }, + "hemisphere-line": { + "body": "" + }, + "hexagon-fill": { + "body": "" + }, + "hexagon-line": { + "body": "" + }, + "hexagons-2-fill": { + "body": "" + }, + "hexagons-2-line": { + "body": "" + }, + "hexagons-fill": { + "body": "" + }, + "hexagons-line": { + "body": "" + }, + "high-temperature-fill": { + "body": "" + }, + "high-temperature-line": { + "body": "" + }, + "high-voltage-power-fill": { + "body": "" + }, + "high-voltage-power-line": { + "body": "" + }, + "hight-beam-headlights-fill": { + "body": "" + }, + "hight-beam-headlights-line": { + "body": "" + }, + "history-2-fill": { + "body": "" + }, + "history-2-line": { + "body": "" + }, + "history-anticlockwise-fill": { + "body": "" + }, + "history-anticlockwise-line": { + "body": "" + }, + "history-fill": { + "body": "" + }, + "history-line": { + "body": "" + }, + "hoe-fill": { + "body": "" + }, + "hoe-line": { + "body": "" + }, + "home-1-fill": { + "body": "" + }, + "home-1-line": { + "body": "" + }, + "home-2-fill": { + "body": "" + }, + "home-2-line": { + "body": "" + }, + "home-3-fill": { + "body": "" + }, + "home-3-line": { + "body": "" + }, + "home-4-fill": { + "body": "" + }, + "home-4-line": { + "body": "" + }, + "home-5-fill": { + "body": "" + }, + "home-5-line": { + "body": "" + }, + "home-6-fill": { + "body": "" + }, + "home-6-line": { + "body": "" + }, + "home-7-fill": { + "body": "" + }, + "home-7-line": { + "body": "" + }, + "home-wifi-fill": { + "body": "" + }, + "home-wifi-line": { + "body": "" + }, + "homepod-fill": { + "body": "" + }, + "homepod-line": { + "body": "" + }, + "homepod-mini-fill": { + "body": "" + }, + "homepod-mini-line": { + "body": "" + }, + "hood-fill": { + "body": "" + }, + "hood-line": { + "body": "" + }, + "horn-2-fill": { + "body": "" + }, + "horn-2-line": { + "body": "" + }, + "horn-fill": { + "body": "" + }, + "horn-line": { + "body": "" + }, + "hospital-fill": { + "body": "" + }, + "hospital-line": { + "body": "" + }, + "hotel-fill": { + "body": "" + }, + "hotel-line": { + "body": "" + }, + "hotkey-fill": { + "body": "" + }, + "hotkey-line": { + "body": "" + }, + "hours-fill": { + "body": "" + }, + "hours-line": { + "body": "" + }, + "house-2-fill": { + "body": "" + }, + "house-2-line": { + "body": "" + }, + "house-fill": { + "body": "" + }, + "house-line": { + "body": "" + }, + "ice-cream-2-fill": { + "body": "" + }, + "ice-cream-2-line": { + "body": "" + }, + "ice-cream-fill": { + "body": "" + }, + "ice-cream-line": { + "body": "" + }, + "idcard-fill": { + "body": "" + }, + "idcard-line": { + "body": "" + }, + "imac-fill": { + "body": "" + }, + "imac-line": { + "body": "" + }, + "inbox-2-fill": { + "body": "" + }, + "inbox-2-line": { + "body": "" + }, + "inbox-fill": { + "body": "" + }, + "inbox-line": { + "body": "" + }, + "incognito-mode-fill": { + "body": "" + }, + "incognito-mode-line": { + "body": "" + }, + "indent-decrease-fill": { + "body": "" + }, + "indent-decrease-line": { + "body": "" + }, + "indent-increase-fill": { + "body": "" + }, + "indent-increase-line": { + "body": "" + }, + "information-fill": { + "body": "" + }, + "information-line": { + "body": "" + }, + "injection-fill": { + "body": "" + }, + "injection-line": { + "body": "" + }, + "ins-fill": { + "body": "" + }, + "ins-line": { + "body": "" + }, + "inspect-fill": { + "body": "" + }, + "inspect-line": { + "body": "" + }, + "instrument-fill": { + "body": "" + }, + "instrument-line": { + "body": "" + }, + "intersect-fill": { + "body": "" + }, + "intersect-line": { + "body": "" + }, + "inventory-fill": { + "body": "" + }, + "inventory-line": { + "body": "" + }, + "invite-fill": { + "body": "" + }, + "invite-line": { + "body": "" + }, + "italic-fill": { + "body": "" + }, + "italic-line": { + "body": "" + }, + "jeep-fill": { + "body": "" + }, + "jeep-line": { + "body": "" + }, + "kakao-talk-fill": { + "body": "" + }, + "kakao-talk-line": { + "body": "" + }, + "key-1-fill": { + "body": "" + }, + "key-1-line": { + "body": "" + }, + "key-2-fill": { + "body": "" + }, + "key-2-line": { + "body": "" + }, + "keyboard-2-fill": { + "body": "" + }, + "keyboard-2-line": { + "body": "" + }, + "keyboard-fill": { + "body": "" + }, + "keyboard-line": { + "body": "" + }, + "keyhole-fill": { + "body": "" + }, + "keyhole-line": { + "body": "" + }, + "kingkey-100-tower-fill": { + "body": "" + }, + "kingkey-100-tower-line": { + "body": "" + }, + "kite-fill": { + "body": "" + }, + "kite-line": { + "body": "" + }, + "knife-fill": { + "body": "" + }, + "knife-line": { + "body": "" + }, + "ladder-fill": { + "body": "" + }, + "ladder-line": { + "body": "" + }, + "lantern-2-fill": { + "body": "" + }, + "lantern-2-line": { + "body": "" + }, + "lantern-fill": { + "body": "" + }, + "lantern-line": { + "body": "" + }, + "laptop-2-fill": { + "body": "" + }, + "laptop-2-line": { + "body": "" + }, + "laptop-fill": { + "body": "" + }, + "laptop-line": { + "body": "" + }, + "large-arrow-down-fill": { + "body": "" + }, + "large-arrow-down-line": { + "body": "" + }, + "large-arrow-left-fill": { + "body": "" + }, + "large-arrow-left-line": { + "body": "" + }, + "large-arrow-right-fill": { + "body": "" + }, + "large-arrow-right-line": { + "body": "" + }, + "large-arrow-up-fill": { + "body": "" + }, + "large-arrow-up-line": { + "body": "" + }, + "laugh-fill": { + "body": "" + }, + "laugh-line": { + "body": "" + }, + "layer-fill": { + "body": "" + }, + "layer-line": { + "body": "" + }, + "layers-fill": { + "body": "" + }, + "layers-line": { + "body": "" + }, + "layout-10-fill": { + "body": "" + }, + "layout-10-line": { + "body": "" + }, + "layout-11-fill": { + "body": "" + }, + "layout-11-line": { + "body": "" + }, + "layout-2-fill": { + "body": "" + }, + "layout-2-line": { + "body": "" + }, + "layout-3-fill": { + "body": "" + }, + "layout-3-line": { + "body": "" + }, + "layout-4-fill": { + "body": "" + }, + "layout-4-line": { + "body": "" + }, + "layout-5-fill": { + "body": "" + }, + "layout-5-line": { + "body": "" + }, + "layout-6-fill": { + "body": "" + }, + "layout-6-line": { + "body": "" + }, + "layout-7-fill": { + "body": "" + }, + "layout-7-line": { + "body": "" + }, + "layout-8-fill": { + "body": "" + }, + "layout-8-line": { + "body": "" + }, + "layout-9-fill": { + "body": "" + }, + "layout-9-line": { + "body": "" + }, + "layout-bottom-close-fill": { + "body": "" + }, + "layout-bottom-close-line": { + "body": "" + }, + "layout-bottom-fill": { + "body": "" + }, + "layout-bottom-line": { + "body": "" + }, + "layout-bottom-open-fill": { + "body": "" + }, + "layout-bottom-open-line": { + "body": "" + }, + "layout-fill": { + "body": "" + }, + "layout-grid-fill": { + "body": "" + }, + "layout-grid-line": { + "body": "" + }, + "layout-left-fill": { + "body": "" + }, + "layout-left-line": { + "body": "" + }, + "layout-leftbar-close-fill": { + "body": "" + }, + "layout-leftbar-close-line": { + "body": "" + }, + "layout-leftbar-open-fill": { + "body": "" + }, + "layout-leftbar-open-line": { + "body": "" + }, + "layout-line": { + "body": "" + }, + "layout-right-fill": { + "body": "" + }, + "layout-right-line": { + "body": "" + }, + "layout-rightbar-close-fill": { + "body": "" + }, + "layout-rightbar-close-line": { + "body": "" + }, + "layout-rightbar-open-fill": { + "body": "" + }, + "layout-rightbar-open-line": { + "body": "" + }, + "layout-top-close-fill": { + "body": "" + }, + "layout-top-close-line": { + "body": "" + }, + "layout-top-fill": { + "body": "" + }, + "layout-top-line": { + "body": "" + }, + "layout-top-open-fill": { + "body": "" + }, + "layout-top-open-line": { + "body": "" + }, + "leaf-2-fill": { + "body": "" + }, + "leaf-2-line": { + "body": "" + }, + "leaf-3-fill": { + "body": "" + }, + "leaf-3-line": { + "body": "" + }, + "leaf-fill": { + "body": "" + }, + "leaf-line": { + "body": "" + }, + "left-fill": { + "body": "" + }, + "left-line": { + "body": "" + }, + "left-small-fill": { + "body": "" + }, + "left-small-line": { + "body": "" + }, + "lemon-squeezy-fill": { + "body": "" + }, + "lemon-squeezy-line": { + "body": "" + }, + "letter-spacing-fill": { + "body": "" + }, + "letter-spacing-line": { + "body": "" + }, + "lifebuoy-fill": { + "body": "" + }, + "lifebuoy-line": { + "body": "" + }, + "light-fill": { + "body": "" + }, + "light-line": { + "body": "" + }, + "light-snow-fill": { + "body": "" + }, + "light-snow-line": { + "body": "" + }, + "lighthouse-fill": { + "body": "" + }, + "lighthouse-line": { + "body": "" + }, + "lightning-fill": { + "body": "" + }, + "lightning-line": { + "body": "" + }, + "line-app-fill": { + "body": "" + }, + "line-app-line": { + "body": "" + }, + "line-fill": { + "body": "" + }, + "line-height-fill": { + "body": "" + }, + "line-height-line": { + "body": "" + }, + "line-line": { + "body": "" + }, + "linear-fill": { + "body": "" + }, + "linear-line": { + "body": "" + }, + "link-2-fill": { + "body": "" + }, + "link-2-line": { + "body": "" + }, + "link-3-fill": { + "body": "" + }, + "link-3-line": { + "body": "" + }, + "link-fill": { + "body": "" + }, + "link-line": { + "body": "" + }, + "linkedin-fill": { + "body": "" + }, + "linkedin-line": { + "body": "" + }, + "linux-fill": { + "body": "" + }, + "linux-line": { + "body": "" + }, + "lipstick-fill": { + "body": "" + }, + "lipstick-line": { + "body": "" + }, + "list-check-2-fill": { + "body": "" + }, + "list-check-2-line": { + "body": "" + }, + "list-check-3-fill": { + "body": "" + }, + "list-check-3-line": { + "body": "" + }, + "list-check-fill": { + "body": "" + }, + "list-check-line": { + "body": "" + }, + "list-collapse-fill": { + "body": "" + }, + "list-collapse-line": { + "body": "" + }, + "list-expansion-fill": { + "body": "" + }, + "list-expansion-line": { + "body": "" + }, + "list-ordered-fill": { + "body": "" + }, + "list-ordered-line": { + "body": "" + }, + "list-search-fill": { + "body": "" + }, + "list-search-line": { + "body": "" + }, + "live-fill": { + "body": "" + }, + "live-line": { + "body": "" + }, + "live-location-fill": { + "body": "" + }, + "live-location-line": { + "body": "" + }, + "live-photo-fill": { + "body": "" + }, + "live-photo-line": { + "body": "" + }, + "loading-3-fill": { + "body": "" + }, + "loading-3-line": { + "body": "" + }, + "loading-fill": { + "body": "" + }, + "loading-line": { + "body": "" + }, + "location-2-fill": { + "body": "" + }, + "location-2-line": { + "body": "" + }, + "location-3-fill": { + "body": "" + }, + "location-3-line": { + "body": "" + }, + "location-fill": { + "body": "" + }, + "location-line": { + "body": "" + }, + "lock-fill": { + "body": "" + }, + "lock-line": { + "body": "" + }, + "lollipop-fill": { + "body": "" + }, + "lollipop-line": { + "body": "" + }, + "look-down-fill": { + "body": "" + }, + "look-down-line": { + "body": "" + }, + "look-left-fill": { + "body": "" + }, + "look-left-line": { + "body": "" + }, + "look-right-fill": { + "body": "" + }, + "look-right-line": { + "body": "" + }, + "look-up-fill": { + "body": "" + }, + "look-up-line": { + "body": "" + }, + "lotus-fill": { + "body": "" + }, + "lotus-line": { + "body": "" + }, + "love-fill": { + "body": "" + }, + "love-line": { + "body": "" + }, + "low-beam-headlights-fill": { + "body": "" + }, + "low-beam-headlights-line": { + "body": "" + }, + "low-temperature-fill": { + "body": "" + }, + "low-temperature-line": { + "body": "" + }, + "luggage-fill": { + "body": "" + }, + "luggage-line": { + "body": "" + }, + "lungs-fill": { + "body": "" + }, + "lungs-line": { + "body": "" + }, + "magic-1-fill": { + "body": "" + }, + "magic-1-line": { + "body": "" + }, + "magic-2-fill": { + "body": "" + }, + "magic-2-line": { + "body": "" + }, + "magic-3-fill": { + "body": "" + }, + "magic-3-line": { + "body": "" + }, + "magic-hat-2-fill": { + "body": "" + }, + "magic-hat-2-line": { + "body": "" + }, + "magic-hat-fill": { + "body": "" + }, + "magic-hat-line": { + "body": "" + }, + "magnet-fill": { + "body": "" + }, + "magnet-line": { + "body": "" + }, + "mail-ai-fill": { + "body": "" + }, + "mail-ai-line": { + "body": "" + }, + "mail-fill": { + "body": "" + }, + "mail-line": { + "body": "" + }, + "mail-open-fill": { + "body": "" + }, + "mail-open-line": { + "body": "" + }, + "mail-send-fill": { + "body": "" + }, + "mail-send-line": { + "body": "" + }, + "mailbox-fill": { + "body": "" + }, + "mailbox-line": { + "body": "" + }, + "male-fill": { + "body": "" + }, + "male-line": { + "body": "" + }, + "map-2-fill": { + "body": "" + }, + "map-2-line": { + "body": "" + }, + "map-fill": { + "body": "" + }, + "map-line": { + "body": "" + }, + "map-pin-fill": { + "body": "" + }, + "map-pin-line": { + "body": "" + }, + "maple-leaf-fill": { + "body": "" + }, + "maple-leaf-line": { + "body": "" + }, + "marina-bay-sand-fill": { + "body": "" + }, + "marina-bay-sand-line": { + "body": "" + }, + "mark-pen-fill": { + "body": "" + }, + "mark-pen-line": { + "body": "" + }, + "markdown-fill": { + "body": "" + }, + "markdown-line": { + "body": "" + }, + "markup-fill": { + "body": "" + }, + "markup-line": { + "body": "" + }, + "mastercard-fill": { + "body": "" + }, + "mastercard-line": { + "body": "" + }, + "mastodon-fill": { + "body": "" + }, + "mastodon-line": { + "body": "" + }, + "maya-pyramids-fill": { + "body": "" + }, + "maya-pyramids-line": { + "body": "" + }, + "medal-fill": { + "body": "" + }, + "medal-line": { + "body": "" + }, + "medium-fill": { + "body": "" + }, + "medium-line": { + "body": "" + }, + "menu-fill": { + "body": "" + }, + "menu-line": { + "body": "" + }, + "message-1-fill": { + "body": "" + }, + "message-1-line": { + "body": "" + }, + "message-2-fill": { + "body": "" + }, + "message-2-line": { + "body": "" + }, + "message-3-fill": { + "body": "" + }, + "message-3-line": { + "body": "" + }, + "message-4-fill": { + "body": "" + }, + "message-4-line": { + "body": "" + }, + "messenger-fill": { + "body": "" + }, + "messenger-line": { + "body": "" + }, + "meta-fill": { + "body": "" + }, + "meta-line": { + "body": "" + }, + "mic-2-fill": { + "body": "" + }, + "mic-2-line": { + "body": "" + }, + "mic-ai-fill": { + "body": "" + }, + "mic-ai-line": { + "body": "" + }, + "mic-fill": { + "body": "" + }, + "mic-line": { + "body": "" + }, + "mic-off-fill": { + "body": "" + }, + "mic-off-line": { + "body": "" + }, + "mickeymouse-fill": { + "body": "" + }, + "mickeymouse-line": { + "body": "" + }, + "microphone-fill": { + "body": "" + }, + "microphone-line": { + "body": "" + }, + "microscope-fill": { + "body": "" + }, + "microscope-line": { + "body": "" + }, + "middle-finger-fill": { + "body": "" + }, + "middle-finger-line": { + "body": "" + }, + "midi-fill": { + "body": "" + }, + "midi-line": { + "body": "" + }, + "mind-map-fill": { + "body": "" + }, + "mind-map-line": { + "body": "" + }, + "mingcute-fill": { + "body": "" + }, + "mingcute-line": { + "body": "" + }, + "minimize-fill": { + "body": "" + }, + "minimize-line": { + "body": "" + }, + "miniplayer-fill": { + "body": "" + }, + "miniplayer-line": { + "body": "" + }, + "minus-circle-fill": { + "body": "" + }, + "minus-circle-line": { + "body": "" + }, + "minus-square-fill": { + "body": "" + }, + "minus-square-line": { + "body": "" + }, + "mirror-fill": { + "body": "" + }, + "mirror-line": { + "body": "" + }, + "miyajima-torii-fill": { + "body": "" + }, + "miyajima-torii-line": { + "body": "" + }, + "moai-fill": { + "body": "" + }, + "moai-line": { + "body": "" + }, + "moderate-snow-fill": { + "body": "" + }, + "moderate-snow-line": { + "body": "" + }, + "moment-fill": { + "body": "" + }, + "moment-line": { + "body": "" + }, + "monero-fill": { + "body": "" + }, + "monero-line": { + "body": "" + }, + "monitor-fill": { + "body": "" + }, + "monitor-line": { + "body": "" + }, + "monument-fill": { + "body": "" + }, + "monument-line": { + "body": "" + }, + "moon-cloudy-fill": { + "body": "" + }, + "moon-cloudy-line": { + "body": "" + }, + "moon-fill": { + "body": "" + }, + "moon-fog-fill": { + "body": "" + }, + "moon-fog-line": { + "body": "" + }, + "moon-line": { + "body": "" + }, + "moon-stars-fill": { + "body": "" + }, + "moon-stars-line": { + "body": "" + }, + "moonlight-fill": { + "body": "" + }, + "moonlight-line": { + "body": "" + }, + "more-1-fill": { + "body": "" + }, + "more-1-line": { + "body": "" + }, + "more-2-fill": { + "body": "" + }, + "more-2-line": { + "body": "" + }, + "more-3-fill": { + "body": "" + }, + "more-3-line": { + "body": "" + }, + "more-4-fill": { + "body": "" + }, + "more-4-line": { + "body": "" + }, + "mortarboard-fill": { + "body": "" + }, + "mortarboard-line": { + "body": "" + }, + "mosaic-fill": { + "body": "" + }, + "mosaic-line": { + "body": "" + }, + "mountain-2-fill": { + "body": "" + }, + "mountain-2-line": { + "body": "" + }, + "mountain-fill": { + "body": "" + }, + "mountain-line": { + "body": "" + }, + "mouse-fill": { + "body": "" + }, + "mouse-line": { + "body": "" + }, + "mouth-fill": { + "body": "" + }, + "mouth-line": { + "body": "" + }, + "move-fill": { + "body": "" + }, + "move-line": { + "body": "" + }, + "movie-fill": { + "body": "" + }, + "movie-line": { + "body": "" + }, + "multiselect-fill": { + "body": "" + }, + "multiselect-line": { + "body": "" + }, + "mushroom-fill": { + "body": "" + }, + "mushroom-line": { + "body": "" + }, + "music-2-ai-fill": { + "body": "" + }, + "music-2-ai-line": { + "body": "" + }, + "music-2-fill": { + "body": "" + }, + "music-2-line": { + "body": "" + }, + "music-3-fill": { + "body": "" + }, + "music-3-line": { + "body": "" + }, + "music-fill": { + "body": "" + }, + "music-line": { + "body": "" + }, + "na-fill": { + "body": "" + }, + "na-line": { + "body": "" + }, + "navigation-fill": { + "body": "" + }, + "navigation-line": { + "body": "" + }, + "necktie-fill": { + "body": "" + }, + "necktie-line": { + "body": "" + }, + "new-folder-fill": { + "body": "" + }, + "new-folder-line": { + "body": "" + }, + "newdot-fill": { + "body": "" + }, + "newdot-line": { + "body": "" + }, + "news-2-fill": { + "body": "" + }, + "news-2-line": { + "body": "" + }, + "news-fill": { + "body": "" + }, + "news-line": { + "body": "" + }, + "nfc-fill": { + "body": "" + }, + "nfc-line": { + "body": "" + }, + "nintendo-switch-fill": { + "body": "" + }, + "nintendo-switch-line": { + "body": "" + }, + "nose-fill": { + "body": "" + }, + "nose-line": { + "body": "" + }, + "notebook-2-fill": { + "body": "" + }, + "notebook-2-line": { + "body": "" + }, + "notebook-fill": { + "body": "" + }, + "notebook-line": { + "body": "" + }, + "notification-fill": { + "body": "" + }, + "notification-line": { + "body": "" + }, + "notification-newdot-fill": { + "body": "" + }, + "notification-newdot-line": { + "body": "" + }, + "notification-off-fill": { + "body": "" + }, + "notification-off-line": { + "body": "" + }, + "notion-fill": { + "body": "" + }, + "notion-line": { + "body": "" + }, + "numbers-09-sort-ascending-fill": { + "body": "" + }, + "numbers-09-sort-ascending-line": { + "body": "" + }, + "numbers-09-sort-descending-fill": { + "body": "" + }, + "numbers-09-sort-descending-line": { + "body": "" + }, + "numbers-90-sort-ascending-fill": { + "body": "" + }, + "numbers-90-sort-ascending-line": { + "body": "" + }, + "numbers-90-sort-descending-fill": { + "body": "" + }, + "numbers-90-sort-descending-line": { + "body": "" + }, + "nurse-fill": { + "body": "" + }, + "nurse-line": { + "body": "" + }, + "octagon-fill": { + "body": "" + }, + "octagon-line": { + "body": "" + }, + "oil-fill": { + "body": "" + }, + "oil-line": { + "body": "" + }, + "omega-fill": { + "body": "" + }, + "omega-line": { + "body": "" + }, + "omg-fill": { + "body": "" + }, + "omg-line": { + "body": "" + }, + "open-door-fill": { + "body": "" + }, + "open-door-line": { + "body": "" + }, + "openai-fill": { + "body": "" + }, + "openai-line": { + "body": "" + }, + "package-2-fill": { + "body": "" + }, + "package-2-line": { + "body": "" + }, + "package-fill": { + "body": "" + }, + "package-line": { + "body": "" + }, + "pad-fill": { + "body": "" + }, + "pad-line": { + "body": "" + }, + "paint-2-fill": { + "body": "" + }, + "paint-2-line": { + "body": "" + }, + "paint-brush-ai-fill": { + "body": "" + }, + "paint-brush-ai-line": { + "body": "" + }, + "paint-brush-fill": { + "body": "" + }, + "paint-brush-line": { + "body": "" + }, + "paint-fill": { + "body": "" + }, + "paint-line": { + "body": "" + }, + "palace-fill": { + "body": "" + }, + "palace-line": { + "body": "" + }, + "palette-2-fill": { + "body": "" + }, + "palette-2-line": { + "body": "" + }, + "palette-3-fill": { + "body": "" + }, + "palette-3-line": { + "body": "" + }, + "palette-fill": { + "body": "" + }, + "palette-line": { + "body": "" + }, + "panoramas-fill": { + "body": "" + }, + "panoramas-line": { + "body": "" + }, + "paper-2-fill": { + "body": "" + }, + "paper-2-line": { + "body": "" + }, + "paper-fill": { + "body": "" + }, + "paper-line": { + "body": "" + }, + "parachute-fill": { + "body": "" + }, + "parachute-line": { + "body": "" + }, + "paragraph-fill": { + "body": "" + }, + "paragraph-line": { + "body": "" + }, + "parentheses-fill": { + "body": "" + }, + "parentheses-line": { + "body": "" + }, + "parfum-fill": { + "body": "" + }, + "parfum-line": { + "body": "" + }, + "park-fill": { + "body": "" + }, + "park-line": { + "body": "" + }, + "parking-fill": { + "body": "" + }, + "parking-lights-fill": { + "body": "" + }, + "parking-lights-line": { + "body": "" + }, + "parking-line": { + "body": "" + }, + "partly-cloud-daytime-fill": { + "body": "" + }, + "partly-cloud-daytime-line": { + "body": "" + }, + "partly-cloud-night-fill": { + "body": "" + }, + "partly-cloud-night-line": { + "body": "" + }, + "passport-fill": { + "body": "" + }, + "passport-line": { + "body": "" + }, + "paster-fill": { + "body": "" + }, + "paster-line": { + "body": "" + }, + "pause-circle-fill": { + "body": "" + }, + "pause-circle-line": { + "body": "" + }, + "pause-fill": { + "body": "" + }, + "pause-line": { + "body": "" + }, + "pavilion-fill": { + "body": "" + }, + "pavilion-line": { + "body": "" + }, + "paw-fill": { + "body": "" + }, + "paw-line": { + "body": "" + }, + "paypal-fill": { + "body": "" + }, + "paypal-line": { + "body": "" + }, + "pdf-fill": { + "body": "" + }, + "pdf-line": { + "body": "" + }, + "pen-2-fill": { + "body": "" + }, + "pen-2-line": { + "body": "" + }, + "pen-fill": { + "body": "" + }, + "pen-line": { + "body": "" + }, + "pencil-2-ai-fill": { + "body": "" + }, + "pencil-2-ai-line": { + "body": "" + }, + "pencil-2-fill": { + "body": "" + }, + "pencil-2-line": { + "body": "" + }, + "pencil-3-fill": { + "body": "" + }, + "pencil-3-line": { + "body": "" + }, + "pencil-fill": { + "body": "" + }, + "pencil-line": { + "body": "" + }, + "pencil-ruler-fill": { + "body": "" + }, + "pencil-ruler-line": { + "body": "" + }, + "pentagon-fill": { + "body": "" + }, + "pentagon-line": { + "body": "" + }, + "performance-fill": { + "body": "" + }, + "performance-line": { + "body": "" + }, + "phone-add-fill": { + "body": "" + }, + "phone-add-line": { + "body": "" + }, + "phone-block-fill": { + "body": "" + }, + "phone-block-line": { + "body": "" + }, + "phone-call-fill": { + "body": "" + }, + "phone-call-line": { + "body": "" + }, + "phone-fill": { + "body": "" + }, + "phone-incoming-fill": { + "body": "" + }, + "phone-incoming-line": { + "body": "" + }, + "phone-line": { + "body": "" + }, + "phone-off-fill": { + "body": "" + }, + "phone-off-line": { + "body": "" + }, + "phone-outgoing-fill": { + "body": "" + }, + "phone-outgoing-line": { + "body": "" + }, + "phone-success-fill": { + "body": "" + }, + "phone-success-line": { + "body": "" + }, + "photo-album-2-fill": { + "body": "" + }, + "photo-album-2-line": { + "body": "" + }, + "photo-album-fill": { + "body": "" + }, + "photo-album-line": { + "body": "" + }, + "pic-2-fill": { + "body": "" + }, + "pic-2-line": { + "body": "" + }, + "pic-ai-fill": { + "body": "" + }, + "pic-ai-line": { + "body": "" + }, + "pic-fill": { + "body": "" + }, + "pic-line": { + "body": "" + }, + "pickax-fill": { + "body": "" + }, + "pickax-line": { + "body": "" + }, + "pig-fill": { + "body": "" + }, + "pig-line": { + "body": "" + }, + "pig-money-fill": { + "body": "" + }, + "pig-money-line": { + "body": "" + }, + "pin-2-fill": { + "body": "" + }, + "pin-2-line": { + "body": "" + }, + "pin-fill": { + "body": "" + }, + "pin-line": { + "body": "" + }, + "pingpong-fill": { + "body": "" + }, + "pingpong-line": { + "body": "" + }, + "pinterest-fill": { + "body": "" + }, + "pinterest-line": { + "body": "" + }, + "pinwheel-2-fill": { + "body": "" + }, + "pinwheel-2-line": { + "body": "" + }, + "pinwheel-fill": { + "body": "" + }, + "pinwheel-line": { + "body": "" + }, + "pisa-tower-fill": { + "body": "" + }, + "pisa-tower-line": { + "body": "" + }, + "pizza-fill": { + "body": "" + }, + "pizza-line": { + "body": "" + }, + "planet-fill": { + "body": "" + }, + "planet-line": { + "body": "" + }, + "play-circle-fill": { + "body": "" + }, + "play-circle-line": { + "body": "" + }, + "play-fill": { + "body": "" + }, + "play-line": { + "body": "" + }, + "playground-fill": { + "body": "" + }, + "playground-line": { + "body": "" + }, + "playlist-2-fill": { + "body": "" + }, + "playlist-2-line": { + "body": "" + }, + "playlist-fill": { + "body": "" + }, + "playlist-line": { + "body": "" + }, + "plugin-2-fill": { + "body": "" + }, + "plugin-2-line": { + "body": "" + }, + "plugin-fill": { + "body": "" + }, + "plugin-line": { + "body": "" + }, + "plus-fill": { + "body": "" + }, + "plus-line": { + "body": "" + }, + "polkadot-dot-fill": { + "body": "" + }, + "polkadot-dot-line": { + "body": "" + }, + "polygon-fill": { + "body": "" + }, + "polygon-line": { + "body": "" + }, + "pot-fill": { + "body": "" + }, + "pot-line": { + "body": "" + }, + "power-fill": { + "body": "" + }, + "power-line": { + "body": "" + }, + "ppt-fill": { + "body": "" + }, + "ppt-line": { + "body": "" + }, + "pray-fill": { + "body": "" + }, + "pray-line": { + "body": "" + }, + "prescription-fill": { + "body": "" + }, + "prescription-line": { + "body": "" + }, + "presentation-1-fill": { + "body": "" + }, + "presentation-1-line": { + "body": "" + }, + "presentation-2-fill": { + "body": "" + }, + "presentation-2-line": { + "body": "" + }, + "presentation-3-fill": { + "body": "" + }, + "presentation-3-line": { + "body": "" + }, + "print-fill": { + "body": "" + }, + "print-line": { + "body": "" + }, + "process-fill": { + "body": "" + }, + "process-line": { + "body": "" + }, + "profile-fill": { + "body": "" + }, + "profile-line": { + "body": "" + }, + "projector-fill": { + "body": "" + }, + "projector-line": { + "body": "" + }, + "projector-screen-fill": { + "body": "" + }, + "projector-screen-line": { + "body": "" + }, + "pumpkin-fill": { + "body": "" + }, + "pumpkin-lantern-fill": { + "body": "" + }, + "pumpkin-lantern-line": { + "body": "" + }, + "pumpkin-line": { + "body": "" + }, + "puzzled-fill": { + "body": "" + }, + "puzzled-line": { + "body": "" + }, + "qq-fill": { + "body": "" + }, + "qq-line": { + "body": "" + }, + "qrcode-2-fill": { + "body": "" + }, + "qrcode-2-line": { + "body": "" + }, + "qrcode-fill": { + "body": "" + }, + "qrcode-line": { + "body": "" + }, + "question-fill": { + "body": "" + }, + "question-line": { + "body": "" + }, + "quill-pen-ai-fill": { + "body": "" + }, + "quill-pen-ai-line": { + "body": "" + }, + "quill-pen-fill": { + "body": "" + }, + "quill-pen-line": { + "body": "" + }, + "quote-left-fill": { + "body": "" + }, + "quote-left-line": { + "body": "" + }, + "quote-right-fill": { + "body": "" + }, + "quote-right-line": { + "body": "" + }, + "rabbit-fill": { + "body": "" + }, + "rabbit-line": { + "body": "" + }, + "radar-2-fill": { + "body": "" + }, + "radar-2-line": { + "body": "" + }, + "radar-fill": { + "body": "" + }, + "radar-line": { + "body": "" + }, + "radio-fill": { + "body": "" + }, + "radio-line": { + "body": "" + }, + "radiobox-fill": { + "body": "" + }, + "radiobox-line": { + "body": "" + }, + "rain-fill": { + "body": "" + }, + "rain-line": { + "body": "" + }, + "rainbow-fill": { + "body": "" + }, + "rainbow-line": { + "body": "" + }, + "rainstorm-fill": { + "body": "" + }, + "rainstorm-line": { + "body": "" + }, + "rake-fill": { + "body": "" + }, + "rake-line": { + "body": "" + }, + "random-fill": { + "body": "" + }, + "random-line": { + "body": "" + }, + "rare-fog-lights-fill": { + "body": "" + }, + "rare-fog-lights-line": { + "body": "" + }, + "react-fill": { + "body": "" + }, + "react-line": { + "body": "" + }, + "rear-windshield-defroster-fill": { + "body": "" + }, + "rear-windshield-defroster-line": { + "body": "" + }, + "receive-money-fill": { + "body": "" + }, + "receive-money-line": { + "body": "" + }, + "record-mail-fill": { + "body": "" + }, + "record-mail-line": { + "body": "" + }, + "rectangle-fill": { + "body": "" + }, + "rectangle-line": { + "body": "" + }, + "rectangle-vertical-fill": { + "body": "" + }, + "rectangle-vertical-line": { + "body": "" + }, + "recycle-fill": { + "body": "" + }, + "recycle-line": { + "body": "" + }, + "red-packet-fill": { + "body": "" + }, + "red-packet-line": { + "body": "" + }, + "red-packet-open-fill": { + "body": "" + }, + "red-packet-open-line": { + "body": "" + }, + "reddit-fill": { + "body": "" + }, + "reddit-line": { + "body": "" + }, + "refresh-1-fill": { + "body": "" + }, + "refresh-1-line": { + "body": "" + }, + "refresh-2-fill": { + "body": "" + }, + "refresh-2-line": { + "body": "" + }, + "refresh-3-fill": { + "body": "" + }, + "refresh-3-line": { + "body": "" + }, + "refresh-4-ai-fill": { + "body": "" + }, + "refresh-4-ai-line": { + "body": "" + }, + "refresh-4-fill": { + "body": "" + }, + "refresh-4-line": { + "body": "" + }, + "refresh-anticlockwise-1-fill": { + "body": "" + }, + "refresh-anticlockwise-1-line": { + "body": "" + }, + "refund-cny-fill": { + "body": "" + }, + "refund-cny-line": { + "body": "" + }, + "refund-dollar-fill": { + "body": "" + }, + "refund-dollar-line": { + "body": "" + }, + "registered-fill": { + "body": "" + }, + "registered-line": { + "body": "" + }, + "remote-control-fill": { + "body": "" + }, + "remote-control-line": { + "body": "" + }, + "remote-fill": { + "body": "" + }, + "remote-line": { + "body": "" + }, + "repeat-fill": { + "body": "" + }, + "repeat-line": { + "body": "" + }, + "repeat-one-fill": { + "body": "" + }, + "repeat-one-line": { + "body": "" + }, + "report-fill": { + "body": "" + }, + "report-forms-fill": { + "body": "" + }, + "report-forms-line": { + "body": "" + }, + "report-line": { + "body": "" + }, + "rest-area-fill": { + "body": "" + }, + "rest-area-line": { + "body": "" + }, + "restore-fill": { + "body": "" + }, + "restore-line": { + "body": "" + }, + "rewind-backward-10-fill": { + "body": "" + }, + "rewind-backward-10-line": { + "body": "" + }, + "rewind-backward-15-fill": { + "body": "" + }, + "rewind-backward-15-line": { + "body": "" + }, + "rewind-backward-30-fill": { + "body": "" + }, + "rewind-backward-30-line": { + "body": "" + }, + "rewind-backward-5-fill": { + "body": "" + }, + "rewind-backward-5-line": { + "body": "" + }, + "rewind-backward-square-10-fill": { + "body": "" + }, + "rewind-backward-square-10-line": { + "body": "" + }, + "rewind-backward-square-15-fill": { + "body": "" + }, + "rewind-backward-square-15-line": { + "body": "" + }, + "rewind-backward-square-30-fill": { + "body": "" + }, + "rewind-backward-square-30-line": { + "body": "" + }, + "rewind-backward-square-5-fill": { + "body": "" + }, + "rewind-backward-square-5-line": { + "body": "" + }, + "rewind-forward-10-fill": { + "body": "" + }, + "rewind-forward-10-line": { + "body": "" + }, + "rewind-forward-15-fill": { + "body": "" + }, + "rewind-forward-15-line": { + "body": "" + }, + "rewind-forward-30-fill": { + "body": "" + }, + "rewind-forward-30-line": { + "body": "" + }, + "rewind-forward-5-fill": { + "body": "" + }, + "rewind-forward-5-line": { + "body": "" + }, + "rewind-forward-square-10-fill": { + "body": "" + }, + "rewind-forward-square-10-line": { + "body": "" + }, + "rewind-forward-square-15-fill": { + "body": "" + }, + "rewind-forward-square-15-line": { + "body": "" + }, + "rewind-forward-square-30-fill": { + "body": "" + }, + "rewind-forward-square-30-line": { + "body": "" + }, + "rewind-forward-square-5-fill": { + "body": "" + }, + "rewind-forward-square-5-line": { + "body": "" + }, + "riding-fill": { + "body": "" + }, + "riding-line": { + "body": "" + }, + "right-fill": { + "body": "" + }, + "right-line": { + "body": "" + }, + "right-small-fill": { + "body": "" + }, + "right-small-line": { + "body": "" + }, + "road-fill": { + "body": "" + }, + "road-line": { + "body": "" + }, + "rocket-2-fill": { + "body": "" + }, + "rocket-2-line": { + "body": "" + }, + "rocket-fill": { + "body": "" + }, + "rocket-line": { + "body": "" + }, + "rotate-to-horizontal-fill": { + "body": "" + }, + "rotate-to-horizontal-line": { + "body": "" + }, + "rotate-to-vertical-fill": { + "body": "" + }, + "rotate-to-vertical-line": { + "body": "" + }, + "rotate-x-fill": { + "body": "" + }, + "rotate-x-line": { + "body": "" + }, + "rotate-y-fill": { + "body": "" + }, + "rotate-y-line": { + "body": "" + }, + "round-fill": { + "body": "" + }, + "round-line": { + "body": "" + }, + "route-fill": { + "body": "" + }, + "route-line": { + "body": "" + }, + "router-modem-fill": { + "body": "" + }, + "router-modem-line": { + "body": "" + }, + "rows-2-fill": { + "body": "" + }, + "rows-2-line": { + "body": "" + }, + "rows-3-fill": { + "body": "" + }, + "rows-3-line": { + "body": "" + }, + "rows-4-fill": { + "body": "" + }, + "rows-4-line": { + "body": "" + }, + "rss-2-fill": { + "body": "" + }, + "rss-2-line": { + "body": "" + }, + "rss-fill": { + "body": "" + }, + "rss-line": { + "body": "" + }, + "rudder-fill": { + "body": "" + }, + "rudder-line": { + "body": "" + }, + "ruler-fill": { + "body": "" + }, + "ruler-line": { + "body": "" + }, + "run-fill": { + "body": "" + }, + "run-line": { + "body": "" + }, + "sad-fill": { + "body": "" + }, + "sad-line": { + "body": "" + }, + "safari-fill": { + "body": "" + }, + "safari-line": { + "body": "" + }, + "safe-alert-fill": { + "body": "" + }, + "safe-alert-line": { + "body": "" + }, + "safe-box-fill": { + "body": "" + }, + "safe-box-line": { + "body": "" + }, + "safe-flash-fill": { + "body": "" + }, + "safe-flash-line": { + "body": "" + }, + "safe-lock-fill": { + "body": "" + }, + "safe-lock-line": { + "body": "" + }, + "safe-shield-2-fill": { + "body": "" + }, + "safe-shield-2-line": { + "body": "" + }, + "safe-shield-fill": { + "body": "" + }, + "safe-shield-line": { + "body": "" + }, + "safety-certificate-fill": { + "body": "" + }, + "safety-certificate-line": { + "body": "" + }, + "sailboat-fill": { + "body": "" + }, + "sailboat-line": { + "body": "" + }, + "sale-fill": { + "body": "" + }, + "sale-line": { + "body": "" + }, + "sandglass-2-fill": { + "body": "" + }, + "sandglass-2-line": { + "body": "" + }, + "sandglass-fill": { + "body": "" + }, + "sandglass-line": { + "body": "" + }, + "sandstorm-fill": { + "body": "" + }, + "sandstorm-line": { + "body": "" + }, + "save-2-fill": { + "body": "" + }, + "save-2-line": { + "body": "" + }, + "save-fill": { + "body": "" + }, + "save-line": { + "body": "" + }, + "scale-fill": { + "body": "" + }, + "scale-line": { + "body": "" + }, + "scan-2-fill": { + "body": "" + }, + "scan-2-line": { + "body": "" + }, + "scan-fill": { + "body": "" + }, + "scan-line": { + "body": "" + }, + "scarf-fill": { + "body": "" + }, + "scarf-line": { + "body": "" + }, + "schedule-fill": { + "body": "" + }, + "schedule-line": { + "body": "" + }, + "school-fill": { + "body": "" + }, + "school-line": { + "body": "" + }, + "science-fill": { + "body": "" + }, + "science-line": { + "body": "" + }, + "scissors-2-fill": { + "body": "" + }, + "scissors-2-line": { + "body": "" + }, + "scissors-3-fill": { + "body": "" + }, + "scissors-3-line": { + "body": "" + }, + "scissors-fill": { + "body": "" + }, + "scissors-line": { + "body": "" + }, + "scooter-fill": { + "body": "" + }, + "scooter-line": { + "body": "" + }, + "screenshot-fill": { + "body": "" + }, + "screenshot-line": { + "body": "" + }, + "screwdriver-fill": { + "body": "" + }, + "screwdriver-line": { + "body": "" + }, + "seal-fill": { + "body": "" + }, + "seal-line": { + "body": "" + }, + "search-2-fill": { + "body": "" + }, + "search-2-line": { + "body": "" + }, + "search-3-fill": { + "body": "" + }, + "search-3-line": { + "body": "" + }, + "search-ai-fill": { + "body": "" + }, + "search-ai-line": { + "body": "" + }, + "search-fill": { + "body": "" + }, + "search-line": { + "body": "" + }, + "seat-fill": { + "body": "" + }, + "seat-heated-fill": { + "body": "" + }, + "seat-heated-line": { + "body": "" + }, + "seat-line": { + "body": "" + }, + "section-fill": { + "body": "" + }, + "section-line": { + "body": "" + }, + "sector-fill": { + "body": "" + }, + "sector-line": { + "body": "" + }, + "selector-horizontal-fill": { + "body": "" + }, + "selector-horizontal-line": { + "body": "" + }, + "selector-vertical-fill": { + "body": "" + }, + "selector-vertical-line": { + "body": "" + }, + "send-fill": { + "body": "" + }, + "send-line": { + "body": "" + }, + "send-plane-fill": { + "body": "" + }, + "send-plane-line": { + "body": "" + }, + "server-2-fill": { + "body": "" + }, + "server-2-line": { + "body": "" + }, + "server-fill": { + "body": "" + }, + "server-line": { + "body": "" + }, + "service-fill": { + "body": "" + }, + "service-line": { + "body": "" + }, + "settings-1-fill": { + "body": "" + }, + "settings-1-line": { + "body": "" + }, + "settings-2-fill": { + "body": "" + }, + "settings-2-line": { + "body": "" + }, + "settings-3-fill": { + "body": "" + }, + "settings-3-line": { + "body": "" + }, + "settings-4-fill": { + "body": "" + }, + "settings-4-line": { + "body": "" + }, + "settings-5-fill": { + "body": "" + }, + "settings-5-line": { + "body": "" + }, + "settings-6-fill": { + "body": "" + }, + "settings-6-line": { + "body": "" + }, + "settings-7-fill": { + "body": "" + }, + "settings-7-line": { + "body": "" + }, + "shadow-fill": { + "body": "" + }, + "shadow-line": { + "body": "" + }, + "share-2-fill": { + "body": "" + }, + "share-2-line": { + "body": "" + }, + "share-3-fill": { + "body": "" + }, + "share-3-line": { + "body": "" + }, + "share-forward-fill": { + "body": "" + }, + "share-forward-line": { + "body": "" + }, + "shield-fill": { + "body": "" + }, + "shield-line": { + "body": "" + }, + "shield-shape-fill": { + "body": "" + }, + "shield-shape-line": { + "body": "" + }, + "ship-fill": { + "body": "" + }, + "ship-line": { + "body": "" + }, + "shirt-fill": { + "body": "" + }, + "shirt-line": { + "body": "" + }, + "shoe-2-fill": { + "body": "" + }, + "shoe-2-line": { + "body": "" + }, + "shoe-fill": { + "body": "" + }, + "shoe-line": { + "body": "" + }, + "shop-fill": { + "body": "" + }, + "shop-line": { + "body": "" + }, + "shopping-bag-1-fill": { + "body": "" + }, + "shopping-bag-1-line": { + "body": "" + }, + "shopping-bag-2-fill": { + "body": "" + }, + "shopping-bag-2-line": { + "body": "" + }, + "shopping-bag-3-fill": { + "body": "" + }, + "shopping-bag-3-line": { + "body": "" + }, + "shopping-cart-1-fill": { + "body": "" + }, + "shopping-cart-1-line": { + "body": "" + }, + "shopping-cart-2-fill": { + "body": "" + }, + "shopping-cart-2-line": { + "body": "" + }, + "shorts-fill": { + "body": "" + }, + "shorts-line": { + "body": "" + }, + "shovel-fill": { + "body": "" + }, + "shovel-line": { + "body": "" + }, + "shower-fill": { + "body": "" + }, + "shower-gel-fill": { + "body": "" + }, + "shower-gel-line": { + "body": "" + }, + "shower-line": { + "body": "" + }, + "showers-fill": { + "body": "" + }, + "showers-line": { + "body": "" + }, + "shuffle-2-fill": { + "body": "" + }, + "shuffle-2-line": { + "body": "" + }, + "shuffle-fill": { + "body": "" + }, + "shuffle-line": { + "body": "" + }, + "sick-fill": { + "body": "" + }, + "sick-line": { + "body": "" + }, + "signal-fill": { + "body": "" + }, + "signal-line": { + "body": "" + }, + "signature-fill": { + "body": "" + }, + "signature-line": { + "body": "" + }, + "silent-fill": { + "body": "" + }, + "silent-line": { + "body": "" + }, + "siri-fill": { + "body": "" + }, + "siri-line": { + "body": "" + }, + "sitemap-fill": { + "body": "" + }, + "sitemap-line": { + "body": "" + }, + "skateboard-fill": { + "body": "" + }, + "skateboard-line": { + "body": "" + }, + "skip-forward-fill": { + "body": "" + }, + "skip-forward-line": { + "body": "" + }, + "skip-previous-fill": { + "body": "" + }, + "skip-previous-line": { + "body": "" + }, + "skirt-fill": { + "body": "" + }, + "skirt-line": { + "body": "" + }, + "skull-fill": { + "body": "" + }, + "skull-line": { + "body": "" + }, + "sleep-fill": { + "body": "" + }, + "sleep-line": { + "body": "" + }, + "sleigh-fill": { + "body": "" + }, + "sleigh-line": { + "body": "" + }, + "snapchat-fill": { + "body": "" + }, + "snapchat-line": { + "body": "" + }, + "snow-fill": { + "body": "" + }, + "snow-line": { + "body": "" + }, + "snowflake-fill": { + "body": "" + }, + "snowflake-line": { + "body": "" + }, + "snowman-fill": { + "body": "" + }, + "snowman-line": { + "body": "" + }, + "snowstorm-2-fill": { + "body": "" + }, + "snowstorm-2-line": { + "body": "" + }, + "snowstorm-fill": { + "body": "" + }, + "snowstorm-line": { + "body": "" + }, + "sob-fill": { + "body": "" + }, + "sob-line": { + "body": "" + }, + "social-x-fill": { + "body": "" + }, + "social-x-line": { + "body": "" + }, + "sock-fill": { + "body": "" + }, + "sock-line": { + "body": "" + }, + "sofa-fill": { + "body": "" + }, + "sofa-line": { + "body": "" + }, + "solana-sol-fill": { + "body": "" + }, + "solana-sol-line": { + "body": "" + }, + "solar-panel-fill": { + "body": "" + }, + "solar-panel-line": { + "body": "" + }, + "sort-ascending-fill": { + "body": "" + }, + "sort-ascending-line": { + "body": "" + }, + "sort-descending-fill": { + "body": "" + }, + "sort-descending-line": { + "body": "" + }, + "sound-line-fill": { + "body": "" + }, + "sound-line-line": { + "body": "" + }, + "soup-pot-2-fill": { + "body": "" + }, + "soup-pot-2-line": { + "body": "" + }, + "soup-pot-fill": { + "body": "" + }, + "soup-pot-line": { + "body": "" + }, + "space-fill": { + "body": "" + }, + "space-line": { + "body": "" + }, + "spacing-horizontal-fill": { + "body": "" + }, + "spacing-horizontal-line": { + "body": "" + }, + "spacing-vertical-fill": { + "body": "" + }, + "spacing-vertical-line": { + "body": "" + }, + "spade-fill": { + "body": "" + }, + "spade-line": { + "body": "" + }, + "sparkles-2-fill": { + "body": "" + }, + "sparkles-2-line": { + "body": "" + }, + "sparkles-3-fill": { + "body": "" + }, + "sparkles-3-line": { + "body": "" + }, + "sparkles-fill": { + "body": "" + }, + "sparkles-line": { + "body": "" + }, + "spatula-fill": { + "body": "" + }, + "spatula-line": { + "body": "" + }, + "speaker-fill": { + "body": "" + }, + "speaker-line": { + "body": "" + }, + "speech-fill": { + "body": "" + }, + "speech-line": { + "body": "" + }, + "spoon-fill": { + "body": "" + }, + "spoon-line": { + "body": "" + }, + "spotify-fill": { + "body": "" + }, + "spotify-line": { + "body": "" + }, + "square-arrow-down-fill": { + "body": "" + }, + "square-arrow-down-line": { + "body": "" + }, + "square-arrow-left-fill": { + "body": "" + }, + "square-arrow-left-line": { + "body": "" + }, + "square-arrow-right-fill": { + "body": "" + }, + "square-arrow-right-line": { + "body": "" + }, + "square-arrow-up-fill": { + "body": "" + }, + "square-arrow-up-line": { + "body": "" + }, + "square-fill": { + "body": "" + }, + "square-line": { + "body": "" + }, + "star-2-fill": { + "body": "" + }, + "star-2-line": { + "body": "" + }, + "star-fill": { + "body": "" + }, + "star-half-fill": { + "body": "" + }, + "star-half-line": { + "body": "" + }, + "star-line": { + "body": "" + }, + "star-topper-fill": { + "body": "" + }, + "star-topper-line": { + "body": "" + }, + "statue-of-liberty-fill": { + "body": "" + }, + "statue-of-liberty-line": { + "body": "" + }, + "steering-wheel-fill": { + "body": "" + }, + "steering-wheel-line": { + "body": "" + }, + "stethoscope-fill": { + "body": "" + }, + "stethoscope-line": { + "body": "" + }, + "sticker-fill": { + "body": "" + }, + "sticker-line": { + "body": "" + }, + "stock-fill": { + "body": "" + }, + "stock-line": { + "body": "" + }, + "stop-circle-fill": { + "body": "" + }, + "stop-circle-line": { + "body": "" + }, + "stop-fill": { + "body": "" + }, + "stop-line": { + "body": "" + }, + "stopwatch-fill": { + "body": "" + }, + "stopwatch-line": { + "body": "" + }, + "storage-fill": { + "body": "" + }, + "storage-line": { + "body": "" + }, + "store-2-fill": { + "body": "" + }, + "store-2-line": { + "body": "" + }, + "store-fill": { + "body": "" + }, + "store-line": { + "body": "" + }, + "strikethrough-fill": { + "body": "" + }, + "strikethrough-line": { + "body": "" + }, + "stripe-fill": { + "body": "" + }, + "stripe-line": { + "body": "" + }, + "subtitle-fill": { + "body": "" + }, + "subtitle-line": { + "body": "" + }, + "subtract-fill": { + "body": "" + }, + "subtract-line": { + "body": "" + }, + "sugar-coated-haws-fill": { + "body": "" + }, + "sugar-coated-haws-line": { + "body": "" + }, + "suitcase-2-fill": { + "body": "" + }, + "suitcase-2-line": { + "body": "" + }, + "suitcase-fill": { + "body": "" + }, + "suitcase-line": { + "body": "" + }, + "sun-2-fill": { + "body": "" + }, + "sun-2-line": { + "body": "" + }, + "sun-cloudy-fill": { + "body": "" + }, + "sun-cloudy-line": { + "body": "" + }, + "sun-fill": { + "body": "" + }, + "sun-fog-fill": { + "body": "" + }, + "sun-fog-line": { + "body": "" + }, + "sun-line": { + "body": "" + }, + "sunflower-fill": { + "body": "" + }, + "sunflower-line": { + "body": "" + }, + "sunrise-fill": { + "body": "" + }, + "sunrise-line": { + "body": "" + }, + "sunset-fill": { + "body": "" + }, + "sunset-line": { + "body": "" + }, + "surfboard-fill": { + "body": "" + }, + "surfboard-line": { + "body": "" + }, + "surprise-fill": { + "body": "" + }, + "surprise-line": { + "body": "" + }, + "sweats-fill": { + "body": "" + }, + "sweats-line": { + "body": "" + }, + "swimming-pool-fill": { + "body": "" + }, + "swimming-pool-line": { + "body": "" + }, + "switch-fill": { + "body": "" + }, + "switch-line": { + "body": "" + }, + "sword-fill": { + "body": "" + }, + "sword-line": { + "body": "" + }, + "sydney-opera-house-fill": { + "body": "" + }, + "sydney-opera-house-line": { + "body": "" + }, + "t-shirt-2-fill": { + "body": "" + }, + "t-shirt-2-line": { + "body": "" + }, + "t-shirt-fill": { + "body": "" + }, + "t-shirt-line": { + "body": "" + }, + "table-2-fill": { + "body": "" + }, + "table-2-line": { + "body": "" + }, + "table-3-fill": { + "body": "" + }, + "table-3-line": { + "body": "" + }, + "table-fill": { + "body": "" + }, + "table-line": { + "body": "" + }, + "tag-2-fill": { + "body": "" + }, + "tag-2-line": { + "body": "" + }, + "tag-chevron-fill": { + "body": "" + }, + "tag-chevron-line": { + "body": "" + }, + "tag-fill": { + "body": "" + }, + "tag-line": { + "body": "" + }, + "taipei101-fill": { + "body": "" + }, + "taipei101-line": { + "body": "" + }, + "taj-mahal-fill": { + "body": "" + }, + "taj-mahal-line": { + "body": "" + }, + "tank-fill": { + "body": "" + }, + "tank-line": { + "body": "" + }, + "target-fill": { + "body": "" + }, + "target-line": { + "body": "" + }, + "task-2-fill": { + "body": "" + }, + "task-2-line": { + "body": "" + }, + "task-fill": { + "body": "" + }, + "task-line": { + "body": "" + }, + "teacup-fill": { + "body": "" + }, + "teacup-line": { + "body": "" + }, + "telegram-fill": { + "body": "" + }, + "telegram-line": { + "body": "" + }, + "telescope-2-fill": { + "body": "" + }, + "telescope-2-line": { + "body": "" + }, + "telescope-fill": { + "body": "" + }, + "telescope-line": { + "body": "" + }, + "temple-of-heaven-fill": { + "body": "" + }, + "temple-of-heaven-line": { + "body": "" + }, + "tent-fill": { + "body": "" + }, + "tent-line": { + "body": "" + }, + "terminal-box-fill": { + "body": "" + }, + "terminal-box-line": { + "body": "" + }, + "terminal-fill": { + "body": "" + }, + "terminal-line": { + "body": "" + }, + "terror-fill": { + "body": "" + }, + "terror-line": { + "body": "" + }, + "test-tube-fill": { + "body": "" + }, + "test-tube-line": { + "body": "" + }, + "tether-usdt-fill": { + "body": "" + }, + "tether-usdt-line": { + "body": "" + }, + "text-2-fill": { + "body": "" + }, + "text-2-line": { + "body": "" + }, + "text-area-fill": { + "body": "" + }, + "text-area-line": { + "body": "" + }, + "text-color-fill": { + "body": "" + }, + "text-color-line": { + "body": "" + }, + "text-direction-left-fill": { + "body": "" + }, + "text-direction-left-line": { + "body": "" + }, + "text-direction-right-fill": { + "body": "" + }, + "text-direction-right-line": { + "body": "" + }, + "text-fill": { + "body": "" + }, + "text-line": { + "body": "" + }, + "textbox-ai-fill": { + "body": "" + }, + "textbox-ai-line": { + "body": "" + }, + "textbox-fill": { + "body": "" + }, + "textbox-line": { + "body": "" + }, + "thermometer-fill": { + "body": "" + }, + "thermometer-line": { + "body": "" + }, + "thought-fill": { + "body": "" + }, + "thought-line": { + "body": "" + }, + "threads-fill": { + "body": "" + }, + "threads-line": { + "body": "" + }, + "three-circles-fill": { + "body": "" + }, + "three-circles-line": { + "body": "" + }, + "thumb-down-2-fill": { + "body": "" + }, + "thumb-down-2-line": { + "body": "" + }, + "thumb-down-fill": { + "body": "" + }, + "thumb-down-line": { + "body": "" + }, + "thumb-up-2-fill": { + "body": "" + }, + "thumb-up-2-line": { + "body": "" + }, + "thumb-up-fill": { + "body": "" + }, + "thumb-up-line": { + "body": "" + }, + "thunderstorm-fill": { + "body": "" + }, + "thunderstorm-line": { + "body": "" + }, + "ticket-fill": { + "body": "" + }, + "ticket-line": { + "body": "" + }, + "tiktok-fill": { + "body": "" + }, + "tiktok-line": { + "body": "" + }, + "time-duration-fill": { + "body": "" + }, + "time-duration-line": { + "body": "" + }, + "time-fill": { + "body": "" + }, + "time-line": { + "body": "" + }, + "timeline-fill": { + "body": "" + }, + "timeline-line": { + "body": "" + }, + "to-do-fill": { + "body": "" + }, + "to-do-line": { + "body": "" + }, + "toggle-left-2-fill": { + "body": "" + }, + "toggle-left-2-line": { + "body": "" + }, + "toggle-left-fill": { + "body": "" + }, + "toggle-left-line": { + "body": "" + }, + "toggle-right-2-fill": { + "body": "" + }, + "toggle-right-2-line": { + "body": "" + }, + "toggle-right-fill": { + "body": "" + }, + "toggle-right-line": { + "body": "" + }, + "toilet-paper-fill": { + "body": "" + }, + "toilet-paper-line": { + "body": "" + }, + "tongue-fill": { + "body": "" + }, + "tongue-line": { + "body": "" + }, + "tool-fill": { + "body": "" + }, + "tool-line": { + "body": "" + }, + "tornado-2-fill": { + "body": "" + }, + "tornado-2-line": { + "body": "" + }, + "tornado-fill": { + "body": "" + }, + "tornado-line": { + "body": "" + }, + "tower-crane-fill": { + "body": "" + }, + "tower-crane-line": { + "body": "" + }, + "tower-fill": { + "body": "" + }, + "tower-line": { + "body": "" + }, + "toxophily-fill": { + "body": "" + }, + "toxophily-line": { + "body": "" + }, + "toy-horse-fill": { + "body": "" + }, + "toy-horse-line": { + "body": "" + }, + "traffic-cone-fill": { + "body": "" + }, + "traffic-cone-line": { + "body": "" + }, + "traffic-lights-fill": { + "body": "" + }, + "traffic-lights-line": { + "body": "" + }, + "train-2-fill": { + "body": "" + }, + "train-2-line": { + "body": "" + }, + "train-3-fill": { + "body": "" + }, + "train-3-line": { + "body": "" + }, + "train-4-fill": { + "body": "" + }, + "train-4-line": { + "body": "" + }, + "train-fill": { + "body": "" + }, + "train-line": { + "body": "" + }, + "transfer-2-fill": { + "body": "" + }, + "transfer-2-line": { + "body": "" + }, + "transfer-3-fill": { + "body": "" + }, + "transfer-3-line": { + "body": "" + }, + "transfer-4-fill": { + "body": "" + }, + "transfer-4-line": { + "body": "" + }, + "transfer-fill": { + "body": "" + }, + "transfer-horizontal-fill": { + "body": "" + }, + "transfer-horizontal-line": { + "body": "" + }, + "transfer-line": { + "body": "" + }, + "transfer-vertical-fill": { + "body": "" + }, + "transfer-vertical-line": { + "body": "" + }, + "transformation-fill": { + "body": "" + }, + "transformation-line": { + "body": "" + }, + "translate-2-ai-fill": { + "body": "" + }, + "translate-2-ai-line": { + "body": "" + }, + "translate-2-fill": { + "body": "" + }, + "translate-2-line": { + "body": "" + }, + "translate-fill": { + "body": "" + }, + "translate-line": { + "body": "" + }, + "tree-2-fill": { + "body": "" + }, + "tree-2-line": { + "body": "" + }, + "tree-3-fill": { + "body": "" + }, + "tree-3-line": { + "body": "" + }, + "tree-4-fill": { + "body": "" + }, + "tree-4-line": { + "body": "" + }, + "tree-fill": { + "body": "" + }, + "tree-line": { + "body": "" + }, + "trello-board-fill": { + "body": "" + }, + "trello-board-line": { + "body": "" + }, + "trending-down-fill": { + "body": "" + }, + "trending-down-line": { + "body": "" + }, + "trending-up-fill": { + "body": "" + }, + "trending-up-line": { + "body": "" + }, + "triangle-fill": { + "body": "" + }, + "triangle-line": { + "body": "" + }, + "triumphal-arch-fill": { + "body": "" + }, + "triumphal-arch-line": { + "body": "" + }, + "trophy-fill": { + "body": "" + }, + "trophy-line": { + "body": "" + }, + "trouser-fill": { + "body": "" + }, + "trouser-line": { + "body": "" + }, + "truck-fill": { + "body": "" + }, + "truck-line": { + "body": "" + }, + "trunk-fill": { + "body": "" + }, + "trunk-line": { + "body": "" + }, + "tunnel-fill": { + "body": "" + }, + "tunnel-line": { + "body": "" + }, + "tv-1-fill": { + "body": "" + }, + "tv-1-line": { + "body": "" + }, + "tv-2-fill": { + "body": "" + }, + "tv-2-line": { + "body": "" + }, + "tv-towe-fill": { + "body": "" + }, + "tv-towe-line": { + "body": "" + }, + "twitter-fill": { + "body": "" + }, + "twitter-line": { + "body": "" + }, + "typhoon-fill": { + "body": "" + }, + "typhoon-line": { + "body": "" + }, + "tyre-fill": { + "body": "" + }, + "tyre-line": { + "body": "" + }, + "ufo-2-fill": { + "body": "" + }, + "ufo-2-line": { + "body": "" + }, + "ufo-fill": { + "body": "" + }, + "ufo-line": { + "body": "" + }, + "umbrella-2-fill": { + "body": "" + }, + "umbrella-2-line": { + "body": "" + }, + "umbrella-fill": { + "body": "" + }, + "umbrella-line": { + "body": "" + }, + "unarchive-fill": { + "body": "" + }, + "unarchive-line": { + "body": "" + }, + "underline-fill": { + "body": "" + }, + "underline-line": { + "body": "" + }, + "unfold-horizontal-fill": { + "body": "" + }, + "unfold-horizontal-line": { + "body": "" + }, + "unfold-vertical-fill": { + "body": "" + }, + "unfold-vertical-line": { + "body": "" + }, + "unhappy-dizzy-fill": { + "body": "" + }, + "unhappy-dizzy-line": { + "body": "" + }, + "unhappy-fill": { + "body": "" + }, + "unhappy-line": { + "body": "" + }, + "union-fill": { + "body": "" + }, + "union-line": { + "body": "" + }, + "unlink-2-fill": { + "body": "" + }, + "unlink-2-line": { + "body": "" + }, + "unlink-fill": { + "body": "" + }, + "unlink-line": { + "body": "" + }, + "unlock-fill": { + "body": "" + }, + "unlock-line": { + "body": "" + }, + "up-fill": { + "body": "" + }, + "up-line": { + "body": "" + }, + "up-small-fill": { + "body": "" + }, + "up-small-line": { + "body": "" + }, + "upload-2-fill": { + "body": "" + }, + "upload-2-line": { + "body": "" + }, + "upload-3-fill": { + "body": "" + }, + "upload-3-line": { + "body": "" + }, + "upload-fill": { + "body": "" + }, + "upload-line": { + "body": "" + }, + "usb-fill": { + "body": "" + }, + "usb-flash-disk-fill": { + "body": "" + }, + "usb-flash-disk-line": { + "body": "" + }, + "usb-line": { + "body": "" + }, + "usd-coin-usdc-fill": { + "body": "" + }, + "usd-coin-usdc-line": { + "body": "" + }, + "user-1-fill": { + "body": "" + }, + "user-1-line": { + "body": "" + }, + "user-2-fill": { + "body": "" + }, + "user-2-line": { + "body": "" + }, + "user-3-fill": { + "body": "" + }, + "user-3-line": { + "body": "" + }, + "user-4-fill": { + "body": "" + }, + "user-4-line": { + "body": "" + }, + "user-5-fill": { + "body": "" + }, + "user-5-line": { + "body": "" + }, + "user-add-2-fill": { + "body": "" + }, + "user-add-2-line": { + "body": "" + }, + "user-add-fill": { + "body": "" + }, + "user-add-line": { + "body": "" + }, + "user-edit-fill": { + "body": "" + }, + "user-edit-line": { + "body": "" + }, + "user-follow-2-fill": { + "body": "" + }, + "user-follow-2-line": { + "body": "" + }, + "user-follow-fill": { + "body": "" + }, + "user-follow-line": { + "body": "" + }, + "user-forbid-fill": { + "body": "" + }, + "user-forbid-line": { + "body": "" + }, + "user-heart-fill": { + "body": "" + }, + "user-heart-line": { + "body": "" + }, + "user-hide-fill": { + "body": "" + }, + "user-hide-line": { + "body": "" + }, + "user-info-fill": { + "body": "" + }, + "user-info-line": { + "body": "" + }, + "user-lock-fill": { + "body": "" + }, + "user-lock-line": { + "body": "" + }, + "user-pin-fill": { + "body": "" + }, + "user-pin-line": { + "body": "" + }, + "user-question-fill": { + "body": "" + }, + "user-question-line": { + "body": "" + }, + "user-remove-2-fill": { + "body": "" + }, + "user-remove-2-line": { + "body": "" + }, + "user-remove-fill": { + "body": "" + }, + "user-remove-line": { + "body": "" + }, + "user-search-fill": { + "body": "" + }, + "user-search-line": { + "body": "" + }, + "user-security-fill": { + "body": "" + }, + "user-security-line": { + "body": "" + }, + "user-setting-fill": { + "body": "" + }, + "user-setting-line": { + "body": "" + }, + "user-star-fill": { + "body": "" + }, + "user-star-line": { + "body": "" + }, + "user-visible-fill": { + "body": "" + }, + "user-visible-line": { + "body": "" + }, + "user-warning-fill": { + "body": "" + }, + "user-warning-line": { + "body": "" + }, + "user-x-fill": { + "body": "" + }, + "user-x-line": { + "body": "" + }, + "vector-bezier-2-fill": { + "body": "" + }, + "vector-bezier-2-line": { + "body": "" + }, + "vector-bezier-3-fill": { + "body": "" + }, + "vector-bezier-3-line": { + "body": "" + }, + "vector-bezier-fill": { + "body": "" + }, + "vector-bezier-line": { + "body": "" + }, + "vector-group-fill": { + "body": "" + }, + "vector-group-line": { + "body": "" + }, + "version-fill": { + "body": "" + }, + "version-line": { + "body": "" + }, + "vest-fill": { + "body": "" + }, + "vest-line": { + "body": "" + }, + "viber-messenger-fill": { + "body": "" + }, + "viber-messenger-line": { + "body": "" + }, + "video-camera-2-fill": { + "body": "" + }, + "video-camera-2-line": { + "body": "" + }, + "video-camera-fill": { + "body": "" + }, + "video-camera-line": { + "body": "" + }, + "video-fill": { + "body": "" + }, + "video-line": { + "body": "" + }, + "vip-1-fill": { + "body": "" + }, + "vip-1-line": { + "body": "" + }, + "vip-2-fill": { + "body": "" + }, + "vip-2-line": { + "body": "" + }, + "vip-3-fill": { + "body": "" + }, + "vip-3-line": { + "body": "" + }, + "vip-4-fill": { + "body": "" + }, + "vip-4-line": { + "body": "" + }, + "virus-fill": { + "body": "" + }, + "virus-line": { + "body": "" + }, + "visa-fill": { + "body": "" + }, + "visa-line": { + "body": "" + }, + "vison-pro-fill": { + "body": "" + }, + "vison-pro-line": { + "body": "" + }, + "vkontakte-fill": { + "body": "" + }, + "vkontakte-line": { + "body": "" + }, + "voice-2-fill": { + "body": "" + }, + "voice-2-line": { + "body": "" + }, + "voice-fill": { + "body": "" + }, + "voice-line": { + "body": "" + }, + "volleyball-fill": { + "body": "" + }, + "volleyball-line": { + "body": "" + }, + "volume-fill": { + "body": "" + }, + "volume-line": { + "body": "" + }, + "volume-mute-fill": { + "body": "" + }, + "volume-mute-line": { + "body": "" + }, + "volume-off-fill": { + "body": "" + }, + "volume-off-line": { + "body": "" + }, + "vscode-fill": { + "body": "" + }, + "vscode-line": { + "body": "" + }, + "vue-fill": { + "body": "" + }, + "vue-line": { + "body": "" + }, + "walk-fill": { + "body": "" + }, + "walk-line": { + "body": "" + }, + "wallet-2-fill": { + "body": "" + }, + "wallet-2-line": { + "body": "" + }, + "wallet-3-fill": { + "body": "" + }, + "wallet-3-line": { + "body": "" + }, + "wallet-4-fill": { + "body": "" + }, + "wallet-4-line": { + "body": "" + }, + "wallet-5-fill": { + "body": "" + }, + "wallet-5-line": { + "body": "" + }, + "wallet-fill": { + "body": "" + }, + "wallet-line": { + "body": "" + }, + "wardrobe-2-fill": { + "body": "" + }, + "wardrobe-2-line": { + "body": "" + }, + "wardrobe-fill": { + "body": "" + }, + "wardrobe-line": { + "body": "" + }, + "warning-fill": { + "body": "" + }, + "warning-line": { + "body": "" + }, + "wash-machine-fill": { + "body": "" + }, + "wash-machine-line": { + "body": "" + }, + "wastebasket-fill": { + "body": "" + }, + "wastebasket-line": { + "body": "" + }, + "watch-2-fill": { + "body": "" + }, + "watch-2-line": { + "body": "" + }, + "watch-fill": { + "body": "" + }, + "watch-line": { + "body": "" + }, + "wave-fill": { + "body": "" + }, + "wave-line": { + "body": "" + }, + "web-fill": { + "body": "" + }, + "web-line": { + "body": "" + }, + "webhook-fill": { + "body": "" + }, + "webhook-line": { + "body": "" + }, + "wechat-fill": { + "body": "" + }, + "wechat-line": { + "body": "" + }, + "wechat-miniprogram-fill": { + "body": "" + }, + "wechat-miniprogram-line": { + "body": "" + }, + "wechat-pay-fill": { + "body": "" + }, + "wechat-pay-line": { + "body": "" + }, + "weibo-fill": { + "body": "" + }, + "weibo-line": { + "body": "" + }, + "wet-fill": { + "body": "" + }, + "wet-line": { + "body": "" + }, + "whatsapp-fill": { + "body": "" + }, + "whatsapp-line": { + "body": "" + }, + "wheel-fill": { + "body": "" + }, + "wheel-line": { + "body": "" + }, + "wheelchair-fill": { + "body": "" + }, + "wheelchair-line": { + "body": "" + }, + "whistle-fill": { + "body": "" + }, + "whistle-line": { + "body": "" + }, + "wifi-fill": { + "body": "" + }, + "wifi-line": { + "body": "" + }, + "wifi-off-fill": { + "body": "" + }, + "wifi-off-line": { + "body": "" + }, + "wind-fill": { + "body": "" + }, + "wind-line": { + "body": "" + }, + "windows-fill": { + "body": "" + }, + "windows-line": { + "body": "" + }, + "wine-fill": { + "body": "" + }, + "wine-line": { + "body": "" + }, + "wineglass-2-fill": { + "body": "" + }, + "wineglass-2-line": { + "body": "" + }, + "wineglass-fill": { + "body": "" + }, + "wineglass-line": { + "body": "" + }, + "wiper-fill": { + "body": "" + }, + "wiper-line": { + "body": "" + }, + "world-2-fill": { + "body": "" + }, + "world-2-line": { + "body": "" + }, + "world-fill": { + "body": "" + }, + "world-line": { + "body": "" + }, + "wreath-fill": { + "body": "" + }, + "wreath-line": { + "body": "" + }, + "x-skew-fill": { + "body": "" + }, + "x-skew-line": { + "body": "" + }, + "xbox-fill": { + "body": "" + }, + "xbox-line": { + "body": "" + }, + "xls-fill": { + "body": "" + }, + "xls-line": { + "body": "" + }, + "xrp-fill": { + "body": "" + }, + "xrp-line": { + "body": "" + }, + "y-skew-fill": { + "body": "" + }, + "y-skew-line": { + "body": "" + }, + "yinyang-fill": { + "body": "" + }, + "yinyang-line": { + "body": "" + }, + "youtube-fill": { + "body": "" + }, + "youtube-line": { + "body": "" + }, + "yuanbao-fill": { + "body": "" + }, + "yuanbao-line": { + "body": "" + }, + "za-sort-ascending-letters-fill": { + "body": "" + }, + "za-sort-ascending-letters-line": { + "body": "" + }, + "za-sort-descending-letters-fill": { + "body": "" + }, + "za-sort-descending-letters-line": { + "body": "" + }, + "zoom-in-fill": { + "body": "" + }, + "zoom-in-line": { + "body": "" + }, + "zoom-out-fill": { + "body": "" + }, + "zoom-out-line": { + "body": "" + } + }, + "aliases": { + "arow-to-down-fill": { + "parent": "arrow-to-down-fill" + }, + "arow-to-down-line": { + "parent": "arrow-to-down-line" + }, + "arow-to-left-fill": { + "parent": "arrow-to-left-fill" + }, + "arow-to-left-line": { + "parent": "arrow-to-left-line" + }, + "arow-to-right-fill": { + "parent": "arrow-to-right-fill" + }, + "arow-to-right-line": { + "parent": "arrow-to-right-line" + }, + "arow-to-up-fill": { + "parent": "arrow-to-up-fill" + }, + "arow-to-up-line": { + "parent": "arrow-to-up-line" + }, + "exchange-bitcoin-2-fill": { + "parent": "exchange-baht-fill" + }, + "exchange-bitcoin-2-line": { + "parent": "exchange-baht-line" + }, + "file-infor-fill": { + "parent": "file-info-fill" + }, + "file-infor-line": { + "parent": "file-info-line" + }, + "folder-infor-fill": { + "parent": "folder-info-fill" + }, + "folder-infor-line": { + "parent": "folder-info-line" + }, + "palace-2-fill": { + "parent": "temple-of-heaven-fill" + }, + "palace-2-line": { + "parent": "temple-of-heaven-line" + }, + "tower-2-fill": { + "parent": "tv-towe-fill" + }, + "tower-2-line": { + "parent": "tv-towe-line" + }, + "tower-3-fill": { + "parent": "canton-tower-fill" + }, + "tower-3-line": { + "parent": "canton-tower-line" + }, + "tower-4-fill": { + "parent": "bank-of-china-tower-fill" + }, + "tower-4-line": { + "parent": "bank-of-china-tower-line" + }, + "tower-5-fill": { + "parent": "kingkey-100-tower-fill" + }, + "tower-5-line": { + "parent": "kingkey-100-tower-line" + } + }, + "categories": { + "Arrow": [ + "align-arrow-down-fill", + "align-arrow-down-line", + "align-arrow-left-fill", + "align-arrow-left-line", + "align-arrow-right-fill", + "align-arrow-right-line", + "align-arrow-up-fill", + "align-arrow-up-line", + "arrow-down-circle-fill", + "arrow-down-circle-line", + "arrow-down-fill", + "arrow-down-line", + "arrow-left-circle-fill", + "arrow-left-circle-line", + "arrow-left-down-circle-fill", + "arrow-left-down-circle-line", + "arrow-left-down-fill", + "arrow-left-down-line", + "arrow-left-fill", + "arrow-left-line", + "arrow-left-up-circle-fill", + "arrow-left-up-circle-line", + "arrow-left-up-fill", + "arrow-left-up-line", + "arrow-right-circle-fill", + "arrow-right-circle-line", + "arrow-right-down-circle-fill", + "arrow-right-down-circle-line", + "arrow-right-down-fill", + "arrow-right-down-line", + "arrow-right-fill", + "arrow-right-line", + "arrow-right-up-circle-fill", + "arrow-right-up-circle-line", + "arrow-right-up-fill", + "arrow-right-up-line", + "arrow-to-down-fill", + "arrow-to-down-line", + "arrow-to-left-fill", + "arrow-to-left-line", + "arrow-to-right-fill", + "arrow-to-right-line", + "arrow-to-up-fill", + "arrow-to-up-line", + "arrow-up-circle-fill", + "arrow-up-circle-line", + "arrow-up-fill", + "arrow-up-line", + "arrows-down-fill", + "arrows-down-line", + "arrows-left-fill", + "arrows-left-line", + "arrows-right-fill", + "arrows-right-line", + "arrows-up-fill", + "arrows-up-line", + "back-2-fill", + "back-2-line", + "back-fill", + "back-line", + "corner-down-left-fill", + "corner-down-left-line", + "corner-down-right-fill", + "corner-down-right-line", + "corner-up-left-fill", + "corner-up-left-line", + "corner-up-right-fill", + "corner-up-right-line", + "direction-arrow-fill", + "direction-arrow-line", + "down-fill", + "down-line", + "down-small-fill", + "down-small-line", + "forward-2-fill", + "forward-2-line", + "forward-fill", + "forward-line", + "fullscreen-2-fill", + "fullscreen-2-line", + "fullscreen-exit-2-fill", + "fullscreen-exit-2-line", + "large-arrow-down-fill", + "large-arrow-down-line", + "large-arrow-left-fill", + "large-arrow-left-line", + "large-arrow-right-fill", + "large-arrow-right-line", + "large-arrow-up-fill", + "large-arrow-up-line", + "left-fill", + "left-line", + "left-small-fill", + "left-small-line", + "move-fill", + "move-line", + "right-fill", + "right-line", + "right-small-fill", + "right-small-line", + "selector-horizontal-fill", + "selector-horizontal-line", + "selector-vertical-fill", + "selector-vertical-line", + "square-arrow-down-fill", + "square-arrow-down-line", + "square-arrow-left-fill", + "square-arrow-left-line", + "square-arrow-right-fill", + "square-arrow-right-line", + "square-arrow-up-fill", + "square-arrow-up-line", + "transfer-2-fill", + "transfer-2-line", + "transfer-3-fill", + "transfer-3-line", + "transfer-4-fill", + "transfer-4-line", + "transfer-fill", + "transfer-horizontal-fill", + "transfer-horizontal-line", + "transfer-line", + "transfer-vertical-fill", + "transfer-vertical-line", + "trending-down-fill", + "trending-down-line", + "trending-up-fill", + "trending-up-line", + "up-fill", + "up-line", + "up-small-fill", + "up-small-line" + ], + "Building": [ + "bank-fill", + "bank-line", + "bank-of-china-tower-fill", + "bank-of-china-tower-line", + "big-ben-fill", + "big-ben-line", + "bridge-2-fill", + "bridge-2-line", + "bridge-fill", + "bridge-line", + "building-1-fill", + "building-1-line", + "building-2-fill", + "building-2-line", + "building-3-fill", + "building-3-line", + "building-4-fill", + "building-4-line", + "building-5-fill", + "building-5-line", + "building-6-fill", + "building-6-line", + "burj-al-arab-fill", + "burj-al-arab-line", + "burj-khalifa-tower-fill", + "burj-khalifa-tower-line", + "campground-fill", + "campground-line", + "canton-tower-fill", + "canton-tower-line", + "christ-the-redeemer-fill", + "christ-the-redeemer-line", + "church-fill", + "church-line", + "dutch-windmill-fill", + "dutch-windmill-line", + "egyptian-pyramids-fill", + "egyptian-pyramids-line", + "eiffel-tower-fill", + "eiffel-tower-line", + "factory-2-fill", + "factory-2-line", + "factory-fill", + "factory-line", + "ferris-wheel-fill", + "ferris-wheel-line", + "government-fill", + "government-line", + "greatwall-fill", + "greatwall-line", + "home-1-fill", + "home-1-line", + "home-2-fill", + "home-2-line", + "home-3-fill", + "home-3-line", + "home-4-fill", + "home-4-line", + "home-5-fill", + "home-5-line", + "home-6-fill", + "home-6-line", + "home-7-fill", + "home-7-line", + "hospital-fill", + "hospital-line", + "hotel-fill", + "hotel-line", + "house-2-fill", + "house-2-line", + "house-fill", + "house-line", + "kingkey-100-tower-fill", + "kingkey-100-tower-line", + "lighthouse-fill", + "lighthouse-line", + "marina-bay-sand-fill", + "marina-bay-sand-line", + "maya-pyramids-fill", + "maya-pyramids-line", + "miyajima-torii-fill", + "miyajima-torii-line", + "moai-fill", + "moai-line", + "monument-fill", + "monument-line", + "palace-fill", + "palace-line", + "pavilion-fill", + "pavilion-line", + "pisa-tower-fill", + "pisa-tower-line", + "school-fill", + "school-line", + "shop-fill", + "shop-line", + "statue-of-liberty-fill", + "statue-of-liberty-line", + "store-2-fill", + "store-2-line", + "store-fill", + "store-line", + "sydney-opera-house-fill", + "sydney-opera-house-line", + "taipei101-fill", + "taipei101-line", + "taj-mahal-fill", + "taj-mahal-line", + "temple-of-heaven-fill", + "temple-of-heaven-line", + "tent-fill", + "tent-line", + "tower-fill", + "tower-line", + "triumphal-arch-fill", + "triumphal-arch-line", + "tv-towe-fill", + "tv-towe-line" + ], + "Business": [ + "ad-circle-fill", + "ad-circle-line", + "ad-circle-off-fill", + "ad-circle-off-line", + "ad-rectangle-fill", + "ad-rectangle-line", + "ad-rectangle-off-fill", + "ad-rectangle-off-line", + "anniversary-fill", + "anniversary-line", + "auction-fill", + "auction-line", + "award-fill", + "award-line", + "bank-card-fill", + "bank-card-line", + "basket-2-fill", + "basket-2-line", + "basket-fill", + "basket-line", + "briefcase-2-fill", + "briefcase-2-line", + "briefcase-fill", + "briefcase-line", + "calendar-2-fill", + "calendar-2-line", + "calendar-3-fill", + "calendar-3-line", + "calendar-add-fill", + "calendar-add-line", + "calendar-day-fill", + "calendar-day-line", + "calendar-fill", + "calendar-line", + "calendar-month-fill", + "calendar-month-line", + "calendar-time-add-fill", + "calendar-time-add-line", + "calendar-week-fill", + "calendar-week-line", + "candle-fill", + "candle-line", + "candles-fill", + "candles-line", + "card-pay-fill", + "card-pay-line", + "card-refund-fill", + "card-refund-line", + "cash-2-fill", + "cash-2-line", + "cash-fill", + "cash-line", + "celebrate-fill", + "celebrate-line", + "chart-bar-2-fill", + "chart-bar-2-line", + "chart-bar-fill", + "chart-bar-line", + "chart-decrease-fill", + "chart-decrease-line", + "chart-horizontal-fill", + "chart-horizontal-line", + "chart-line-fill", + "chart-line-line", + "chart-pie-2-fill", + "chart-pie-2-line", + "chart-pie-fill", + "chart-pie-line", + "chart-vertical-fill", + "chart-vertical-line", + "chines-knot-fill", + "chines-knot-line", + "christmas-ball-fill", + "christmas-ball-line", + "coin-2-fill", + "coin-2-line", + "coin-3-fill", + "coin-3-line", + "coin-fill", + "coin-line", + "copper-coin-fill", + "copper-coin-line", + "copyright-fill", + "copyright-line", + "coupon-fill", + "coupon-line", + "currency-baht-2-fill", + "currency-baht-2-line", + "currency-baht-fill", + "currency-baht-line", + "currency-cny-2-fill", + "currency-cny-2-line", + "currency-cny-fill", + "currency-cny-line", + "currency-dollar-2-fill", + "currency-dollar-2-line", + "currency-dollar-fill", + "currency-dollar-line", + "currency-euro-2-fill", + "currency-euro-2-line", + "currency-euro-fill", + "currency-euro-line", + "currency-lira-2-fill", + "currency-lira-2-line", + "currency-lira-fill", + "currency-lira-line", + "currency-nigeria-2-fill", + "currency-nigeria-2-line", + "currency-nigeria-fill", + "currency-nigeria-line", + "currency-pound-2-fill", + "currency-pound-2-line", + "currency-pound-fill", + "currency-pound-line", + "currency-rubel-2-fill", + "currency-rubel-2-line", + "currency-rubel-fill", + "currency-rubel-line", + "currency-rupee-2-fill", + "currency-rupee-2-line", + "currency-rupee-fill", + "currency-rupee-line", + "currency-shekel-2-fill", + "currency-shekel-2-line", + "currency-shekel-fill", + "currency-shekel-line", + "currency-won-2-fill", + "currency-won-2-line", + "currency-won-fill", + "currency-won-line", + "diamond-2-fill", + "diamond-2-line", + "exchange-baht-fill", + "exchange-baht-line", + "exchange-cny-fill", + "exchange-cny-line", + "exchange-dollar-fill", + "exchange-dollar-line", + "exchange-euro-fill", + "exchange-euro-line", + "filter-3-fill", + "filter-3-line", + "filter-fill", + "filter-line", + "flag-1-fill", + "flag-1-line", + "flag-2-fill", + "flag-2-line", + "flag-3-fill", + "flag-3-line", + "flag-4-fill", + "flag-4-line", + "gift-2-fill", + "gift-2-line", + "gift-card-fill", + "gift-card-line", + "gift-fill", + "gift-line", + "ladder-fill", + "ladder-line", + "lantern-2-fill", + "lantern-2-line", + "lantern-fill", + "lantern-line", + "luggage-fill", + "luggage-line", + "medal-fill", + "medal-line", + "palette-3-fill", + "palette-3-line", + "pig-money-fill", + "pig-money-line", + "presentation-1-fill", + "presentation-1-line", + "presentation-2-fill", + "presentation-2-line", + "presentation-3-fill", + "presentation-3-line", + "pumpkin-lantern-fill", + "pumpkin-lantern-line", + "receive-money-fill", + "receive-money-line", + "red-packet-fill", + "red-packet-line", + "red-packet-open-fill", + "red-packet-open-line", + "refund-cny-fill", + "refund-cny-line", + "refund-dollar-fill", + "refund-dollar-line", + "registered-fill", + "registered-line", + "safe-box-fill", + "safe-box-line", + "sale-fill", + "sale-line", + "schedule-fill", + "schedule-line", + "seal-fill", + "seal-line", + "shopping-bag-1-fill", + "shopping-bag-1-line", + "shopping-bag-2-fill", + "shopping-bag-2-line", + "shopping-bag-3-fill", + "shopping-bag-3-line", + "shopping-cart-1-fill", + "shopping-cart-1-line", + "shopping-cart-2-fill", + "shopping-cart-2-line", + "sofa-fill", + "sofa-line", + "stock-fill", + "stock-line", + "suitcase-2-fill", + "suitcase-2-line", + "suitcase-fill", + "suitcase-line", + "tag-2-fill", + "tag-2-line", + "tag-chevron-fill", + "tag-chevron-line", + "tag-fill", + "tag-line", + "target-fill", + "target-line", + "ticket-fill", + "ticket-line", + "trophy-fill", + "trophy-line", + "vip-1-fill", + "vip-1-line", + "vip-2-fill", + "vip-2-line", + "vip-3-fill", + "vip-3-line", + "vip-4-fill", + "vip-4-line", + "wallet-2-fill", + "wallet-2-line", + "wallet-3-fill", + "wallet-3-line", + "wallet-4-fill", + "wallet-4-line", + "wallet-5-fill", + "wallet-5-line", + "wallet-fill", + "wallet-line", + "yuanbao-fill", + "yuanbao-line" + ], + "Contact": [ + "chat-1-fill", + "chat-1-line", + "chat-2-fill", + "chat-2-line", + "chat-3-fill", + "chat-3-line", + "chat-4-fill", + "chat-4-line", + "comment-2-fill", + "comment-2-line", + "comment-fill", + "comment-line", + "invite-fill", + "invite-line", + "mail-ai-fill", + "mail-ai-line", + "mail-fill", + "mail-line", + "mail-open-fill", + "mail-open-line", + "mail-send-fill", + "mail-send-line", + "mailbox-fill", + "mailbox-line", + "message-1-fill", + "message-1-line", + "message-2-fill", + "message-2-line", + "message-3-fill", + "message-3-line", + "message-4-fill", + "message-4-line", + "phone-add-fill", + "phone-add-line", + "phone-block-fill", + "phone-block-line", + "phone-call-fill", + "phone-call-line", + "phone-fill", + "phone-incoming-fill", + "phone-incoming-line", + "phone-line", + "phone-off-fill", + "phone-off-line", + "phone-outgoing-fill", + "phone-outgoing-line", + "phone-success-fill", + "phone-success-line", + "send-fill", + "send-line", + "send-plane-fill", + "send-plane-line" + ], + "Crypto": [ + "avalanche-avax-fill", + "avalanche-avax-line", + "binance-coin-bnb-fill", + "binance-coin-bnb-line", + "binance-usd-busd-fill", + "binance-usd-busd-line", + "bnb-fill", + "bnb-line", + "cardano-ada-fill", + "cardano-ada-line", + "currency-bitcoin-2-fill", + "currency-bitcoin-2-line", + "currency-bitcoin-fill", + "currency-bitcoin-line", + "dogecoin-doge-fill", + "dogecoin-doge-line", + "ethereum-fill", + "ethereum-line", + "exchange-bitcoin-fill", + "exchange-bitcoin-line", + "monero-fill", + "monero-line", + "polkadot-dot-fill", + "polkadot-dot-line", + "solana-sol-fill", + "solana-sol-line", + "tether-usdt-fill", + "tether-usdt-line", + "usd-coin-usdc-fill", + "usd-coin-usdc-line", + "xrp-fill", + "xrp-line" + ], + "Design": [ + "align-bottom-fill", + "align-bottom-line", + "align-horizontal-center-fill", + "align-horizontal-center-line", + "align-left-2-fill", + "align-left-2-line", + "align-right-2-fill", + "align-right-2-line", + "align-top-fill", + "align-top-line", + "align-vertical-center-fill", + "align-vertical-center-line", + "anticlockwise-alt-fill", + "anticlockwise-alt-line", + "anticlockwise-fill", + "anticlockwise-line", + "artboard-fill", + "artboard-line", + "background-fill", + "background-line", + "bling-fill", + "bling-line", + "board-fill", + "board-line", + "border-blank-fill", + "border-blank-line", + "border-bottom-fill", + "border-bottom-line", + "border-horizontal-fill", + "border-horizontal-line", + "border-inner-fill", + "border-inner-line", + "border-left-fill", + "border-left-line", + "border-outer-fill", + "border-outer-line", + "border-radius-fill", + "border-radius-line", + "border-right-fill", + "border-right-line", + "border-top-fill", + "border-top-line", + "border-vertical-fill", + "border-vertical-line", + "brightness-fill", + "brightness-line", + "brush-2-fill", + "brush-2-line", + "clockwise-alt-fill", + "clockwise-alt-line", + "clockwise-fill", + "clockwise-line", + "color-filter-fill", + "color-filter-line", + "color-picker-fill", + "color-picker-line", + "columns-2-fill", + "columns-2-line", + "columns-3-fill", + "columns-3-line", + "combine-fill", + "combine-line", + "components-fill", + "components-line", + "distribute-spacing-horizontal-fill", + "distribute-spacing-horizontal-line", + "distribute-spacing-vertical-fill", + "distribute-spacing-vertical-line", + "drawing-board-fill", + "drawing-board-line", + "drop-fill", + "drop-line", + "ease-in-control-point-fill", + "ease-in-control-point-line", + "ease-in-fill", + "ease-in-line", + "ease-in-out-control-point-fill", + "ease-in-out-control-point-line", + "ease-out-control-point-fill", + "ease-out-control-point-line", + "ease-out-fill", + "ease-out-line", + "easy-in-out-fill", + "easy-in-out-line", + "exclude-fill", + "exclude-line", + "exposure-fill", + "exposure-line", + "flip-horizontal-fill", + "flip-horizontal-line", + "flip-vertical-fill", + "flip-vertical-line", + "fold-horizontal-fill", + "fold-horizontal-line", + "fold-vertical-fill", + "fold-vertical-line", + "intersect-fill", + "intersect-line", + "knife-fill", + "knife-line", + "layer-fill", + "layer-line", + "layout-10-fill", + "layout-10-line", + "layout-11-fill", + "layout-11-line", + "layout-2-fill", + "layout-2-line", + "layout-3-fill", + "layout-3-line", + "layout-4-fill", + "layout-4-line", + "layout-5-fill", + "layout-5-line", + "layout-6-fill", + "layout-6-line", + "layout-7-fill", + "layout-7-line", + "layout-8-fill", + "layout-8-line", + "layout-9-fill", + "layout-9-line", + "layout-bottom-close-fill", + "layout-bottom-close-line", + "layout-bottom-fill", + "layout-bottom-line", + "layout-bottom-open-fill", + "layout-bottom-open-line", + "layout-fill", + "layout-grid-fill", + "layout-grid-line", + "layout-left-fill", + "layout-left-line", + "layout-leftbar-close-fill", + "layout-leftbar-close-line", + "layout-leftbar-open-fill", + "layout-leftbar-open-line", + "layout-line", + "layout-right-fill", + "layout-right-line", + "layout-rightbar-close-fill", + "layout-rightbar-close-line", + "layout-rightbar-open-fill", + "layout-rightbar-open-line", + "layout-top-close-fill", + "layout-top-close-line", + "layout-top-fill", + "layout-top-line", + "layout-top-open-fill", + "layout-top-open-line", + "magic-1-fill", + "magic-1-line", + "magic-2-fill", + "magic-2-line", + "magic-3-fill", + "magic-3-line", + "magic-hat-2-fill", + "magic-hat-2-line", + "magic-hat-fill", + "magic-hat-line", + "mark-pen-fill", + "mark-pen-line", + "markup-fill", + "markup-line", + "mirror-fill", + "mirror-line", + "mosaic-fill", + "mosaic-line", + "paint-2-fill", + "paint-2-line", + "paint-brush-ai-fill", + "paint-brush-ai-line", + "paint-brush-fill", + "paint-brush-line", + "palette-2-fill", + "palette-2-line", + "palette-fill", + "palette-line", + "paster-fill", + "paster-line", + "pen-fill", + "pen-line", + "quill-pen-ai-fill", + "quill-pen-ai-line", + "quill-pen-fill", + "quill-pen-line", + "rotate-x-fill", + "rotate-x-line", + "rotate-y-fill", + "rotate-y-line", + "rows-2-fill", + "rows-2-line", + "rows-3-fill", + "rows-3-line", + "rows-4-fill", + "rows-4-line", + "ruler-fill", + "ruler-line", + "scale-fill", + "scale-line", + "scissors-2-fill", + "scissors-2-line", + "scissors-3-fill", + "scissors-3-line", + "scissors-fill", + "scissors-line", + "screenshot-fill", + "screenshot-line", + "section-fill", + "section-line", + "shadow-fill", + "shadow-line", + "sticker-fill", + "sticker-line", + "subtract-fill", + "subtract-line", + "table-2-fill", + "table-2-line", + "unfold-horizontal-fill", + "unfold-horizontal-line", + "unfold-vertical-fill", + "unfold-vertical-line", + "union-fill", + "union-line", + "vector-bezier-2-fill", + "vector-bezier-2-line", + "vector-bezier-3-fill", + "vector-bezier-3-line", + "vector-bezier-fill", + "vector-bezier-line", + "vector-group-fill", + "vector-group-line", + "x-skew-fill", + "x-skew-line", + "y-skew-fill", + "y-skew-line" + ], + "Development": [ + "braces-fill", + "braces-line", + "brackets-angle-fill", + "brackets-angle-line", + "brackets-fill", + "brackets-line", + "bug-fill", + "bug-line", + "code-fill", + "code-line", + "command-fill", + "command-line", + "cursor-2-fill", + "cursor-2-line", + "cursor-3-fill", + "cursor-3-line", + "cursor-fill", + "cursor-line", + "department-fill", + "department-line", + "directory-fill", + "directory-line", + "git-branch-fill", + "git-branch-line", + "git-commit-fill", + "git-commit-line", + "git-compare-fill", + "git-compare-line", + "git-merge-fill", + "git-merge-line", + "git-pull-request-close-fill", + "git-pull-request-close-line", + "git-pull-request-fill", + "git-pull-request-line", + "hotkey-fill", + "hotkey-line", + "inspect-fill", + "inspect-line", + "parentheses-fill", + "parentheses-line", + "performance-fill", + "performance-line", + "sitemap-fill", + "sitemap-line", + "terminal-box-fill", + "terminal-box-line", + "terminal-fill", + "terminal-line", + "web-fill", + "web-line" + ], + "Device": [ + "ai-fill", + "ai-line", + "air-condition-fill", + "air-condition-line", + "air-condition-open-fill", + "air-condition-open-line", + "airplay-fill", + "airplay-line", + "airpods-2-fill", + "airpods-2-line", + "alarm-1-fill", + "alarm-1-line", + "alarm-2-fill", + "alarm-2-line", + "aspect-ratio-fill", + "aspect-ratio-line", + "barcode-fill", + "barcode-line", + "barcode-scan-fill", + "barcode-scan-line", + "base-station-2-fill", + "base-station-2-line", + "base-station-fill", + "base-station-line", + "battery-1-fill", + "battery-1-line", + "battery-2-fill", + "battery-2-line", + "battery-3-fill", + "battery-3-line", + "battery-4-fill", + "battery-4-line", + "battery-automotive-fill", + "battery-automotive-line", + "battery-charging-fill", + "battery-charging-line", + "battery-fill", + "battery-line", + "bluetooth-fill", + "bluetooth-line", + "bluetooth-off-fill", + "bluetooth-off-line", + "bulb-2-fill", + "bulb-2-line", + "bulb-fill", + "bulb-line", + "camcorder-2-fill", + "camcorder-2-line", + "cardboard-vr-fill", + "cardboard-vr-line", + "ceiling-lamp-fill", + "ceiling-lamp-line", + "cellphone-2-ai-fill", + "cellphone-2-ai-line", + "cellphone-2-fill", + "cellphone-2-horizontal-fill", + "cellphone-2-horizontal-line", + "cellphone-2-line", + "cellphone-fill", + "cellphone-line", + "cellphone-vibration-fill", + "cellphone-vibration-line", + "chip-fill", + "chip-line", + "computer-camera-fill", + "computer-camera-line", + "computer-camera-off-fill", + "computer-camera-off-line", + "computer-fill", + "computer-line", + "counter-2-fill", + "counter-2-line", + "cube-3d-fill", + "cube-3d-line", + "dashboard-2-fill", + "dashboard-2-line", + "dashboard-3-fill", + "dashboard-3-line", + "dashboard-4-fill", + "dashboard-4-line", + "dashboard-fill", + "dashboard-line", + "desk-lamp-2-fill", + "desk-lamp-2-line", + "desk-lamp-fill", + "desk-lamp-line", + "device-fill", + "device-line", + "display-fill", + "display-line", + "drone-fill", + "drone-line", + "escalator-down-fill", + "escalator-down-line", + "escalator-up-fill", + "escalator-up-line", + "fax-fill", + "fax-line", + "flash-fill", + "flash-line", + "flashlight-fill", + "flashlight-line", + "fridge-fill", + "fridge-line", + "game-1-fill", + "game-1-line", + "game-2-fill", + "game-2-line", + "gradienter-fill", + "gradienter-line", + "guitar-fill", + "guitar-line", + "high-voltage-power-fill", + "high-voltage-power-line", + "home-wifi-fill", + "home-wifi-line", + "homepod-fill", + "homepod-line", + "homepod-mini-fill", + "homepod-mini-line", + "imac-fill", + "imac-line", + "instrument-fill", + "instrument-line", + "keyboard-2-fill", + "keyboard-2-line", + "keyboard-fill", + "keyboard-line", + "laptop-2-fill", + "laptop-2-line", + "laptop-fill", + "laptop-line", + "light-fill", + "light-line", + "microscope-fill", + "microscope-line", + "midi-fill", + "midi-line", + "monitor-fill", + "monitor-line", + "mouse-fill", + "mouse-line", + "pad-fill", + "pad-line", + "panoramas-fill", + "panoramas-line", + "plugin-2-fill", + "plugin-2-line", + "plugin-fill", + "plugin-line", + "print-fill", + "print-line", + "projector-fill", + "projector-line", + "projector-screen-fill", + "projector-screen-line", + "qrcode-2-fill", + "qrcode-2-line", + "qrcode-fill", + "qrcode-line", + "radar-2-fill", + "radar-2-line", + "radar-fill", + "radar-line", + "radio-fill", + "radio-line", + "remote-control-fill", + "remote-control-line", + "remote-fill", + "remote-line", + "router-modem-fill", + "router-modem-line", + "rss-2-fill", + "rss-2-line", + "rss-fill", + "rss-line", + "sandglass-2-fill", + "sandglass-2-line", + "sandglass-fill", + "sandglass-line", + "scan-2-fill", + "scan-2-line", + "scan-fill", + "scan-line", + "server-2-fill", + "server-2-line", + "server-fill", + "server-line", + "shower-fill", + "shower-line", + "signal-fill", + "signal-line", + "solar-panel-fill", + "solar-panel-line", + "speaker-fill", + "speaker-line", + "stopwatch-fill", + "stopwatch-line", + "storage-fill", + "storage-line", + "telescope-2-fill", + "telescope-2-line", + "telescope-fill", + "telescope-line", + "tower-crane-fill", + "tower-crane-line", + "tv-1-fill", + "tv-1-line", + "tv-2-fill", + "tv-2-line", + "usb-fill", + "usb-flash-disk-fill", + "usb-flash-disk-line", + "usb-line", + "vison-pro-fill", + "vison-pro-line", + "wash-machine-fill", + "wash-machine-line", + "watch-2-fill", + "watch-2-line", + "watch-fill", + "watch-line", + "wifi-fill", + "wifi-line", + "wifi-off-fill", + "wifi-off-line" + ], + "Editor": [ + "align-center-fill", + "align-center-line", + "align-justify-fill", + "align-justify-line", + "align-left-fill", + "align-left-line", + "align-right-fill", + "align-right-line", + "and-fill", + "and-line", + "asterisk-2-fill", + "asterisk-2-line", + "asterisk-fill", + "asterisk-line", + "at-fill", + "at-line", + "az-sort-ascending-letters-fill", + "az-sort-ascending-letters-line", + "az-sort-descending-letters-fill", + "az-sort-descending-letters-line", + "blockquote-fill", + "blockquote-line", + "bold-fill", + "bold-line", + "column-fill", + "column-line", + "content-ai-fill", + "content-ai-line", + "cursor-text-fill", + "cursor-text-line", + "dividing-line-fill", + "dividing-line-line", + "edit-2-fill", + "edit-2-line", + "edit-3-fill", + "edit-3-line", + "edit-4-fill", + "edit-4-line", + "edit-fill", + "edit-line", + "eraser-fill", + "eraser-line", + "font-fill", + "font-line", + "font-size-fill", + "font-size-line", + "formula-fill", + "formula-line", + "frame-fill", + "frame-line", + "hashtag-fill", + "hashtag-line", + "heading-1-fill", + "heading-1-line", + "heading-2-fill", + "heading-2-line", + "heading-3-fill", + "heading-3-line", + "indent-decrease-fill", + "indent-decrease-line", + "indent-increase-fill", + "indent-increase-line", + "italic-fill", + "italic-line", + "letter-spacing-fill", + "letter-spacing-line", + "line-height-fill", + "line-height-line", + "list-check-2-fill", + "list-check-2-line", + "list-check-3-fill", + "list-check-3-line", + "list-check-fill", + "list-check-line", + "list-collapse-fill", + "list-collapse-line", + "list-expansion-fill", + "list-expansion-line", + "list-ordered-fill", + "list-ordered-line", + "list-search-fill", + "list-search-line", + "menu-fill", + "menu-line", + "numbers-09-sort-ascending-fill", + "numbers-09-sort-ascending-line", + "numbers-09-sort-descending-fill", + "numbers-09-sort-descending-line", + "numbers-90-sort-ascending-fill", + "numbers-90-sort-ascending-line", + "numbers-90-sort-descending-fill", + "numbers-90-sort-descending-line", + "omega-fill", + "omega-line", + "paint-fill", + "paint-line", + "paragraph-fill", + "paragraph-line", + "pen-2-fill", + "pen-2-line", + "pencil-2-ai-fill", + "pencil-2-ai-line", + "pencil-2-fill", + "pencil-2-line", + "pencil-3-fill", + "pencil-3-line", + "pencil-fill", + "pencil-line", + "pencil-ruler-fill", + "pencil-ruler-line", + "quote-left-fill", + "quote-left-line", + "quote-right-fill", + "quote-right-line", + "signature-fill", + "signature-line", + "sort-ascending-fill", + "sort-ascending-line", + "sort-descending-fill", + "sort-descending-line", + "space-fill", + "space-line", + "spacing-horizontal-fill", + "spacing-horizontal-line", + "spacing-vertical-fill", + "spacing-vertical-line", + "strikethrough-fill", + "strikethrough-line", + "subtitle-fill", + "subtitle-line", + "table-3-fill", + "table-3-line", + "table-fill", + "table-line", + "text-2-fill", + "text-2-line", + "text-area-fill", + "text-area-line", + "text-color-fill", + "text-color-line", + "text-direction-left-fill", + "text-direction-left-line", + "text-direction-right-fill", + "text-direction-right-line", + "text-fill", + "text-line", + "textbox-ai-fill", + "textbox-ai-line", + "textbox-fill", + "textbox-line", + "translate-2-ai-fill", + "translate-2-ai-line", + "translate-2-fill", + "translate-2-line", + "translate-fill", + "translate-line", + "underline-fill", + "underline-line", + "za-sort-ascending-letters-fill", + "za-sort-ascending-letters-line", + "za-sort-descending-letters-fill", + "za-sort-descending-letters-line" + ], + "Education": [ + "backpack-fill", + "backpack-line", + "balance-fill", + "balance-line", + "black-board-2-fill", + "black-board-2-line", + "black-board-fill", + "black-board-line", + "book-2-fill", + "book-2-line", + "book-3-fill", + "book-3-line", + "book-4-fill", + "book-4-line", + "book-5-fill", + "book-5-line", + "book-6-fill", + "book-6-line", + "book-fill", + "book-line", + "bookmark-fill", + "bookmark-line", + "bookmarks-fill", + "bookmarks-line", + "certificate-2-fill", + "certificate-2-line", + "compass-2-fill", + "compass-2-line", + "counter-fill", + "counter-line", + "desk-fill", + "desk-line", + "diary-fill", + "diary-line", + "drum-fill", + "drum-line", + "eyeglass-fill", + "eyeglass-line", + "flask-2-fill", + "flask-2-line", + "flask-3-fill", + "flask-3-line", + "flask-fill", + "flask-line", + "folding-fan-fill", + "folding-fan-line", + "globe-fill", + "globe-line", + "magnet-fill", + "magnet-line", + "mortarboard-fill", + "mortarboard-line", + "notebook-2-fill", + "notebook-2-line", + "notebook-fill", + "notebook-line", + "science-fill", + "science-line", + "speech-fill", + "speech-line", + "test-tube-fill", + "test-tube-line" + ], + "Emoji": [ + "angel-fill", + "angel-line", + "angry-fill", + "angry-line", + "confused-fill", + "confused-line", + "emoji-2-fill", + "emoji-2-line", + "emoji-fill", + "emoji-line", + "happy-fill", + "happy-line", + "laugh-fill", + "laugh-line", + "look-down-fill", + "look-down-line", + "look-left-fill", + "look-left-line", + "look-right-fill", + "look-right-line", + "look-up-fill", + "look-up-line", + "omg-fill", + "omg-line", + "puzzled-fill", + "puzzled-line", + "sad-fill", + "sad-line", + "sick-fill", + "sick-line", + "silent-fill", + "silent-line", + "sob-fill", + "sob-line", + "surprise-fill", + "surprise-line", + "sweats-fill", + "sweats-line", + "terror-fill", + "terror-line", + "tongue-fill", + "tongue-line", + "unhappy-dizzy-fill", + "unhappy-dizzy-line", + "unhappy-fill", + "unhappy-line" + ], + "File": [ + "album-2-fill", + "album-2-line", + "archive-fill", + "archive-line", + "attachment-2-fill", + "attachment-2-line", + "attachment-fill", + "attachment-line", + "bill-2-fill", + "bill-2-line", + "bill-fill", + "bill-line", + "box-2-fill", + "box-2-line", + "box-3-fill", + "box-3-line", + "box-fill", + "box-line", + "clipboard-fill", + "clipboard-line", + "copy-2-fill", + "copy-2-line", + "copy-3-fill", + "copy-3-line", + "copy-fill", + "copy-line", + "doc-fill", + "doc-line", + "document-2-fill", + "document-2-line", + "document-3-fill", + "document-3-line", + "document-fill", + "document-line", + "documents-fill", + "documents-line", + "download-2-fill", + "download-2-line", + "download-3-fill", + "download-3-line", + "download-fill", + "download-line", + "external-link-fill", + "external-link-line", + "file-certificate-fill", + "file-certificate-line", + "file-check-fill", + "file-check-line", + "file-code-fill", + "file-code-line", + "file-download-fill", + "file-download-line", + "file-export-fill", + "file-export-line", + "file-fill", + "file-forbid-fill", + "file-forbid-line", + "file-import-fill", + "file-import-line", + "file-info-fill", + "file-info-line", + "file-line", + "file-locked-fill", + "file-locked-line", + "file-more-fill", + "file-more-line", + "file-music-fill", + "file-music-line", + "file-new-fill", + "file-new-line", + "file-search-fill", + "file-search-line", + "file-security-fill", + "file-security-line", + "file-star-fill", + "file-star-line", + "file-unknown-fill", + "file-unknown-line", + "file-upload-fill", + "file-upload-line", + "file-warning-fill", + "file-warning-line", + "file-zip-fill", + "file-zip-line", + "folder-2-fill", + "folder-2-line", + "folder-3-fill", + "folder-3-line", + "folder-check-fill", + "folder-check-line", + "folder-delete-fill", + "folder-delete-line", + "folder-download-fill", + "folder-download-line", + "folder-fill", + "folder-forbid-fill", + "folder-forbid-line", + "folder-info-fill", + "folder-info-line", + "folder-line", + "folder-locked-2-fill", + "folder-locked-2-line", + "folder-locked-fill", + "folder-locked-line", + "folder-minus-fill", + "folder-minus-line", + "folder-more-fill", + "folder-more-line", + "folder-open-2-fill", + "folder-open-2-line", + "folder-open-fill", + "folder-open-line", + "folder-security-fill", + "folder-security-line", + "folder-star-fill", + "folder-star-line", + "folder-upload-fill", + "folder-upload-line", + "folder-warning-fill", + "folder-warning-line", + "folder-zip-fill", + "folder-zip-line", + "folders-fill", + "folders-line", + "inbox-2-fill", + "inbox-2-line", + "inbox-fill", + "inbox-line", + "inventory-fill", + "inventory-line", + "link-2-fill", + "link-2-line", + "link-3-fill", + "link-3-line", + "link-fill", + "link-line", + "markdown-fill", + "markdown-line", + "new-folder-fill", + "new-folder-line", + "news-2-fill", + "news-2-line", + "news-fill", + "news-line", + "package-2-fill", + "package-2-line", + "package-fill", + "package-line", + "paper-2-fill", + "paper-2-line", + "paper-fill", + "paper-line", + "passport-fill", + "passport-line", + "pdf-fill", + "pdf-line", + "photo-album-2-fill", + "photo-album-2-line", + "photo-album-fill", + "photo-album-line", + "pic-2-fill", + "pic-2-line", + "pic-ai-fill", + "pic-ai-line", + "pic-fill", + "pic-line", + "pin-2-fill", + "pin-2-line", + "pin-fill", + "pin-line", + "ppt-fill", + "ppt-line", + "profile-fill", + "profile-line", + "report-forms-fill", + "report-forms-line", + "save-2-fill", + "save-2-line", + "save-fill", + "save-line", + "search-2-fill", + "search-2-line", + "search-3-fill", + "search-3-line", + "search-ai-fill", + "search-ai-line", + "search-fill", + "search-line", + "task-2-fill", + "task-2-line", + "task-fill", + "task-line", + "to-do-fill", + "to-do-line", + "unarchive-fill", + "unarchive-line", + "unlink-2-fill", + "unlink-2-line", + "unlink-fill", + "unlink-line", + "upload-2-fill", + "upload-2-line", + "upload-3-fill", + "upload-3-line", + "upload-fill", + "upload-line", + "xls-fill", + "xls-line", + "zoom-in-fill", + "zoom-in-line", + "zoom-out-fill", + "zoom-out-line" + ], + "Food": [ + "birthday-2-fill", + "birthday-2-line", + "bone-fill", + "bone-line", + "bottle-glass-fill", + "bottle-glass-line", + "bowl-2-fill", + "bowl-2-line", + "bowl-fill", + "bowl-line", + "bread-fill", + "bread-line", + "cake-fill", + "cake-line", + "candy-2-fill", + "candy-2-line", + "candy-fill", + "candy-line", + "carrot-fill", + "carrot-line", + "champagne-fill", + "champagne-line", + "chicken-fill", + "chicken-line", + "chopsticks-fill", + "chopsticks-line", + "cookie-fill", + "cookie-line", + "cookie-man-fill", + "cookie-man-line", + "cupcake-fill", + "cupcake-line", + "dinner-fill", + "dinner-line", + "dish-cover-fill", + "dish-cover-line", + "donut-fill", + "donut-line", + "drink-fill", + "drink-line", + "egg-crack-fill", + "egg-crack-line", + "egg-fill", + "egg-line", + "electric-cooker-fill", + "electric-cooker-line", + "feeder-fill", + "feeder-line", + "fish-fill", + "fish-line", + "fork-fill", + "fork-knife-fill", + "fork-knife-line", + "fork-line", + "fork-spoon-fill", + "fork-spoon-line", + "fried-egg-fill", + "fried-egg-line", + "fries-fill", + "fries-line", + "glass-cup-fill", + "glass-cup-line", + "hamburger-fill", + "hamburger-line", + "ice-cream-2-fill", + "ice-cream-2-line", + "ice-cream-fill", + "ice-cream-line", + "lollipop-fill", + "lollipop-line", + "pizza-fill", + "pizza-line", + "soup-pot-2-fill", + "soup-pot-2-line", + "soup-pot-fill", + "soup-pot-line", + "spatula-fill", + "spatula-line", + "spoon-fill", + "spoon-line", + "sugar-coated-haws-fill", + "sugar-coated-haws-line", + "teacup-fill", + "teacup-line", + "wine-fill", + "wine-line", + "wineglass-2-fill", + "wineglass-2-line", + "wineglass-fill", + "wineglass-line" + ], + "Logo": [ + "airbnb-fill", + "airbnb-line", + "airdrop-fill", + "airdrop-line", + "alipay-fill", + "alipay-line", + "android-2-fill", + "android-2-line", + "android-fill", + "android-line", + "apple-fill", + "apple-line", + "appstore-fill", + "appstore-line", + "arc-browser-fill", + "arc-browser-line", + "behance-fill", + "behance-line", + "bluesky-social-fill", + "bluesky-social-line", + "carplay-fill", + "carplay-line", + "chrome-fill", + "chrome-line", + "codepen-fill", + "codepen-line", + "dingtalk-fill", + "dingtalk-line", + "discord-fill", + "discord-line", + "dribbble-fill", + "dribbble-line", + "drive-fill", + "drive-line", + "dropbox-fill", + "dropbox-line", + "edge-fill", + "edge-line", + "facebook-fill", + "facebook-line", + "figma-fill", + "figma-line", + "firefox-fill", + "firefox-line", + "git-lab-fill", + "git-lab-line", + "github-2-fill", + "github-2-line", + "github-fill", + "github-line", + "google-fill", + "google-line", + "google-play-fill", + "google-play-line", + "grok-fill", + "grok-line", + "gumroad-fill", + "gumroad-line", + "ins-fill", + "ins-line", + "kakao-talk-fill", + "kakao-talk-line", + "layers-fill", + "layers-line", + "lemon-squeezy-fill", + "lemon-squeezy-line", + "line-app-fill", + "line-app-line", + "linear-fill", + "linear-line", + "linkedin-fill", + "linkedin-line", + "linux-fill", + "linux-line", + "mastercard-fill", + "mastercard-line", + "mastodon-fill", + "mastodon-line", + "medium-fill", + "medium-line", + "messenger-fill", + "messenger-line", + "meta-fill", + "meta-line", + "mingcute-fill", + "mingcute-line", + "moment-fill", + "moment-line", + "nfc-fill", + "nfc-line", + "nintendo-switch-fill", + "nintendo-switch-line", + "notion-fill", + "notion-line", + "openai-fill", + "openai-line", + "paypal-fill", + "paypal-line", + "pinterest-fill", + "pinterest-line", + "qq-fill", + "qq-line", + "react-fill", + "react-line", + "reddit-fill", + "reddit-line", + "safari-fill", + "safari-line", + "siri-fill", + "siri-line", + "snapchat-fill", + "snapchat-line", + "social-x-fill", + "social-x-line", + "spotify-fill", + "spotify-line", + "stripe-fill", + "stripe-line", + "telegram-fill", + "telegram-line", + "threads-fill", + "threads-line", + "tiktok-fill", + "tiktok-line", + "trello-board-fill", + "trello-board-line", + "twitter-fill", + "twitter-line", + "viber-messenger-fill", + "viber-messenger-line", + "visa-fill", + "visa-line", + "vkontakte-fill", + "vkontakte-line", + "vscode-fill", + "vscode-line", + "vue-fill", + "vue-line", + "wechat-fill", + "wechat-line", + "wechat-miniprogram-fill", + "wechat-miniprogram-line", + "wechat-pay-fill", + "wechat-pay-line", + "weibo-fill", + "weibo-line", + "whatsapp-fill", + "whatsapp-line", + "windows-fill", + "windows-line", + "xbox-fill", + "xbox-line", + "youtube-fill", + "youtube-line" + ], + "Map": [ + "aiming-2-fill", + "aiming-2-line", + "aiming-fill", + "aiming-line", + "anchor-fill", + "anchor-line", + "bed-2-fill", + "bed-2-line", + "bed-fill", + "bed-line", + "clock-2-fill", + "clock-2-line", + "clock-fill", + "clock-line", + "compass-3-fill", + "compass-3-line", + "compass-fill", + "compass-line", + "directions-2-fill", + "directions-2-line", + "directions-fill", + "directions-line", + "earth-2-fill", + "earth-2-line", + "earth-3-fill", + "earth-3-line", + "earth-fill", + "earth-latitude-fill", + "earth-latitude-line", + "earth-line", + "earth-longitude-fill", + "earth-longitude-line", + "foot-fill", + "foot-line", + "globe-2-fill", + "globe-2-line", + "hours-fill", + "hours-line", + "lifebuoy-fill", + "lifebuoy-line", + "live-location-fill", + "live-location-line", + "location-2-fill", + "location-2-line", + "location-3-fill", + "location-3-line", + "location-fill", + "location-line", + "map-2-fill", + "map-2-line", + "map-fill", + "map-line", + "map-pin-fill", + "map-pin-line", + "navigation-fill", + "navigation-line", + "parking-fill", + "parking-line", + "planet-fill", + "planet-line", + "rest-area-fill", + "rest-area-line", + "road-fill", + "road-line", + "route-fill", + "route-line", + "traffic-cone-fill", + "traffic-cone-line", + "tunnel-fill", + "tunnel-line", + "umbrella-2-fill", + "umbrella-2-line", + "world-2-fill", + "world-2-line", + "world-fill", + "world-line" + ], + "Media": [ + "airpods-fill", + "airpods-line", + "album-fill", + "album-line", + "announcement-fill", + "announcement-line", + "audio-tape-fill", + "audio-tape-line", + "bell-ringing-fill", + "bell-ringing-line", + "camcorder-3-fill", + "camcorder-3-line", + "camcorder-fill", + "camcorder-line", + "camcorder-off-fill", + "camcorder-off-line", + "camera-2-ai-fill", + "camera-2-ai-line", + "camera-2-fill", + "camera-2-line", + "camera-2-off-fill", + "camera-2-off-line", + "camera-fill", + "camera-line", + "camera-rotate-fill", + "camera-rotate-line", + "clapperboard-fill", + "clapperboard-line", + "danmaku-fill", + "danmaku-line", + "danmaku-off-fill", + "danmaku-off-line", + "danmaku-on-fill", + "danmaku-on-line", + "disc-fill", + "disc-line", + "expand-player-fill", + "expand-player-line", + "fast-forward-fill", + "fast-forward-line", + "fast-rewind-fill", + "fast-rewind-line", + "film-fill", + "film-line", + "fullscreen-exit-fill", + "fullscreen-exit-line", + "fullscreen-fill", + "fullscreen-line", + "headphone-2-fill", + "headphone-2-line", + "headphone-fill", + "headphone-line", + "horn-2-fill", + "horn-2-line", + "horn-fill", + "horn-line", + "live-fill", + "live-line", + "live-photo-fill", + "live-photo-line", + "mic-2-fill", + "mic-2-line", + "mic-ai-fill", + "mic-ai-line", + "mic-fill", + "mic-line", + "mic-off-fill", + "mic-off-line", + "microphone-fill", + "microphone-line", + "miniplayer-fill", + "miniplayer-line", + "movie-fill", + "movie-line", + "music-2-ai-fill", + "music-2-ai-line", + "music-2-fill", + "music-2-line", + "music-3-fill", + "music-3-line", + "music-fill", + "music-line", + "notification-fill", + "notification-line", + "notification-newdot-fill", + "notification-newdot-line", + "notification-off-fill", + "notification-off-line", + "pause-circle-fill", + "pause-circle-line", + "pause-fill", + "pause-line", + "play-circle-fill", + "play-circle-line", + "play-fill", + "play-line", + "playlist-2-fill", + "playlist-2-line", + "playlist-fill", + "playlist-line", + "record-mail-fill", + "record-mail-line", + "repeat-fill", + "repeat-line", + "repeat-one-fill", + "repeat-one-line", + "rewind-backward-10-fill", + "rewind-backward-10-line", + "rewind-backward-15-fill", + "rewind-backward-15-line", + "rewind-backward-30-fill", + "rewind-backward-30-line", + "rewind-backward-5-fill", + "rewind-backward-5-line", + "rewind-backward-square-10-fill", + "rewind-backward-square-10-line", + "rewind-backward-square-15-fill", + "rewind-backward-square-15-line", + "rewind-backward-square-30-fill", + "rewind-backward-square-30-line", + "rewind-backward-square-5-fill", + "rewind-backward-square-5-line", + "rewind-forward-10-fill", + "rewind-forward-10-line", + "rewind-forward-15-fill", + "rewind-forward-15-line", + "rewind-forward-30-fill", + "rewind-forward-30-line", + "rewind-forward-5-fill", + "rewind-forward-5-line", + "rewind-forward-square-10-fill", + "rewind-forward-square-10-line", + "rewind-forward-square-15-fill", + "rewind-forward-square-15-line", + "rewind-forward-square-30-fill", + "rewind-forward-square-30-line", + "rewind-forward-square-5-fill", + "rewind-forward-square-5-line", + "rotate-to-horizontal-fill", + "rotate-to-horizontal-line", + "rotate-to-vertical-fill", + "rotate-to-vertical-line", + "service-fill", + "service-line", + "shuffle-2-fill", + "shuffle-2-line", + "shuffle-fill", + "shuffle-line", + "skip-forward-fill", + "skip-forward-line", + "skip-previous-fill", + "skip-previous-line", + "sound-line-fill", + "sound-line-line", + "stop-circle-fill", + "stop-circle-line", + "stop-fill", + "stop-line", + "video-camera-2-fill", + "video-camera-2-line", + "video-camera-fill", + "video-camera-line", + "video-fill", + "video-line", + "voice-2-fill", + "voice-2-line", + "voice-fill", + "voice-line", + "volume-fill", + "volume-line", + "volume-mute-fill", + "volume-mute-line", + "volume-off-fill", + "volume-off-line" + ], + "Nature": [ + "bear-fill", + "bear-line", + "bird-fill", + "bird-line", + "butterfly-2-fill", + "butterfly-2-line", + "butterfly-fill", + "butterfly-line", + "cactus-2-fill", + "cactus-2-line", + "cactus-fill", + "cactus-line", + "campfire-fill", + "campfire-line", + "cat-fill", + "cat-line", + "chess-fill", + "chess-line", + "dandelion-fill", + "dandelion-line", + "dog-fill", + "dog-line", + "dragonfly-fill", + "dragonfly-line", + "flower-2-fill", + "flower-2-line", + "flower-3-fill", + "flower-3-line", + "flower-4-fill", + "flower-4-line", + "flower-fill", + "flower-line", + "flowerpot-fill", + "flowerpot-line", + "grass-fill", + "grass-line", + "leaf-2-fill", + "leaf-2-line", + "leaf-3-fill", + "leaf-3-line", + "leaf-fill", + "leaf-line", + "lotus-fill", + "lotus-line", + "maple-leaf-fill", + "maple-leaf-line", + "mickeymouse-fill", + "mickeymouse-line", + "mountain-2-fill", + "mountain-2-line", + "mountain-fill", + "mountain-line", + "mushroom-fill", + "mushroom-line", + "paw-fill", + "paw-line", + "pig-fill", + "pig-line", + "pumpkin-fill", + "pumpkin-line", + "rabbit-fill", + "rabbit-line", + "sunflower-fill", + "sunflower-line", + "toy-horse-fill", + "toy-horse-line", + "tree-2-fill", + "tree-2-line", + "tree-3-fill", + "tree-3-line", + "tree-4-fill", + "tree-4-line", + "tree-fill", + "tree-line", + "wreath-fill", + "wreath-line" + ], + "Other": [ + "axe-fill", + "axe-line", + "balloon-2-fill", + "balloon-2-line", + "bath-fill", + "bath-line", + "bedside-table-2-fill", + "bedside-table-2-line", + "bedside-table-fill", + "bedside-table-line", + "blessing-fill", + "blessing-line", + "bomb-fill", + "bomb-line", + "boom-fill", + "boom-line", + "bottle-fill", + "bottle-line", + "capsule-fill", + "capsule-line", + "coathanger-fill", + "coathanger-line", + "cross-2-fill", + "cross-2-line", + "crystal-ball-fill", + "crystal-ball-line", + "curtain-fill", + "curtain-line", + "drawer-2-fill", + "drawer-2-line", + "drawer-fill", + "drawer-line", + "face-mask-fill", + "face-mask-line", + "firecracker-fill", + "firecracker-line", + "firework-fill", + "firework-line", + "first-aid-kit-fill", + "first-aid-kit-line", + "hammer-fill", + "hammer-line", + "hand-card-fill", + "hand-card-line", + "hand-heart-fill", + "hand-heart-line", + "hoe-fill", + "hoe-line", + "injection-fill", + "injection-line", + "kite-fill", + "kite-line", + "lipstick-fill", + "lipstick-line", + "nurse-fill", + "nurse-line", + "parfum-fill", + "parfum-line", + "pickax-fill", + "pickax-line", + "pot-fill", + "pot-line", + "prescription-fill", + "prescription-line", + "rake-fill", + "rake-line", + "random-fill", + "random-line", + "screwdriver-fill", + "screwdriver-line", + "shovel-fill", + "shovel-line", + "shower-gel-fill", + "shower-gel-line", + "star-2-fill", + "star-2-line", + "star-topper-fill", + "star-topper-line", + "stethoscope-fill", + "stethoscope-line", + "thought-fill", + "thought-line", + "toilet-paper-fill", + "toilet-paper-line", + "virus-fill", + "virus-line", + "wardrobe-2-fill", + "wardrobe-2-line", + "wardrobe-fill", + "wardrobe-line", + "yinyang-fill", + "yinyang-line" + ], + "Part": [ + "baby-fill", + "baby-line", + "beard-fill", + "beard-line", + "body-fill", + "body-line", + "bow-tie-fill", + "bow-tie-line", + "bowknot-fill", + "bowknot-line", + "brain-fill", + "brain-line", + "brief-fill", + "brief-line", + "chef-hat-fill", + "chef-hat-line", + "christmas-hat-fill", + "christmas-hat-line", + "coat-fill", + "coat-line", + "deer-fill", + "deer-line", + "dental-fill", + "dental-line", + "dress-fill", + "dress-line", + "ear-fill", + "ear-line", + "eye-2-fill", + "eye-2-line", + "eyebrow-fill", + "eyebrow-line", + "face-fill", + "face-line", + "father-christmas-fill", + "father-christmas-line", + "finger-press-fill", + "finger-press-line", + "finger-rock-fill", + "finger-rock-line", + "finger-swipe-fill", + "finger-swipe-line", + "finger-tap-fill", + "finger-tap-line", + "glove-fill", + "glove-line", + "hair-2-fill", + "hair-2-line", + "hair-fill", + "hair-line", + "hand-fill", + "hand-finger-2-fill", + "hand-finger-2-line", + "hand-finger-fill", + "hand-finger-line", + "hand-grab-fill", + "hand-grab-line", + "hand-line", + "hand-two-fingers-fill", + "hand-two-fingers-line", + "hands-clapping-fill", + "hands-clapping-line", + "hat-2-fill", + "hat-2-line", + "hat-fill", + "hat-line", + "head-fill", + "head-line", + "heart-hand-fill", + "heart-hand-line", + "heartbeat-2-fill", + "heartbeat-2-line", + "incognito-mode-fill", + "incognito-mode-line", + "love-fill", + "love-line", + "lungs-fill", + "lungs-line", + "middle-finger-fill", + "middle-finger-line", + "mouth-fill", + "mouth-line", + "necktie-fill", + "necktie-line", + "nose-fill", + "nose-line", + "pray-fill", + "pray-line", + "scarf-fill", + "scarf-line", + "shirt-fill", + "shirt-line", + "shoe-2-fill", + "shoe-2-line", + "shoe-fill", + "shoe-line", + "shorts-fill", + "shorts-line", + "skirt-fill", + "skirt-line", + "skull-fill", + "skull-line", + "sock-fill", + "sock-line", + "t-shirt-2-fill", + "t-shirt-2-line", + "trouser-fill", + "trouser-line", + "vest-fill", + "vest-line" + ], + "Shape": [ + "clubs-fill", + "clubs-line", + "cylinder-2-fill", + "cylinder-2-line", + "cylinder-fill", + "cylinder-line", + "diamond-fill", + "diamond-line", + "diamond-square-fill", + "diamond-square-line", + "heart-crack-fill", + "heart-crack-line", + "heart-fill", + "heart-half-fill", + "heart-half-line", + "heart-line", + "hemisphere-2-fill", + "hemisphere-2-line", + "hemisphere-fill", + "hemisphere-line", + "hexagon-fill", + "hexagon-line", + "line-fill", + "line-line", + "octagon-fill", + "octagon-line", + "pentagon-fill", + "pentagon-line", + "rectangle-fill", + "rectangle-line", + "rectangle-vertical-fill", + "rectangle-vertical-line", + "round-fill", + "round-line", + "sector-fill", + "sector-line", + "shield-shape-fill", + "shield-shape-line", + "spade-fill", + "spade-line", + "square-fill", + "square-line", + "star-fill", + "star-half-fill", + "star-half-line", + "star-line", + "triangle-fill", + "triangle-line" + ], + "Sport": [ + "air-balloon-fill", + "air-balloon-line", + "american-football-fill", + "american-football-line", + "backboard-fill", + "backboard-line", + "badminton-fill", + "badminton-line", + "barbell-fill", + "barbell-line", + "baseball-2-fill", + "baseball-2-line", + "baseball-fill", + "baseball-line", + "basketball-fill", + "basketball-line", + "beachball-fill", + "beachball-line", + "disabled-2-fill", + "disabled-2-line", + "disabled-fill", + "disabled-line", + "fitness-fill", + "fitness-line", + "football-fill", + "football-line", + "parachute-fill", + "parachute-line", + "pingpong-fill", + "pingpong-line", + "playground-fill", + "playground-line", + "riding-fill", + "riding-line", + "run-fill", + "run-line", + "skateboard-fill", + "skateboard-line", + "surfboard-fill", + "surfboard-line", + "swimming-pool-fill", + "swimming-pool-line", + "sword-fill", + "sword-line", + "toxophily-fill", + "toxophily-line", + "volleyball-fill", + "volleyball-line", + "walk-fill", + "walk-line", + "wheelchair-fill", + "wheelchair-line", + "whistle-fill", + "whistle-line" + ], + "System": [ + "add-circle-fill", + "add-circle-line", + "add-fill", + "add-line", + "add-square-fill", + "add-square-line", + "alert-diamond-fill", + "alert-diamond-line", + "alert-fill", + "alert-line", + "alert-octagon-fill", + "alert-octagon-line", + "broom-fill", + "broom-line", + "brush-3-fill", + "brush-3-line", + "brush-fill", + "brush-line", + "bubble-fill", + "bubble-line", + "certificate-fill", + "certificate-line", + "check-2-fill", + "check-2-line", + "check-circle-fill", + "check-circle-line", + "check-fill", + "check-line", + "checkbox-fill", + "checkbox-line", + "checks-fill", + "checks-line", + "choice-fill", + "choice-line", + "classify-2-fill", + "classify-2-line", + "classify-3-fill", + "classify-3-line", + "classify-add-2-fill", + "classify-add-2-line", + "classify-add-fill", + "classify-add-line", + "classify-fill", + "classify-line", + "close-circle-fill", + "close-circle-line", + "close-fill", + "close-line", + "close-square-fill", + "close-square-line", + "cross-fill", + "cross-line", + "crutch-fill", + "crutch-line", + "cube-fill", + "cube-line", + "delete-2-fill", + "delete-2-line", + "delete-3-fill", + "delete-3-line", + "delete-back-fill", + "delete-back-line", + "delete-fill", + "delete-line", + "direction-dot-fill", + "direction-dot-line", + "door-fill", + "door-line", + "dot-grid-fill", + "dot-grid-line", + "dots-fill", + "dots-line", + "dots-vertical-fill", + "dots-vertical-line", + "enter-door-fill", + "enter-door-line", + "entrance-fill", + "entrance-line", + "exit-door-fill", + "exit-door-line", + "exit-fill", + "exit-line", + "eye-close-fill", + "eye-close-line", + "eye-fill", + "eye-line", + "faceid-fill", + "faceid-line", + "fault-fill", + "fault-line", + "filter-2-fill", + "filter-2-line", + "fingerprint-2-fill", + "fingerprint-2-line", + "fingerprint-fill", + "fingerprint-line", + "fire-fill", + "fire-line", + "flame-fill", + "flame-line", + "forbid-circle-fill", + "forbid-circle-line", + "gesture-unlock-fill", + "gesture-unlock-line", + "ghost-fill", + "ghost-line", + "grid-2-fill", + "grid-2-line", + "grid-fill", + "grid-line", + "heartbeat-fill", + "heartbeat-line", + "hexagons-2-fill", + "hexagons-2-line", + "hexagons-fill", + "hexagons-line", + "history-2-fill", + "history-2-line", + "history-anticlockwise-fill", + "history-anticlockwise-line", + "history-fill", + "history-line", + "information-fill", + "information-line", + "key-1-fill", + "key-1-line", + "key-2-fill", + "key-2-line", + "keyhole-fill", + "keyhole-line", + "loading-3-fill", + "loading-3-line", + "loading-fill", + "loading-line", + "lock-fill", + "lock-line", + "mind-map-fill", + "mind-map-line", + "minimize-fill", + "minimize-line", + "minus-circle-fill", + "minus-circle-line", + "minus-square-fill", + "minus-square-line", + "more-1-fill", + "more-1-line", + "more-2-fill", + "more-2-line", + "more-3-fill", + "more-3-line", + "more-4-fill", + "more-4-line", + "multiselect-fill", + "multiselect-line", + "newdot-fill", + "newdot-line", + "open-door-fill", + "open-door-line", + "plus-fill", + "plus-line", + "polygon-fill", + "polygon-line", + "power-fill", + "power-line", + "process-fill", + "process-line", + "question-fill", + "question-line", + "radiobox-fill", + "radiobox-line", + "recycle-fill", + "recycle-line", + "refresh-1-fill", + "refresh-1-line", + "refresh-2-fill", + "refresh-2-line", + "refresh-3-fill", + "refresh-3-line", + "refresh-4-ai-fill", + "refresh-4-ai-line", + "refresh-4-fill", + "refresh-4-line", + "refresh-anticlockwise-1-fill", + "refresh-anticlockwise-1-line", + "report-fill", + "report-line", + "restore-fill", + "restore-line", + "safe-alert-fill", + "safe-alert-line", + "safe-flash-fill", + "safe-flash-line", + "safe-lock-fill", + "safe-lock-line", + "safe-shield-2-fill", + "safe-shield-2-line", + "safe-shield-fill", + "safe-shield-line", + "safety-certificate-fill", + "safety-certificate-line", + "settings-1-fill", + "settings-1-line", + "settings-2-fill", + "settings-2-line", + "settings-3-fill", + "settings-3-line", + "settings-4-fill", + "settings-4-line", + "settings-5-fill", + "settings-5-line", + "settings-6-fill", + "settings-6-line", + "settings-7-fill", + "settings-7-line", + "share-2-fill", + "share-2-line", + "share-3-fill", + "share-3-line", + "share-forward-fill", + "share-forward-line", + "shield-fill", + "shield-line", + "sleep-fill", + "sleep-line", + "switch-fill", + "switch-line", + "t-shirt-fill", + "t-shirt-line", + "three-circles-fill", + "three-circles-line", + "thumb-down-2-fill", + "thumb-down-2-line", + "thumb-down-fill", + "thumb-down-line", + "thumb-up-2-fill", + "thumb-up-2-line", + "thumb-up-fill", + "thumb-up-line", + "time-duration-fill", + "time-duration-line", + "time-fill", + "time-line", + "timeline-fill", + "timeline-line", + "toggle-left-2-fill", + "toggle-left-2-line", + "toggle-left-fill", + "toggle-left-line", + "toggle-right-2-fill", + "toggle-right-2-line", + "toggle-right-fill", + "toggle-right-line", + "tool-fill", + "tool-line", + "transformation-fill", + "transformation-line", + "unlock-fill", + "unlock-line", + "version-fill", + "version-line", + "warning-fill", + "warning-line", + "wastebasket-fill", + "wastebasket-line", + "webhook-fill", + "webhook-line" + ], + "Transport": [ + "abs-fill", + "abs-line", + "aerial-lift-fill", + "aerial-lift-line", + "airplane-fill", + "airplane-line", + "auto-hold-fill", + "auto-hold-line", + "baby-carriage-fill", + "baby-carriage-line", + "bike-fill", + "bike-line", + "brake-fill", + "brake-line", + "bus-2-fill", + "bus-2-line", + "bus-fill", + "bus-line", + "car-2-fill", + "car-2-line", + "car-3-fill", + "car-3-line", + "car-door-fill", + "car-door-line", + "car-fill", + "car-line", + "car-window-fill", + "car-window-line", + "charging-pile-fill", + "charging-pile-line", + "ebike-fill", + "ebike-line", + "emergency-flashers-fill", + "emergency-flashers-line", + "engine-fill", + "engine-line", + "fan-2-fill", + "fan-2-line", + "fan-direction-down-fill", + "fan-direction-down-line", + "fan-direction-front-fill", + "fan-direction-front-line", + "fan-direction-up-fill", + "fan-direction-up-line", + "fan-fill", + "fan-line", + "flight-inflight-fill", + "flight-inflight-line", + "flight-land-fill", + "flight-land-line", + "flight-takeoff-fill", + "flight-takeoff-line", + "four-wheel-drive-fill", + "four-wheel-drive-line", + "front-fog-lights-fill", + "front-fog-lights-line", + "front-windshield-defroster-fill", + "front-windshield-defroster-line", + "gas-station-fill", + "gas-station-line", + "hight-beam-headlights-fill", + "hight-beam-headlights-line", + "hood-fill", + "hood-line", + "jeep-fill", + "jeep-line", + "low-beam-headlights-fill", + "low-beam-headlights-line", + "oil-fill", + "oil-line", + "park-fill", + "park-line", + "parking-lights-fill", + "parking-lights-line", + "pinwheel-2-fill", + "pinwheel-2-line", + "pinwheel-fill", + "pinwheel-line", + "rare-fog-lights-fill", + "rare-fog-lights-line", + "rear-windshield-defroster-fill", + "rear-windshield-defroster-line", + "rocket-2-fill", + "rocket-2-line", + "rocket-fill", + "rocket-line", + "rudder-fill", + "rudder-line", + "sailboat-fill", + "sailboat-line", + "scooter-fill", + "scooter-line", + "seat-fill", + "seat-heated-fill", + "seat-heated-line", + "seat-line", + "ship-fill", + "ship-line", + "sleigh-fill", + "sleigh-line", + "steering-wheel-fill", + "steering-wheel-line", + "tank-fill", + "tank-line", + "traffic-lights-fill", + "traffic-lights-line", + "train-2-fill", + "train-2-line", + "train-3-fill", + "train-3-line", + "train-4-fill", + "train-4-line", + "train-fill", + "train-line", + "truck-fill", + "truck-line", + "trunk-fill", + "trunk-line", + "tyre-fill", + "tyre-line", + "ufo-2-fill", + "ufo-2-line", + "ufo-fill", + "ufo-line", + "wheel-fill", + "wheel-line", + "wiper-fill", + "wiper-line" + ], + "User": [ + "badge-fill", + "badge-line", + "contacts-2-fill", + "contacts-2-line", + "contacts-3-fill", + "contacts-3-line", + "contacts-4-fill", + "contacts-4-line", + "contacts-fill", + "contacts-line", + "female-fill", + "female-line", + "group-2-fill", + "group-2-line", + "group-3-fill", + "group-3-line", + "group-fill", + "group-line", + "idcard-fill", + "idcard-line", + "male-fill", + "male-line", + "user-1-fill", + "user-1-line", + "user-2-fill", + "user-2-line", + "user-3-fill", + "user-3-line", + "user-4-fill", + "user-4-line", + "user-5-fill", + "user-5-line", + "user-add-2-fill", + "user-add-2-line", + "user-add-fill", + "user-add-line", + "user-edit-fill", + "user-edit-line", + "user-follow-2-fill", + "user-follow-2-line", + "user-follow-fill", + "user-follow-line", + "user-forbid-fill", + "user-forbid-line", + "user-heart-fill", + "user-heart-line", + "user-hide-fill", + "user-hide-line", + "user-info-fill", + "user-info-line", + "user-lock-fill", + "user-lock-line", + "user-pin-fill", + "user-pin-line", + "user-question-fill", + "user-question-line", + "user-remove-2-fill", + "user-remove-2-line", + "user-remove-fill", + "user-remove-line", + "user-search-fill", + "user-search-line", + "user-security-fill", + "user-security-line", + "user-setting-fill", + "user-setting-line", + "user-star-fill", + "user-star-line", + "user-visible-fill", + "user-visible-line", + "user-warning-fill", + "user-warning-line", + "user-x-fill", + "user-x-line" + ], + "Weather": [ + "celsius-fill", + "celsius-line", + "cloud-2-fill", + "cloud-2-line", + "cloud-fill", + "cloud-lightning-fill", + "cloud-lightning-line", + "cloud-line", + "cloud-snow-fill", + "cloud-snow-line", + "cloud-windy-fill", + "cloud-windy-line", + "clouds-fill", + "clouds-line", + "drizzle-fill", + "drizzle-line", + "dry-fill", + "dry-line", + "fahrenheit-fill", + "fahrenheit-line", + "floating-dust-fill", + "floating-dust-line", + "fog-fill", + "fog-line", + "full-moon-fill", + "full-moon-line", + "hail-fill", + "hail-line", + "haze-fill", + "haze-line", + "heavy-rain-fill", + "heavy-rain-line", + "heavy-rainstorm-fill", + "heavy-rainstorm-line", + "heavy-snow-fill", + "heavy-snow-line", + "heavy-snowstorm-fill", + "heavy-snowstorm-line", + "high-temperature-fill", + "high-temperature-line", + "light-snow-fill", + "light-snow-line", + "lightning-fill", + "lightning-line", + "low-temperature-fill", + "low-temperature-line", + "moderate-snow-fill", + "moderate-snow-line", + "moon-cloudy-fill", + "moon-cloudy-line", + "moon-fill", + "moon-fog-fill", + "moon-fog-line", + "moon-line", + "moon-stars-fill", + "moon-stars-line", + "moonlight-fill", + "moonlight-line", + "na-fill", + "na-line", + "partly-cloud-daytime-fill", + "partly-cloud-daytime-line", + "partly-cloud-night-fill", + "partly-cloud-night-line", + "rain-fill", + "rain-line", + "rainbow-fill", + "rainbow-line", + "rainstorm-fill", + "rainstorm-line", + "sandstorm-fill", + "sandstorm-line", + "showers-fill", + "showers-line", + "snow-fill", + "snow-line", + "snowflake-fill", + "snowflake-line", + "snowman-fill", + "snowman-line", + "snowstorm-2-fill", + "snowstorm-2-line", + "snowstorm-fill", + "snowstorm-line", + "sparkles-2-fill", + "sparkles-2-line", + "sparkles-3-fill", + "sparkles-3-line", + "sparkles-fill", + "sparkles-line", + "sun-2-fill", + "sun-2-line", + "sun-cloudy-fill", + "sun-cloudy-line", + "sun-fill", + "sun-fog-fill", + "sun-fog-line", + "sun-line", + "sunrise-fill", + "sunrise-line", + "sunset-fill", + "sunset-line", + "thermometer-fill", + "thermometer-line", + "thunderstorm-fill", + "thunderstorm-line", + "tornado-2-fill", + "tornado-2-line", + "tornado-fill", + "tornado-line", + "typhoon-fill", + "typhoon-line", + "umbrella-fill", + "umbrella-line", + "wave-fill", + "wave-line", + "wet-fill", + "wet-line", + "wind-fill", + "wind-line" + ] + }, + "suffixes": { + "line": "Line", + "fill": "Fill" + }, + "width": 24, + "height": 24 +}; diff --git a/Documentation/Assets/panzoom.js b/Documentation/Assets/panzoom.js new file mode 100644 index 000000000..4e41cd718 --- /dev/null +++ b/Documentation/Assets/panzoom.js @@ -0,0 +1,24 @@ +/* +The MIT License (MIT) + +Copyright (c) 2016 - 2024 Andrei Kashcha + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. +*/ +(function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.panzoom=f()}})(function(){var define,module,exports;return function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c="function"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error("Cannot find module '"+i+"'");throw a.code="MODULE_NOT_FOUND",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u="function"==typeof require&&require,i=0;i0){transform.x+=diff;adjusted=true}diff=boundingBox.right-clientRect.left;if(diff<0){transform.x+=diff;adjusted=true}diff=boundingBox.top-clientRect.bottom;if(diff>0){transform.y+=diff;adjusted=true}diff=boundingBox.bottom-clientRect.top;if(diff<0){transform.y+=diff;adjusted=true}return adjusted}function getBoundingBox(){if(!bounds)return;if(typeof bounds==="boolean"){var ownerRect=owner.getBoundingClientRect();var sceneWidth=ownerRect.width;var sceneHeight=ownerRect.height;return{left:sceneWidth*boundsPadding,top:sceneHeight*boundsPadding,right:sceneWidth*(1-boundsPadding),bottom:sceneHeight*(1-boundsPadding)}}return bounds}function getClientRect(){var bbox=panController.getBBox();var leftTop=client(bbox.left,bbox.top);return{left:leftTop.x,top:leftTop.y,right:bbox.width*transform.scale+leftTop.x,bottom:bbox.height*transform.scale+leftTop.y}}function client(x,y){return{x:x*transform.scale+transform.x,y:y*transform.scale+transform.y}}function makeDirty(){isDirty=true;frameAnimation=window.requestAnimationFrame(frame)}function zoomByRatio(clientX,clientY,ratio){if(isNaN(clientX)||isNaN(clientY)||isNaN(ratio)){throw new Error("zoom requires valid numbers")}var newScale=transform.scale*ratio;if(newScalemaxZoom){if(transform.scale===maxZoom)return;ratio=maxZoom/transform.scale}var size=transformToScreen(clientX,clientY);transform.x=size.x-ratio*(size.x-transform.x);transform.y=size.y-ratio*(size.y-transform.y);if(bounds&&boundsPadding===1&&minZoom===1){transform.scale*=ratio;keepTransformInsideBounds()}else{var transformAdjusted=keepTransformInsideBounds();if(!transformAdjusted)transform.scale*=ratio}triggerEvent("zoom");makeDirty()}function zoomAbs(clientX,clientY,zoomLevel){var ratio=zoomLevel/transform.scale;zoomByRatio(clientX,clientY,ratio)}function centerOn(ui){var parent=ui.ownerSVGElement;if(!parent)throw new Error("ui element is required to be within the scene");var clientRect=ui.getBoundingClientRect();var cx=clientRect.left+clientRect.width/2;var cy=clientRect.top+clientRect.height/2;var container=parent.getBoundingClientRect();var dx=container.width/2-cx;var dy=container.height/2-cy;internalMoveBy(dx,dy,true)}function smoothMoveTo(x,y){internalMoveBy(x-transform.x,y-transform.y,true)}function internalMoveBy(dx,dy,smooth){if(!smooth){return moveBy(dx,dy)}if(moveByAnimation)moveByAnimation.cancel();var from={x:0,y:0};var to={x:dx,y:dy};var lastX=0;var lastY=0;moveByAnimation=animate(from,to,{step:function(v){moveBy(v.x-lastX,v.y-lastY);lastX=v.x;lastY=v.y}})}function scroll(x,y){cancelZoomAnimation();moveTo(x,y)}function dispose(){releaseEvents()}function listenForEvents(){owner.addEventListener("mousedown",onMouseDown,{passive:false});owner.addEventListener("dblclick",onDoubleClick,{passive:false});owner.addEventListener("touchstart",onTouch,{passive:false});owner.addEventListener("keydown",onKeyDown,{passive:false});wheel.addWheelListener(owner,onMouseWheel,{passive:false});makeDirty()}function releaseEvents(){wheel.removeWheelListener(owner,onMouseWheel);owner.removeEventListener("mousedown",onMouseDown);owner.removeEventListener("keydown",onKeyDown);owner.removeEventListener("dblclick",onDoubleClick);owner.removeEventListener("touchstart",onTouch);if(frameAnimation){window.cancelAnimationFrame(frameAnimation);frameAnimation=0}smoothScroll.cancel();releaseDocumentMouse();releaseTouches();textSelection.release();triggerPanEnd()}function frame(){if(isDirty)applyTransform()}function applyTransform(){isDirty=false;panController.applyTransform(transform);triggerEvent("transform");frameAnimation=0}function onKeyDown(e){var x=0,y=0,z=0;if(e.keyCode===38){y=1}else if(e.keyCode===40){y=-1}else if(e.keyCode===37){x=1}else if(e.keyCode===39){x=-1}else if(e.keyCode===189||e.keyCode===109){z=1}else if(e.keyCode===187||e.keyCode===107){z=-1}if(filterKey(e,x,y,z)){return}if(x||y){e.preventDefault();e.stopPropagation();var clientRect=owner.getBoundingClientRect();var offset=Math.min(clientRect.width,clientRect.height);var moveSpeedRatio=.05;var dx=offset*moveSpeedRatio*x;var dy=offset*moveSpeedRatio*y;internalMoveBy(dx,dy)}if(z){var scaleMultiplier=getScaleMultiplier(z*100);var offset=transformOrigin?getTransformOriginOffset():midPoint();publicZoomTo(offset.x,offset.y,scaleMultiplier)}}function midPoint(){var ownerRect=owner.getBoundingClientRect();return{x:ownerRect.width/2,y:ownerRect.height/2}}function onTouch(e){beforeTouch(e);if(e.touches.length===1){return handleSingleFingerTouch(e,e.touches[0])}else if(e.touches.length===2){pinchZoomLength=getPinchZoomLength(e.touches[0],e.touches[1]);multiTouch=true;startTouchListenerIfNeeded()}}function beforeTouch(e){if(options.onTouch&&!options.onTouch(e)){return}e.stopPropagation();e.preventDefault()}function beforeDoubleClick(e){if(options.onDoubleClick&&!options.onDoubleClick(e)){return}e.preventDefault();e.stopPropagation()}function handleSingleFingerTouch(e){var touch=e.touches[0];var offset=getOffsetXY(touch);lastSingleFingerOffset=offset;var point=transformToScreen(offset.x,offset.y);mouseX=point.x;mouseY=point.y;smoothScroll.cancel();startTouchListenerIfNeeded()}function startTouchListenerIfNeeded(){if(touchInProgress){return}touchInProgress=true;document.addEventListener("touchmove",handleTouchMove);document.addEventListener("touchend",handleTouchEnd);document.addEventListener("touchcancel",handleTouchEnd)}function handleTouchMove(e){if(e.touches.length===1){e.stopPropagation();var touch=e.touches[0];var offset=getOffsetXY(touch);var point=transformToScreen(offset.x,offset.y);var dx=point.x-mouseX;var dy=point.y-mouseY;if(dx!==0&&dy!==0){triggerPanStart()}mouseX=point.x;mouseY=point.y;internalMoveBy(dx,dy)}else if(e.touches.length===2){multiTouch=true;var t1=e.touches[0];var t2=e.touches[1];var currentPinchLength=getPinchZoomLength(t1,t2);var scaleMultiplier=1+(currentPinchLength/pinchZoomLength-1)*pinchSpeed;var firstTouchPoint=getOffsetXY(t1);var secondTouchPoint=getOffsetXY(t2);mouseX=(firstTouchPoint.x+secondTouchPoint.x)/2;mouseY=(firstTouchPoint.y+secondTouchPoint.y)/2;if(transformOrigin){var offset=getTransformOriginOffset();mouseX=offset.x;mouseY=offset.y}publicZoomTo(mouseX,mouseY,scaleMultiplier);pinchZoomLength=currentPinchLength;e.stopPropagation();e.preventDefault()}}function handleTouchEnd(e){if(e.touches.length>0){var offset=getOffsetXY(e.touches[0]);var point=transformToScreen(offset.x,offset.y);mouseX=point.x;mouseY=point.y}else{var now=new Date;if(now-lastTouchEndTime0)delta*=100;var scaleMultiplier=getScaleMultiplier(delta);if(scaleMultiplier!==1){var offset=transformOrigin?getTransformOriginOffset():getOffsetXY(e);publicZoomTo(offset.x,offset.y,scaleMultiplier);e.preventDefault()}}function getOffsetXY(e){var offsetX,offsetY;var ownerRect=owner.getBoundingClientRect();offsetX=e.clientX-ownerRect.left;offsetY=e.clientY-ownerRect.top;return{x:offsetX,y:offsetY}}function smoothZoom(clientX,clientY,scaleMultiplier){var fromValue=transform.scale;var from={scale:fromValue};var to={scale:scaleMultiplier*fromValue};smoothScroll.cancel();cancelZoomAnimation();zoomToAnimation=animate(from,to,{step:function(v){zoomAbs(clientX,clientY,v.scale)},done:triggerZoomEnd})}function smoothZoomAbs(clientX,clientY,toScaleValue){var fromValue=transform.scale;var from={scale:fromValue};var to={scale:toScaleValue};smoothScroll.cancel();cancelZoomAnimation();zoomToAnimation=animate(from,to,{step:function(v){zoomAbs(clientX,clientY,v.scale)}})}function getTransformOriginOffset(){var ownerRect=owner.getBoundingClientRect();return{x:ownerRect.width*transformOrigin.x,y:ownerRect.height*transformOrigin.y}}function publicZoomTo(clientX,clientY,scaleMultiplier){smoothScroll.cancel();cancelZoomAnimation();return zoomByRatio(clientX,clientY,scaleMultiplier)}function cancelZoomAnimation(){if(zoomToAnimation){zoomToAnimation.cancel();zoomToAnimation=null}}function getScaleMultiplier(delta){var sign=Math.sign(delta);var deltaAdjustedSpeed=Math.min(.25,Math.abs(speed*delta/128));return 1-sign*deltaAdjustedSpeed}function triggerPanStart(){if(!panstartFired){triggerEvent("panstart");panstartFired=true;smoothScroll.start()}}function triggerPanEnd(){if(panstartFired){if(!multiTouch)smoothScroll.stop();triggerEvent("panend")}}function triggerZoomEnd(){triggerEvent("zoomend")}function triggerEvent(name){api.fire(name,api)}}function parseTransformOrigin(options){if(!options)return;if(typeof options==="object"){if(!isNumber(options.x)||!isNumber(options.y))failTransformOrigin(options);return options}failTransformOrigin()}function failTransformOrigin(options){console.error(options);throw new Error(["Cannot parse transform origin.","Some good examples:",' "center center" can be achieved with {x: 0.5, y: 0.5}',' "top center" can be achieved with {x: 0.5, y: 0}',' "bottom right" can be achieved with {x: 1, y: 1}'].join("\n"))}function noop(){}function validateBounds(bounds){var boundsType=typeof bounds;if(boundsType==="undefined"||boundsType==="boolean")return;var validBounds=isNumber(bounds.left)&&isNumber(bounds.top)&&isNumber(bounds.bottom)&&isNumber(bounds.right);if(!validBounds)throw new Error("Bounds object is not valid. It can be: "+"undefined, boolean (true|false) or an object {left, top, right, bottom}")}function isNumber(x){return Number.isFinite(x)}function isNaN(value){if(Number.isNaN){return Number.isNaN(value)}return value!==value}function rigidScroll(){return{start:noop,stop:noop,cancel:noop}}function autoRun(){if(typeof document==="undefined")return;var scripts=document.getElementsByTagName("script");if(!scripts)return;var panzoomScript;for(var i=0;iminVelocity){ax=amplitude*vx;targetX+=ax}if(vy<-minVelocity||vy>minVelocity){ay=amplitude*vy;targetY+=ay}raf=requestAnimationFrame(autoScroll)}function autoScroll(){var elapsed=Date.now()-timestamp;var moving=false;var dx=0;var dy=0;if(ax){dx=-ax*Math.exp(-elapsed/timeConstant);if(dx>.5||dx<-.5)moving=true;else dx=ax=0}if(ay){dy=-ay*Math.exp(-elapsed/timeConstant);if(dy>.5||dy<-.5)moving=true;else dy=ay=0}if(moving){scroll(targetX+dx,targetY+dy);raf=requestAnimationFrame(autoScroll)}}}function getCancelAnimationFrame(){if(typeof cancelAnimationFrame==="function")return cancelAnimationFrame;return clearTimeout}function getRequestAnimationFrame(){if(typeof requestAnimationFrame==="function")return requestAnimationFrame;return function(handler){return setTimeout(handler,16)}}},{}],5:[function(require,module,exports){module.exports=makeSvgController;module.exports.canAttach=isSVGElement;function makeSvgController(svgElement,options){if(!isSVGElement(svgElement)){throw new Error("svg element is required for svg.panzoom to work")}var owner=svgElement.ownerSVGElement;if(!owner){throw new Error("Do not apply panzoom to the root element. "+"Use its child instead (e.g. ). "+"As of March 2016 only FireFox supported transform on the root element")}if(!options.disableKeyboardInteraction){owner.setAttribute("tabindex",0)}var api={getBBox:getBBox,getScreenCTM:getScreenCTM,getOwner:getOwner,applyTransform:applyTransform,initTransform:initTransform};return api;function getOwner(){return owner}function getBBox(){var bbox=svgElement.getBBox();return{left:bbox.x,top:bbox.y,width:bbox.width,height:bbox.height}}function getScreenCTM(){var ctm=owner.getCTM();if(!ctm){return owner.getScreenCTM()}return ctm}function initTransform(transform){var screenCTM=svgElement.getCTM();if(screenCTM===null){screenCTM=document.createElementNS("http://www.w3.org/2000/svg","svg").createSVGMatrix()}transform.x=screenCTM.e;transform.y=screenCTM.f;transform.scale=screenCTM.a;owner.removeAttributeNS(null,"viewBox")}function applyTransform(transform){svgElement.setAttribute("transform","matrix("+transform.scale+" 0 0 "+transform.scale+" "+transform.x+" "+transform.y+")")}}function isSVGElement(element){return element&&element.ownerSVGElement&&element.getCTM}},{}],6:[function(require,module,exports){module.exports=Transform;function Transform(){this.x=0;this.y=0;this.scale=1}},{}],7:[function(require,module,exports){var BezierEasing=require("bezier-easing");var animations={ease:BezierEasing(.25,.1,.25,1),easeIn:BezierEasing(.42,0,1,1),easeOut:BezierEasing(0,0,.58,1),easeInOut:BezierEasing(.42,0,.58,1),linear:BezierEasing(0,0,1,1)};module.exports=animate;module.exports.makeAggregateRaf=makeAggregateRaf;module.exports.sharedScheduler=makeAggregateRaf();function animate(source,target,options){var start=Object.create(null);var diff=Object.create(null);options=options||{};var easing=typeof options.easing==="function"?options.easing:animations[options.easing];if(!easing){if(options.easing){console.warn("Unknown easing function in amator: "+options.easing)}easing=animations.ease}var step=typeof options.step==="function"?options.step:noop;var done=typeof options.done==="function"?options.done:noop;var scheduler=getScheduler(options.scheduler);var keys=Object.keys(target);keys.forEach(function(key){start[key]=source[key];diff[key]=target[key]-source[key]});var durationInMs=typeof options.duration==="number"?options.duration:400;var durationInFrames=Math.max(1,durationInMs*.06);var previousAnimationId;var frame=0;previousAnimationId=scheduler.next(loop);return{cancel:cancel};function cancel(){scheduler.cancel(previousAnimationId);previousAnimationId=0}function loop(){var t=easing(frame/durationInFrames);frame+=1;setValues(t);if(frame<=durationInFrames){previousAnimationId=scheduler.next(loop);step(source)}else{previousAnimationId=0;setTimeout(function(){done(source)},0)}}function setValues(t){keys.forEach(function(key){source[key]=diff[key]*t+start[key]})}}function noop(){}function getScheduler(scheduler){if(!scheduler){var canRaf=typeof window!=="undefined"&&window.requestAnimationFrame;return canRaf?rafScheduler():timeoutScheduler()}if(typeof scheduler.next!=="function")throw new Error("Scheduler is supposed to have next(cb) function");if(typeof scheduler.cancel!=="function")throw new Error("Scheduler is supposed to have cancel(handle) function");return scheduler}function rafScheduler(){return{next:window.requestAnimationFrame.bind(window),cancel:window.cancelAnimationFrame.bind(window)}}function timeoutScheduler(){return{next:function(cb){return setTimeout(cb,1e3/60)},cancel:function(id){return clearTimeout(id)}}}function makeAggregateRaf(){var frontBuffer=new Set;var backBuffer=new Set;var frameToken=0;return{next:next,cancel:next,clearAll:clearAll};function clearAll(){frontBuffer.clear();backBuffer.clear();cancelAnimationFrame(frameToken);frameToken=0}function next(callback){backBuffer.add(callback);renderNextFrame()}function renderNextFrame(){if(!frameToken)frameToken=requestAnimationFrame(renderFrame)}function renderFrame(){frameToken=0;var t=backBuffer;backBuffer=frontBuffer;frontBuffer=t;frontBuffer.forEach(function(callback){callback()});frontBuffer.clear()}function cancel(callback){backBuffer.delete(callback)}}},{"bezier-easing":8}],8:[function(require,module,exports){var NEWTON_ITERATIONS=4;var NEWTON_MIN_SLOPE=.001;var SUBDIVISION_PRECISION=1e-7;var SUBDIVISION_MAX_ITERATIONS=10;var kSplineTableSize=11;var kSampleStepSize=1/(kSplineTableSize-1);var float32ArraySupported=typeof Float32Array==="function";function A(aA1,aA2){return 1-3*aA2+3*aA1}function B(aA1,aA2){return 3*aA2-6*aA1}function C(aA1){return 3*aA1}function calcBezier(aT,aA1,aA2){return((A(aA1,aA2)*aT+B(aA1,aA2))*aT+C(aA1))*aT}function getSlope(aT,aA1,aA2){return 3*A(aA1,aA2)*aT*aT+2*B(aA1,aA2)*aT+C(aA1)}function binarySubdivide(aX,aA,aB,mX1,mX2){var currentX,currentT,i=0;do{currentT=aA+(aB-aA)/2;currentX=calcBezier(currentT,mX1,mX2)-aX;if(currentX>0){aB=currentT}else{aA=currentT}}while(Math.abs(currentX)>SUBDIVISION_PRECISION&&++i=NEWTON_MIN_SLOPE){return newtonRaphsonIterate(aX,guessForT,mX1,mX2)}else if(initialSlope===0){return guessForT}else{return binarySubdivide(aX,intervalStart,intervalStart+kSampleStepSize,mX1,mX2)}}return function BezierEasing(x){if(x===0){return 0}if(x===1){return 1}return calcBezier(getTForX(x),mY1,mY2)}}},{}],9:[function(require,module,exports){module.exports=function eventify(subject){validateSubject(subject);var eventsStorage=createEventsStorage(subject);subject.on=eventsStorage.on;subject.off=eventsStorage.off;subject.fire=eventsStorage.fire;return subject};function createEventsStorage(subject){var registeredEvents=Object.create(null);return{on:function(eventName,callback,ctx){if(typeof callback!=="function"){throw new Error("callback is expected to be a function")}var handlers=registeredEvents[eventName];if(!handlers){handlers=registeredEvents[eventName]=[]}handlers.push({callback:callback,ctx:ctx});return subject},off:function(eventName,callback){var wantToRemoveAll=typeof eventName==="undefined";if(wantToRemoveAll){registeredEvents=Object.create(null);return subject}if(registeredEvents[eventName]){var deleteAllCallbacksForEvent=typeof callback!=="function";if(deleteAllCallbacksForEvent){delete registeredEvents[eventName]}else{var callbacks=registeredEvents[eventName];for(var i=0;i1){fireArguments=Array.prototype.splice.call(arguments,1)}for(var i=0;i \endhtmlonly \htmlinclude \"\1.mmd\" \htmlonly \endhtmlonly" \ + mermaid-interactive{1}="\htmlonly
    \endhtmlonly \htmlinclude \"\1.mmd\" \htmlonly
    \endhtmlonly" \ + svg-interactive{2}="\htmlonly
    \endhtmlonly \image html \"\1.svg\" \htmlonly
    \endhtmlonly" # Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C sources # only. Doxygen will then generate output that is more tailored for C. For @@ -372,7 +374,7 @@ TOC_INCLUDE_HEADINGS = 5 # The default value is: DOXYGEN. # This tag requires that the tag MARKDOWN_SUPPORT is set to YES. -MARKDOWN_ID_STYLE = DOXYGEN +MARKDOWN_ID_STYLE = GITHUB # When enabled doxygen tries to link words that correspond to documented # classes, or namespaces to their corresponding documentation. Such a link can @@ -390,7 +392,7 @@ AUTOLINK_SUPPORT = YES # diagrams that involve STL classes more complete and accurate. # The default value is: NO. -BUILTIN_STL_SUPPORT = NO +BUILTIN_STL_SUPPORT = YES # If you use Microsoft's C++/CLI language, you should set this option to YES to # enable parsing support. @@ -943,7 +945,11 @@ WARN_LOGFILE = # spaces. See also FILE_PATTERNS and EXTENSION_MAPPING # Note: If this tag is empty the current directory is searched. -INPUT = ./Source/CesiumRuntime/Public +INPUT = ./README.md \ + ./ \ + ./Documentation \ + ./Documentation/Pages \ + ./Source/CesiumRuntime/Public # This tag can be used to specify the character encoding of the source files # that doxygen parses. Internally doxygen uses the UTF-8 encoding. Doxygen uses @@ -1073,7 +1079,7 @@ EXCLUDE_SYMBOLS = CesiumMetadataConversions<* # that contain example code fragments that are included (see the \include # command). -EXAMPLE_PATH = +EXAMPLE_PATH = ./Documentation/Diagrams # If the value of the EXAMPLE_PATH tag contains directories, you can use the # EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp and @@ -1093,7 +1099,7 @@ EXAMPLE_RECURSIVE = NO # that contain images that are to be included in the documentation (see the # \image command). -IMAGE_PATH = +IMAGE_PATH = ./Documentation/Images ./Content # The INPUT_FILTER tag can be used to specify a program that doxygen should # invoke to filter for each input file. Doxygen will invoke the filter program @@ -1154,7 +1160,7 @@ FILTER_SOURCE_PATTERNS = # (index.html). This can be useful if you have a project on for instance GitHub # and want to reuse the introduction page also for the doxygen output. -USE_MDFILE_AS_MAINPAGE = +USE_MDFILE_AS_MAINPAGE = README.md # The Fortran standard specifies that for fixed formatted Fortran code all # characters from position 72 are to be considered as comment. A common @@ -1176,7 +1182,7 @@ FORTRAN_COMMENT_AFTER = 72 # also VERBATIM_HEADERS is set to NO. # The default value is: NO. -SOURCE_BROWSER = NO +SOURCE_BROWSER = YES # Setting the INLINE_SOURCES tag to YES will include the body of functions, # classes and enums directly into the documentation. @@ -1189,7 +1195,7 @@ INLINE_SOURCES = NO # Fortran comments will always remain visible. # The default value is: YES. -STRIP_CODE_COMMENTS = YES +STRIP_CODE_COMMENTS = NO # If the REFERENCED_BY_RELATION tag is set to YES then for each documented # entity all documented functions referencing it will be listed. @@ -1363,7 +1369,7 @@ HTML_HEADER = # that doxygen normally uses. # This tag requires that the tag GENERATE_HTML is set to YES. -HTML_FOOTER = +HTML_FOOTER = ./Documentation/footer.html # The HTML_STYLESHEET tag can be used to specify a user-defined cascading style # sheet that is used by each HTML page. It can be used to fine-tune the look of @@ -1393,7 +1399,7 @@ HTML_STYLESHEET = # documentation. # This tag requires that the tag GENERATE_HTML is set to YES. -HTML_EXTRA_STYLESHEET = +HTML_EXTRA_STYLESHEET = ./node_modules/doxygen-awesome-css/doxygen-awesome.css # The HTML_EXTRA_FILES tag can be used to specify one or more extra images or # other source files which should be copied to the HTML output directory. Note @@ -1403,7 +1409,9 @@ HTML_EXTRA_STYLESHEET = # files will be copied as-is; there are no commands or markers available. # This tag requires that the tag GENERATE_HTML is set to YES. -HTML_EXTRA_FILES = +HTML_EXTRA_FILES = ./Documentation/Assets/mermaid.min.js \ + ./Documentation/Assets/mingcute.json.js \ + ./Documentation/Assets/panzoom.js # The HTML_COLORSTYLE tag can be used to specify if the generated HTML output # should be rendered with a dark or light theme. @@ -1416,7 +1424,7 @@ HTML_EXTRA_FILES = # The default value is: AUTO_LIGHT. # This tag requires that the tag GENERATE_HTML is set to YES. -HTML_COLORSTYLE = AUTO_LIGHT +HTML_COLORSTYLE = LIGHT # The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. Doxygen # will adjust the colors in the style sheet and background images according to @@ -1717,7 +1725,7 @@ DISABLE_INDEX = NO # The default value is: NO. # This tag requires that the tag GENERATE_HTML is set to YES. -GENERATE_TREEVIEW = NO +GENERATE_TREEVIEW = YES # When both GENERATE_TREEVIEW and DISABLE_INDEX are set to YES, then the # FULL_SIDEBAR option determines if the side bar is limited to only the treeview @@ -2402,7 +2410,9 @@ PREDEFINED = UFUNCTION()= \ GENERATED_BODY()= \ UCLASS()= \ CESIUMRUNTIME_API= \ - UE_DEPRECATED()= + UE_DEPRECATED()= \ + "PURE_VIRTUAL(func,extra)=0" \ + "DECLARE_DYNAMIC_MULTICAST_DELEGATE_TwoParams(name,t1,p1,t2,p2)=class name : public TBaseDynamicMulticastDelegate\ {};" # If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then this # tag can be used to specify a list of macro names that should be expanded. The @@ -2440,7 +2450,7 @@ SKIP_FUNCTION_MACROS = YES # the path). If a tag file is not located in the directory in which doxygen is # run, you must also specify the path to the tagfile here. -TAGFILES = +TAGFILES = ./Documentation/cesium-native.tag=https://cesium.com/learn/cesium-native/ref-doc/ # When a file name is specified after GENERATE_TAGFILE, doxygen will create a # tag file that is based on the input files it reads. See section "Linking to @@ -2460,14 +2470,14 @@ ALLEXTERNALS = NO # listed. # The default value is: YES. -EXTERNAL_GROUPS = YES +EXTERNAL_GROUPS = NO # If the EXTERNAL_PAGES tag is set to YES, all external pages will be listed in # the related pages index. If set to NO, only the current project's pages will # be listed. # The default value is: YES. -EXTERNAL_PAGES = YES +EXTERNAL_PAGES = NO #--------------------------------------------------------------------------- # Configuration options related to diagram generator tools diff --git a/Documentation/Images/activeCulledError.png b/Documentation/Images/activeCulledError.png new file mode 100644 index 000000000..652a93e3f Binary files /dev/null and b/Documentation/Images/activeCulledError.png differ diff --git a/Documentation/Images/activeUrl.png b/Documentation/Images/activeUrl.png new file mode 100644 index 000000000..1d8266e5c Binary files /dev/null and b/Documentation/Images/activeUrl.png differ diff --git a/Documentation/Images/advancedDisplay.png b/Documentation/Images/advancedDisplay.png new file mode 100644 index 000000000..4754ed25f Binary files /dev/null and b/Documentation/Images/advancedDisplay.png differ diff --git a/Documentation/Images/developmentEditorTarget.png b/Documentation/Images/developmentEditorTarget.png new file mode 100644 index 000000000..bf41f9a91 Binary files /dev/null and b/Documentation/Images/developmentEditorTarget.png differ diff --git a/Documentation/Images/ellipsoidCategory.png b/Documentation/Images/ellipsoidCategory.png new file mode 100644 index 000000000..536046016 Binary files /dev/null and b/Documentation/Images/ellipsoidCategory.png differ diff --git a/Documentation/Images/functionalTesting.png b/Documentation/Images/functionalTesting.png new file mode 100644 index 000000000..46b08aaea Binary files /dev/null and b/Documentation/Images/functionalTesting.png differ diff --git a/Documentation/Images/getPropertyTableValuesFromHit.png b/Documentation/Images/getPropertyTableValuesFromHit.png new file mode 100644 index 000000000..856ca2d3e Binary files /dev/null and b/Documentation/Images/getPropertyTableValuesFromHit.png differ diff --git a/Documentation/Images/inactiveCulledError.png b/Documentation/Images/inactiveCulledError.png new file mode 100644 index 000000000..17e877a2a Binary files /dev/null and b/Documentation/Images/inactiveCulledError.png differ diff --git a/Documentation/Images/inactiveUrl.png b/Documentation/Images/inactiveUrl.png new file mode 100644 index 000000000..d65de65f2 Binary files /dev/null and b/Documentation/Images/inactiveUrl.png differ diff --git a/Documentation/Images/matchUnrealNaming.png b/Documentation/Images/matchUnrealNaming.png new file mode 100644 index 000000000..03996e959 Binary files /dev/null and b/Documentation/Images/matchUnrealNaming.png differ diff --git a/Documentation/Images/profilingAutomationTestWindow.jpg b/Documentation/Images/profilingAutomationTestWindow.jpg new file mode 100644 index 000000000..12a5f493c Binary files /dev/null and b/Documentation/Images/profilingAutomationTestWindow.jpg differ diff --git a/Documentation/Images/profilingBreakpoints.jpg b/Documentation/Images/profilingBreakpoints.jpg new file mode 100644 index 000000000..5e0beea89 Binary files /dev/null and b/Documentation/Images/profilingBreakpoints.jpg differ diff --git a/Documentation/Images/profilingDisableCpuProfiling.png b/Documentation/Images/profilingDisableCpuProfiling.png new file mode 100644 index 000000000..3fb6987d1 Binary files /dev/null and b/Documentation/Images/profilingDisableCpuProfiling.png differ diff --git a/Documentation/Images/profilingFunctions.png b/Documentation/Images/profilingFunctions.png new file mode 100644 index 000000000..a7401b433 Binary files /dev/null and b/Documentation/Images/profilingFunctions.png differ diff --git a/Documentation/Images/profilingInterpretReport.png b/Documentation/Images/profilingInterpretReport.png new file mode 100644 index 000000000..7da880152 Binary files /dev/null and b/Documentation/Images/profilingInterpretReport.png differ diff --git a/Documentation/Images/profilingOpenDetails.png b/Documentation/Images/profilingOpenDetails.png new file mode 100644 index 000000000..3ffd16d40 Binary files /dev/null and b/Documentation/Images/profilingOpenDetails.png differ diff --git a/Documentation/Images/profilingOpenTrace.png b/Documentation/Images/profilingOpenTrace.png new file mode 100644 index 000000000..075059f2c Binary files /dev/null and b/Documentation/Images/profilingOpenTrace.png differ diff --git a/Documentation/Images/profilingRecordCpuProfile.png b/Documentation/Images/profilingRecordCpuProfile.png new file mode 100644 index 000000000..9ebd27348 Binary files /dev/null and b/Documentation/Images/profilingRecordCpuProfile.png differ diff --git a/Documentation/Images/profilingStartAtTimeline.png b/Documentation/Images/profilingStartAtTimeline.png new file mode 100644 index 000000000..c2baec50f Binary files /dev/null and b/Documentation/Images/profilingStartAtTimeline.png differ diff --git a/Documentation/Images/profilingStbirHorizontalDownsample.png b/Documentation/Images/profilingStbirHorizontalDownsample.png new file mode 100644 index 000000000..723ec3f1d Binary files /dev/null and b/Documentation/Images/profilingStbirHorizontalDownsample.png differ diff --git a/Documentation/Images/profilingUnrealFragmentedUse.png b/Documentation/Images/profilingUnrealFragmentedUse.png new file mode 100644 index 000000000..f3be39eac Binary files /dev/null and b/Documentation/Images/profilingUnrealFragmentedUse.png differ diff --git a/Documentation/Images/profilingUnrealInsightsSessionBrowser.png b/Documentation/Images/profilingUnrealInsightsSessionBrowser.png new file mode 100644 index 000000000..cda97df6a Binary files /dev/null and b/Documentation/Images/profilingUnrealInsightsSessionBrowser.png differ diff --git a/Documentation/Images/profilingUnrealInterpretReport.png b/Documentation/Images/profilingUnrealInterpretReport.png new file mode 100644 index 000000000..a664acee2 Binary files /dev/null and b/Documentation/Images/profilingUnrealInterpretReport.png differ diff --git a/Documentation/Images/profilingUnrealLowUse.png b/Documentation/Images/profilingUnrealLowUse.png new file mode 100644 index 000000000..993debc19 Binary files /dev/null and b/Documentation/Images/profilingUnrealLowUse.png differ diff --git a/Documentation/Images/profilingUnrealMark.png b/Documentation/Images/profilingUnrealMark.png new file mode 100644 index 000000000..7c06f19bd Binary files /dev/null and b/Documentation/Images/profilingUnrealMark.png differ diff --git a/Documentation/Images/profilingUnrealTimers.png b/Documentation/Images/profilingUnrealTimers.png new file mode 100644 index 000000000..e30ed5445 Binary files /dev/null and b/Documentation/Images/profilingUnrealTimers.png differ diff --git a/Documentation/Images/profilingUnrealTracks.png b/Documentation/Images/profilingUnrealTracks.png new file mode 100644 index 000000000..81aeb5c19 Binary files /dev/null and b/Documentation/Images/profilingUnrealTracks.png differ diff --git a/Documentation/Images/startupMap.png b/Documentation/Images/startupMap.png new file mode 100644 index 000000000..b61792caa Binary files /dev/null and b/Documentation/Images/startupMap.png differ diff --git a/Documentation/Pages/developer-resources.md b/Documentation/Pages/developer-resources.md new file mode 100644 index 000000000..44fd10288 --- /dev/null +++ b/Documentation/Pages/developer-resources.md @@ -0,0 +1,9 @@ +# Developer Resources {#developer-resources-unreal} + +- \subpage developer-setup-unreal +- \subpage reference-frames +- \subpage v2-upgrade-guide +- \subpage performance-profiling +- \subpage release-process +- \subpage packaging-guide +- \subpage using-prerelease diff --git a/Documentation/Pages/performance-profiling.md b/Documentation/Pages/performance-profiling.md new file mode 100644 index 000000000..5c44f8524 --- /dev/null +++ b/Documentation/Pages/performance-profiling.md @@ -0,0 +1,5 @@ +# Performance Profiling {#performance-profiling} + +- \subpage performance-profiling-setup-test +- \subpage performance-profiling-cpu-usage +- \subpage performance-profiling-unreal-insights diff --git a/Documentation/api-design-guide.md b/Documentation/api-design-guide.md new file mode 100644 index 000000000..3435e6656 --- /dev/null +++ b/Documentation/api-design-guide.md @@ -0,0 +1,522 @@ +# API Design Guide + +Cesium for Unreal unlocks geospatial capabilities in Unreal Engine while also enabling developers to take advantage of in-engine features. As a result, people who use the plugin can often come with existing Unreal knowledge. + +In order to make Cesium's integration as seamless as possible, we aim to mirror the paradigms and APIs of the engine where we can. This guide provides best practices for how we do that. + +## Table of Contents + +- [UObject Design](#uobject-design) + - [Overview](#overview) + - [Best Practices](#best-practices) + - [Quick Reference](#quick-reference) +- [Blueprints](#blueprints) +- [Deprecation and Backwards Compatibility](#deprecation-and-backwards-compatibility) + +## UObject Design + +`UObject` is the underlying base class of gameplay objects in Unreal Engine. Most classes in the Cesium for Unreal plugin inherit from `UObject`, such that they expose their functionality to the systems in Unreal Engine. + +The [Overview](#overview) points out some of the components involved when designing `UObject`s. If you are already familiar with these, feel free to skip to the [Best Practices](#best-practices) section. + +### Overview + +#### `UObject` + +> [Official Unreal Engine Documentation](https://dev.epicgames.com/documentation/en-us/unreal-engine/objects-in-unreal-engine) + +The official documentation already contains a summary of `UObject`, so we won't duplicate that here. However, we build on a few elements in [UObject Creation](https://dev.epicgames.com/documentation/en-us/unreal-engine/objects-in-unreal-engine#uobjectcreation) and [Destroying Objects](https://dev.epicgames.com/documentation/en-us/unreal-engine/objects-in-unreal-engine#destroyingobjects) below. + +- `UObject`s may only use default constructors. In other words, a `UObject` cannot have a constructor with arguments. +- The documentation says to use the `BeginPlay` method for specific initialization behavior. But most of our objects need to work in the Editor as well, where `BeginPlay` isn't called. We rely on a variety of other methods, like `OnConstruction`, `PostLoad`, `Serialize`, etc. to manage various aspects of the initialization. See [Initialization](#initialization) for more detail. +- `UObject`s are automatically garbage collected when they are no longer referenced. Therefore, be mindful of "strong references" that can keep them alive (e.g., UProperties, class instances, `TStrongObjectPtr`). + - A regular pointer to a `UObject` will become invalid after it's garbage collected, and dereferencing the pointer will lead to undefined behavior. + +#### Properties + +> [Official Unreal Engine Documentation](https://dev.epicgames.com/documentation/en-us/unreal-engine/unreal-engine-uproperties) + +`UObject`s often contain member variables (or properties) important to the object's gameplay logic. However, beyond declaring the property in C++, you need an extra step to Unreal Engine recognize (and later manipulate) those variables. + +The `UPROPERTY` macro identifies such properties. This macro should be put above a property that you wish to expose to Unreal Engine. Once recognized, the properties can be acted upon, e.g., made accessible through Blueprints or the Editor UI. It may also be used to enable event handlers and delegates. + +#### Functions + +> [Official Unreal Engine Documentation](https://dev.epicgames.com/documentation/en-us/unreal-engine/ufunctions-in-unreal-engine) + +`UFUNCTION` is the equivalent of `UPROPERTY` for C++ functions. By using this macro, a function can be made accessible to Blueprints, or even as a button in the Editor interface. + +#### Structs + +> [Official Unreal Engine Documentation](https://dev.epicgames.com/documentation/en-us/unreal-engine/structs-in-unreal-engine) + +`USTRUCT` is the macro to expose `struct`s to Unreal Engine. They are fairly straightforward, but a few elements of note are: + +- `USTRUCT`s don't inherit from `UObject`, so they are not managed by the Garbage Collection system. +- `USTRUCT`s can contain `UPROPERTY`s, and `UObject`s can also have `USTRUCT` type properties. +- `USTRUCT`s can be used in Blueprints depending on their specifiers. + - `USTRUCT(BlueprintType)` enables the `Make` node (to create the struct). + - For properties to appear in the `Break` node (for retrieval), they must have either `BlueprintReadOnly` or `BlueprintReadWrite` specifiers. See [Specifiers](#specifiers) below. + +#### Enums + +`UENUM` is used for any enum classes that Unreal should use in a `UObject` context, e.g., as a type for `UPROPERTY` or Blueprints. `UENUM` should be used on an `enum class` of `uint8`; it typically does not work on pure `enum`s. + +```cpp +UENUM() +enum class EMyEnum : uint8 +{ + ... +}; +``` + +#### Specifiers + +Many `UObject` macros take arguments that influence their scope and behavior. The [Quick Reference](#quick-reference) is included so you can focus on the most relevant ones. + +For example, check out the `MaximumScreenSpaceError` property on `ACesium3DTileset`: + +```cpp + UPROPERTY( + EditAnywhere, + BlueprintGetter = GetMaximumScreenSpaceError, + BlueprintSetter = SetMaximumScreenSpaceError, + Category = "Cesium|Level of Detail", + meta = (ClampMin = 0.0)) + double MaximumScreenSpaceError = 16.0; + ``` + +- The `EditAnywhere` specifier allows the property to appear and be modifiable by the user in the Details panel of the Editor. +- The `BlueprintGetter` and `BlueprintSetter` define specific functions for getting and setting the value in Blueprints (see [UFunctions](#functions)). +- The `Category` indicates how the property should be organized in the Details panel. It appears under the "Level of Detail" category, which itself is nested in the "Cesium" category. +- Finally, `meta` refers to additional metadata that augments how the property functions or appears. Here, `ClampMin` prevents the Details UI from setting it to smaller values. (It may still be set through C++ or Blueprints.) + +The official documentation for `UPROPERTY` explains the fundamentals, but it is not comprehensive. This [masterlist](https://benui.ca/unreal/uproperty/) of `UPROPERTY` specifiers by ben ui provides a more extensive look into what's possible. + +The `UFUNCTION` macro also takes multiple arguments to influence its behavior. +For instance, + +```cpp + UFUNCTION( + BlueprintPure, + Category = "Cesium", + meta = (ReturnDisplayName = "UnrealPosition")) + FVector TransformLongitudeLatitudeHeightPositionToUnreal( + const FVector& LongitudeLatitudeHeight) const; +``` + +- The `BlueprintPure` specifier allows the function to be executed in a Blueprint graph. The `Pure` keyword indicates that the function will not affect the owning object (`ACesiumGeoreference`) in any way. +- The `Category` indicates how the property should be organized in Blueprint selection panel, under "Cesium" category. +- Finally, `meta` refers to additional metadata that augments how the property functions or appears. Here, `ReturnDisplayName` specifies how the output will be labeled in the Blueprint node. + +`UFUNCTION` must be used for any functions that are used for `BlueprintGetter` or `BlueprintSetter`. For `BlueprintSetter`, the function should be `public` and serve as the mechanism for setting the property from C++. A corresponding `BlueprintGetter` is usually needed for use by C++, even though it is often not needed for Blueprints. + +Again, the official documentation for `UFUNCTION` explains the fundamentals, but this [masterlist](https://benui.ca/unreal/uproperty/) of `UFUNCTION` specifiers by ben ui is more extensive. + +### Best Practices + +The following sections describe some best practices for designing `UObjects` in Cesium for Unreal. + +#### Initialization + +Most classes in Cesium for Unreal must work in Unreal Editor as well as Play Mode. But between the two modes, there are different methods that affect an object during its creation and loading process. We rely on a variety of methods to properly initialize the `UObject`, listed below. + +| Name | What | +| ---- | ---- | +| `PostLoad` | Called in both the Editor and during gameplay for actors that are already placed in a level. This is **not** called for newly spawned actors at runtime. | +| `OnConstruction` | Called whenever objects are placed in the Editor or spawned during gameplay. May also be triggered after Blueprints are changed. | +| `Serialize` | Called when the object is serialized during project load or save. | +| `PostInitProperties` | Called after the C++ constructor of the `UObject` and after its properties have been initialized. | +| `BeginPlay` | Called at the start of Play Mode. | + +In other words, + +- Use `PostLoad` to initialize existing objects, and `OnConstruction` for newly-created ones. +- Use `Serialize` for scenarios like [Deprecation and Backwards Compatibility](#deprecation-and-backwards-compatibility). +- Use `BeginPlay` for exclusively runtime behavior. + +`PostInitProperties` is not used often in Cesium for Unreal. When it *has* been used, it was to intercept the object immediately after default construction in C++ to transfer specific settings. But this is a rare case. + +#### Change Detection + +Many Cesium for Unreal classes manage an internal state that must be carefully maintained when modifying properties. For instance, when properties on the `ACesiumGeoreference` are changed, it must call `UpdateGeoreference()` immediately after to ensure that all other properties are synced in response. + +As a result, `BlueprintReadWrite` is rarely used for properties in Cesium for Unreal. Much of the time, there is additional logic needed after a property is "set", so the change needs to be specifically detected. + +We have settled on the following standards for properties that require post-change logic: + +1. Declare properties as `private` in the class. This prevents the property from being get or set directly from outside the class in C++ (which is important, because there is no mechanism like `PostEditChangeProperty` or `BlueprintSetter` available in code). +2. Add `Meta = (AllowPrivateAccess)` to the `UPROPERTY`. +3. Add `BlueprintGetter` and `BlueprintSetter` functions. +4. Override the `PostEditChangeProperty` method on the class. This allows it to be notified of changes to the property in the Editor. + +If a `UPROPERTY` is a `struct` type, then you may also need to override `PostEditChangeChainProperty`. This method works on chains of property changes—e.g., when a property inside the `struct` is changed. + +Finally, beware of any consequences from users undoing modifications on a `UObject`, or even copy-pasting it. These changes can be handled by `PostEditUndo` and `PostEditImport` respectively. + +#### Conditional Properties + +In Cesium for Unreal, many `UObject`s have properties that depend on each other to enable behaviors. For instance, a property may only be enabled if some other boolean property is true, or if an enum property is set to a certain value. + +`Cesium3DTileset` is a great example for these conditional properties. The enum `Source` property affects whether the `URL` property can be edited. The boolean `Enable Culled Screen Space Error` property activates `Culled Screen Space Error` accordingly. + +| Example | Inactive | Active | +| ------- | -------- | ------ | +| Enum | ![](Images/inactiveUrl.png) | ![](Images/activeUrl.png) | +| Boolean | ![](Images/inactiveCulledError.png) | ![](Images/activeCulledError.png) | + +You can use the `meta = (EditCondition = "")` specifier to implement these conditions. Make sure that conditional properties are listed _below_ the properties that they depend on, both in C++ code and in the Details panel. This reinforces that logic and results in visual clarity. + +```cpp + UPROPERTY(EditAnywhere) + bool EnableRandomness; + + UPROPERTY( + EditAnywhere, + meta = (EditCondition = "EnableRandomness")) + int RandomSeed = 0; +``` + +The `EditCondition` is able to parse complex boolean logic, but it currently cannot reference functions. + +```cpp +public: + UPROPERTY() + EDataType Type; + + UFUNCTION() + bool IsNumber(EDataType Type) { + return Type == EDataType::Int || Type == EDataType::Float || Type == EDataType::Double; + } + + // This won't work... + UPROPERTY( + meta= (EditCondition = "IsNumber(Type)")) + double Offset = 0.0; + + // ...so the check must be done manually. + UPROPERTY( + meta= (EditCondition = "Type == EDataType::Int || Type == EDataType::Float || Type == EDataType::Double")) + double Offset = 0.0; +``` + +It can only parse `UPROPERTY` values, too, so don't reference any variables that aren't made accessible to Unreal Engine. + +> There exists another specifier, `EditConditionHides`, that hides the property from the Details panel instead of making it read-only (visible but greyed out). However, Cesium for Unreal prefers to simply show the properties as read-only. + +#### Organization + +Properties should be organized or modified in the Details panel such that they provide an intuitive user experience. Are the properties ordered in a logical manner? Is it clear which properties depend on each other? + +Aside from implementing clear [Conditional Properties](#conditional-properties), be diligent about organizing properties in reasonable groups using the `Category` specifier. In fact, failing to give a category to public properties can cause a failure at packaging time! + +Most classes, properties, and functions in Cesium for Unreal are put under a broad `Cesium` category. But there are typically subcategories that should be accounted for, too. This can be achieved by using the `|` delimiter in the category name. + +```cpp +// Falls under the general "Cesium" category. + UFUNCTION(Category = "Cesium") + void RefreshTileset(); + + // Nested under "Cesium" > "Debug". + UPROPERTY(Category = "Cesium|Debug") + bool SuspendUpdate; + ``` + +This categorization will apply to Blueprints as well. Use categories to make the scopes of functions obvious from a glance. For example, it is easy to find which functions are relevant to `CesiumEllipsoid` due to their category: + + + +Properties under the same category should also be adjacent in C++ to reinforce the logical grouping. For example, don't interleave categories like this in C++ code: + +```cpp + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Cesium|Debug") + bool SuspendUpdate; + + UPROPERTY(EditAnywhere, Category = "Cesium|Tile Loading") + bool PreloadAncestors; + + UPROPERTY(EditAnywhere, Category = "Cesium|Debug") + bool UpdateInEditor; +``` + +Group them together: + +```cpp + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Cesium|Debug") + bool SuspendUpdate; + + UPROPERTY(EditAnywhere, Category = "Cesium|Debug") + bool UpdateInEditor; + + UPROPERTY(EditAnywhere, Category = "Cesium|Tile Loading") + bool PreloadAncestors; +``` + +Additionally, keep in mind the order in which properties will appear. A good principle is to start with properties that are more simple or fundamental to the `UObject`. They can cascade into the more advanced settings further down the Details panel. For instance, this is the order of properties as they appear in `CesiumGeoreference.h`: + +```cpp + // This determines whether latitude / longitude / height are even used, so it appears first. + UPROPERTY() + EOriginPlacement OriginPlacement = EOriginPlacement::CartographicOrigin; + + UPROPERTY() + double OriginLatitude; + + UPROPERTY() + double OriginLongitude; + + UPROPERTY() + double OriginHeight; + + // Users are less likely to modify the scale of the georeference, so it appears near the end. + UPROPERTY() + double Scale = 100.0; +``` + +Sometimes Unreal will position certain properties out-of-order, e.g., listing `UObject`-pointer properties below everything else. You can use `meta = (DisplayAfter = "")` or `meta = (DisplayPriority = 0)` specifiers to control the order in which properties appear. (Examples can be found [here](https://benui.ca/unreal/uproperty/#displayafter).) + +You can also use the `AdvancedDisplay` specifier to explicitly delegate properties to the "Advanced" section of a category. + +![](Images/advancedDisplay.png) + +### Quick Reference + +For convenience, here is a cheat sheet of some of the most relevant and/or helpful specifiers for use in Cesium for Unreal's development. + +#### Blueprints + +##### `UPROPERTY` + +| Name | What | When to Use | +| ---- | ----- | --------------- | +| `BlueprintReadOnly` | Property is accessible in Blueprints but read-only. | Self-explanatory. | +| `BlueprintReadWrite` | Property is editable from Blueprints. | When the "set" logic is simple enough that nothing additional must happen after the property is set. If additional logic is required, use `BlueprintSetter` instead. | +| `BlueprintGetter=[FunctionName]` | Property uses the specified function to get the value. | Whenever you have to use `BlueprintSetter`. | +| `BlueprintSetter=[FunctionName]` | Property uses the specified function to set the value. | Whenever you have to do additional work after setting a property, e.g., recomputing the object's internal state. | +| `BlueprintAssignable` | For delegate or event properties, allows the property to be assigned in Blueprints. | Self-explanatory. | + +##### `UFUNCTION` + +| Name | What | When to Use | +| ---- | ----- | --------------- | +| `BlueprintCallable` | Function can be executed in a Blueprint or Level Blueprint graph. | For functions that depend on a sequence of node execution. For example, `UCesiumEllipsoid::Create` requires that the ellipsoid be created before something is done on it.

    `BlueprintCallable` results in an "execution pin" to indicate what happens after the Blueprint moves on. For `const` functions, no execution pin will be generated, similar to `BlueprintPure`. | +| `BlueprintPure` | Function can be executed in a Blueprint or Level Blueprint graph without an execution pin. | For functions whose execution does not require explicit sequencing logic, and for which it will not affect the owning object. For example, `UCesiumEllipsoid::ScaleToGeodeticSurface` will implicitly execute before its value is used, and it does not change the `UCesiumEllipsoid` itself, so it can be a "pure" function. | +| `BlueprintGetter` | Function can be used as a `BlueprintGetter` for a `UPROPERTY`. | Can replace `BlueprintCallable`, if desired, to signal its use in `BlueprintGetter` for a `UPROPERTY`. | +| `BlueprintSetter` | Function can be used as a `BlueprintSetter` for a `UPROPERTY`. | Can replace `BlueprintCallable`, if desired, to signal its use in `BlueprintSetter` for a `UPROPERTY`. | +| `BlueprintNativeEvent` | For functions that are designed to be overridden by a Blueprint, this indicates that there is a default native implementation. The implementation function must be named `[OriginalFunctionName]_Implementation`. | For achieving behavior in Blueprints similar to virtual functions. Not used often by the plugin. | +| `meta = (ReturnDisplayName = "")` | Function output on the Blueprint node will be labeled with the specified name. | Good in general for visual clarity. | + +#### Details Panel + +##### `UPROPERTY` + +| Name | What | When to Use | +| ---- | ----- | --------------- | +| `VisibleAnywhere` | Property is read-only in the Details panel. | For read-only variables. Don't use this for variables that shouldn't be visible to the user (e.g., implementation details, internal state management). | +| `EditAnywhere` | Property is editable in the Details panel. | For properties that should be user-editable through the Editor UI. | +| `AdvancedDisplay` | Property is separated into a dropdown "advanced" section that is hidden by default. | For advanced or complex properties that won't realistically be used by most users, e.g., `ACesium3DTileset::CesiumIonServer`. This prevents beginners from being confused, while still allowing advanced users to access that functionality. | +| `meta = (DisplayName = "")` | Property name is changed to `DisplayName` in the Details Panel (as well as its corresponding Blueprint). | Can be used to shorten property names or reword them for clarity. | +| `meta = (DisplayAfter = "")` | Property will be displayed below the `DisplayAfter` property in the Details Panel. | See [Organization](#organization). | +| `meta = (DisplayPriority = 0)` | Property will be assigned and sorted by numeric priority in the Details Panel. | See [Organization](#organization). | +| `meta = (EditCondition = "")` | Property is read-only if `EditCondition` is not met. | See [Conditional Properties](#conditional-properties). | +| `meta = (ClampMin = 0)` | Property is clamped to the minimum value or higher when edited in the Details panel. | To avoid invalid numeric values, e.g., an `OriginLatitude` below -90 degrees. | +| `meta = (ClampMax = 0)` | Property is clamped to the maximum value or lower when edited in the Details panel. | To avoid invalid numeric values, e.g., an `OriginLatitude` above 90 degrees. | +| `meta = (ShowOnlyInnerProperties)` | For `struct` properties, display their properties without nesting them in an expandable dropdown. | Use sparingly. This can help reduce visual clutter, e.g., to remove a level from multiple nested dropdowns. However, don't use this when the `struct`'s name is important for clarity. | +| `meta = (ValidEnumValues="A, B")` | Property is restricted to the enum values listed in the string. | Useful for limiting which values are acceptable for property. Avoids having to create duplicate enums or handle special cases. | +| `meta = (InvalidEnumValues="A, B")` | Property is disallowed from being the enum values listed in the string. | When using the above is too tedious. | + +##### `UFUNCTION` + +| Name | What | When to Use | +| ---- | ----- | --------------- | +| `CallInEditor` | Function can be executed using a button in the Details panel. | Any helpful in-editor functionality that a user can easily access, e.g., `RefreshTileset`. Note that the function must have _no parameters_ and _no return value_. | + +#### Miscellaneous + +##### `UPROPERTY` + +| Name | What | When to Use | +| ---- | ----- | --------------- | +| `Category = ""` | Property will appear under the given category in the Details panel. | Required on all public `UPROPERTY`s. | +| `Transient` | Property is not serialized when the `UObject` is saved. | For anything that shouldn't be saved, e.g., temporary references to objects at runtime. | +| `meta = (AllowPrivateAccess)` | Property that is `private` in C++ can be accessed in Blueprints. | Use in accordance with the practices under [Change Detection](#change-detection). | +| `meta = (DeprecatedProperty) ` | Property is marked as deprecated. | See [Deprecation and Backwards Compatibility](#deprecation-and-backwards-compatibility). | + +##### `UFUNCTION` + +| Name | What | When to Use | +| ---- | ----- | --------------- | +| `meta = (DeprecatedFunction)` | Function is marked as deprecated. | See [Deprecation and Backwards Compatibility](#deprecation-and-backwards-compatibility). | + +## Blueprints + +Blueprints are a visual scripting option in Unreal Engine that users may use over C++ code. Part of the API design in Cesium for Unreal therefore includes creating sensible Blueprints for less code-savvy users. + +First, defer to Unreal Engine's naming schemes for existing Blueprint functions and parameters. For example, texture coordinates in Blueprints are often referred to as "UV". Cesium for Unreal tries to match this by naming its own texture coordinate parameters as "UV". + +![](Images/matchUnrealNaming.png) + +Ideally, the language between our Blueprints and those of Unreal Engine should be well integrated, and users should not feel like they have to "translate" ideas between different Blueprints. + +Additionally, parameters should be listed in order of from most to least important, or from most to least essential. This means that when you write the function in C++, the first parameters should be the most fundamental or necessary ones. The more advanced parameters can come after. For example: + +```cpp +TMap GetPropertyTableValuesFromHit( + const FHitResult& Hit, + int64 FeatureIDSetIndex = 0); +``` + +This function's most important input is the `Hit`, so it is listed first. `FeatureIDSetIndex` is an advanced parameter that users are less likely ave to use. The order here translates to the Blueprint, since `Hit` appears at the top: + + + +## Deprecation and Backwards Compatibility + +Sometimes API changes can result in breaking or unexpected behavior between versions. To avoid user frustration, we implement several measures to help users upgrade to new versions. + +### Core Redirects + +> [Official Unreal Engine Documentation](https://dev.epicgames.com/documentation/en-us/unreal-engine/core-redirects-in-unreal-engine) + +If you end up renaming a class, function, property, or even an enum, it is possible to link between the old and new names to preserve existing Blueprint scripts using `[CoreRedirects]`. These configurations can be found in `Config/Engine.ini`. + +The official documentation includes examples for every kind of redirect, but there are plenty of previous cases in Cesium for Unreal. Note that each redirect must take up one line; adding line breaks will prevent it from being parsed correctly. + +### Deprecation Specifiers + +Read this short and sweet [overview](https://squareys.de/blog/ue4-deprecating-symbols/) by Jonathan Hale that explains how to deprecate anything in Unreal Engine. This section expands briefly on some points, but most of it is already covered. + +- Use `DeprecationMessage` to succinctly inform the user of the deprecation and redirect them to its replacement, if applicable. + +```cpp + UFUNCTION( + Meta = + (DeprecatedFunction, + DeprecationMessage = + "CesiumMetadataPrimitive is deprecated. Get the associated property texture indices from CesiumPrimitiveMetadata instead.")) + static const TArray + GetFeatureTextureNames(UPARAM(ref) + const FCesiumMetadataPrimitive& MetadataPrimitive); +``` + +- If a `struct` or `class` is deprecated, prefer to use the `UE_DEPRECATED` macro in a forward declaration of the class before it is actually defined. For example: + +```cpp +// Forward declare the class with the UE_DEPRECATED macro. +// The first string notes the plugin or engine version for which the thing is deprecated. +// The second string contains the deprecation message. +struct UE_DEPRECATED( + "Cesium For Unreal v2.0", + "FCesiumMetadataPrimitive is deprecated. Instead, use FCesiumPrimitiveFeatures and FCesiumPrimitiveMetadata to retrieve feature IDs and metadata from a glTF primitive.") + FCesiumMetadataPrimitive; + +// Actual definition below. +USTRUCT(BlueprintType) +struct CESIUMRUNTIME_API FCesiumMetadataPrimitive { ... } +``` + +- For backwards compatibility, sometimes you'll need to keep references to the deprecated classes or functions in C++ code. If this is the case, then be sure to wrap the relevant lines in `PRAGMA_DISABLE_DEPRECATION_WARNINGS` and `PRAGMA_ENABLE_DEPRECATION_WARNINGS`. This will reduce the spam in the Unreal logs that can otherwise occur during the build process. + +```cpp +struct LoadPrimitiveResult { + // List of properties here... + + PRAGMA_DISABLE_DEPRECATION_WARNINGS + // For backwards compatibility with CesiumEncodedMetadataComponent. + FCesiumMetadataPrimitive Metadata_DEPRECATED{}; + PRAGMA_ENABLE_DEPRECATION_WARNINGS + + // Other properties here... +}; +``` + +### Custom Versions + +Sometimes, a `UObject`'s property is deprecated or replaced by an alternative solution. However, it may have been set with a value that must translate successfully to the new implementation. This can be resolved by creating "custom versions" of the plugin for resolving differences at load time. + +Custom versions boil down to an `enum` called `Versions` that captures the current state of the plugin. `Versions` is stored in `CesiumCustomVersion.h` and can be expanded in the future. When objects are loaded from serialization, their properties can be intercepted if saved under a previous version. + +Depending on the type of property, there are two methods to override. Simple properties like `bool`s and `enum`s can be set in `Serialize`, which handles object state during loads and saves. However, properties that refer to other objects (e.g., pointers) must be set in `PostLoad`. Otherwise, their values will not be reliably be set by `Serialize`—they can be overwritten later in the load process. + +#### Create a New Version + +Let's look at how to create a new version called `WebMapTileServiceProjectionAsEnum`. In this version, a boolean property on `UCesiumWebMapTileServiceRasterOverlay` will be replaced with an enum. + +First, deprecate the old property by following the guide linked in [Deprecation Specifiers](#deprecation-specifiers). Use the [Core Redirects](#core-redirects) as needed to redirect properties to their `_DEPRECATED` counterparts. + +Then, create a new version in the `Versions` enum. The enum value should: + - Have a useful name that briefly summarizes the nature of the change. + - Have a comment with further explanation. + - Appear between the last custom version and `VersionPlusOne`. + +```cpp +enum Versions { + // Other versions omitted. + // (...) + + // Replaced the UseWebMercatorProjection property in + // CesiumWebMapTileServiceOverlay with the enum Projection property. + WebMapTileServiceProjectionAsEnum = 8, + + VersionPlusOne, + LatestVersion = VersionPlusOne - 1 +} +``` + +#### `Serialize` + +An `enum` property is simple enough that it can be handled in `Serialize`. Add the `virtual` `Serialize` function to the target class, if it does not already exist. + +```cpp +class UCesiumWebMapTileServiceRasterOverlay { + protected: + virtual void Serialize(FArchive& Ar) override; +} +``` + +In `Serialize`, you can retrieve the version associated with the `UObject` and implement compatibility measures. Here, the deprecated value of `UseWebMercatorProjection` (which has been redirected by `[CoreRedirects]`) is used to set the new property as needed. + +```cpp +void UCesiumWebMapTileServiceRasterOverlay::Serialize(FArchive& Ar) { + // Don't forget to call `Super`. + Super::Serialize(Ar); + + Ar.UsingCustomVersion(FCesiumCustomVersion::GUID); + + const int32 CesiumVersion = Ar.CustomVer(FCesiumCustomVersion::GUID); + + if (CesiumVersion < FCesiumCustomVersion::WebMapTileServiceProjectionAsEnum) { + // In previous versions, the projection of the overlay was controlled by + // boolean, rather than being explicitly specified by an enum. + this->Projection = + this->UseWebMercatorProjection_DEPRECATED + ? ECesiumWebMapTileServiceRasterOverlayProjection::WebMercator + : ECesiumWebMapTileServiceRasterOverlayProjection::Geographic; + } +} +``` + +#### `PostLoad` + +Now, let's look at a different property—one that would have to be set in `PostLoad`. Previously, we released support for configuring multiple and/or self-hosted Cesium ion servers on an Unreal project. This depended on `CesiumIonServer`, a new data asset that no project could have contained prior to the release. If we didn't handle this, everyone's project would be "missing" a Cesium ion server, and their data would fail to stream. + +`CesiumIonServer`s are referenced by pointers, so we have to handle this case in `ACesium3DTileset::PostLoad`. You can use `GetLinkerCustomVersion` to get the custom version that the `UObject` was saved with. Then, use a similar `if` statement to check for the version and resolve internal state as necessary. + +```cpp +void ACesium3DTileset::PostLoad() { + // Don't forget to call `Super`. + Super::PostLoad(); + +#if WITH_EDITOR + const int32 CesiumVersion = + this->GetLinkerCustomVersion(FCesiumCustomVersion::GUID); + + PRAGMA_DISABLE_DEPRECATION_WARNINGS + if (CesiumVersion < FCesiumCustomVersion::CesiumIonServer) { + this->CesiumIonServer = UCesiumIonServer::GetBackwardCompatibleServer( + this->IonAssetEndpointUrl_DEPRECATED); + } + PRAGMA_ENABLE_DEPRECATION_WARNINGS +#endif +} +``` \ No newline at end of file diff --git a/Documentation/cesium-native.tag b/Documentation/cesium-native.tag new file mode 100644 index 000000000..433f44ed1 --- /dev/null +++ b/Documentation/cesium-native.tag @@ -0,0 +1,30201 @@ + + + + CesiumGltf::Accessor + structCesiumGltf_1_1Accessor.html + CesiumGltf::AccessorSpec + + int8_t + computeNumberOfComponents + structCesiumGltf_1_1Accessor.html + a8efec45df0295395792b0193e1618992 + () const noexcept + + + int8_t + computeByteSizeOfComponent + structCesiumGltf_1_1Accessor.html + ade92908a33bafa688ae1ed63a2542336 + () const noexcept + + + int64_t + computeBytesPerVertex + structCesiumGltf_1_1Accessor.html + a1c765fb55418112f5f7f87414ef3eef8 + () const noexcept + + + int64_t + computeByteStride + structCesiumGltf_1_1Accessor.html + ab2a738ccac0ebb5f9a9a79e780903830 + (const CesiumGltf::Model &model) const noexcept + + + static int8_t + computeNumberOfComponents + structCesiumGltf_1_1Accessor.html + a48d564fa77a26800fc01d8b93c62cffe + (const std::string &type) noexcept + + + static int8_t + computeByteSizeOfComponent + structCesiumGltf_1_1Accessor.html + adcbfb0394bb4eaad92bc09fa0a40b79d + (int32_t componentType) noexcept + + + + CesiumGltfReader::AccessorReader + classCesiumGltfReader_1_1AccessorReader.html + + + AccessorReader + classCesiumGltfReader_1_1AccessorReader.html + a91de81d87b0c237380734e4ea3ed0458 + () + + + CesiumJsonReader::JsonReaderOptions & + getOptions + classCesiumGltfReader_1_1AccessorReader.html + a8d44e29b1dc9a65e92154f300178c2c3 + () + + + const CesiumJsonReader::JsonReaderOptions & + getOptions + classCesiumGltfReader_1_1AccessorReader.html + a8d0f46b14a903f97ba82dc7af29138b6 + () const + + + CesiumJsonReader::ReadJsonResult< CesiumGltf::Accessor > + readFromJson + classCesiumGltfReader_1_1AccessorReader.html + a598c9132332a5d1150f6ce6df11ade57 + (const std::span< const std::byte > &data) const + + + CesiumJsonReader::ReadJsonResult< CesiumGltf::Accessor > + readFromJson + classCesiumGltfReader_1_1AccessorReader.html + a5d2fc6e741a1fce0f1274a5b276c0e73 + (const rapidjson::Value &value) const + + + CesiumJsonReader::ReadJsonResult< std::vector< CesiumGltf::Accessor > > + readArrayFromJson + classCesiumGltfReader_1_1AccessorReader.html + a352d083ec504390f8f023d0bd3a30489 + (const rapidjson::Value &value) const + + + + CesiumGltf::AccessorSparse + structCesiumGltf_1_1AccessorSparse.html + CesiumUtility::ExtensibleObject + + int64_t + getSizeBytes + structCesiumGltf_1_1AccessorSparse.html + afc205e9ac7932be6c738fabc4a93a0c2 + () const + + + int64_t + count + structCesiumGltf_1_1AccessorSparse.html + a7afb5af7b67b64fd201ddf6f6a41a714 + + + + CesiumGltf::AccessorSparseIndices + indices + structCesiumGltf_1_1AccessorSparse.html + ae2cbf669e034b521fbf429d5b51d95d0 + + + + CesiumGltf::AccessorSparseValues + values + structCesiumGltf_1_1AccessorSparse.html + af24426725108032772dc61d798d195ca + + + + static constexpr const char * + TypeName + structCesiumGltf_1_1AccessorSparse.html + ad0558d7ef1dcb128dc797f5febd96950 + + + + + CesiumGltf::AccessorSparseIndices + structCesiumGltf_1_1AccessorSparseIndices.html + CesiumUtility::ExtensibleObject + CesiumGltf::AccessorSparseIndices::ComponentType + + int64_t + getSizeBytes + structCesiumGltf_1_1AccessorSparseIndices.html + a94c54f247902e34517a3f35bc815cae3 + () const + + + int32_t + bufferView + structCesiumGltf_1_1AccessorSparseIndices.html + aa5649c966330f54f072049ec5af2db12 + + + + int64_t + byteOffset + structCesiumGltf_1_1AccessorSparseIndices.html + a47a80a1012afa14524c701f552387f8f + + + + int32_t + componentType + structCesiumGltf_1_1AccessorSparseIndices.html + a006d43fe1993533eb03e451733fe1d3b + + + + static constexpr const char * + TypeName + structCesiumGltf_1_1AccessorSparseIndices.html + a71a95094ffc9b75d7e4f627899424e03 + + + + + CesiumGltfReader::AccessorSparseIndicesReader + classCesiumGltfReader_1_1AccessorSparseIndicesReader.html + + + AccessorSparseIndicesReader + classCesiumGltfReader_1_1AccessorSparseIndicesReader.html + a63eb08317c72d65186a48fdb5331b8ad + () + + + CesiumJsonReader::JsonReaderOptions & + getOptions + classCesiumGltfReader_1_1AccessorSparseIndicesReader.html + a5630918e5bfa128472aa1b458952d02e + () + + + const CesiumJsonReader::JsonReaderOptions & + getOptions + classCesiumGltfReader_1_1AccessorSparseIndicesReader.html + abbed29b3caf58d8a623d2509d5747913 + () const + + + CesiumJsonReader::ReadJsonResult< CesiumGltf::AccessorSparseIndices > + readFromJson + classCesiumGltfReader_1_1AccessorSparseIndicesReader.html + afa507ba43f3bee98aea718b4e7a76c1c + (const std::span< const std::byte > &data) const + + + CesiumJsonReader::ReadJsonResult< CesiumGltf::AccessorSparseIndices > + readFromJson + classCesiumGltfReader_1_1AccessorSparseIndicesReader.html + a10efbf43e098e15b1c4af88801c807f6 + (const rapidjson::Value &value) const + + + CesiumJsonReader::ReadJsonResult< std::vector< CesiumGltf::AccessorSparseIndices > > + readArrayFromJson + classCesiumGltfReader_1_1AccessorSparseIndicesReader.html + ab38988b18b71330f3796d36e8c3c0df0 + (const rapidjson::Value &value) const + + + + CesiumGltfReader::AccessorSparseReader + classCesiumGltfReader_1_1AccessorSparseReader.html + + + AccessorSparseReader + classCesiumGltfReader_1_1AccessorSparseReader.html + a1104716288c5045061134d838f19aa9d + () + + + CesiumJsonReader::JsonReaderOptions & + getOptions + classCesiumGltfReader_1_1AccessorSparseReader.html + a20dc5b5e12bcc6524a64f4b04a3c7976 + () + + + const CesiumJsonReader::JsonReaderOptions & + getOptions + classCesiumGltfReader_1_1AccessorSparseReader.html + a2adcb5122b0ee7798595ede86dcf7075 + () const + + + CesiumJsonReader::ReadJsonResult< CesiumGltf::AccessorSparse > + readFromJson + classCesiumGltfReader_1_1AccessorSparseReader.html + a149a44ee21269c3731d980588e8e0f59 + (const std::span< const std::byte > &data) const + + + CesiumJsonReader::ReadJsonResult< CesiumGltf::AccessorSparse > + readFromJson + classCesiumGltfReader_1_1AccessorSparseReader.html + adf169b7d4d6eb621f4bdf5b0aef96a22 + (const rapidjson::Value &value) const + + + CesiumJsonReader::ReadJsonResult< std::vector< CesiumGltf::AccessorSparse > > + readArrayFromJson + classCesiumGltfReader_1_1AccessorSparseReader.html + ab825f897e3102ad25e354dc9e5e66b4a + (const rapidjson::Value &value) const + + + + CesiumGltf::AccessorSparseValues + structCesiumGltf_1_1AccessorSparseValues.html + CesiumUtility::ExtensibleObject + + int64_t + getSizeBytes + structCesiumGltf_1_1AccessorSparseValues.html + ae0f3741587f8af111664e6c6f9282ac4 + () const + + + int32_t + bufferView + structCesiumGltf_1_1AccessorSparseValues.html + a994258db8a8fed7d2497dccbd82a6ff7 + + + + int64_t + byteOffset + structCesiumGltf_1_1AccessorSparseValues.html + af7f3abadd609b58d0aadfc5b839ae75a + + + + static constexpr const char * + TypeName + structCesiumGltf_1_1AccessorSparseValues.html + a99c6c4faa422804a91a49b08b6318800 + + + + + CesiumGltfReader::AccessorSparseValuesReader + classCesiumGltfReader_1_1AccessorSparseValuesReader.html + + + AccessorSparseValuesReader + classCesiumGltfReader_1_1AccessorSparseValuesReader.html + a715a6119ed213b74113d655d937cdc8d + () + + + CesiumJsonReader::JsonReaderOptions & + getOptions + classCesiumGltfReader_1_1AccessorSparseValuesReader.html + aa60f5b92921838fe48a76afb4aa6bc81 + () + + + const CesiumJsonReader::JsonReaderOptions & + getOptions + classCesiumGltfReader_1_1AccessorSparseValuesReader.html + abec50ac401f915db1f4cb114a8c5977b + () const + + + CesiumJsonReader::ReadJsonResult< CesiumGltf::AccessorSparseValues > + readFromJson + classCesiumGltfReader_1_1AccessorSparseValuesReader.html + a4067f4fa19146cceb97bb08ae75f39ca + (const std::span< const std::byte > &data) const + + + CesiumJsonReader::ReadJsonResult< CesiumGltf::AccessorSparseValues > + readFromJson + classCesiumGltfReader_1_1AccessorSparseValuesReader.html + afbf839d5ef3311b0a60cb79b80a4d152 + (const rapidjson::Value &value) const + + + CesiumJsonReader::ReadJsonResult< std::vector< CesiumGltf::AccessorSparseValues > > + readArrayFromJson + classCesiumGltfReader_1_1AccessorSparseValuesReader.html + af3e3e6eeeda2c8b0617b541e9a169ed5 + (const rapidjson::Value &value) const + + + + CesiumGltf::AccessorSpec + structCesiumGltf_1_1AccessorSpec.html + CesiumGltf::NamedObject + CesiumGltf::AccessorSpec::ComponentType + CesiumGltf::AccessorSpec::Type + + int64_t + getSizeBytes + structCesiumGltf_1_1AccessorSpec.html + a4c85e0c58b49d358b00632cf27b96647 + () const + + + int32_t + bufferView + structCesiumGltf_1_1AccessorSpec.html + abc5979869c4fcd8407686ec241f77881 + + + + int64_t + byteOffset + structCesiumGltf_1_1AccessorSpec.html + a2092d0feb18140e7eef50d5972ee7fec + + + + int32_t + componentType + structCesiumGltf_1_1AccessorSpec.html + a6862ad449da73a443e0050c759e81aa4 + + + + bool + normalized + structCesiumGltf_1_1AccessorSpec.html + a2aea1e085628fec566370e1cf1b7f9c7 + + + + int64_t + count + structCesiumGltf_1_1AccessorSpec.html + a647d50419216288417e5f859b386a41c + + + + std::string + type + structCesiumGltf_1_1AccessorSpec.html + a5c785b92637342b4d5f9c12d750ceb73 + + + + std::vector< double > + max + structCesiumGltf_1_1AccessorSpec.html + aa74fa84b08622af0a4d74ce855ec13dd + + + + std::vector< double > + min + structCesiumGltf_1_1AccessorSpec.html + a63736d04396fcca66393af668107c19c + + + + std::optional< CesiumGltf::AccessorSparse > + sparse + structCesiumGltf_1_1AccessorSpec.html + a2628e03ba37a0e150df64a6f61dbe09b + + + + static constexpr const char * + TypeName + structCesiumGltf_1_1AccessorSpec.html + a8dfcfb6120f98f7dab87627ba06ae63f + + + + + AccessorSpec + structCesiumGltf_1_1AccessorSpec.html + a5bec5bd8c867db0f36b534dedc8e71f8 + ()=default + + + + CesiumGltf::AccessorTypes + structCesiumGltf_1_1AccessorTypes.html + CesiumGltf::AccessorTypes::MAT2 + CesiumGltf::AccessorTypes::MAT3 + CesiumGltf::AccessorTypes::MAT4 + CesiumGltf::AccessorTypes::SCALAR + CesiumGltf::AccessorTypes::VEC2 + CesiumGltf::AccessorTypes::VEC3 + CesiumGltf::AccessorTypes::VEC4 + + + CesiumGltf::AccessorView + classCesiumGltf_1_1AccessorView.html + class T + + T + value_type + classCesiumGltf_1_1AccessorView.html + a60b3ea1b033d8950bd5117cfbcfa0606 + + + + + AccessorView + classCesiumGltf_1_1AccessorView.html + a9cb53f44b6269249bc20f1c8adab8f79 + (AccessorViewStatus status=AccessorViewStatus::InvalidAccessorIndex) + + + + AccessorView + classCesiumGltf_1_1AccessorView.html + ab553bdde8dc425cd6c1688926d8142dd + (const std::byte *pData, int64_t stride, int64_t offset, int64_t size) + + + + AccessorView + classCesiumGltf_1_1AccessorView.html + ac4333f0dae7807bede2af9c5ffa8aa40 + (const Model &model, const Accessor &accessor) noexcept + + + + AccessorView + classCesiumGltf_1_1AccessorView.html + aa321a406fffe106e06ed1d3d5c8a64c3 + (const Model &model, int32_t accessorIndex) noexcept + + + const T & + operator[] + classCesiumGltf_1_1AccessorView.html + abe287528fb96e0ca9f7a32fb5a56bc20 + (int64_t i) const + + + int64_t + size + classCesiumGltf_1_1AccessorView.html + a9a13ea7fee240698a04284d89e6a013f + () const noexcept + + + AccessorViewStatus + status + classCesiumGltf_1_1AccessorView.html + acb7611f4bfe0cd580bff5ddb8b5a3ed0 + () const noexcept + + + int64_t + stride + classCesiumGltf_1_1AccessorView.html + a333ea7c0ea14b50e54adaa2deb30814f + () const noexcept + + + int64_t + offset + classCesiumGltf_1_1AccessorView.html + a0d598da3ffc2ba8cb8ec405950097640 + () const noexcept + + + const std::byte * + data + classCesiumGltf_1_1AccessorView.html + aa0414407fe58adaf5d24358f02f9ef94 + () const noexcept + + + + CesiumGltf::AccessorWriter + classCesiumGltf_1_1AccessorWriter.html + class T + + T + value_type + classCesiumGltf_1_1AccessorWriter.html + afd49f7e0263714046dd30a160ba428ac + + + + + AccessorWriter + classCesiumGltf_1_1AccessorWriter.html + ad2eb44aa97a1a25e0568016669b96002 + (const AccessorView< T > &accessorView) + + + + AccessorWriter + classCesiumGltf_1_1AccessorWriter.html + a6ca032e0808de2979648a0504a1b04e7 + (std::byte *pData, int64_t stride, int64_t offset, int64_t size) + + + + AccessorWriter + classCesiumGltf_1_1AccessorWriter.html + a8c2baea766b1bf738333a01c28c86c48 + (Model &model, const Accessor &accessor) + + + + AccessorWriter + classCesiumGltf_1_1AccessorWriter.html + aa4b10c0da53ac4b00503e17f2d9efc0c + (Model &model, int32_t accessorIndex) noexcept + + + const T & + operator[] + classCesiumGltf_1_1AccessorWriter.html + ae9893af9d21cfdb2d0bf94d14e0bb34d + (int64_t i) const + + + T & + operator[] + classCesiumGltf_1_1AccessorWriter.html + a4cc8a7db46b73090cec5c294d6fba1f2 + (int64_t i) + + + int64_t + size + classCesiumGltf_1_1AccessorWriter.html + ae418bbb4d8b56ad1e74023332b7c5446 + () const noexcept + + + AccessorViewStatus + status + classCesiumGltf_1_1AccessorWriter.html + aee3456f99a5f02b7de979b6d8244f1c9 + () const noexcept + + + int64_t + stride + classCesiumGltf_1_1AccessorWriter.html + abb270866fcf41f8c8f2e618c7320dfa4 + () const noexcept + + + int64_t + offset + classCesiumGltf_1_1AccessorWriter.html + a5c7a28368429699481e3ceb45067d550 + () const noexcept + + + std::byte * + data + classCesiumGltf_1_1AccessorWriter.html + a342621004058c9cd2abeec1516306fbc + () noexcept + + + + CesiumGltf::Material::AlphaMode + structCesiumGltf_1_1Material_1_1AlphaMode.html + + static const std::string + OPAQUE + structCesiumGltf_1_1Material_1_1AlphaMode.html + a6cc748d9932a645e9a8f4cf4897d4c49 + + + + static const std::string + MASK + structCesiumGltf_1_1Material_1_1AlphaMode.html + a98a233ea4cb36c6cc07c6d7a1de56213 + + + + static const std::string + BLEND + structCesiumGltf_1_1Material_1_1AlphaMode.html + a935bd13af77d3a64555a459d406e409c + + + + + CesiumGltf::Animation + structCesiumGltf_1_1Animation.html + CesiumGltf::NamedObject + + int64_t + getSizeBytes + structCesiumGltf_1_1Animation.html + a1209e2fc79c72eff4f21329d39c40d28 + () const + + + std::vector< CesiumGltf::AnimationChannel > + channels + structCesiumGltf_1_1Animation.html + ae4b9ee5aa3f4279b3a7e2774ddb4826d + + + + std::vector< CesiumGltf::AnimationSampler > + samplers + structCesiumGltf_1_1Animation.html + a8313620625f9ee581954e35ff7a7463f + + + + static constexpr const char * + TypeName + structCesiumGltf_1_1Animation.html + a53af6f94496c168c57415d9a9e4f5000 + + + + + CesiumGltf::AnimationChannel + structCesiumGltf_1_1AnimationChannel.html + CesiumUtility::ExtensibleObject + + int64_t + getSizeBytes + structCesiumGltf_1_1AnimationChannel.html + ae51dd6f5c9d583255195f112db9b8085 + () const + + + int32_t + sampler + structCesiumGltf_1_1AnimationChannel.html + ab26b67beb9ffe9a916af7429ed9bb4b8 + + + + CesiumGltf::AnimationChannelTarget + target + structCesiumGltf_1_1AnimationChannel.html + a082ba5e0a25dde3296875497e24a0f67 + + + + static constexpr const char * + TypeName + structCesiumGltf_1_1AnimationChannel.html + a516391af248c82c734342a7d25227e0f + + + + + CesiumGltfReader::AnimationChannelReader + classCesiumGltfReader_1_1AnimationChannelReader.html + + + AnimationChannelReader + classCesiumGltfReader_1_1AnimationChannelReader.html + ad707276d259e758a8f28a98099dec889 + () + + + CesiumJsonReader::JsonReaderOptions & + getOptions + classCesiumGltfReader_1_1AnimationChannelReader.html + ac26c5103951e1015c1df0035783bcd0a + () + + + const CesiumJsonReader::JsonReaderOptions & + getOptions + classCesiumGltfReader_1_1AnimationChannelReader.html + ab95f0f3b3f8a641e6885059bb970ccfb + () const + + + CesiumJsonReader::ReadJsonResult< CesiumGltf::AnimationChannel > + readFromJson + classCesiumGltfReader_1_1AnimationChannelReader.html + ad7daa3343959edc4c80b76a738fb39c6 + (const std::span< const std::byte > &data) const + + + CesiumJsonReader::ReadJsonResult< CesiumGltf::AnimationChannel > + readFromJson + classCesiumGltfReader_1_1AnimationChannelReader.html + aa4fa5ec13b7c309c8ddfc6d9bf345f90 + (const rapidjson::Value &value) const + + + CesiumJsonReader::ReadJsonResult< std::vector< CesiumGltf::AnimationChannel > > + readArrayFromJson + classCesiumGltfReader_1_1AnimationChannelReader.html + a8656a7f5f276b9a9a92b4876c245fd3e + (const rapidjson::Value &value) const + + + + CesiumGltf::AnimationChannelTarget + structCesiumGltf_1_1AnimationChannelTarget.html + CesiumUtility::ExtensibleObject + CesiumGltf::AnimationChannelTarget::Path + + int64_t + getSizeBytes + structCesiumGltf_1_1AnimationChannelTarget.html + aff706e289e1ea81f19be5fb9649a1ee3 + () const + + + int32_t + node + structCesiumGltf_1_1AnimationChannelTarget.html + ae4f514167597273ceadfbbca1dae9750 + + + + std::string + path + structCesiumGltf_1_1AnimationChannelTarget.html + ab9cd40c8072a8d1ed814555c7a0a49e0 + + + + static constexpr const char * + TypeName + structCesiumGltf_1_1AnimationChannelTarget.html + a014311decdb2a3b31842ed9b518dc309 + + + + + CesiumGltfReader::AnimationChannelTargetReader + classCesiumGltfReader_1_1AnimationChannelTargetReader.html + + + AnimationChannelTargetReader + classCesiumGltfReader_1_1AnimationChannelTargetReader.html + a6aa716c1e11d1ef5629bb614cd9882dd + () + + + CesiumJsonReader::JsonReaderOptions & + getOptions + classCesiumGltfReader_1_1AnimationChannelTargetReader.html + a48b605fa07c290cdffe9c5966c4b2de5 + () + + + const CesiumJsonReader::JsonReaderOptions & + getOptions + classCesiumGltfReader_1_1AnimationChannelTargetReader.html + ae66aa6ab5c1ddee44e9f0c10209e2695 + () const + + + CesiumJsonReader::ReadJsonResult< CesiumGltf::AnimationChannelTarget > + readFromJson + classCesiumGltfReader_1_1AnimationChannelTargetReader.html + a214d9581cacc9cd38e89fea1d06762ea + (const std::span< const std::byte > &data) const + + + CesiumJsonReader::ReadJsonResult< CesiumGltf::AnimationChannelTarget > + readFromJson + classCesiumGltfReader_1_1AnimationChannelTargetReader.html + a7fa8cd948b505c4fab35a4aafeeb16ca + (const rapidjson::Value &value) const + + + CesiumJsonReader::ReadJsonResult< std::vector< CesiumGltf::AnimationChannelTarget > > + readArrayFromJson + classCesiumGltfReader_1_1AnimationChannelTargetReader.html + a87e0d2c6e1701f7daf7dece2271c057c + (const rapidjson::Value &value) const + + + + CesiumGltfReader::AnimationReader + classCesiumGltfReader_1_1AnimationReader.html + + + AnimationReader + classCesiumGltfReader_1_1AnimationReader.html + a21ec3bd71ae75555704567b81b028de8 + () + + + CesiumJsonReader::JsonReaderOptions & + getOptions + classCesiumGltfReader_1_1AnimationReader.html + ab74cd5fd23071dd64dfa41e4c86df6e6 + () + + + const CesiumJsonReader::JsonReaderOptions & + getOptions + classCesiumGltfReader_1_1AnimationReader.html + a320e7bf50dab60de17a6724a16e131b4 + () const + + + CesiumJsonReader::ReadJsonResult< CesiumGltf::Animation > + readFromJson + classCesiumGltfReader_1_1AnimationReader.html + a1f2dabac256ad91f68dc3175ba8370c9 + (const std::span< const std::byte > &data) const + + + CesiumJsonReader::ReadJsonResult< CesiumGltf::Animation > + readFromJson + classCesiumGltfReader_1_1AnimationReader.html + a2d5e21291bfb1f34adcf48832dd88ee8 + (const rapidjson::Value &value) const + + + CesiumJsonReader::ReadJsonResult< std::vector< CesiumGltf::Animation > > + readArrayFromJson + classCesiumGltfReader_1_1AnimationReader.html + a75d8ad4acf23dade475265fc36152592 + (const rapidjson::Value &value) const + + + + CesiumGltf::AnimationSampler + structCesiumGltf_1_1AnimationSampler.html + CesiumUtility::ExtensibleObject + CesiumGltf::AnimationSampler::Interpolation + + int64_t + getSizeBytes + structCesiumGltf_1_1AnimationSampler.html + a2b4d8ab08c887b97395d5be14d2f3f7d + () const + + + int32_t + input + structCesiumGltf_1_1AnimationSampler.html + aac408352a97b2c6413c564f495c23332 + + + + std::string + interpolation + structCesiumGltf_1_1AnimationSampler.html + aba1135c0841f3d22458188817c22dbc1 + + + + int32_t + output + structCesiumGltf_1_1AnimationSampler.html + a43b0b16e5ffeec8c47d859549b532733 + + + + static constexpr const char * + TypeName + structCesiumGltf_1_1AnimationSampler.html + aa8f47c00b3675457666abe5a0543b0ac + + + + + CesiumGltfReader::AnimationSamplerReader + classCesiumGltfReader_1_1AnimationSamplerReader.html + + + AnimationSamplerReader + classCesiumGltfReader_1_1AnimationSamplerReader.html + a3dc4a3f308d387abca00894ee0f8f5cd + () + + + CesiumJsonReader::JsonReaderOptions & + getOptions + classCesiumGltfReader_1_1AnimationSamplerReader.html + a2ff6da0fffed339588d2ca183d397b76 + () + + + const CesiumJsonReader::JsonReaderOptions & + getOptions + classCesiumGltfReader_1_1AnimationSamplerReader.html + aaeebbb0924f4a0d67fe75acbb442f124 + () const + + + CesiumJsonReader::ReadJsonResult< CesiumGltf::AnimationSampler > + readFromJson + classCesiumGltfReader_1_1AnimationSamplerReader.html + a887516ed0fb45377fec6c8fb2cac19c6 + (const std::span< const std::byte > &data) const + + + CesiumJsonReader::ReadJsonResult< CesiumGltf::AnimationSampler > + readFromJson + classCesiumGltfReader_1_1AnimationSamplerReader.html + a9ab0dfe0755689610653a899dfcf50e7 + (const rapidjson::Value &value) const + + + CesiumJsonReader::ReadJsonResult< std::vector< CesiumGltf::AnimationSampler > > + readArrayFromJson + classCesiumGltfReader_1_1AnimationSamplerReader.html + a2d4639b5f2837794fcdd4beadeeb8b8e + (const rapidjson::Value &value) const + + + + CesiumIonClient::ApplicationData + structCesiumIonClient_1_1ApplicationData.html + + bool + needsOauthAuthentication + structCesiumIonClient_1_1ApplicationData.html + a81d7758c1294f29f1a87e5dea63c7075 + () const + + + AuthenticationMode + authenticationMode + structCesiumIonClient_1_1ApplicationData.html + a64852bc2d98b5f54072ab6bac797a77c + + + + std::string + dataStoreType + structCesiumIonClient_1_1ApplicationData.html + a8777e964e3a5c76f38056455c0dde721 + + + + std::string + attribution + structCesiumIonClient_1_1ApplicationData.html + a60166129ba4bb66586dfbd7556c0d774 + + + + + CesiumJsonReader::ArrayJsonHandler + classCesiumJsonReader_1_1ArrayJsonHandler.html + typename T + typename THandler + CesiumJsonReader::JsonHandler + + std::vector< T > + ValueType + classCesiumJsonReader_1_1ArrayJsonHandler.html + a23979c0a31b960e2df3fc74664478eae + + + + + ArrayJsonHandler + classCesiumJsonReader_1_1ArrayJsonHandler.html + a8e74166a803429e73184f631e3b62cd8 + (Ts &&... args) noexcept + + + void + reset + classCesiumJsonReader_1_1ArrayJsonHandler.html + a288b3e24d7cd8cd602e221cc11fcd797 + (IJsonHandler *pParent, std::vector< T > *pArray) + + + virtual IJsonHandler * + readNull + classCesiumJsonReader_1_1ArrayJsonHandler.html + ab74d4dafb34f4183ef9149bd20d580f8 + () override + + + virtual IJsonHandler * + readBool + classCesiumJsonReader_1_1ArrayJsonHandler.html + ab56d2d64d8f6361d79d5a11889ce5fa6 + (bool b) override + + + virtual IJsonHandler * + readInt32 + classCesiumJsonReader_1_1ArrayJsonHandler.html + abd4ab85e2db1bd9b6cef3d0bac0b9de2 + (int32_t i) override + + + virtual IJsonHandler * + readUint32 + classCesiumJsonReader_1_1ArrayJsonHandler.html + a5798e1f8808efa3dd6734d6899ca5dde + (uint32_t i) override + + + virtual IJsonHandler * + readInt64 + classCesiumJsonReader_1_1ArrayJsonHandler.html + a475b57f5291e7d7f183973c2e03f727d + (int64_t i) override + + + virtual IJsonHandler * + readUint64 + classCesiumJsonReader_1_1ArrayJsonHandler.html + a99978cc34438d9b83532e3ced5e7e5e3 + (uint64_t i) override + + + virtual IJsonHandler * + readDouble + classCesiumJsonReader_1_1ArrayJsonHandler.html + aa9f26771c975f2fcffcb6836b938f230 + (double d) override + + + virtual IJsonHandler * + readString + classCesiumJsonReader_1_1ArrayJsonHandler.html + a5e5d6c4a578c734f659ea598ca813697 + (const std::string_view &str) override + + + virtual IJsonHandler * + readObjectStart + classCesiumJsonReader_1_1ArrayJsonHandler.html + a1f338a01b02379799b29c10ae623540c + () override + + + virtual IJsonHandler * + readObjectKey + classCesiumJsonReader_1_1ArrayJsonHandler.html + a3a4a4ac8f54321efad241ed9c92d7811 + (const std::string_view &) noexcept override + + + virtual IJsonHandler * + readObjectEnd + classCesiumJsonReader_1_1ArrayJsonHandler.html + af3488edcb5fe1a9c7d05eb155d04a7aa + () noexcept override + + + virtual IJsonHandler * + readArrayStart + classCesiumJsonReader_1_1ArrayJsonHandler.html + a206cf240bcc43d176a0b2227986c95db + () override + + + virtual IJsonHandler * + readArrayEnd + classCesiumJsonReader_1_1ArrayJsonHandler.html + a6c78f9a8093f1f6af0b2405c99c0a159 + () override + + + virtual void + reportWarning + classCesiumJsonReader_1_1ArrayJsonHandler.html + ae8f38ed2772ffdb1577c97603f1f71f9 + (const std::string &warning, std::vector< std::string > &&context=std::vector< std::string >()) override + + + + CesiumJsonReader::ArrayJsonHandler< double, DoubleJsonHandler > + classCesiumJsonReader_1_1ArrayJsonHandler_3_01double_00_01DoubleJsonHandler_01_4.html + CesiumJsonReader::JsonHandler + + std::vector< double > + ValueType + classCesiumJsonReader_1_1ArrayJsonHandler_3_01double_00_01DoubleJsonHandler_01_4.html + a6b025e431b7fa24c4c01048e86c31593 + + + + void + reset + classCesiumJsonReader_1_1ArrayJsonHandler_3_01double_00_01DoubleJsonHandler_01_4.html + ab3ad675c831400709dc77d37383c6b4f + (IJsonHandler *pParent, std::vector< double > *pArray) + + + virtual IJsonHandler * + readNull + classCesiumJsonReader_1_1ArrayJsonHandler_3_01double_00_01DoubleJsonHandler_01_4.html + a35886e5178d973783eb67034267599c3 + () override + + + virtual IJsonHandler * + readBool + classCesiumJsonReader_1_1ArrayJsonHandler_3_01double_00_01DoubleJsonHandler_01_4.html + a89a1f51b11ce9ef1ad47f4509d152cfc + (bool b) override + + + virtual IJsonHandler * + readInt32 + classCesiumJsonReader_1_1ArrayJsonHandler_3_01double_00_01DoubleJsonHandler_01_4.html + af81b468d55262de9d621dc69616300e2 + (int32_t i) override + + + virtual IJsonHandler * + readUint32 + classCesiumJsonReader_1_1ArrayJsonHandler_3_01double_00_01DoubleJsonHandler_01_4.html + a877d758fcfaa99a9d0d803e32b270ef7 + (uint32_t i) override + + + virtual IJsonHandler * + readInt64 + classCesiumJsonReader_1_1ArrayJsonHandler_3_01double_00_01DoubleJsonHandler_01_4.html + a1131723fc5b9fd60a2f7c47e4b8c5d22 + (int64_t i) override + + + virtual IJsonHandler * + readUint64 + classCesiumJsonReader_1_1ArrayJsonHandler_3_01double_00_01DoubleJsonHandler_01_4.html + a1476b44f94aec64f452d296a27f48a4d + (uint64_t i) override + + + virtual IJsonHandler * + readDouble + classCesiumJsonReader_1_1ArrayJsonHandler_3_01double_00_01DoubleJsonHandler_01_4.html + a60cf7fd8c2b4add4452b536236e16bba + (double d) override + + + virtual IJsonHandler * + readString + classCesiumJsonReader_1_1ArrayJsonHandler_3_01double_00_01DoubleJsonHandler_01_4.html + a7d6c050cd13054973dc6c237d95d801b + (const std::string_view &str) override + + + virtual IJsonHandler * + readObjectStart + classCesiumJsonReader_1_1ArrayJsonHandler_3_01double_00_01DoubleJsonHandler_01_4.html + a6a01b844b36697710cee9b1023d33680 + () override + + + virtual IJsonHandler * + readArrayStart + classCesiumJsonReader_1_1ArrayJsonHandler_3_01double_00_01DoubleJsonHandler_01_4.html + a97f3c41ecd130e5600b6767f50e037f8 + () override + + + virtual IJsonHandler * + readArrayEnd + classCesiumJsonReader_1_1ArrayJsonHandler_3_01double_00_01DoubleJsonHandler_01_4.html + a9deb96709aa2f2a5b36a4a89cf91cec7 + () override + + + virtual void + reportWarning + classCesiumJsonReader_1_1ArrayJsonHandler_3_01double_00_01DoubleJsonHandler_01_4.html + add1b228a823dfc90e8c7f222f7c99a9a + (const std::string &warning, std::vector< std::string > &&context=std::vector< std::string >()) override + + + + CesiumJsonReader::ArrayJsonHandler< std::string, StringJsonHandler > + classCesiumJsonReader_1_1ArrayJsonHandler_3_01std_1_1string_00_01StringJsonHandler_01_4.html + CesiumJsonReader::JsonHandler + + std::vector< std::string > + ValueType + classCesiumJsonReader_1_1ArrayJsonHandler_3_01std_1_1string_00_01StringJsonHandler_01_4.html + ab08bfb3b04cc3b18d84446ef4209d7ef + + + + void + reset + classCesiumJsonReader_1_1ArrayJsonHandler_3_01std_1_1string_00_01StringJsonHandler_01_4.html + a6e593164fdd9cdb871b88f2e9cad7ecd + (IJsonHandler *pParent, std::vector< std::string > *pArray) + + + virtual IJsonHandler * + readNull + classCesiumJsonReader_1_1ArrayJsonHandler_3_01std_1_1string_00_01StringJsonHandler_01_4.html + a8ae0d6c1c5e4f6564f47daf13e1a9d26 + () override + + + virtual IJsonHandler * + readBool + classCesiumJsonReader_1_1ArrayJsonHandler_3_01std_1_1string_00_01StringJsonHandler_01_4.html + a919c087133dc6f9f3fb5e3883e07caaa + (bool b) override + + + virtual IJsonHandler * + readInt32 + classCesiumJsonReader_1_1ArrayJsonHandler_3_01std_1_1string_00_01StringJsonHandler_01_4.html + a1bd141a3720ca82a82a2038f931a64e8 + (int32_t i) override + + + virtual IJsonHandler * + readUint32 + classCesiumJsonReader_1_1ArrayJsonHandler_3_01std_1_1string_00_01StringJsonHandler_01_4.html + a36a848fdc39f4073aff260668b875a4b + (uint32_t i) override + + + virtual IJsonHandler * + readInt64 + classCesiumJsonReader_1_1ArrayJsonHandler_3_01std_1_1string_00_01StringJsonHandler_01_4.html + a99be19250a89fa4ca7f80e460cf6e038 + (int64_t i) override + + + virtual IJsonHandler * + readUint64 + classCesiumJsonReader_1_1ArrayJsonHandler_3_01std_1_1string_00_01StringJsonHandler_01_4.html + ae9ee6c2e5787f40cf0f1cdef66a646fc + (uint64_t i) override + + + virtual IJsonHandler * + readDouble + classCesiumJsonReader_1_1ArrayJsonHandler_3_01std_1_1string_00_01StringJsonHandler_01_4.html + a6998304b1c9bc3df7dab435c1fa33f82 + (double d) override + + + virtual IJsonHandler * + readObjectStart + classCesiumJsonReader_1_1ArrayJsonHandler_3_01std_1_1string_00_01StringJsonHandler_01_4.html + a3f6a1eb82de7b71bffb6afb23e552a30 + () override + + + virtual IJsonHandler * + readArrayStart + classCesiumJsonReader_1_1ArrayJsonHandler_3_01std_1_1string_00_01StringJsonHandler_01_4.html + a208ebd85e18e94d8b922050cb1d4b4bf + () override + + + virtual IJsonHandler * + readArrayEnd + classCesiumJsonReader_1_1ArrayJsonHandler_3_01std_1_1string_00_01StringJsonHandler_01_4.html + a133a74ecacfc33fa68e81d2f08808d59 + () override + + + virtual IJsonHandler * + readString + classCesiumJsonReader_1_1ArrayJsonHandler_3_01std_1_1string_00_01StringJsonHandler_01_4.html + aad299eae15b32a77e86e4abe69a62439 + (const std::string_view &str) override + + + virtual void + reportWarning + classCesiumJsonReader_1_1ArrayJsonHandler_3_01std_1_1string_00_01StringJsonHandler_01_4.html + ac000d8cbe4d726e8c8d4c3ebcb14381a + (const std::string &warning, std::vector< std::string > &&context=std::vector< std::string >()) override + + + + CesiumJsonReader::ArrayJsonHandler< std::vector< T >, ArrayJsonHandler< T, THandler > > + classCesiumJsonReader_1_1ArrayJsonHandler_3_01std_1_1vector_3_01T_01_4_00_01ArrayJsonHandler_3_01T_00_01THandler_01_4_01_4.html + typename T + typename THandler + CesiumJsonReader::JsonHandler + + std::vector< T > + ValueType + classCesiumJsonReader_1_1ArrayJsonHandler_3_01std_1_1vector_3_01T_01_4_00_01ArrayJsonHandler_3_01T_00_01THandler_01_4_01_4.html + abc046ca381d4e856e4f94e0b3b5f52c5 + + + + + ArrayJsonHandler + classCesiumJsonReader_1_1ArrayJsonHandler_3_01std_1_1vector_3_01T_01_4_00_01ArrayJsonHandler_3_01T_00_01THandler_01_4_01_4.html + ac0b5d8aa383bc5454f72a6828e6832cc + (Ts &&... args) noexcept + + + void + reset + classCesiumJsonReader_1_1ArrayJsonHandler_3_01std_1_1vector_3_01T_01_4_00_01ArrayJsonHandler_3_01T_00_01THandler_01_4_01_4.html + a7b781f83da7650dc05f830b84f294c2c + (IJsonHandler *pParent, std::vector< std::vector< T > > *pArray) + + + virtual IJsonHandler * + readNull + classCesiumJsonReader_1_1ArrayJsonHandler_3_01std_1_1vector_3_01T_01_4_00_01ArrayJsonHandler_3_01T_00_01THandler_01_4_01_4.html + a04c516af58364c1cafb44b9a48fcd34f + () override + + + virtual IJsonHandler * + readBool + classCesiumJsonReader_1_1ArrayJsonHandler_3_01std_1_1vector_3_01T_01_4_00_01ArrayJsonHandler_3_01T_00_01THandler_01_4_01_4.html + aa15d7d4ab0c2e206ba31d7e18c1ee6fb + (bool b) override + + + virtual IJsonHandler * + readInt32 + classCesiumJsonReader_1_1ArrayJsonHandler_3_01std_1_1vector_3_01T_01_4_00_01ArrayJsonHandler_3_01T_00_01THandler_01_4_01_4.html + af4c65b227ac2df79c04ff634bf0c27c6 + (int32_t i) override + + + virtual IJsonHandler * + readUint32 + classCesiumJsonReader_1_1ArrayJsonHandler_3_01std_1_1vector_3_01T_01_4_00_01ArrayJsonHandler_3_01T_00_01THandler_01_4_01_4.html + a2ce3649caffda5f405a383036cc13cd7 + (uint32_t i) override + + + virtual IJsonHandler * + readInt64 + classCesiumJsonReader_1_1ArrayJsonHandler_3_01std_1_1vector_3_01T_01_4_00_01ArrayJsonHandler_3_01T_00_01THandler_01_4_01_4.html + ad079f0fb9e498f73c20fbbddb38d2a09 + (int64_t i) override + + + virtual IJsonHandler * + readUint64 + classCesiumJsonReader_1_1ArrayJsonHandler_3_01std_1_1vector_3_01T_01_4_00_01ArrayJsonHandler_3_01T_00_01THandler_01_4_01_4.html + a6fd73c0ace2a7fcdd450faca2ca835e6 + (uint64_t i) override + + + virtual IJsonHandler * + readDouble + classCesiumJsonReader_1_1ArrayJsonHandler_3_01std_1_1vector_3_01T_01_4_00_01ArrayJsonHandler_3_01T_00_01THandler_01_4_01_4.html + a923cc29dfc17474a2c148acb88e47270 + (double d) override + + + virtual IJsonHandler * + readString + classCesiumJsonReader_1_1ArrayJsonHandler_3_01std_1_1vector_3_01T_01_4_00_01ArrayJsonHandler_3_01T_00_01THandler_01_4_01_4.html + a9be5ae18e3a218542529713f74b9ff42 + (const std::string_view &str) override + + + virtual IJsonHandler * + readObjectStart + classCesiumJsonReader_1_1ArrayJsonHandler_3_01std_1_1vector_3_01T_01_4_00_01ArrayJsonHandler_3_01T_00_01THandler_01_4_01_4.html + aa021cf8f63546b96dd681695b30fbe54 + () override + + + virtual IJsonHandler * + readArrayStart + classCesiumJsonReader_1_1ArrayJsonHandler_3_01std_1_1vector_3_01T_01_4_00_01ArrayJsonHandler_3_01T_00_01THandler_01_4_01_4.html + a4bb4f59741af94f394dfb9c4333d705f + () override + + + virtual IJsonHandler * + readArrayEnd + classCesiumJsonReader_1_1ArrayJsonHandler_3_01std_1_1vector_3_01T_01_4_00_01ArrayJsonHandler_3_01T_00_01THandler_01_4_01_4.html + a633047e6086e3aeb3aad34967c917efb + () override + + + virtual void + reportWarning + classCesiumJsonReader_1_1ArrayJsonHandler_3_01std_1_1vector_3_01T_01_4_00_01ArrayJsonHandler_3_01T_00_01THandler_01_4_01_4.html + a14f78d78667da3d8fc94461afec620a1 + (const std::string &warning, std::vector< std::string > &&context=std::vector< std::string >()) override + + + + CesiumJsonReader::ArrayJsonHandler< T, IntegerJsonHandler< T > > + classCesiumJsonReader_1_1ArrayJsonHandler_3_01T_00_01IntegerJsonHandler_3_01T_01_4_01_4.html + typename T + CesiumJsonReader::JsonHandler + + std::vector< T > + ValueType + classCesiumJsonReader_1_1ArrayJsonHandler_3_01T_00_01IntegerJsonHandler_3_01T_01_4_01_4.html + a532ee10e664d59e7eb1aa6dfe1a49854 + + + + void + reset + classCesiumJsonReader_1_1ArrayJsonHandler_3_01T_00_01IntegerJsonHandler_3_01T_01_4_01_4.html + abbc769eda63da924f1b2cdb15d97cffc + (IJsonHandler *pParent, std::vector< T > *pArray) + + + virtual IJsonHandler * + readNull + classCesiumJsonReader_1_1ArrayJsonHandler_3_01T_00_01IntegerJsonHandler_3_01T_01_4_01_4.html + aa11b271e159071f1848bd39a35bd09d3 + () override + + + virtual IJsonHandler * + readBool + classCesiumJsonReader_1_1ArrayJsonHandler_3_01T_00_01IntegerJsonHandler_3_01T_01_4_01_4.html + af1283cdfce0a6ec41cb251ae5f52553c + (bool b) override + + + virtual IJsonHandler * + readInt32 + classCesiumJsonReader_1_1ArrayJsonHandler_3_01T_00_01IntegerJsonHandler_3_01T_01_4_01_4.html + ae1053c59d61c6ff49236d8ef136b5bf0 + (int32_t i) override + + + virtual IJsonHandler * + readUint32 + classCesiumJsonReader_1_1ArrayJsonHandler_3_01T_00_01IntegerJsonHandler_3_01T_01_4_01_4.html + a075710c033445604ed9948377af3432f + (uint32_t i) override + + + virtual IJsonHandler * + readInt64 + classCesiumJsonReader_1_1ArrayJsonHandler_3_01T_00_01IntegerJsonHandler_3_01T_01_4_01_4.html + acefeb70dba47489dcb37518c72fcf5f4 + (int64_t i) override + + + virtual IJsonHandler * + readUint64 + classCesiumJsonReader_1_1ArrayJsonHandler_3_01T_00_01IntegerJsonHandler_3_01T_01_4_01_4.html + a4546f3722acc181eb5b0ef37bfe7667c + (uint64_t i) override + + + virtual IJsonHandler * + readDouble + classCesiumJsonReader_1_1ArrayJsonHandler_3_01T_00_01IntegerJsonHandler_3_01T_01_4_01_4.html + a8330ae7693fe49ea5b761c8d86878c73 + (double d) override + + + virtual IJsonHandler * + readString + classCesiumJsonReader_1_1ArrayJsonHandler_3_01T_00_01IntegerJsonHandler_3_01T_01_4_01_4.html + a09b7e19edba44647f59ff9d9e51c6a05 + (const std::string_view &str) override + + + virtual IJsonHandler * + readObjectStart + classCesiumJsonReader_1_1ArrayJsonHandler_3_01T_00_01IntegerJsonHandler_3_01T_01_4_01_4.html + a10caa1a4b5cb2edc7ff4da0801978cd1 + () override + + + virtual IJsonHandler * + readArrayStart + classCesiumJsonReader_1_1ArrayJsonHandler_3_01T_00_01IntegerJsonHandler_3_01T_01_4_01_4.html + a1d009503199e80c6be06008641091be8 + () override + + + virtual IJsonHandler * + readArrayEnd + classCesiumJsonReader_1_1ArrayJsonHandler_3_01T_00_01IntegerJsonHandler_3_01T_01_4_01_4.html + a272ef9edf61abeecd77cf014311b25ab + () override + + + virtual void + reportWarning + classCesiumJsonReader_1_1ArrayJsonHandler_3_01T_00_01IntegerJsonHandler_3_01T_01_4_01_4.html + a1fa876f495d13a074c884468ebe99a05 + (const std::string &warning, std::vector< std::string > &&context=std::vector< std::string >()) override + + + + Cesium3DTiles::PropertyTableProperty::ArrayOffsetType + structCesium3DTiles_1_1PropertyTableProperty_1_1ArrayOffsetType.html + + static const std::string + UINT8 + structCesium3DTiles_1_1PropertyTableProperty_1_1ArrayOffsetType.html + a18bc51ec3f41b8e22be4112d32619bda + + + + static const std::string + UINT16 + structCesium3DTiles_1_1PropertyTableProperty_1_1ArrayOffsetType.html + a85601f34db611f4f8398691184d8a0be + + + + static const std::string + UINT32 + structCesium3DTiles_1_1PropertyTableProperty_1_1ArrayOffsetType.html + aabdc114ff35989164901823d92c379f0 + + + + static const std::string + UINT64 + structCesium3DTiles_1_1PropertyTableProperty_1_1ArrayOffsetType.html + a8017176ef575d9be90dffea9ac9d4088 + + + + + CesiumGltf::PropertyTableProperty::ArrayOffsetType + structCesiumGltf_1_1PropertyTableProperty_1_1ArrayOffsetType.html + + static const std::string + UINT8 + structCesiumGltf_1_1PropertyTableProperty_1_1ArrayOffsetType.html + a9028b381029bc6a78be167cb1d8a20ec + + + + static const std::string + UINT16 + structCesiumGltf_1_1PropertyTableProperty_1_1ArrayOffsetType.html + a01e4e768961dd31392b5034d3d1fd2da + + + + static const std::string + UINT32 + structCesiumGltf_1_1PropertyTableProperty_1_1ArrayOffsetType.html + aff6ab4932452b9e472ab9815bd6fb024 + + + + static const std::string + UINT64 + structCesiumGltf_1_1PropertyTableProperty_1_1ArrayOffsetType.html + a6ae6b7ce4a510b77d46854e2a46b6cb7 + + + + + Cesium3DTiles::Asset + structCesium3DTiles_1_1Asset.html + CesiumUtility::ExtensibleObject + + int64_t + getSizeBytes + structCesium3DTiles_1_1Asset.html + a5875bbd9952ba07e8c6173d48b140469 + () const + + + std::string + version + structCesium3DTiles_1_1Asset.html + a3f7b52e7d13edc15f1d89739fe7868c3 + + + + std::optional< std::string > + tilesetVersion + structCesium3DTiles_1_1Asset.html + a7554ae14f92d04e06780e47a33a12fd7 + + + + static constexpr const char * + TypeName + structCesium3DTiles_1_1Asset.html + a5dd4fb06c3ab0b2bfdf142a655f335ad + + + + + CesiumGltf::Asset + structCesiumGltf_1_1Asset.html + CesiumUtility::ExtensibleObject + + int64_t + getSizeBytes + structCesiumGltf_1_1Asset.html + aa5f800a06522940edf868e80c1cba8df + () const + + + std::optional< std::string > + copyright + structCesiumGltf_1_1Asset.html + a685b6dc132a7a22a51fb88cadac9d148 + + + + std::optional< std::string > + generator + structCesiumGltf_1_1Asset.html + a7694c35d08850eb3d35fba85b574f8a2 + + + + std::string + version + structCesiumGltf_1_1Asset.html + ad6b13d4138862d1585df5dd7c1c8a8b0 + + + + std::optional< std::string > + minVersion + structCesiumGltf_1_1Asset.html + a7ccf50855d2357385933a62edf6a9bf3 + + + + static constexpr const char * + TypeName + structCesiumGltf_1_1Asset.html + abec8fe60a4d37521341ed7da7c158844 + + + + + CesiumIonClient::Asset + structCesiumIonClient_1_1Asset.html + + int64_t + id + structCesiumIonClient_1_1Asset.html + a3745b0eaa8e2f23a3c6f96640a76aba5 + + + + std::string + name + structCesiumIonClient_1_1Asset.html + a75237ee42eb577703c0bc345405477af + + + + std::string + description + structCesiumIonClient_1_1Asset.html + aa69196aaa2b050f3d97b7ba5065b03cb + + + + std::string + attribution + structCesiumIonClient_1_1Asset.html + a149361e95179c279c691827c774ae32f + + + + std::string + type + structCesiumIonClient_1_1Asset.html + af902a189242a32fac94661ba09d2080e + + + + int64_t + bytes + structCesiumIonClient_1_1Asset.html + a50dc67910f80522416f3bc4364cbb5ec + + + + std::string + dateAdded + structCesiumIonClient_1_1Asset.html + a641753a98bbc6e4f22956fe030237c78 + + + + std::string + status + structCesiumIonClient_1_1Asset.html + a178560b63ae376488c002583d062a165 + + + + int8_t + percentComplete + structCesiumIonClient_1_1Asset.html + aea4aa1bc7c3dccddf3d5869aa7d70225 + + + + + Cesium3DTilesContent::AssetFetcher + structCesium3DTilesContent_1_1AssetFetcher.html + + + AssetFetcher + structCesium3DTilesContent_1_1AssetFetcher.html + ae25448bfa224d023a7fef97ca1809f7b + (const CesiumAsync::AsyncSystem &asyncSystem_, const std::shared_ptr< CesiumAsync::IAssetAccessor > &pAssetAccessor_, const std::string &baseUrl_, const glm::dmat4 tileTransform_, const std::vector< CesiumAsync::IAssetAccessor::THeader > &requestHeaders_, CesiumGeometry::Axis upAxis_) + + + CesiumAsync::Future< AssetFetcherResult > + get + structCesium3DTilesContent_1_1AssetFetcher.html + ac53008bc95732175c36a647811c2284a + (const std::string &relativeUrl) const + + + CesiumAsync::AsyncSystem + asyncSystem + structCesium3DTilesContent_1_1AssetFetcher.html + a93ee3171e0a9a628efade1170ba4c20a + + + + std::shared_ptr< CesiumAsync::IAssetAccessor > + pAssetAccessor + structCesium3DTilesContent_1_1AssetFetcher.html + adf722736ae4d086450980e66cf6cf43d + + + + std::string + baseUrl + structCesium3DTilesContent_1_1AssetFetcher.html + ac61ae6d6656b445fb1e6c69ed6c3b8f7 + + + + glm::dmat4 + tileTransform + structCesium3DTilesContent_1_1AssetFetcher.html + a0acbe3e4c018070e3c01b2ed3f4cfef7 + + + + std::vector< CesiumAsync::IAssetAccessor::THeader > + requestHeaders + structCesium3DTilesContent_1_1AssetFetcher.html + ab3e29fc5b47e8dc9b3e07148406028a5 + + + + CesiumGeometry::Axis + upAxis + structCesium3DTilesContent_1_1AssetFetcher.html + a95855dd820b71a4777eff5c21fd39c58 + + + + + Cesium3DTilesContent::AssetFetcherResult + structCesium3DTilesContent_1_1AssetFetcherResult.html + + std::vector< std::byte > + bytes + structCesium3DTilesContent_1_1AssetFetcherResult.html + acb924d4641fd5dd89da20c13d7c0bd9e + + + + CesiumUtility::ErrorList + errorList + structCesium3DTilesContent_1_1AssetFetcherResult.html + aac476a9e956f6108180fdee5d634b9f5 + + + + + Cesium3DTilesReader::AssetReader + classCesium3DTilesReader_1_1AssetReader.html + + + AssetReader + classCesium3DTilesReader_1_1AssetReader.html + a4bb0c9ec5c6f958754f87ba826a4cc7b + () + + + CesiumJsonReader::JsonReaderOptions & + getOptions + classCesium3DTilesReader_1_1AssetReader.html + a3fbe420f83ae77c95bc4dc4317718bda + () + + + const CesiumJsonReader::JsonReaderOptions & + getOptions + classCesium3DTilesReader_1_1AssetReader.html + a09d8435dbeea26bb3a839353cde845ab + () const + + + CesiumJsonReader::ReadJsonResult< Cesium3DTiles::Asset > + readFromJson + classCesium3DTilesReader_1_1AssetReader.html + aa3e6cbead6597ed15844f604b7f11d5a + (const std::span< const std::byte > &data) const + + + CesiumJsonReader::ReadJsonResult< Cesium3DTiles::Asset > + readFromJson + classCesium3DTilesReader_1_1AssetReader.html + a604df6da3daee72123057cc2e3cda03c + (const rapidjson::Value &value) const + + + CesiumJsonReader::ReadJsonResult< std::vector< Cesium3DTiles::Asset > > + readArrayFromJson + classCesium3DTilesReader_1_1AssetReader.html + ad8729db8f375d69015aafd9953929be0 + (const rapidjson::Value &value) const + + + + CesiumGltfReader::AssetReader + classCesiumGltfReader_1_1AssetReader.html + + + AssetReader + classCesiumGltfReader_1_1AssetReader.html + ad623bf10d2316ed6ee89937d4180f738 + () + + + CesiumJsonReader::JsonReaderOptions & + getOptions + classCesiumGltfReader_1_1AssetReader.html + a67009096416ad67c4f0cb2a098766a97 + () + + + const CesiumJsonReader::JsonReaderOptions & + getOptions + classCesiumGltfReader_1_1AssetReader.html + a320fc75e6f6e7b34424001c36933c16e + () const + + + CesiumJsonReader::ReadJsonResult< CesiumGltf::Asset > + readFromJson + classCesiumGltfReader_1_1AssetReader.html + a9ae79b294b1c10c45628cea80bd1b160 + (const std::span< const std::byte > &data) const + + + CesiumJsonReader::ReadJsonResult< CesiumGltf::Asset > + readFromJson + classCesiumGltfReader_1_1AssetReader.html + aebcb5d1d0f96dff88d59ad286f98e31c + (const rapidjson::Value &value) const + + + CesiumJsonReader::ReadJsonResult< std::vector< CesiumGltf::Asset > > + readArrayFromJson + classCesiumGltfReader_1_1AssetReader.html + a2de2d33fb31ee9cb587ab3fcafbd04a6 + (const rapidjson::Value &value) const + + + + CesiumIonClient::Assets + structCesiumIonClient_1_1Assets.html + + std::string + link + structCesiumIonClient_1_1Assets.html + ac0d146d82787b7909ba66ef4a2eaa3a2 + + + + std::vector< Asset > + items + structCesiumIonClient_1_1Assets.html + a0e16976be032a83a50cbf7f61ecba548 + + + + + CesiumAsync::AsyncSystem + classCesiumAsync_1_1AsyncSystem.html + + std::conditional_t< std::is_void_v< T >, void, std::vector< T > > + AllValueType + classCesiumAsync_1_1AsyncSystem.html + a6a19aaa497ec222e2ee38e04a1914850 + + + + + AsyncSystem + classCesiumAsync_1_1AsyncSystem.html + a844f5d8f5657cc735163b0d765ca99cc + (const std::shared_ptr< ITaskProcessor > &pTaskProcessor) noexcept + + + Future< T > + createFuture + classCesiumAsync_1_1AsyncSystem.html + aaa07de261847a67c047242a4fc7e1a18 + (Func &&f) const + + + Promise< T > + createPromise + classCesiumAsync_1_1AsyncSystem.html + aa40f0e1841851d01310d870d5b339b83 + () const + + + CesiumImpl::ContinuationFutureType_t< Func, void > + runInWorkerThread + classCesiumAsync_1_1AsyncSystem.html + aa3b037a193c3cede9f67dbb3d5370e46 + (Func &&f) const + + + CesiumImpl::ContinuationFutureType_t< Func, void > + runInMainThread + classCesiumAsync_1_1AsyncSystem.html + ab728e985e991198515c67467a1f3a971 + (Func &&f) const + + + CesiumImpl::ContinuationFutureType_t< Func, void > + runInThreadPool + classCesiumAsync_1_1AsyncSystem.html + a9f795286ac4399c32d647973568a3abe + (const ThreadPool &threadPool, Func &&f) const + + + Future< AllValueType< T > > + all + classCesiumAsync_1_1AsyncSystem.html + afda8864747df9d52835286f3ce8e122c + (std::vector< Future< T > > &&futures) const + + + Future< AllValueType< T > > + all + classCesiumAsync_1_1AsyncSystem.html + a41465beec53ac4448d5319e52607a40f + (std::vector< SharedFuture< T > > &&futures) const + + + Future< T > + createResolvedFuture + classCesiumAsync_1_1AsyncSystem.html + a19e3001fbf532316e2e833807dc2f7a5 + (T &&value) const + + + Future< void > + createResolvedFuture + classCesiumAsync_1_1AsyncSystem.html + a94713aa4d297211a8ab6a7eb2a48ecd5 + () const + + + void + dispatchMainThreadTasks + classCesiumAsync_1_1AsyncSystem.html + a746ed634d8043176be067849d97878b9 + () + + + bool + dispatchOneMainThreadTask + classCesiumAsync_1_1AsyncSystem.html + a2882e7dd914c4c99f027ce66c060d90b + () + + + ThreadPool + createThreadPool + classCesiumAsync_1_1AsyncSystem.html + af44eeeb58e85354840e0a2c66bb71a8a + (int32_t numberOfThreads) const + + + bool + operator== + classCesiumAsync_1_1AsyncSystem.html + a69b339c121e4c6f63dccee1cf4125796 + (const AsyncSystem &rhs) const noexcept + + + bool + operator!= + classCesiumAsync_1_1AsyncSystem.html + a7d82ea676da5553985d88f1742ddfe71 + (const AsyncSystem &rhs) const noexcept + + + + CesiumUtility::AttributeCompression + classCesiumUtility_1_1AttributeCompression.html + + static glm::dvec3 + octDecodeInRange + classCesiumUtility_1_1AttributeCompression.html + ae9960863917e0c6e5b6262a4502c2a60 + (T x, T y, T rangeMax) + + + static glm::dvec3 + octDecode + classCesiumUtility_1_1AttributeCompression.html + a0aa80955058f40f5aa655bb25cf96dc1 + (uint8_t x, uint8_t y) + + + static glm::dvec3 + decodeRGB565 + classCesiumUtility_1_1AttributeCompression.html + ab7d49fcd9d6a8e1a0a59be85caa973ae + (const uint16_t value) + + + + Cesium3DTiles::Availability + structCesium3DTiles_1_1Availability.html + CesiumUtility::ExtensibleObject + Cesium3DTiles::Availability::Constant + + int64_t + getSizeBytes + structCesium3DTiles_1_1Availability.html + a1d1fbd45abd597691f71cb71e4a3f146 + () const + + + std::optional< int64_t > + bitstream + structCesium3DTiles_1_1Availability.html + a7a9ce9c5d495831045bc083d0e088c44 + + + + std::optional< int64_t > + availableCount + structCesium3DTiles_1_1Availability.html + a29ae06fc47699defe904bca338406e06 + + + + std::optional< int32_t > + constant + structCesium3DTiles_1_1Availability.html + a34c3b9dbf3b36a1662641d3b04103f9b + + + + static constexpr const char * + TypeName + structCesium3DTiles_1_1Availability.html + a07f167557e1cb381b4fb34361ff02737 + + + + + CesiumGeometry::AvailabilityAccessor + classCesiumGeometry_1_1AvailabilityAccessor.html + + + AvailabilityAccessor + classCesiumGeometry_1_1AvailabilityAccessor.html + a7670d4f0d7544b8212678e383065b4e8 + (const AvailabilityView &view, const AvailabilitySubtree &subtree) noexcept + + + bool + isBufferView + classCesiumGeometry_1_1AvailabilityAccessor.html + a575240ebb08fe71eb4c7b57e38c7a097 + () const noexcept + + + bool + isConstant + classCesiumGeometry_1_1AvailabilityAccessor.html + af39326656ab9ad300669ce32a1a04126 + () const noexcept + + + bool + getConstant + classCesiumGeometry_1_1AvailabilityAccessor.html + a9e5a4a9ec00ff7f56f40aa769089a0e4 + () const + + + const std::span< const std::byte > & + getBufferAccessor + classCesiumGeometry_1_1AvailabilityAccessor.html + a21aec95889ffdef7664ded0db5765afe + () const + + + const std::byte & + operator[] + classCesiumGeometry_1_1AvailabilityAccessor.html + a5e1e21cf77792edda564b43739f10ca1 + (size_t i) const + + + size_t + size + classCesiumGeometry_1_1AvailabilityAccessor.html + a505bbea2d6654f8c02fa27639cbb0e1b + () const + + + + CesiumGeometry::AvailabilityNode + structCesiumGeometry_1_1AvailabilityNode.html + + + AvailabilityNode + structCesiumGeometry_1_1AvailabilityNode.html + a2291768900c046eb7e58f05690bdc4ea + () noexcept + + + void + setLoadedSubtree + structCesiumGeometry_1_1AvailabilityNode.html + a980dc55eb18df00e864aeff68189844e + (AvailabilitySubtree &&subtree_, uint32_t maxChildrenSubtrees) noexcept + + + std::optional< AvailabilitySubtree > + subtree + structCesiumGeometry_1_1AvailabilityNode.html + a61a24f15fcdcebd07ff2b4904bb1ae8b + + + + std::vector< std::unique_ptr< AvailabilityNode > > + childNodes + structCesiumGeometry_1_1AvailabilityNode.html + ab1ecb0847aa9bafd1e0003d11c3ea17c + + + + + Cesium3DTilesReader::AvailabilityReader + classCesium3DTilesReader_1_1AvailabilityReader.html + + + AvailabilityReader + classCesium3DTilesReader_1_1AvailabilityReader.html + a1f1fbb2d7c9bbc88a3ea226ad80b48bb + () + + + CesiumJsonReader::JsonReaderOptions & + getOptions + classCesium3DTilesReader_1_1AvailabilityReader.html + ab5776901bf0d2ce7fe4f242d47d70ab9 + () + + + const CesiumJsonReader::JsonReaderOptions & + getOptions + classCesium3DTilesReader_1_1AvailabilityReader.html + ad28356c8cb5f0673275c976a058e3af6 + () const + + + CesiumJsonReader::ReadJsonResult< Cesium3DTiles::Availability > + readFromJson + classCesium3DTilesReader_1_1AvailabilityReader.html + a0da52dbf1e3004bf5c28a32651a1f202 + (const std::span< const std::byte > &data) const + + + CesiumJsonReader::ReadJsonResult< Cesium3DTiles::Availability > + readFromJson + classCesium3DTilesReader_1_1AvailabilityReader.html + a8c859dbe416c896df73b66232d203321 + (const rapidjson::Value &value) const + + + CesiumJsonReader::ReadJsonResult< std::vector< Cesium3DTiles::Availability > > + readArrayFromJson + classCesium3DTilesReader_1_1AvailabilityReader.html + a7f2d610bdcdc6fa00c430b060918c0ee + (const rapidjson::Value &value) const + + + + CesiumQuantizedMeshTerrain::AvailabilityRectangle + structCesiumQuantizedMeshTerrain_1_1AvailabilityRectangle.html + CesiumUtility::ExtensibleObject + + int64_t + getSizeBytes + structCesiumQuantizedMeshTerrain_1_1AvailabilityRectangle.html + abb1ff233a1904e573189afbe0629db28 + () const + + + int64_t + startX + structCesiumQuantizedMeshTerrain_1_1AvailabilityRectangle.html + ab93dbb493f1b7dbeb0bf193bee331416 + + + + int64_t + startY + structCesiumQuantizedMeshTerrain_1_1AvailabilityRectangle.html + af6b474b868722e70af79d7ada7aba901 + + + + int64_t + endX + structCesiumQuantizedMeshTerrain_1_1AvailabilityRectangle.html + ad01c3d9edbe5315f537a3dc2bb91575d + + + + int64_t + endY + structCesiumQuantizedMeshTerrain_1_1AvailabilityRectangle.html + a1ed1a43d037de64f28cb728fe6f68fee + + + + static constexpr const char * + TypeName + structCesiumQuantizedMeshTerrain_1_1AvailabilityRectangle.html + ad7754c92c3ab6b3b4246f603b128e626 + + + + + CesiumQuantizedMeshTerrain::AvailabilityRectangleReader + classCesiumQuantizedMeshTerrain_1_1AvailabilityRectangleReader.html + + + AvailabilityRectangleReader + classCesiumQuantizedMeshTerrain_1_1AvailabilityRectangleReader.html + a4800f42f2d1ff15f8ba26d6164c3d2cc + () + + + CesiumJsonReader::JsonReaderOptions & + getOptions + classCesiumQuantizedMeshTerrain_1_1AvailabilityRectangleReader.html + abdb65b34e7c18f431a6af27a0487351e + () + + + const CesiumJsonReader::JsonReaderOptions & + getOptions + classCesiumQuantizedMeshTerrain_1_1AvailabilityRectangleReader.html + a6eda5770eef8a732c1f95f646cb9f114 + () const + + + CesiumJsonReader::ReadJsonResult< CesiumQuantizedMeshTerrain::AvailabilityRectangle > + readFromJson + classCesiumQuantizedMeshTerrain_1_1AvailabilityRectangleReader.html + a2731b33f0acc2f82594d46af871e092c + (const std::span< const std::byte > &data) const + + + CesiumJsonReader::ReadJsonResult< CesiumQuantizedMeshTerrain::AvailabilityRectangle > + readFromJson + classCesiumQuantizedMeshTerrain_1_1AvailabilityRectangleReader.html + a767201b24c1846c6f91b065a876dce95 + (const rapidjson::Value &value) const + + + CesiumJsonReader::ReadJsonResult< std::vector< CesiumQuantizedMeshTerrain::AvailabilityRectangle > > + readArrayFromJson + classCesiumQuantizedMeshTerrain_1_1AvailabilityRectangleReader.html + a9520be5c5776656bf893951c0cf959c9 + (const rapidjson::Value &value) const + + + + CesiumGeometry::AvailabilitySubtree + structCesiumGeometry_1_1AvailabilitySubtree.html + + AvailabilityView + tileAvailability + structCesiumGeometry_1_1AvailabilitySubtree.html + a9addf00a1686d7343a43b217a8e593fb + + + + AvailabilityView + contentAvailability + structCesiumGeometry_1_1AvailabilitySubtree.html + a52412fce93adbb7b1858c6e3fd2f648a + + + + AvailabilityView + subtreeAvailability + structCesiumGeometry_1_1AvailabilitySubtree.html + a8a6d6c4e801c3c2097e7646ec710c8a4 + + + + std::vector< std::vector< std::byte > > + buffers + structCesiumGeometry_1_1AvailabilitySubtree.html + a5c0bd6c36f25f3cf9260a434a77f27c8 + + + + + CesiumGeometry::AvailabilityTree + structCesiumGeometry_1_1AvailabilityTree.html + + std::unique_ptr< AvailabilityNode > + pRoot + structCesiumGeometry_1_1AvailabilityTree.html + a2cc234ae8dccae0d459acafee49814b0 + + + + + CesiumGeometry::AxisAlignedBox + structCesiumGeometry_1_1AxisAlignedBox.html + + constexpr + AxisAlignedBox + structCesiumGeometry_1_1AxisAlignedBox.html + a43432397c0ce51bdb3f2527ec11b0931 + () noexcept + + + constexpr + AxisAlignedBox + structCesiumGeometry_1_1AxisAlignedBox.html + a6a37ba657f7ad4446b498f37fd901121 + (double minimumX_, double minimumY_, double minimumZ_, double maximumX_, double maximumY_, double maximumZ_) noexcept + + + constexpr bool + contains + structCesiumGeometry_1_1AxisAlignedBox.html + ad165d4a176e9bb11b1f06ea7436b45f2 + (const glm::dvec3 &position) const noexcept + + + double + minimumX + structCesiumGeometry_1_1AxisAlignedBox.html + adf152f67d03a83218a67d377fcbf7fdd + + + + double + minimumY + structCesiumGeometry_1_1AxisAlignedBox.html + a88a3a74f9e90345e222a03b3fdb7b21b + + + + double + minimumZ + structCesiumGeometry_1_1AxisAlignedBox.html + aa2db01f4c3b84ce3a93fa4cc83a597d7 + + + + double + maximumX + structCesiumGeometry_1_1AxisAlignedBox.html + aa9c196d0072aa9c88fa82a99d76a8703 + + + + double + maximumY + structCesiumGeometry_1_1AxisAlignedBox.html + a1eb8f4be51a7ddcc8894bfb148a27f5e + + + + double + maximumZ + structCesiumGeometry_1_1AxisAlignedBox.html + ae30b444b9d2192da4f6ba7221693ab54 + + + + double + lengthX + structCesiumGeometry_1_1AxisAlignedBox.html + a6ee99c9069058f231c1b4da582a2c28e + + + + double + lengthY + structCesiumGeometry_1_1AxisAlignedBox.html + a57f885184e2846a676ce143530d7c129 + + + + double + lengthZ + structCesiumGeometry_1_1AxisAlignedBox.html + afce72ad62e41d22323d20dd5e4e4ef8c + + + + glm::dvec3 + center + structCesiumGeometry_1_1AxisAlignedBox.html + acc9b44b939a5b345134812259f4c8d08 + + + + + Cesium3DTilesContent::B3dmToGltfConverter + structCesium3DTilesContent_1_1B3dmToGltfConverter.html + + static CesiumAsync::Future< GltfConverterResult > + convert + structCesium3DTilesContent_1_1B3dmToGltfConverter.html + a7015c4aa6bbfffa8de150eddd4067c81 + (const std::span< const std::byte > &b3dmBinary, const CesiumGltfReader::GltfReaderOptions &options, const AssetFetcher &assetFetcher) + + + + Cesium3DTilesContent::BinaryToGltfConverter + structCesium3DTilesContent_1_1BinaryToGltfConverter.html + + static CesiumAsync::Future< GltfConverterResult > + convert + structCesium3DTilesContent_1_1BinaryToGltfConverter.html + a6c9096193c8fb29ad372903423b55d6d + (const std::span< const std::byte > &gltfBinary, const CesiumGltfReader::GltfReaderOptions &options, const AssetFetcher &assetFetcher) + + + + CesiumRasterOverlays::BingMapsRasterOverlay + classCesiumRasterOverlays_1_1BingMapsRasterOverlay.html + CesiumRasterOverlays::RasterOverlay + + + BingMapsRasterOverlay + classCesiumRasterOverlays_1_1BingMapsRasterOverlay.html + aa589b9c9bcdeb358b09865dd07d3e6e9 + (const std::string &name, const std::string &url, const std::string &key, const std::string &mapStyle=BingMapsStyle::AERIAL, const std::string &culture="", const RasterOverlayOptions &overlayOptions={}) + + + virtual CesiumAsync::Future< CreateTileProviderResult > + createTileProvider + classCesiumRasterOverlays_1_1BingMapsRasterOverlay.html + a493bf5e4c473ba8a3c7b2f3b6f3939df + (const CesiumAsync::AsyncSystem &asyncSystem, const std::shared_ptr< CesiumAsync::IAssetAccessor > &pAssetAccessor, const std::shared_ptr< CesiumUtility::CreditSystem > &pCreditSystem, const std::shared_ptr< IPrepareRasterOverlayRendererResources > &pPrepareRendererResources, const std::shared_ptr< spdlog::logger > &pLogger, CesiumUtility::IntrusivePointer< const RasterOverlay > pOwner) const override + + + + CesiumRasterOverlays::BingMapsStyle + structCesiumRasterOverlays_1_1BingMapsStyle.html + + static const std::string + AERIAL + structCesiumRasterOverlays_1_1BingMapsStyle.html + ab66058a78970c296e505aca9d5ce0e5a + + + + static const std::string + AERIAL_WITH_LABELS + structCesiumRasterOverlays_1_1BingMapsStyle.html + aabc59eedfc6a4155c3c8ab2fc77c62a2 + + + + static const std::string + AERIAL_WITH_LABELS_ON_DEMAND + structCesiumRasterOverlays_1_1BingMapsStyle.html + ae914934a184ec2b468571e10c9e09f9f + + + + static const std::string + ROAD + structCesiumRasterOverlays_1_1BingMapsStyle.html + a0cf578dc5254822c32030078e614a9d7 + + + + static const std::string + ROAD_ON_DEMAND + structCesiumRasterOverlays_1_1BingMapsStyle.html + ae039fe350e571bab7b82438f6a93f910 + + + + static const std::string + CANVAS_DARK + structCesiumRasterOverlays_1_1BingMapsStyle.html + ab5f371e99f71cba4f4a31af056a3eacc + + + + static const std::string + CANVAS_LIGHT + structCesiumRasterOverlays_1_1BingMapsStyle.html + a5c230b34875bbf94880e55e88f05e5cf + + + + static const std::string + CANVAS_GRAY + structCesiumRasterOverlays_1_1BingMapsStyle.html + a82cc9575fe54501e67cc5c9b5757be70 + + + + static const std::string + ORDNANCE_SURVEY + structCesiumRasterOverlays_1_1BingMapsStyle.html + a4add299e80bf2c2f5b7c82e45f618d14 + + + + static const std::string + COLLINS_BART + structCesiumRasterOverlays_1_1BingMapsStyle.html + a9b88d1272337130f5dd7c57ba9e5ced9 + + + + + CesiumJsonReader::BoolJsonHandler + classCesiumJsonReader_1_1BoolJsonHandler.html + CesiumJsonReader::JsonHandler + + void + reset + classCesiumJsonReader_1_1BoolJsonHandler.html + a9ae9d6e37786a5ba5e5ae573ffd5ed14 + (IJsonHandler *pParent, bool *pBool) + + + virtual IJsonHandler * + readBool + classCesiumJsonReader_1_1BoolJsonHandler.html + aa0e5fe1c859a9c9ffa901194ae9288c5 + (bool b) override + + + + CesiumGeospatial::BoundingRegion + classCesiumGeospatial_1_1BoundingRegion.html + + + BoundingRegion + classCesiumGeospatial_1_1BoundingRegion.html + a8a013bcd5d51ed68b9a0e667c9f46103 + (const GlobeRectangle &rectangle, double minimumHeight, double maximumHeight, const Ellipsoid &ellipsoid=CesiumGeospatial::Ellipsoid::WGS84) + + + const GlobeRectangle & + getRectangle + classCesiumGeospatial_1_1BoundingRegion.html + aa27ee1978359b6f3e74f31aaa7be92db + () const noexcept + + + double + getMinimumHeight + classCesiumGeospatial_1_1BoundingRegion.html + ada6eafaa42d3d22e20b3312eeb4043e2 + () const noexcept + + + double + getMaximumHeight + classCesiumGeospatial_1_1BoundingRegion.html + a89370049eadabd105a1948a95b8a7ef7 + () const noexcept + + + const CesiumGeometry::OrientedBoundingBox & + getBoundingBox + classCesiumGeospatial_1_1BoundingRegion.html + afcfc134bfedbade4eca29c12c96c2f31 + () const noexcept + + + CesiumGeometry::CullingResult + intersectPlane + classCesiumGeospatial_1_1BoundingRegion.html + a189e2e67ee603a753875a4a7d9d8c6ce + (const CesiumGeometry::Plane &plane) const noexcept + + + double + computeDistanceSquaredToPosition + classCesiumGeospatial_1_1BoundingRegion.html + aa37b2ad3f9d14b83559c9a5ee287186e + (const glm::dvec3 &position, const Ellipsoid &ellipsoid=CesiumGeospatial::Ellipsoid::WGS84) const noexcept + + + double + computeDistanceSquaredToPosition + classCesiumGeospatial_1_1BoundingRegion.html + a69a94a292f7561df6db0f377c0d4c536 + (const Cartographic &position, const Ellipsoid &ellipsoid=CesiumGeospatial::Ellipsoid::WGS84) const noexcept + + + double + computeDistanceSquaredToPosition + classCesiumGeospatial_1_1BoundingRegion.html + a75cbb22a65da8eab31159a8a3c88b3dd + (const Cartographic &cartographicPosition, const glm::dvec3 &cartesianPosition) const noexcept + + + BoundingRegion + computeUnion + classCesiumGeospatial_1_1BoundingRegion.html + a128a4440c24cb5d11271f5cf90b41522 + (const BoundingRegion &other, const CesiumGeospatial::Ellipsoid &ellipsoid=CesiumGeospatial::Ellipsoid::WGS84) const noexcept + + + + CesiumGeospatial::BoundingRegionBuilder + classCesiumGeospatial_1_1BoundingRegionBuilder.html + + + BoundingRegionBuilder + classCesiumGeospatial_1_1BoundingRegionBuilder.html + a0fe9bd6323330306c09f11f22fe16549 + () noexcept + + + BoundingRegion + toRegion + classCesiumGeospatial_1_1BoundingRegionBuilder.html + aebb42e1606423c4c4313a2b60a585a50 + (const Ellipsoid &ellipsoid=CesiumGeospatial::Ellipsoid::WGS84) const + + + GlobeRectangle + toGlobeRectangle + classCesiumGeospatial_1_1BoundingRegionBuilder.html + a10ec42564df5aee86eaaf9e8012d9881 + () const + + + void + setPoleTolerance + classCesiumGeospatial_1_1BoundingRegionBuilder.html + ad380f20f9a94f42e166dce3795053bff + (double tolerance) noexcept + + + double + getPoleTolerance + classCesiumGeospatial_1_1BoundingRegionBuilder.html + a227529c8cd5ceb99b5146bdc94f4d72b + () const noexcept + + + bool + expandToIncludePosition + classCesiumGeospatial_1_1BoundingRegionBuilder.html + a717691d78cecd7293ad69b8becbe399a + (const Cartographic &position) + + + + CesiumGeospatial::BoundingRegionWithLooseFittingHeights + classCesiumGeospatial_1_1BoundingRegionWithLooseFittingHeights.html + + + BoundingRegionWithLooseFittingHeights + classCesiumGeospatial_1_1BoundingRegionWithLooseFittingHeights.html + a9183acb32aaee2b484d97f30cb97d2ab + (const BoundingRegion &boundingRegion) noexcept + + + const BoundingRegion & + getBoundingRegion + classCesiumGeospatial_1_1BoundingRegionWithLooseFittingHeights.html + a1e4c270fe45a7fb0e42170beba7c4e5c + () const noexcept + + + double + computeConservativeDistanceSquaredToPosition + classCesiumGeospatial_1_1BoundingRegionWithLooseFittingHeights.html + ae4eabf1601fd670e716f34dbfafd53af + (const glm::dvec3 &position, const Ellipsoid &ellipsoid=CesiumGeospatial::Ellipsoid::WGS84) const noexcept + + + double + computeConservativeDistanceSquaredToPosition + classCesiumGeospatial_1_1BoundingRegionWithLooseFittingHeights.html + ab9d060ac48904b695772324cd110e744 + (const Cartographic &position, const Ellipsoid &ellipsoid=CesiumGeospatial::Ellipsoid::WGS84) const noexcept + + + double + computeConservativeDistanceSquaredToPosition + classCesiumGeospatial_1_1BoundingRegionWithLooseFittingHeights.html + a23d6337d12158433b904231f762cfa4b + (const Cartographic &cartographicPosition, const glm::dvec3 &cartesianPosition) const noexcept + + + + CesiumGeometry::BoundingSphere + classCesiumGeometry_1_1BoundingSphere.html + + constexpr + BoundingSphere + classCesiumGeometry_1_1BoundingSphere.html + a55bbac14447b7cbc6540824025647bb0 + (const glm::dvec3 &center, double radius) noexcept + + + constexpr const glm::dvec3 & + getCenter + classCesiumGeometry_1_1BoundingSphere.html + a522e3b5a4e0f7fba48f6eeefe16ad4ba + () const noexcept + + + constexpr double + getRadius + classCesiumGeometry_1_1BoundingSphere.html + aa750411a29eefee750db0306968a17ce + () const noexcept + + + CullingResult + intersectPlane + classCesiumGeometry_1_1BoundingSphere.html + a41674050a8c97011b26870597af39bec + (const Plane &plane) const noexcept + + + double + computeDistanceSquaredToPosition + classCesiumGeometry_1_1BoundingSphere.html + a652d2f0b592f8d837a94f3d38bdeb642 + (const glm::dvec3 &position) const noexcept + + + bool + contains + classCesiumGeometry_1_1BoundingSphere.html + a44a754c23ee07f60efcc4d25f87575a0 + (const glm::dvec3 &position) const noexcept + + + BoundingSphere + transform + classCesiumGeometry_1_1BoundingSphere.html + aa90a4e2b0937401f3ccd348de13a5180 + (const glm::dmat4 &transformation) const noexcept + + + + Cesium3DTiles::BoundingVolume + structCesium3DTiles_1_1BoundingVolume.html + CesiumUtility::ExtensibleObject + + int64_t + getSizeBytes + structCesium3DTiles_1_1BoundingVolume.html + a224798ebbaea21175ead630ecc0ca067 + () const + + + std::vector< double > + box + structCesium3DTiles_1_1BoundingVolume.html + ac1e3adfb7dfc2d35894147806aa3044b + + + + std::vector< double > + region + structCesium3DTiles_1_1BoundingVolume.html + a24bc6d399726c0605495380b59714a60 + + + + std::vector< double > + sphere + structCesium3DTiles_1_1BoundingVolume.html + aa57801122d404f5262f93dc72e9bc505 + + + + static constexpr const char * + TypeName + structCesium3DTiles_1_1BoundingVolume.html + af2dec43373ae448e9e36084320097305 + + + + + Cesium3DTilesReader::BoundingVolumeReader + classCesium3DTilesReader_1_1BoundingVolumeReader.html + + + BoundingVolumeReader + classCesium3DTilesReader_1_1BoundingVolumeReader.html + a4fa2f88357f8b6746988052d56565ab1 + () + + + CesiumJsonReader::JsonReaderOptions & + getOptions + classCesium3DTilesReader_1_1BoundingVolumeReader.html + a509706feb01ee91b23909393d922a817 + () + + + const CesiumJsonReader::JsonReaderOptions & + getOptions + classCesium3DTilesReader_1_1BoundingVolumeReader.html + adbb077238454f46582d647b0db7c238d + () const + + + CesiumJsonReader::ReadJsonResult< Cesium3DTiles::BoundingVolume > + readFromJson + classCesium3DTilesReader_1_1BoundingVolumeReader.html + ad26d99e5e5ac1e7a7d5a96964fe00f09 + (const std::span< const std::byte > &data) const + + + CesiumJsonReader::ReadJsonResult< Cesium3DTiles::BoundingVolume > + readFromJson + classCesium3DTilesReader_1_1BoundingVolumeReader.html + ac37039a518661b8e1d6d06358c2a7fa6 + (const rapidjson::Value &value) const + + + CesiumJsonReader::ReadJsonResult< std::vector< Cesium3DTiles::BoundingVolume > > + readArrayFromJson + classCesium3DTilesReader_1_1BoundingVolumeReader.html + aff90e713c3a2fc4e77a312744c9a0b3a + (const rapidjson::Value &value) const + + + + Cesium3DTiles::Buffer + structCesium3DTiles_1_1Buffer.html + Cesium3DTiles::BufferSpec + + BufferCesium + cesium + structCesium3DTiles_1_1Buffer.html + ab5f7583d9b5cdfb3519ef0e4e80f5cca + + + + + CesiumGltf::Buffer + structCesiumGltf_1_1Buffer.html + CesiumGltf::BufferSpec + + BufferCesium + cesium + structCesiumGltf_1_1Buffer.html + a1456bfc059d6afdf13868731f5ef556e + + + + + Cesium3DTiles::BufferCesium + structCesium3DTiles_1_1BufferCesium.html + + std::vector< std::byte > + data + structCesium3DTiles_1_1BufferCesium.html + ab5831a9f4d8fb8aaf24a2cdb09ca485f + + + + + CesiumGltf::BufferCesium + structCesiumGltf_1_1BufferCesium.html + + std::vector< std::byte > + data + structCesiumGltf_1_1BufferCesium.html + ac7d004f8e2839f9a043d09fcb3b41164 + + + + + Cesium3DTilesReader::BufferReader + classCesium3DTilesReader_1_1BufferReader.html + + + BufferReader + classCesium3DTilesReader_1_1BufferReader.html + a0b0dde9628c5024f1373c58e5c71eff4 + () + + + CesiumJsonReader::JsonReaderOptions & + getOptions + classCesium3DTilesReader_1_1BufferReader.html + a3d7405679bf672e6cfce658cd55c160b + () + + + const CesiumJsonReader::JsonReaderOptions & + getOptions + classCesium3DTilesReader_1_1BufferReader.html + a515e4596660759e174775d13f14242ce + () const + + + CesiumJsonReader::ReadJsonResult< Cesium3DTiles::Buffer > + readFromJson + classCesium3DTilesReader_1_1BufferReader.html + afd736c13f1bb43519160bfc0d2610ace + (const std::span< const std::byte > &data) const + + + CesiumJsonReader::ReadJsonResult< Cesium3DTiles::Buffer > + readFromJson + classCesium3DTilesReader_1_1BufferReader.html + a6097bff2c2faa2d5a0babdaab18090d9 + (const rapidjson::Value &value) const + + + CesiumJsonReader::ReadJsonResult< std::vector< Cesium3DTiles::Buffer > > + readArrayFromJson + classCesium3DTilesReader_1_1BufferReader.html + a0ac77bc06f4b317b6d165d29ff07f68c + (const rapidjson::Value &value) const + + + + CesiumGltfReader::BufferReader + classCesiumGltfReader_1_1BufferReader.html + + + BufferReader + classCesiumGltfReader_1_1BufferReader.html + a44497a1c5e24965e3ef3e654ff36a54b + () + + + CesiumJsonReader::JsonReaderOptions & + getOptions + classCesiumGltfReader_1_1BufferReader.html + a05fbcba8f8f613e9a4a4436cbd309cc2 + () + + + const CesiumJsonReader::JsonReaderOptions & + getOptions + classCesiumGltfReader_1_1BufferReader.html + ada44c8b36794d7d1d707e793009c8565 + () const + + + CesiumJsonReader::ReadJsonResult< CesiumGltf::Buffer > + readFromJson + classCesiumGltfReader_1_1BufferReader.html + a277b0ff6b2949767156df22cc812972b + (const std::span< const std::byte > &data) const + + + CesiumJsonReader::ReadJsonResult< CesiumGltf::Buffer > + readFromJson + classCesiumGltfReader_1_1BufferReader.html + a0c9c0e0ec47af3522e2bdbaf222e9df1 + (const rapidjson::Value &value) const + + + CesiumJsonReader::ReadJsonResult< std::vector< CesiumGltf::Buffer > > + readArrayFromJson + classCesiumGltfReader_1_1BufferReader.html + ae41e0950e1c1d3fac84d256712196455 + (const rapidjson::Value &value) const + + + + Cesium3DTiles::BufferSpec + structCesium3DTiles_1_1BufferSpec.html + CesiumUtility::ExtensibleObject + + int64_t + getSizeBytes + structCesium3DTiles_1_1BufferSpec.html + a6a41b101eb62ac363c632dcfd08d8ec1 + () const + + + std::optional< std::string > + uri + structCesium3DTiles_1_1BufferSpec.html + afa1c65361c5465196afb5bc5b5bf33d2 + + + + int64_t + byteLength + structCesium3DTiles_1_1BufferSpec.html + ad5fc362993602b7881c3720bbc51f653 + + + + std::optional< std::string > + name + structCesium3DTiles_1_1BufferSpec.html + aa39a02d8b0e6d3245a89b8b347229582 + + + + static constexpr const char * + TypeName + structCesium3DTiles_1_1BufferSpec.html + ab6fe363de9f15346f6a2da7ce20d5eef + + + + + BufferSpec + structCesium3DTiles_1_1BufferSpec.html + a21e207850ed5fe7cbe440b1f018c25fe + ()=default + + + + CesiumGltf::BufferSpec + structCesiumGltf_1_1BufferSpec.html + CesiumGltf::NamedObject + + int64_t + getSizeBytes + structCesiumGltf_1_1BufferSpec.html + abb77b91acb1ca53935cc23aa2b95972b + () const + + + std::optional< std::string > + uri + structCesiumGltf_1_1BufferSpec.html + a7ebd5fae64c3461908e5701659451432 + + + + int64_t + byteLength + structCesiumGltf_1_1BufferSpec.html + ab2f382179ccf84e24031eda51154ac7a + + + + static constexpr const char * + TypeName + structCesiumGltf_1_1BufferSpec.html + a6733dd35bbb555df0ab6b208747b3ee2 + + + + + BufferSpec + structCesiumGltf_1_1BufferSpec.html + ad15fd83a56abb21f6ee8c7f314caf285 + ()=default + + + + Cesium3DTiles::BufferView + structCesium3DTiles_1_1BufferView.html + CesiumUtility::ExtensibleObject + + int64_t + getSizeBytes + structCesium3DTiles_1_1BufferView.html + a71a3ee142da1e52fddc31d05dab8c5d8 + () const + + + int64_t + buffer + structCesium3DTiles_1_1BufferView.html + ad6d9e1139113dbfe0eba9017ba708743 + + + + int64_t + byteOffset + structCesium3DTiles_1_1BufferView.html + a413823ee9c16153d6a826527f49b4d0a + + + + int64_t + byteLength + structCesium3DTiles_1_1BufferView.html + a7d1593d5deee27e9ed4943c9cf449fd7 + + + + std::optional< std::string > + name + structCesium3DTiles_1_1BufferView.html + a5955d40a7dbd61c4394e60cb266106b1 + + + + static constexpr const char * + TypeName + structCesium3DTiles_1_1BufferView.html + aaa2b5029646a472bf47a5826a8155a9c + + + + + CesiumGltf::BufferView + structCesiumGltf_1_1BufferView.html + CesiumGltf::NamedObject + CesiumGltf::BufferView::Target + + int64_t + getSizeBytes + structCesiumGltf_1_1BufferView.html + a97ecc8a8ebe73f4080921faaabdb3919 + () const + + + int32_t + buffer + structCesiumGltf_1_1BufferView.html + aa84aa8c5885d6fd384695b48d4acf1d2 + + + + int64_t + byteOffset + structCesiumGltf_1_1BufferView.html + af6d3d1984dce846f30e710577bcb0b44 + + + + int64_t + byteLength + structCesiumGltf_1_1BufferView.html + a561079531727f2d645306b2328946dd5 + + + + std::optional< int64_t > + byteStride + structCesiumGltf_1_1BufferView.html + ab282800f37e1f62926f7544989489caf + + + + std::optional< int32_t > + target + structCesiumGltf_1_1BufferView.html + af064520f3dd908b80cd3019fa225226f + + + + static constexpr const char * + TypeName + structCesiumGltf_1_1BufferView.html + a8b610c430c56e316ff968c14f6a0d341 + + + + + Cesium3DTilesReader::BufferViewReader + classCesium3DTilesReader_1_1BufferViewReader.html + + + BufferViewReader + classCesium3DTilesReader_1_1BufferViewReader.html + a4258c92f9a336a4326f770e759fd0155 + () + + + CesiumJsonReader::JsonReaderOptions & + getOptions + classCesium3DTilesReader_1_1BufferViewReader.html + a4b9f690153a98da864b35a4f91438a1f + () + + + const CesiumJsonReader::JsonReaderOptions & + getOptions + classCesium3DTilesReader_1_1BufferViewReader.html + a6822c14f55770651fec1de103c741a86 + () const + + + CesiumJsonReader::ReadJsonResult< Cesium3DTiles::BufferView > + readFromJson + classCesium3DTilesReader_1_1BufferViewReader.html + a380492377b565caf46fc817a217994c4 + (const std::span< const std::byte > &data) const + + + CesiumJsonReader::ReadJsonResult< Cesium3DTiles::BufferView > + readFromJson + classCesium3DTilesReader_1_1BufferViewReader.html + a04139ec80f011ba4be4a265e0312c753 + (const rapidjson::Value &value) const + + + CesiumJsonReader::ReadJsonResult< std::vector< Cesium3DTiles::BufferView > > + readArrayFromJson + classCesium3DTilesReader_1_1BufferViewReader.html + a7656a7ad5c1962a44989f4471a2b6d3d + (const rapidjson::Value &value) const + + + + CesiumGltfReader::BufferViewReader + classCesiumGltfReader_1_1BufferViewReader.html + + + BufferViewReader + classCesiumGltfReader_1_1BufferViewReader.html + a7f081d9707568abfcc087c0b4b334a81 + () + + + CesiumJsonReader::JsonReaderOptions & + getOptions + classCesiumGltfReader_1_1BufferViewReader.html + a6b50462b69e2c3782312116e4f82c596 + () + + + const CesiumJsonReader::JsonReaderOptions & + getOptions + classCesiumGltfReader_1_1BufferViewReader.html + a0e3660dd8ebde88f74e9b875feedb695 + () const + + + CesiumJsonReader::ReadJsonResult< CesiumGltf::BufferView > + readFromJson + classCesiumGltfReader_1_1BufferViewReader.html + a229f3b38b24019a020b1467ae6d29883 + (const std::span< const std::byte > &data) const + + + CesiumJsonReader::ReadJsonResult< CesiumGltf::BufferView > + readFromJson + classCesiumGltfReader_1_1BufferViewReader.html + aafe47fe200272506458ceccc9d85de97 + (const rapidjson::Value &value) const + + + CesiumJsonReader::ReadJsonResult< std::vector< CesiumGltf::BufferView > > + readArrayFromJson + classCesiumGltfReader_1_1BufferViewReader.html + a28a99932425c77c730669caf347b337f + (const rapidjson::Value &value) const + + + + CesiumAsync::CacheItem + classCesiumAsync_1_1CacheItem.html + + + CacheItem + classCesiumAsync_1_1CacheItem.html + a17000ec638439a310dc97091bfc4beb0 + (std::time_t cacheExpiryTime, CacheRequest &&request, CacheResponse &&response) + + + std::time_t + expiryTime + classCesiumAsync_1_1CacheItem.html + aa18dcbb3594223384addf7e074aaa0f6 + + + + CacheRequest + cacheRequest + classCesiumAsync_1_1CacheItem.html + a2b64f3bfba9e1513c97557c9a95f4168 + + + + CacheResponse + cacheResponse + classCesiumAsync_1_1CacheItem.html + ade091e2d4c6625574a0b50175bf946cf + + + + + CesiumAsync::CacheRequest + classCesiumAsync_1_1CacheRequest.html + + + CacheRequest + classCesiumAsync_1_1CacheRequest.html + ae6cfc1f35c71e51d92e1f4d5022cceb5 + (HttpHeaders &&cacheHeaders, std::string &&cacheMethod, std::string &&cacheUrl) + + + HttpHeaders + headers + classCesiumAsync_1_1CacheRequest.html + a823c2056c2ee4fd35950403dff8464ee + + + + std::string + method + classCesiumAsync_1_1CacheRequest.html + a70970133b3662037180123c263582f9d + + + + std::string + url + classCesiumAsync_1_1CacheRequest.html + a760ff4258106e0ef450326a0eb034448 + + + + + CesiumAsync::CacheResponse + classCesiumAsync_1_1CacheResponse.html + + + CacheResponse + classCesiumAsync_1_1CacheResponse.html + a378729d80b19c50c2a0709a1b6aecad2 + (uint16_t cacheStatusCode, HttpHeaders &&cacheHeaders, std::vector< std::byte > &&cacheData) + + + uint16_t + statusCode + classCesiumAsync_1_1CacheResponse.html + ac65163c91dc1a1b6325ad36b46ca8eed + + + + HttpHeaders + headers + classCesiumAsync_1_1CacheResponse.html + a21d20f895f2ff310527e29ba0b1c3212 + + + + std::vector< std::byte > + data + classCesiumAsync_1_1CacheResponse.html + ac5a754f4c4e55bf397276796ce473bfd + + + + + CesiumAsync::CachingAssetAccessor + classCesiumAsync_1_1CachingAssetAccessor.html + CesiumAsync::IAssetAccessor + + + CachingAssetAccessor + classCesiumAsync_1_1CachingAssetAccessor.html + ade8361007555130ed1de193ecb4d7233 + (const std::shared_ptr< spdlog::logger > &pLogger, const std::shared_ptr< IAssetAccessor > &pAssetAccessor, const std::shared_ptr< ICacheDatabase > &pCacheDatabase, int32_t requestsPerCachePrune=10000) + + + virtual Future< std::shared_ptr< IAssetRequest > > + get + classCesiumAsync_1_1CachingAssetAccessor.html + addbe301a881204df02f370d74fc04bc8 + (const AsyncSystem &asyncSystem, const std::string &url, const std::vector< THeader > &headers) override + + + virtual Future< std::shared_ptr< IAssetRequest > > + request + classCesiumAsync_1_1CachingAssetAccessor.html + a74cc091d69c9af12e72e7711d7b651d9 + (const AsyncSystem &asyncSystem, const std::string &verb, const std::string &url, const std::vector< THeader > &headers, const std::span< const std::byte > &contentPayload) override + + + virtual void + tick + classCesiumAsync_1_1CachingAssetAccessor.html + a560777c687339eeb9ce6819f98d3f39e + () noexcept override + + + + CesiumGltf::Camera + structCesiumGltf_1_1Camera.html + CesiumGltf::NamedObject + CesiumGltf::Camera::Type + + int64_t + getSizeBytes + structCesiumGltf_1_1Camera.html + ae3f3b0fb99b1f94eaccd9285eca1dd8e + () const + + + std::optional< CesiumGltf::CameraOrthographic > + orthographic + structCesiumGltf_1_1Camera.html + a3b1d63c94ff9a859901df7400bc983d2 + + + + std::optional< CesiumGltf::CameraPerspective > + perspective + structCesiumGltf_1_1Camera.html + a57aee1db506e5ea1a75d52e3176ff067 + + + + std::string + type + structCesiumGltf_1_1Camera.html + a04050ab09a7414de836f810681031d3f + + + + static constexpr const char * + TypeName + structCesiumGltf_1_1Camera.html + ac2046020c3a821610e167b5d1d7c0488 + + + + + CesiumGltf::CameraOrthographic + structCesiumGltf_1_1CameraOrthographic.html + CesiumUtility::ExtensibleObject + + int64_t + getSizeBytes + structCesiumGltf_1_1CameraOrthographic.html + a7236894db91de5a5b4c1851ca66d4593 + () const + + + double + xmag + structCesiumGltf_1_1CameraOrthographic.html + a41d670973e8008f5f6b78d5d450f4f4e + + + + double + ymag + structCesiumGltf_1_1CameraOrthographic.html + a619e3dabb2ab22d1cc3f750b6fc423d9 + + + + double + zfar + structCesiumGltf_1_1CameraOrthographic.html + a4d18fcb7bfc4e66c0873b83e359ab851 + + + + double + znear + structCesiumGltf_1_1CameraOrthographic.html + afc8c1580ca24e25c3320f5ffd9b8db84 + + + + static constexpr const char * + TypeName + structCesiumGltf_1_1CameraOrthographic.html + a26a250ddf5738643c4443593024f792f + + + + + CesiumGltfReader::CameraOrthographicReader + classCesiumGltfReader_1_1CameraOrthographicReader.html + + + CameraOrthographicReader + classCesiumGltfReader_1_1CameraOrthographicReader.html + a74d9606610ffa2ccdc63ca44b7393979 + () + + + CesiumJsonReader::JsonReaderOptions & + getOptions + classCesiumGltfReader_1_1CameraOrthographicReader.html + a73fb79f080c98a1200e78502fc711c5e + () + + + const CesiumJsonReader::JsonReaderOptions & + getOptions + classCesiumGltfReader_1_1CameraOrthographicReader.html + a865acf911776fa2dc81c03ba66b8b86f + () const + + + CesiumJsonReader::ReadJsonResult< CesiumGltf::CameraOrthographic > + readFromJson + classCesiumGltfReader_1_1CameraOrthographicReader.html + a50d685194365d5bb1ebb43b8cff62977 + (const std::span< const std::byte > &data) const + + + CesiumJsonReader::ReadJsonResult< CesiumGltf::CameraOrthographic > + readFromJson + classCesiumGltfReader_1_1CameraOrthographicReader.html + a69ed25f76cbc25e9f4a7510494abd765 + (const rapidjson::Value &value) const + + + CesiumJsonReader::ReadJsonResult< std::vector< CesiumGltf::CameraOrthographic > > + readArrayFromJson + classCesiumGltfReader_1_1CameraOrthographicReader.html + a1b5cbd030626ed7e3c7ac7962f931269 + (const rapidjson::Value &value) const + + + + CesiumGltf::CameraPerspective + structCesiumGltf_1_1CameraPerspective.html + CesiumUtility::ExtensibleObject + + int64_t + getSizeBytes + structCesiumGltf_1_1CameraPerspective.html + a1a4c94b2e59e54da61a3a4570b79d3a7 + () const + + + std::optional< double > + aspectRatio + structCesiumGltf_1_1CameraPerspective.html + a1f841e1c156a9850c315813356e8d1de + + + + double + yfov + structCesiumGltf_1_1CameraPerspective.html + a9d2fbd50a9b6282c4e04631591ecca05 + + + + std::optional< double > + zfar + structCesiumGltf_1_1CameraPerspective.html + a9d4d4c64ff2e524d05c59f30fe3a6b64 + + + + double + znear + structCesiumGltf_1_1CameraPerspective.html + a0c2987550be9c637d64a0f3843de9e29 + + + + static constexpr const char * + TypeName + structCesiumGltf_1_1CameraPerspective.html + a02cf584b1e26676e3d1dd52a390fe785 + + + + + CesiumGltfReader::CameraPerspectiveReader + classCesiumGltfReader_1_1CameraPerspectiveReader.html + + + CameraPerspectiveReader + classCesiumGltfReader_1_1CameraPerspectiveReader.html + a968381025a64cdeee8c7310f07eef891 + () + + + CesiumJsonReader::JsonReaderOptions & + getOptions + classCesiumGltfReader_1_1CameraPerspectiveReader.html + a1a826e270ca4afb63d57fff0b32e64c6 + () + + + const CesiumJsonReader::JsonReaderOptions & + getOptions + classCesiumGltfReader_1_1CameraPerspectiveReader.html + a77b32fc036e3aa63d1d2950053526244 + () const + + + CesiumJsonReader::ReadJsonResult< CesiumGltf::CameraPerspective > + readFromJson + classCesiumGltfReader_1_1CameraPerspectiveReader.html + a6b96b84943aa18559450eb58d3249c72 + (const std::span< const std::byte > &data) const + + + CesiumJsonReader::ReadJsonResult< CesiumGltf::CameraPerspective > + readFromJson + classCesiumGltfReader_1_1CameraPerspectiveReader.html + a354502b49d3ad385e09437e0572a2772 + (const rapidjson::Value &value) const + + + CesiumJsonReader::ReadJsonResult< std::vector< CesiumGltf::CameraPerspective > > + readArrayFromJson + classCesiumGltfReader_1_1CameraPerspectiveReader.html + aa504b4d53ac8ff6437121b44786490ee + (const rapidjson::Value &value) const + + + + CesiumGltfReader::CameraReader + classCesiumGltfReader_1_1CameraReader.html + + + CameraReader + classCesiumGltfReader_1_1CameraReader.html + a9be397b73bef8f0688f6403a61367e0b + () + + + CesiumJsonReader::JsonReaderOptions & + getOptions + classCesiumGltfReader_1_1CameraReader.html + aad179bcc2bd47af32ceb192585c30792 + () + + + const CesiumJsonReader::JsonReaderOptions & + getOptions + classCesiumGltfReader_1_1CameraReader.html + a1d574e556e5f7d279ca106962bc548fd + () const + + + CesiumJsonReader::ReadJsonResult< CesiumGltf::Camera > + readFromJson + classCesiumGltfReader_1_1CameraReader.html + aa21a6dbcd35ddb053a8884992e484bb8 + (const std::span< const std::byte > &data) const + + + CesiumJsonReader::ReadJsonResult< CesiumGltf::Camera > + readFromJson + classCesiumGltfReader_1_1CameraReader.html + a86f3ccfd81f5f5db426bbbfdc8618373 + (const rapidjson::Value &value) const + + + CesiumJsonReader::ReadJsonResult< std::vector< CesiumGltf::Camera > > + readArrayFromJson + classCesiumGltfReader_1_1CameraReader.html + ad31f3178e53b4e781ccdd6b3517e9071 + (const rapidjson::Value &value) const + + + + CesiumGltf::CanBeNormalized + structCesiumGltf_1_1CanBeNormalized.html + typename... T + + + CesiumGltf::CanBeNormalized< glm::mat< n, n, T, P > > + structCesiumGltf_1_1CanBeNormalized_3_01glm_1_1mat_3_01n_00_01n_00_01T_00_01P_01_4_01_4.html + glm::length_t n + typename T + glm::qualifier P + CesiumGltf::CanBeNormalized< T > + + + CesiumGltf::CanBeNormalized< glm::vec< n, T, P > > + structCesiumGltf_1_1CanBeNormalized_3_01glm_1_1vec_3_01n_00_01T_00_01P_01_4_01_4.html + glm::length_t n + typename T + glm::qualifier P + CesiumGltf::CanBeNormalized< T > + + + CesiumGltf::CanBeNormalized< int16_t > + structCesiumGltf_1_1CanBeNormalized_3_01int16__t_01_4.html + + + CesiumGltf::CanBeNormalized< int32_t > + structCesiumGltf_1_1CanBeNormalized_3_01int32__t_01_4.html + + + CesiumGltf::CanBeNormalized< int64_t > + structCesiumGltf_1_1CanBeNormalized_3_01int64__t_01_4.html + + + CesiumGltf::CanBeNormalized< int8_t > + structCesiumGltf_1_1CanBeNormalized_3_01int8__t_01_4.html + + + CesiumGltf::CanBeNormalized< PropertyArrayView< T > > + structCesiumGltf_1_1CanBeNormalized_3_01PropertyArrayView_3_01T_01_4_01_4.html + typename T + CesiumGltf::CanBeNormalized< T > + + + CesiumGltf::CanBeNormalized< T > + structCesiumGltf_1_1CanBeNormalized_3_01T_01_4.html + typename T + + + CesiumGltf::CanBeNormalized< uint16_t > + structCesiumGltf_1_1CanBeNormalized_3_01uint16__t_01_4.html + + + CesiumGltf::CanBeNormalized< uint32_t > + structCesiumGltf_1_1CanBeNormalized_3_01uint32__t_01_4.html + + + CesiumGltf::CanBeNormalized< uint64_t > + structCesiumGltf_1_1CanBeNormalized_3_01uint64__t_01_4.html + + + CesiumGltf::CanBeNormalized< uint8_t > + structCesiumGltf_1_1CanBeNormalized_3_01uint8__t_01_4.html + + + CesiumGeospatial::Cartographic + classCesiumGeospatial_1_1Cartographic.html + + constexpr + Cartographic + classCesiumGeospatial_1_1Cartographic.html + a904a70102f8715697915d32c20f3e11a + (double longitudeRadians, double latitudeRadians, double heightMeters=0.0) noexcept + + + constexpr bool + operator== + classCesiumGeospatial_1_1Cartographic.html + a8d39d59036b97861edf42a4649922352 + (const Cartographic &rhs) const noexcept + + + static constexpr Cartographic + fromDegrees + classCesiumGeospatial_1_1Cartographic.html + a30f193e095dda5dfdb29a45cf28df0f2 + (double longitudeDegrees, double latitudeDegrees, double heightMeters=0.0) noexcept + + + double + longitude + classCesiumGeospatial_1_1Cartographic.html + a3752a9637d5f9d9bb2748fb1effc4729 + + + + double + latitude + classCesiumGeospatial_1_1Cartographic.html + aac92700b030c1d15afc5ecddb84550c4 + + + + double + height + classCesiumGeospatial_1_1Cartographic.html + a1187fcdd55f56b4b466e89935a63d548 + + + + + CesiumGeospatial::CartographicPolygon + classCesiumGeospatial_1_1CartographicPolygon.html + + + CartographicPolygon + classCesiumGeospatial_1_1CartographicPolygon.html + a1c53f259144668bcd5f77b8dea075044 + (const std::vector< glm::dvec2 > &polygon) + + + constexpr const std::vector< glm::dvec2 > & + getVertices + classCesiumGeospatial_1_1CartographicPolygon.html + afdf6d05751a3cd47d6bbb56f76fb17c0 + () const + + + constexpr const std::vector< uint32_t > & + getIndices + classCesiumGeospatial_1_1CartographicPolygon.html + a22a16cd07db32339069125c5be552e0a + () const + + + constexpr const std::optional< CesiumGeospatial::GlobeRectangle > & + getBoundingRectangle + classCesiumGeospatial_1_1CartographicPolygon.html + adac5f1251a81835e4693e437aa5a803b + () const + + + static bool + rectangleIsWithinPolygons + classCesiumGeospatial_1_1CartographicPolygon.html + a95e361f2908e866c24cf49555c3c2238 + (const CesiumGeospatial::GlobeRectangle &rectangle, const std::vector< CesiumGeospatial::CartographicPolygon > &cartographicPolygons) noexcept + + + static bool + rectangleIsOutsidePolygons + classCesiumGeospatial_1_1CartographicPolygon.html + a17b67d7c55680419df57eed0bd1f6e49 + (const CesiumGeospatial::GlobeRectangle &rectangle, const std::vector< CesiumGeospatial::CartographicPolygon > &cartographicPolygons) noexcept + + + + CesiumAsync::CaseInsensitiveCompare + structCesiumAsync_1_1CaseInsensitiveCompare.html + + bool + operator() + structCesiumAsync_1_1CaseInsensitiveCompare.html + aa5b6cfb5a86d37d1bc53f47fb4f3fd8f + (const std::string &s1, const std::string &s2) const + + + + Cesium3DTiles::Class + structCesium3DTiles_1_1Class.html + CesiumUtility::ExtensibleObject + + int64_t + getSizeBytes + structCesium3DTiles_1_1Class.html + a2bd935f0812ecf5f0b2372452ed0f5cd + () const + + + std::optional< std::string > + name + structCesium3DTiles_1_1Class.html + a98faf2d1b708b046e286ad72cb059da0 + + + + std::optional< std::string > + description + structCesium3DTiles_1_1Class.html + a999f52d151f7263c513cacc50d8557e8 + + + + std::unordered_map< std::string, Cesium3DTiles::ClassProperty > + properties + structCesium3DTiles_1_1Class.html + aebbb186f69044d061c70db95177adbfc + + + + static constexpr const char * + TypeName + structCesium3DTiles_1_1Class.html + a7824be6f4d736efa40f97d435716cb11 + + + + + CesiumGltf::Class + structCesiumGltf_1_1Class.html + CesiumUtility::ExtensibleObject + + int64_t + getSizeBytes + structCesiumGltf_1_1Class.html + a1a6283a21ba7f5c85662275d614f3497 + () const + + + std::optional< std::string > + name + structCesiumGltf_1_1Class.html + afa66f9b35109422330015b1f90478b67 + + + + std::optional< std::string > + description + structCesiumGltf_1_1Class.html + a609a7e27243a8cd93fab199ac6cbe08f + + + + std::unordered_map< std::string, CesiumGltf::ClassProperty > + properties + structCesiumGltf_1_1Class.html + a8e0a6e2b33b3e81a0167177e7cef1c84 + + + + static constexpr const char * + TypeName + structCesiumGltf_1_1Class.html + a59acfaead7f3360331618a004f8ad6d4 + + + + + Cesium3DTiles::ClassProperty + structCesium3DTiles_1_1ClassProperty.html + CesiumUtility::ExtensibleObject + Cesium3DTiles::ClassProperty::ComponentType + Cesium3DTiles::ClassProperty::Type + + int64_t + getSizeBytes + structCesium3DTiles_1_1ClassProperty.html + a78eb7d29755bfb59bb1b824eb790fc55 + () const + + + std::optional< std::string > + name + structCesium3DTiles_1_1ClassProperty.html + ae63cdb72807ffb6a7eac615b6c8d3dfb + + + + std::optional< std::string > + description + structCesium3DTiles_1_1ClassProperty.html + a63e946f74ceee4c64e9994dbdfde77fe + + + + std::string + type + structCesium3DTiles_1_1ClassProperty.html + adf7898d9ab8ba319803f9f3747ae2f38 + + + + std::optional< std::string > + componentType + structCesium3DTiles_1_1ClassProperty.html + aafdecc77a74fcec74faf9c879f1b08bb + + + + std::optional< std::string > + enumType + structCesium3DTiles_1_1ClassProperty.html + ac77a68cf7a427a488a2411699b3b2d62 + + + + bool + array + structCesium3DTiles_1_1ClassProperty.html + aaa2986ea2bcf5d010643def64e3510db + + + + std::optional< int64_t > + count + structCesium3DTiles_1_1ClassProperty.html + acf98c1fb872523a0aaa34a5bba820291 + + + + bool + normalized + structCesium3DTiles_1_1ClassProperty.html + ad1dc262999e3db1834d529c672eb3bd4 + + + + std::optional< CesiumUtility::JsonValue > + offset + structCesium3DTiles_1_1ClassProperty.html + a51c1a2f6aedd59a6489476fd7daecb01 + + + + std::optional< CesiumUtility::JsonValue > + scale + structCesium3DTiles_1_1ClassProperty.html + aa01db068b5970644612e9030529deb80 + + + + std::optional< CesiumUtility::JsonValue > + max + structCesium3DTiles_1_1ClassProperty.html + abae17159aab104872d266c6c0b168179 + + + + std::optional< CesiumUtility::JsonValue > + min + structCesium3DTiles_1_1ClassProperty.html + ac033bcb68660d4612263e00bb3a5b6ae + + + + bool + required + structCesium3DTiles_1_1ClassProperty.html + a418a0caadb941e03838b772b47c12b92 + + + + std::optional< CesiumUtility::JsonValue > + noData + structCesium3DTiles_1_1ClassProperty.html + a133fc729f53dfd9d37e62ca398eec34a + + + + std::optional< CesiumUtility::JsonValue > + defaultProperty + structCesium3DTiles_1_1ClassProperty.html + ae94c2553e6371f92639ace4c44975c98 + + + + std::optional< std::string > + semantic + structCesium3DTiles_1_1ClassProperty.html + a9ecda024b08bf08d9c9eadb4c742abe2 + + + + static constexpr const char * + TypeName + structCesium3DTiles_1_1ClassProperty.html + abd9fd3adde80bf07f1b1a75c9e966116 + + + + + CesiumGltf::ClassProperty + structCesiumGltf_1_1ClassProperty.html + CesiumUtility::ExtensibleObject + CesiumGltf::ClassProperty::ComponentType + CesiumGltf::ClassProperty::Type + + int64_t + getSizeBytes + structCesiumGltf_1_1ClassProperty.html + a63fbe68d267652b8b699201ad76a366a + () const + + + std::optional< std::string > + name + structCesiumGltf_1_1ClassProperty.html + ada841ec5789495c49f2eaa3e35267389 + + + + std::optional< std::string > + description + structCesiumGltf_1_1ClassProperty.html + a943a3098e9d5d3092f466f3e8ccb1f4c + + + + std::string + type + structCesiumGltf_1_1ClassProperty.html + aa5500e1266c61d5b58b3b90c0d3e70e6 + + + + std::optional< std::string > + componentType + structCesiumGltf_1_1ClassProperty.html + a507fc4c79169b704fba2a93c8bb1d94a + + + + std::optional< std::string > + enumType + structCesiumGltf_1_1ClassProperty.html + ab351174e42ac89b612bf51e58a6e0b84 + + + + bool + array + structCesiumGltf_1_1ClassProperty.html + a82aeb6136bb0dbd54a19ec3ed793230c + + + + std::optional< int64_t > + count + structCesiumGltf_1_1ClassProperty.html + a67eabc7fa295c0e0bae7a58cf22e4b96 + + + + bool + normalized + structCesiumGltf_1_1ClassProperty.html + a19bc6b79e35acd44773741ed864cf477 + + + + std::optional< CesiumUtility::JsonValue > + offset + structCesiumGltf_1_1ClassProperty.html + a8754aaca111721a89d87d4993bb10bf0 + + + + std::optional< CesiumUtility::JsonValue > + scale + structCesiumGltf_1_1ClassProperty.html + a7a7041da66bc5469131a97aaf6b599cf + + + + std::optional< CesiumUtility::JsonValue > + max + structCesiumGltf_1_1ClassProperty.html + aecc406993f0bebd82ef1eb77981d3189 + + + + std::optional< CesiumUtility::JsonValue > + min + structCesiumGltf_1_1ClassProperty.html + aae86588462e5c3b6429708f57accf338 + + + + bool + required + structCesiumGltf_1_1ClassProperty.html + aaef303a5258bcb9bce1319747f5febb5 + + + + std::optional< CesiumUtility::JsonValue > + noData + structCesiumGltf_1_1ClassProperty.html + a9e1d1797a9bc626fdc125d4a6d29ee30 + + + + std::optional< CesiumUtility::JsonValue > + defaultProperty + structCesiumGltf_1_1ClassProperty.html + ae9eda0d1f4e22b18b4f7fa63614305ba + + + + std::optional< std::string > + semantic + structCesiumGltf_1_1ClassProperty.html + a11c2857c8d5e1889325b5a659ff213a4 + + + + static constexpr const char * + TypeName + structCesiumGltf_1_1ClassProperty.html + a9491b0ea0e2590a062dae2d11c63a772 + + + + + Cesium3DTilesReader::ClassPropertyReader + classCesium3DTilesReader_1_1ClassPropertyReader.html + + + ClassPropertyReader + classCesium3DTilesReader_1_1ClassPropertyReader.html + adc067ef1b4926bc01538995625906762 + () + + + CesiumJsonReader::JsonReaderOptions & + getOptions + classCesium3DTilesReader_1_1ClassPropertyReader.html + a3b737af08e4fd3c34bd411b56afc6169 + () + + + const CesiumJsonReader::JsonReaderOptions & + getOptions + classCesium3DTilesReader_1_1ClassPropertyReader.html + ada4c4c8e80e090e22340e51330a2cec6 + () const + + + CesiumJsonReader::ReadJsonResult< Cesium3DTiles::ClassProperty > + readFromJson + classCesium3DTilesReader_1_1ClassPropertyReader.html + abce355155b69021dc3a7809214e6b91f + (const std::span< const std::byte > &data) const + + + CesiumJsonReader::ReadJsonResult< Cesium3DTiles::ClassProperty > + readFromJson + classCesium3DTilesReader_1_1ClassPropertyReader.html + a8bcdea375a3591e27b4dc95e7dfb2134 + (const rapidjson::Value &value) const + + + CesiumJsonReader::ReadJsonResult< std::vector< Cesium3DTiles::ClassProperty > > + readArrayFromJson + classCesium3DTilesReader_1_1ClassPropertyReader.html + a81abee155257469095af3eb0cb76de1e + (const rapidjson::Value &value) const + + + + CesiumGltfReader::ClassPropertyReader + classCesiumGltfReader_1_1ClassPropertyReader.html + + + ClassPropertyReader + classCesiumGltfReader_1_1ClassPropertyReader.html + a013d4ec785371dc5dfbaf2600c29efbb + () + + + CesiumJsonReader::JsonReaderOptions & + getOptions + classCesiumGltfReader_1_1ClassPropertyReader.html + aec20a5f31ff1d83a833c50242dbff707 + () + + + const CesiumJsonReader::JsonReaderOptions & + getOptions + classCesiumGltfReader_1_1ClassPropertyReader.html + a1da5deadf9aa41a7b90dd306855eef65 + () const + + + CesiumJsonReader::ReadJsonResult< CesiumGltf::ClassProperty > + readFromJson + classCesiumGltfReader_1_1ClassPropertyReader.html + a91a9ccc0400e9375ec187ec16328e015 + (const std::span< const std::byte > &data) const + + + CesiumJsonReader::ReadJsonResult< CesiumGltf::ClassProperty > + readFromJson + classCesiumGltfReader_1_1ClassPropertyReader.html + aa8098444f570c460c13b989b8d3036a3 + (const rapidjson::Value &value) const + + + CesiumJsonReader::ReadJsonResult< std::vector< CesiumGltf::ClassProperty > > + readArrayFromJson + classCesiumGltfReader_1_1ClassPropertyReader.html + aedf70f9902f3c2798932ab03e80fd69c + (const rapidjson::Value &value) const + + + + Cesium3DTilesReader::ClassReader + classCesium3DTilesReader_1_1ClassReader.html + + + ClassReader + classCesium3DTilesReader_1_1ClassReader.html + a5bb28be8a3160129aef3147ca881a09c + () + + + CesiumJsonReader::JsonReaderOptions & + getOptions + classCesium3DTilesReader_1_1ClassReader.html + a46545f968cc3d4a99a95a3f0f4aeeea1 + () + + + const CesiumJsonReader::JsonReaderOptions & + getOptions + classCesium3DTilesReader_1_1ClassReader.html + a9fdda3aac641ee3d4e60e6a185a4851a + () const + + + CesiumJsonReader::ReadJsonResult< Cesium3DTiles::Class > + readFromJson + classCesium3DTilesReader_1_1ClassReader.html + acfce647a3a9725b7fe4ba188baf3b1f3 + (const std::span< const std::byte > &data) const + + + CesiumJsonReader::ReadJsonResult< Cesium3DTiles::Class > + readFromJson + classCesium3DTilesReader_1_1ClassReader.html + a31d7ab2b8e728d5c55fd422d87a8e449 + (const rapidjson::Value &value) const + + + CesiumJsonReader::ReadJsonResult< std::vector< Cesium3DTiles::Class > > + readArrayFromJson + classCesium3DTilesReader_1_1ClassReader.html + a028a4fee70a09213ffbef3ee796a2a20 + (const rapidjson::Value &value) const + + + + CesiumGltfReader::ClassReader + classCesiumGltfReader_1_1ClassReader.html + + + ClassReader + classCesiumGltfReader_1_1ClassReader.html + a66f06887ef188880d30a5ced0e24558d + () + + + CesiumJsonReader::JsonReaderOptions & + getOptions + classCesiumGltfReader_1_1ClassReader.html + ada371d79e6d1fb8ccf15f27eae6e9822 + () + + + const CesiumJsonReader::JsonReaderOptions & + getOptions + classCesiumGltfReader_1_1ClassReader.html + a73e2eb111f6cdd95516ac89548d35cb8 + () const + + + CesiumJsonReader::ReadJsonResult< CesiumGltf::Class > + readFromJson + classCesiumGltfReader_1_1ClassReader.html + afc9e5d7860803c7e59dad91f12a048fd + (const std::span< const std::byte > &data) const + + + CesiumJsonReader::ReadJsonResult< CesiumGltf::Class > + readFromJson + classCesiumGltfReader_1_1ClassReader.html + a37f0d66ffbc999595965de8be9fefd43 + (const rapidjson::Value &value) const + + + CesiumJsonReader::ReadJsonResult< std::vector< CesiumGltf::Class > > + readArrayFromJson + classCesiumGltfReader_1_1ClassReader.html + a4affc8cc29deaed5c6ffa6bcf067ff81 + (const rapidjson::Value &value) const + + + + Cesium3DTiles::ClassStatistics + structCesium3DTiles_1_1ClassStatistics.html + CesiumUtility::ExtensibleObject + + int64_t + getSizeBytes + structCesium3DTiles_1_1ClassStatistics.html + a09cb370d85a7fd5cbf12aa4d3d92cbb7 + () const + + + std::optional< int64_t > + count + structCesium3DTiles_1_1ClassStatistics.html + a3dde0fd2e1594d5e3f7c0ecd5c472cb7 + + + + std::unordered_map< std::string, Cesium3DTiles::PropertyStatistics > + properties + structCesium3DTiles_1_1ClassStatistics.html + ab10705e6d0ef9fd31a3b017b96b5a557 + + + + static constexpr const char * + TypeName + structCesium3DTiles_1_1ClassStatistics.html + a95cd4df49e5334a20915dddc2b76b0e9 + + + + + Cesium3DTilesReader::ClassStatisticsReader + classCesium3DTilesReader_1_1ClassStatisticsReader.html + + + ClassStatisticsReader + classCesium3DTilesReader_1_1ClassStatisticsReader.html + ae7ad667af9f88b5290c235c391b25307 + () + + + CesiumJsonReader::JsonReaderOptions & + getOptions + classCesium3DTilesReader_1_1ClassStatisticsReader.html + a1f63af83b7319cc863c07cd6642fa6c6 + () + + + const CesiumJsonReader::JsonReaderOptions & + getOptions + classCesium3DTilesReader_1_1ClassStatisticsReader.html + aad82f1010e06cbbbf639707111d4f698 + () const + + + CesiumJsonReader::ReadJsonResult< Cesium3DTiles::ClassStatistics > + readFromJson + classCesium3DTilesReader_1_1ClassStatisticsReader.html + a8832c907192a71be609324da2a79b82d + (const std::span< const std::byte > &data) const + + + CesiumJsonReader::ReadJsonResult< Cesium3DTiles::ClassStatistics > + readFromJson + classCesium3DTilesReader_1_1ClassStatisticsReader.html + ad8280df8192765f8cc0e8e31bb92c94d + (const rapidjson::Value &value) const + + + CesiumJsonReader::ReadJsonResult< std::vector< Cesium3DTiles::ClassStatistics > > + readArrayFromJson + classCesium3DTilesReader_1_1ClassStatisticsReader.html + a87c946cf772ea830f61e6301f3d75488 + (const rapidjson::Value &value) const + + + + Cesium3DTilesContent::CmptToGltfConverter + structCesium3DTilesContent_1_1CmptToGltfConverter.html + + static CesiumAsync::Future< GltfConverterResult > + convert + structCesium3DTilesContent_1_1CmptToGltfConverter.html + ae84cad1649c44bec6e019b62540eb88a + (const std::span< const std::byte > &cmptBinary, const CesiumGltfReader::GltfReaderOptions &options, const AssetFetcher &assetFetcher) + + + + Cesium3DTiles::ClassProperty::ComponentType + structCesium3DTiles_1_1ClassProperty_1_1ComponentType.html + + static const std::string + INT8 + structCesium3DTiles_1_1ClassProperty_1_1ComponentType.html + ab5b0d4d341d1dc3c7afb62a42422a6e8 + + + + static const std::string + UINT8 + structCesium3DTiles_1_1ClassProperty_1_1ComponentType.html + a5cbc8c650fe826d47aecb9feb3cffef9 + + + + static const std::string + INT16 + structCesium3DTiles_1_1ClassProperty_1_1ComponentType.html + aed9b82c41f541f467b5f7918b775dae3 + + + + static const std::string + UINT16 + structCesium3DTiles_1_1ClassProperty_1_1ComponentType.html + a968730b80b335737652c15ed88e5e01e + + + + static const std::string + INT32 + structCesium3DTiles_1_1ClassProperty_1_1ComponentType.html + a765ed84f2af7556b20b36d75635a6510 + + + + static const std::string + UINT32 + structCesium3DTiles_1_1ClassProperty_1_1ComponentType.html + a96a441d37b7cb5d07269327d82313385 + + + + static const std::string + INT64 + structCesium3DTiles_1_1ClassProperty_1_1ComponentType.html + a7eeb6d6a5382f7fd21a991ae2a5174d1 + + + + static const std::string + UINT64 + structCesium3DTiles_1_1ClassProperty_1_1ComponentType.html + a71afb5d394f32ec788a14b717720f020 + + + + static const std::string + FLOAT32 + structCesium3DTiles_1_1ClassProperty_1_1ComponentType.html + ac16be1b070983c6806c8bfde7b3ee7ab + + + + static const std::string + FLOAT64 + structCesium3DTiles_1_1ClassProperty_1_1ComponentType.html + a3700b2212cf986d0bec0fdd955c46406 + + + + + CesiumGltf::AccessorSparseIndices::ComponentType + structCesiumGltf_1_1AccessorSparseIndices_1_1ComponentType.html + + static constexpr int32_t + UNSIGNED_BYTE + structCesiumGltf_1_1AccessorSparseIndices_1_1ComponentType.html + a7f992d147f36352d6938bdb22ceed15a + + + + static constexpr int32_t + UNSIGNED_SHORT + structCesiumGltf_1_1AccessorSparseIndices_1_1ComponentType.html + a7a9dd7600033157109ee21f9462fb0a9 + + + + static constexpr int32_t + UNSIGNED_INT + structCesiumGltf_1_1AccessorSparseIndices_1_1ComponentType.html + a5fc72d972fa9d268ba3cb8a264f40b91 + + + + + CesiumGltf::AccessorSpec::ComponentType + structCesiumGltf_1_1AccessorSpec_1_1ComponentType.html + + static constexpr int32_t + BYTE + structCesiumGltf_1_1AccessorSpec_1_1ComponentType.html + ae6704f2c19a872491a362d7f1bd2ff00 + + + + static constexpr int32_t + UNSIGNED_BYTE + structCesiumGltf_1_1AccessorSpec_1_1ComponentType.html + a8cedd75806a8672ec0418e0b68a615fe + + + + static constexpr int32_t + SHORT + structCesiumGltf_1_1AccessorSpec_1_1ComponentType.html + ab67abd402f27e244fa3663a6effb2dbf + + + + static constexpr int32_t + UNSIGNED_SHORT + structCesiumGltf_1_1AccessorSpec_1_1ComponentType.html + a254d739bc6924f214e1375af30735555 + + + + static constexpr int32_t + INT + structCesiumGltf_1_1AccessorSpec_1_1ComponentType.html + a0cc9f75083fc3fbbcb789acd00de4d3a + + + + static constexpr int32_t + UNSIGNED_INT + structCesiumGltf_1_1AccessorSpec_1_1ComponentType.html + a7569032aec80aabaa45de8c2efe71492 + + + + static constexpr int32_t + INT64 + structCesiumGltf_1_1AccessorSpec_1_1ComponentType.html + ad0b00ad0d4066ce74d5e28ae919a92ad + + + + static constexpr int32_t + UNSIGNED_INT64 + structCesiumGltf_1_1AccessorSpec_1_1ComponentType.html + ad0897c582c8ec163290c5139483a9779 + + + + static constexpr int32_t + FLOAT + structCesiumGltf_1_1AccessorSpec_1_1ComponentType.html + ae8027e78bab6b768ad560622ffc4318a + + + + static constexpr int32_t + DOUBLE + structCesiumGltf_1_1AccessorSpec_1_1ComponentType.html + a0a45e5f1943ef176104cda97b0955359 + + + + + CesiumGltf::ClassProperty::ComponentType + structCesiumGltf_1_1ClassProperty_1_1ComponentType.html + + static const std::string + INT8 + structCesiumGltf_1_1ClassProperty_1_1ComponentType.html + a2be1fe5485a6353b68ce50e4269024b3 + + + + static const std::string + UINT8 + structCesiumGltf_1_1ClassProperty_1_1ComponentType.html + a48809ce0da72697fd85baca4ddda8796 + + + + static const std::string + INT16 + structCesiumGltf_1_1ClassProperty_1_1ComponentType.html + a13e5f96843d3b7178e9637f79c16be11 + + + + static const std::string + UINT16 + structCesiumGltf_1_1ClassProperty_1_1ComponentType.html + aacc882dcac48edddde154f0cb0aeb9f6 + + + + static const std::string + INT32 + structCesiumGltf_1_1ClassProperty_1_1ComponentType.html + a093f101640cf448c33d33d80e32635e1 + + + + static const std::string + UINT32 + structCesiumGltf_1_1ClassProperty_1_1ComponentType.html + a9816d76569df6a45284ffd2f38713b2a + + + + static const std::string + INT64 + structCesiumGltf_1_1ClassProperty_1_1ComponentType.html + a429eace0a5a775b9cf8bd3f06bd02103 + + + + static const std::string + UINT64 + structCesiumGltf_1_1ClassProperty_1_1ComponentType.html + ad2fdab343a2de6b363dd0f79f775d45b + + + + static const std::string + FLOAT32 + structCesiumGltf_1_1ClassProperty_1_1ComponentType.html + a244bb8aa59fd0234da5080a9f94a526a + + + + static const std::string + FLOAT64 + structCesiumGltf_1_1ClassProperty_1_1ComponentType.html + aaa451be93e1cd374defa0f34793e44bb + + + + + CesiumIonClient::Connection + classCesiumIonClient_1_1Connection.html + + + Connection + classCesiumIonClient_1_1Connection.html + a27e85d5ba171a0692e6bd50b003ee951 + (const CesiumAsync::AsyncSystem &asyncSystem, const std::shared_ptr< CesiumAsync::IAssetAccessor > &pAssetAccessor, const std::string &accessToken, const CesiumIonClient::ApplicationData &appData, const std::string &apiUrl="https://api.cesium.com") + + + const CesiumAsync::AsyncSystem & + getAsyncSystem + classCesiumIonClient_1_1Connection.html + a817bced7d937e829404d2bf11a7598f6 + () const noexcept + + + const std::shared_ptr< CesiumAsync::IAssetAccessor > & + getAssetAccessor + classCesiumIonClient_1_1Connection.html + acbe004fd084f54c1aed4ecfdae06da52 + () const noexcept + + + const std::string & + getAccessToken + classCesiumIonClient_1_1Connection.html + aaf00be0d66cb7a620f87b611a45dc9f2 + () const noexcept + + + const std::string & + getApiUrl + classCesiumIonClient_1_1Connection.html + a47960a09ffccb92a6ea2045681e8d0a9 + () const noexcept + + + CesiumAsync::Future< Response< Profile > > + me + classCesiumIonClient_1_1Connection.html + a1e7b6011c600ac019f869e7444ea696c + () const + + + CesiumAsync::Future< Response< Defaults > > + defaults + classCesiumIonClient_1_1Connection.html + a53f8df01dca4fb578c759b029499935e + () const + + + CesiumAsync::Future< Response< Assets > > + assets + classCesiumIonClient_1_1Connection.html + a75efbb575b91b78d2cf91ecfde932379 + () const + + + CesiumAsync::Future< Response< TokenList > > + tokens + classCesiumIonClient_1_1Connection.html + a04815d0368bdc69228c4f5a676661670 + (const ListTokensOptions &options={}) const + + + CesiumAsync::Future< Response< Asset > > + asset + classCesiumIonClient_1_1Connection.html + af439d21a3918e2e57cffaa26d03f22fa + (int64_t assetID) const + + + CesiumAsync::Future< Response< Token > > + token + classCesiumIonClient_1_1Connection.html + ab8948e1e1cdcdc934eec8aaf2fd655a4 + (const std::string &tokenID) const + + + CesiumAsync::Future< Response< TokenList > > + nextPage + classCesiumIonClient_1_1Connection.html + a716eab1f1dd095358e254b9fa13fedd7 + (const Response< TokenList > &currentPage) const + + + CesiumAsync::Future< Response< TokenList > > + previousPage + classCesiumIonClient_1_1Connection.html + acca9b52d58e1c1ba03ba754f28c2d30f + (const Response< TokenList > &currentPage) const + + + CesiumAsync::Future< Response< Token > > + createToken + classCesiumIonClient_1_1Connection.html + ad76eb079e4560741afb4e27b5fb8bf8d + (const std::string &name, const std::vector< std::string > &scopes, const std::optional< std::vector< int64_t > > &assetIds=std::nullopt, const std::optional< std::vector< std::string > > &allowedUrls=std::nullopt) const + + + CesiumAsync::Future< Response< NoValue > > + modifyToken + classCesiumIonClient_1_1Connection.html + a6ba17c1e89426e3d31c88a6e743b33ec + (const std::string &tokenID, const std::string &newName, const std::optional< std::vector< int64_t > > &newAssetIDs, const std::vector< std::string > &newScopes, const std::optional< std::vector< std::string > > &newAllowedUrls) const + + + static CesiumAsync::Future< Connection > + authorize + classCesiumIonClient_1_1Connection.html + a104835c2d0e4aae95a14dd6519fe0514 + (const CesiumAsync::AsyncSystem &asyncSystem, const std::shared_ptr< CesiumAsync::IAssetAccessor > &pAssetAccessor, const std::string &friendlyApplicationName, int64_t clientID, const std::string &redirectPath, const std::vector< std::string > &scopes, std::function< void(const std::string &)> &&openUrlCallback, const CesiumIonClient::ApplicationData &appData, const std::string &ionApiUrl="https://api.cesium.com/", const std::string &ionAuthorizeUrl="https://ion.cesium.com/oauth") + + + static CesiumAsync::Future< Response< ApplicationData > > + appData + classCesiumIonClient_1_1Connection.html + aeede40c24ae8d1f79e676ae1410242ad + (const CesiumAsync::AsyncSystem &asyncSystem, const std::shared_ptr< CesiumAsync::IAssetAccessor > &pAssetAccessor, const std::string &apiUrl="https://api.cesium.com") + + + static CesiumAsync::Future< std::optional< std::string > > + getApiUrl + classCesiumIonClient_1_1Connection.html + a0aeeeb27a050a118ba892638d8b4c9b8 + (const CesiumAsync::AsyncSystem &asyncSystem, const std::shared_ptr< CesiumAsync::IAssetAccessor > &pAssetAccessor, const std::string &ionUrl) + + + static std::optional< std::string > + getIdFromToken + classCesiumIonClient_1_1Connection.html + a9a4390cae099e870c05a1f3615c401ec + (const std::string &token) + + + + Cesium3DTiles::Availability::Constant + structCesium3DTiles_1_1Availability_1_1Constant.html + + static constexpr int32_t + UNAVAILABLE + structCesium3DTiles_1_1Availability_1_1Constant.html + a0a22eba7bb476e1738e64895eaf7ce1e + + + + static constexpr int32_t + AVAILABLE + structCesium3DTiles_1_1Availability_1_1Constant.html + a2de9535cad3bff0fde538f4b593109a0 + + + + + CesiumGeometry::ConstantAvailability + structCesiumGeometry_1_1ConstantAvailability.html + + bool + constant + structCesiumGeometry_1_1ConstantAvailability.html + a092c3116c037bbfb037a73fa3e669f26 + + + + + Cesium3DTiles::Content + structCesium3DTiles_1_1Content.html + CesiumUtility::ExtensibleObject + + int64_t + getSizeBytes + structCesium3DTiles_1_1Content.html + a4de16e583d1144d849f221b32718756b + () const + + + std::optional< Cesium3DTiles::BoundingVolume > + boundingVolume + structCesium3DTiles_1_1Content.html + ad68f3fc8671b7322ac068190f19386bb + + + + std::string + uri + structCesium3DTiles_1_1Content.html + ad3d676825445f60bf22a1508c7235140 + + + + std::optional< Cesium3DTiles::MetadataEntity > + metadata + structCesium3DTiles_1_1Content.html + aec83fa6be1b42a29b86cae8b34b54bc8 + + + + std::optional< int64_t > + group + structCesium3DTiles_1_1Content.html + a38f1fdf93ad987776e18c2b475b14878 + + + + static constexpr const char * + TypeName + structCesium3DTiles_1_1Content.html + a5e77dc7d8fed066b7ce4386a0bdea68b + + + + + Cesium3DTilesReader::ContentReader + classCesium3DTilesReader_1_1ContentReader.html + + + ContentReader + classCesium3DTilesReader_1_1ContentReader.html + a35ca540cb9cb4e70ea65b9596a2328e9 + () + + + CesiumJsonReader::JsonReaderOptions & + getOptions + classCesium3DTilesReader_1_1ContentReader.html + a7ce6f22954f80afb1c7be0aba26c6765 + () + + + const CesiumJsonReader::JsonReaderOptions & + getOptions + classCesium3DTilesReader_1_1ContentReader.html + a9064fb6fce6efd4cbd0df7e07d8fe0aa + () const + + + CesiumJsonReader::ReadJsonResult< Cesium3DTiles::Content > + readFromJson + classCesium3DTilesReader_1_1ContentReader.html + ad39221ea5dcae0d0d6e70b8143be5723 + (const std::span< const std::byte > &data) const + + + CesiumJsonReader::ReadJsonResult< Cesium3DTiles::Content > + readFromJson + classCesium3DTilesReader_1_1ContentReader.html + a99c8ab5357bfa1776c39aa168e02da0d + (const rapidjson::Value &value) const + + + CesiumJsonReader::ReadJsonResult< std::vector< Cesium3DTiles::Content > > + readArrayFromJson + classCesium3DTilesReader_1_1ContentReader.html + af5048e112a33bf0a08644995088871d8 + (const rapidjson::Value &value) const + + + + CesiumGltf::CountFromAccessor + structCesiumGltf_1_1CountFromAccessor.html + + int64_t + operator() + structCesiumGltf_1_1CountFromAccessor.html + ad18105c88159aea3fc87b2f75e77b719 + (std::monostate) + + + int64_t + operator() + structCesiumGltf_1_1CountFromAccessor.html + ad01dfa5720c0c2aa5c93a90184e9b586 + (const AccessorView< T > &value) + + + + CesiumUtility::Credit + structCesiumUtility_1_1Credit.html + + bool + operator== + structCesiumUtility_1_1Credit.html + a00a202b211bcc7446f71d4a4d8d6082d + (const Credit &rhs) const noexcept + + + + CesiumUtility::CreditSystem + classCesiumUtility_1_1CreditSystem.html + + Credit + createCredit + classCesiumUtility_1_1CreditSystem.html + a3d85fa18156195eff97004ae48576189 + (std::string &&html, bool showOnScreen=false) + + + Credit + createCredit + classCesiumUtility_1_1CreditSystem.html + ad558d95055c4a2299c022033f8685005 + (const std::string &html, bool showOnScreen=false) + + + bool + shouldBeShownOnScreen + classCesiumUtility_1_1CreditSystem.html + a06d101a63f98fb4d340f59bdd04d717c + (Credit credit) const noexcept + + + void + setShowOnScreen + classCesiumUtility_1_1CreditSystem.html + a7a0f61af6e6363d8d3614942cae59fbd + (Credit credit, bool showOnScreen) noexcept + + + const std::string & + getHtml + classCesiumUtility_1_1CreditSystem.html + af7a7f2d4741e6e622d82de346fc1958d + (Credit credit) const noexcept + + + void + addCreditToFrame + classCesiumUtility_1_1CreditSystem.html + a65a29a6a6f3981f1bbc10d1f72c755c7 + (Credit credit) + + + void + startNextFrame + classCesiumUtility_1_1CreditSystem.html + a1c7c00761a5de0186818b688bd2b8398 + () noexcept + + + const std::vector< Credit > & + getCreditsToShowThisFrame + classCesiumUtility_1_1CreditSystem.html + ad86e95fbf560a29b059d2ec29aa44b13 + () noexcept + + + const std::vector< Credit > & + getCreditsToNoLongerShowThisFrame + classCesiumUtility_1_1CreditSystem.html + a7d1aef144ac73cc03841e343847db00e + () const noexcept + + + + Cesium3DTilesSelection::CullingVolume + structCesium3DTilesSelection_1_1CullingVolume.html + + CesiumGeometry::Plane + leftPlane + structCesium3DTilesSelection_1_1CullingVolume.html + ace54cc0e2d9f8f4236d199f49ce00626 + + + + CesiumGeometry::Plane + rightPlane + structCesium3DTilesSelection_1_1CullingVolume.html + a432be73d9b727327d076d10c63502223 + + + + CesiumGeometry::Plane + topPlane + structCesium3DTilesSelection_1_1CullingVolume.html + a4b60a0366a9a243baa9919224a14b948 + + + + CesiumGeometry::Plane + bottomPlane + structCesium3DTilesSelection_1_1CullingVolume.html + afc444751672d73de4963ffe1a347dac9 + + + + + CesiumRasterOverlays::DebugColorizeTilesRasterOverlay + classCesiumRasterOverlays_1_1DebugColorizeTilesRasterOverlay.html + CesiumRasterOverlays::RasterOverlay + + + DebugColorizeTilesRasterOverlay + classCesiumRasterOverlays_1_1DebugColorizeTilesRasterOverlay.html + ab6e2c66b0ac2ec6ba234d6cdc9909eaa + (const std::string &name, const RasterOverlayOptions &overlayOptions=RasterOverlayOptions()) + + + virtual CesiumAsync::Future< CreateTileProviderResult > + createTileProvider + classCesiumRasterOverlays_1_1DebugColorizeTilesRasterOverlay.html + aea9b333207f5ec89c3ac1b6fa352571e + (const CesiumAsync::AsyncSystem &asyncSystem, const std::shared_ptr< CesiumAsync::IAssetAccessor > &pAssetAccessor, const std::shared_ptr< CesiumUtility::CreditSystem > &pCreditSystem, const std::shared_ptr< IPrepareRasterOverlayRendererResources > &pPrepareRendererResources, const std::shared_ptr< spdlog::logger > &pLogger, CesiumUtility::IntrusivePointer< const RasterOverlay > pOwner) const override + + + + Cesium3DTilesSelection::DebugTileStateDatabase + classCesium3DTilesSelection_1_1DebugTileStateDatabase.html + + + DebugTileStateDatabase + classCesium3DTilesSelection_1_1DebugTileStateDatabase.html + a35fe039b345b4bc80ee1a2827795eb3d + (const std::string &databaseFilename) + + + void + recordAllTileStates + classCesium3DTilesSelection_1_1DebugTileStateDatabase.html + a1ded739d7d5ddcc13e36f9e36d4233fd + (int32_t frameNumber, const Tileset &tileset) + + + void + recordTileState + classCesium3DTilesSelection_1_1DebugTileStateDatabase.html + ac69d4e5c46cb284e2b07e061620e5a3f + (int32_t frameNumber, const Tile &tile) + + + + CesiumIonClient::DefaultAssets + structCesiumIonClient_1_1DefaultAssets.html + + int64_t + imagery + structCesiumIonClient_1_1DefaultAssets.html + a6c6fde29b066c9213a1d8588d9e12d29 + + + + int64_t + terrain + structCesiumIonClient_1_1DefaultAssets.html + a6e94f8ef0a34e7030c50bedf70bac44b + + + + int64_t + buildings + structCesiumIonClient_1_1DefaultAssets.html + a2c1ed4a295fbb5c61005fdd85697984b + + + + + CesiumIonClient::Defaults + structCesiumIonClient_1_1Defaults.html + + DefaultAssets + defaultAssets + structCesiumIonClient_1_1Defaults.html + a1b6dfd8a0f0b797d386a0ab6031f39ee + + + + std::vector< QuickAddAsset > + quickAddAssets + structCesiumIonClient_1_1Defaults.html + a2fa6eda274e3bc08b2f36be2024d2b56 + + + + + CesiumAsync::DeleteSqliteConnection + structCesiumAsync_1_1DeleteSqliteConnection.html + + void + operator() + structCesiumAsync_1_1DeleteSqliteConnection.html + ade276a55f087e13bcb188b82747986ed + (CESIUM_SQLITE(sqlite3 *) pConnection) noexcept + + + + CesiumAsync::DeleteSqliteStatement + structCesiumAsync_1_1DeleteSqliteStatement.html + + void + operator() + structCesiumAsync_1_1DeleteSqliteStatement.html + ad2c484daddb6e82e64f56c42f0ae197e + (CESIUM_SQLITE(sqlite3_stmt *) pStatement) noexcept + + + + CesiumJsonReader::DictionaryJsonHandler + classCesiumJsonReader_1_1DictionaryJsonHandler.html + typename T + typename THandler + CesiumJsonReader::ObjectJsonHandler + + + DictionaryJsonHandler + classCesiumJsonReader_1_1DictionaryJsonHandler.html + aaba3f805bd7b7eeed6b97d56d655b941 + (Ts &&... args) noexcept + + + void + reset + classCesiumJsonReader_1_1DictionaryJsonHandler.html + a774e29373b731eca29bc707f16d9ce57 + (IJsonHandler *pParent, std::unordered_map< std::string, T > *pDictionary) + + + void + reset + classCesiumJsonReader_1_1DictionaryJsonHandler.html + a94fe1a4e092a49beb8e34fdc83e2cf96 + (IJsonHandler *pParent, std::map< std::string, T > *pDictionary) + + + virtual IJsonHandler * + readObjectKey + classCesiumJsonReader_1_1DictionaryJsonHandler.html + a6988a8d2ad83f8a08a5cb465dc21ba7f + (const std::string_view &str) override + + + + CesiumJsonReader::DoubleJsonHandler + classCesiumJsonReader_1_1DoubleJsonHandler.html + CesiumJsonReader::JsonHandler + + void + reset + classCesiumJsonReader_1_1DoubleJsonHandler.html + af4418f1dac27000ef85078a543c8d2b0 + (IJsonHandler *pParent, double *pDouble) + + + virtual IJsonHandler * + readInt32 + classCesiumJsonReader_1_1DoubleJsonHandler.html + ac07413b43e0a0db1974c63698796a98c + (int32_t i) override + + + virtual IJsonHandler * + readUint32 + classCesiumJsonReader_1_1DoubleJsonHandler.html + a5a865b6eef3007944a3b352f44bc37d1 + (uint32_t i) override + + + virtual IJsonHandler * + readInt64 + classCesiumJsonReader_1_1DoubleJsonHandler.html + a8f9e825afd84bf02e87efc0e9e8061c2 + (int64_t i) override + + + virtual IJsonHandler * + readUint64 + classCesiumJsonReader_1_1DoubleJsonHandler.html + a4df165f7d47c712e72c18dc754cab029 + (uint64_t i) override + + + virtual IJsonHandler * + readDouble + classCesiumJsonReader_1_1DoubleJsonHandler.html + afb256ea8a588a873e9f034362c814bb9 + (double d) override + + + + CesiumUtility::DoublyLinkedListAdvanced + classCesiumUtility_1_1DoublyLinkedListAdvanced.html + typename T + typename TPointerBase + DoublyLinkedListPointers< T >TPointerBase::* Pointers + + void + remove + classCesiumUtility_1_1DoublyLinkedListAdvanced.html + a47c5d0ebb06aaeaf177a1ba95db4b570 + (T &node) noexcept + + + void + insertAfter + classCesiumUtility_1_1DoublyLinkedListAdvanced.html + a131e07b0f3ff3114b44ebec920b7c1b5 + (T &after, T &node) noexcept + + + void + insertBefore + classCesiumUtility_1_1DoublyLinkedListAdvanced.html + a30621e713507dda53ffc462bd0804066 + (T &before, T &node) noexcept + + + void + insertAtHead + classCesiumUtility_1_1DoublyLinkedListAdvanced.html + a0bd37b1792fb12dc49ef39e252281c5f + (T &node) noexcept + + + void + insertAtTail + classCesiumUtility_1_1DoublyLinkedListAdvanced.html + af1ccecfc6fabd3e168b15e6c904e1a30 + (T &node) noexcept + + + size_t + size + classCesiumUtility_1_1DoublyLinkedListAdvanced.html + a38961557ba5c2d51671dcf326c3c7d54 + () const noexcept + + + T * + head + classCesiumUtility_1_1DoublyLinkedListAdvanced.html + a7d419bc579b4cfe4ee6e6814c9512e65 + () noexcept + + + const T * + head + classCesiumUtility_1_1DoublyLinkedListAdvanced.html + a208423cd1aa75a7c89a56da969e9de30 + () const noexcept + + + T * + tail + classCesiumUtility_1_1DoublyLinkedListAdvanced.html + ad41882d8972d2135242ed037c00e39ee + () noexcept + + + const T * + tail + classCesiumUtility_1_1DoublyLinkedListAdvanced.html + ab66d5cc8e92dbb5830e08f94c81cc239 + () const noexcept + + + T * + next + classCesiumUtility_1_1DoublyLinkedListAdvanced.html + ac993c9db52564a32826ad04997ab9acf + (T &node) noexcept + + + const T * + next + classCesiumUtility_1_1DoublyLinkedListAdvanced.html + a7e1010745229f2e34fcf3e00c8c55512 + (const T &node) const noexcept + + + T * + next + classCesiumUtility_1_1DoublyLinkedListAdvanced.html + a50f0a1328295c30daf4c0ca94f78a581 + (T *pNode) noexcept + + + const T * + next + classCesiumUtility_1_1DoublyLinkedListAdvanced.html + a95d284450ad018f435100857a2f77efa + (const T *pNode) const noexcept + + + T * + previous + classCesiumUtility_1_1DoublyLinkedListAdvanced.html + a8e215ef9d43c4cc65cc755c7c36fd696 + (T &node) noexcept + + + const T * + previous + classCesiumUtility_1_1DoublyLinkedListAdvanced.html + a7008778c066f16836d7d306ac20f2b9c + (const T &node) const noexcept + + + T * + previous + classCesiumUtility_1_1DoublyLinkedListAdvanced.html + afd8c57ab4f974c8b8fd7ae7b8cb88ab3 + (T *pNode) + + + const T * + previous + classCesiumUtility_1_1DoublyLinkedListAdvanced.html + a990846d650aae147531469e787678e23 + (const T *pNode) const noexcept + + + bool + contains + classCesiumUtility_1_1DoublyLinkedListAdvanced.html + ab713f41a7c323d263b63ac221ed664d1 + (const T &node) const + + + + CesiumUtility::DoublyLinkedListPointers + classCesiumUtility_1_1DoublyLinkedListPointers.html + class T + + + DoublyLinkedListPointers + classCesiumUtility_1_1DoublyLinkedListPointers.html + a70802732d98a7563108918d46446ea25 + () noexcept + + + + DoublyLinkedListPointers + classCesiumUtility_1_1DoublyLinkedListPointers.html + a408aade7a8d6dd5f58daf2bd02c79be5 + (DoublyLinkedListPointers &rhs) noexcept + + + DoublyLinkedListPointers & + operator= + classCesiumUtility_1_1DoublyLinkedListPointers.html + a6fbcb878938c9496ba84ad53c2b02c6b + (const DoublyLinkedListPointers &) noexcept + + + + CesiumGeospatial::EarthGravitationalModel1996Grid + classCesiumGeospatial_1_1EarthGravitationalModel1996Grid.html + + double + sampleHeight + classCesiumGeospatial_1_1EarthGravitationalModel1996Grid.html + a772c208afb26828a7d16c51dc6124b26 + (const Cartographic &position) const + + + static std::optional< EarthGravitationalModel1996Grid > + fromBuffer + classCesiumGeospatial_1_1EarthGravitationalModel1996Grid.html + a5fb62a6622cc374f9dacc44bbf7e5372 + (const std::span< const std::byte > &buffer) + + + + CesiumGeospatial::Ellipsoid + classCesiumGeospatial_1_1Ellipsoid.html + + constexpr + Ellipsoid + classCesiumGeospatial_1_1Ellipsoid.html + ab0e92543a456d21ff80929e579fcff95 + (double x, double y, double z) noexcept + + + constexpr + Ellipsoid + classCesiumGeospatial_1_1Ellipsoid.html + adab81975cc6789ecb1aaeab6dab2275f + (const glm::dvec3 &radii) noexcept + + + constexpr const glm::dvec3 & + getRadii + classCesiumGeospatial_1_1Ellipsoid.html + a5e70a93eacaf3bec49c406db0c70bebd + () const noexcept + + + glm::dvec3 + geodeticSurfaceNormal + classCesiumGeospatial_1_1Ellipsoid.html + ae9eef155b2ec844cd34635a6a16b223a + (const glm::dvec3 &position) const noexcept + + + glm::dvec3 + geodeticSurfaceNormal + classCesiumGeospatial_1_1Ellipsoid.html + a92680873fd015318923799c49cae10fa + (const Cartographic &cartographic) const noexcept + + + glm::dvec3 + cartographicToCartesian + classCesiumGeospatial_1_1Ellipsoid.html + a8099c9c5edccd7f011411c9ba7cd9b52 + (const Cartographic &cartographic) const noexcept + + + std::optional< Cartographic > + cartesianToCartographic + classCesiumGeospatial_1_1Ellipsoid.html + aa5a24ff55592e69dac2bb4fd98563757 + (const glm::dvec3 &cartesian) const noexcept + + + std::optional< glm::dvec3 > + scaleToGeodeticSurface + classCesiumGeospatial_1_1Ellipsoid.html + ae01ce1b71115077dad0b77576fd1b49c + (const glm::dvec3 &cartesian) const noexcept + + + std::optional< glm::dvec3 > + scaleToGeocentricSurface + classCesiumGeospatial_1_1Ellipsoid.html + a3d77c1583433ed42edf887727d36bff6 + (const glm::dvec3 &cartesian) const noexcept + + + constexpr double + getMaximumRadius + classCesiumGeospatial_1_1Ellipsoid.html + ab64ca0396d9d654770646a19c920d5da + () const noexcept + + + constexpr double + getMinimumRadius + classCesiumGeospatial_1_1Ellipsoid.html + a78a84fc75f1f2a7be8158eb28da787f6 + () const noexcept + + + constexpr bool + operator== + classCesiumGeospatial_1_1Ellipsoid.html + a9c6bc5829694902e6d114be9ca74c786 + (const Ellipsoid &rhs) const noexcept + + + constexpr bool + operator!= + classCesiumGeospatial_1_1Ellipsoid.html + a9a8476bc51a29404aec292195dcd59b5 + (const Ellipsoid &rhs) const noexcept + + + static const Ellipsoid + WGS84 + classCesiumGeospatial_1_1Ellipsoid.html + a0ca7570082e028089ea6e7e2db6aacec + + + + static const Ellipsoid + UNIT_SPHERE + classCesiumGeospatial_1_1Ellipsoid.html + ac848fa3db672e105e281bdd406899e11 + + + + + CesiumGeospatial::EllipsoidTangentPlane + classCesiumGeospatial_1_1EllipsoidTangentPlane.html + + + EllipsoidTangentPlane + classCesiumGeospatial_1_1EllipsoidTangentPlane.html + a8983a32115d6e62ef00df03e710cf4d5 + (const glm::dvec3 &origin, const Ellipsoid &ellipsoid=CesiumGeospatial::Ellipsoid::WGS84) + + + + EllipsoidTangentPlane + classCesiumGeospatial_1_1EllipsoidTangentPlane.html + a12b70c936b765dbfa79e96c92aa2484b + (const glm::dmat4 &eastNorthUpToFixedFrame, const Ellipsoid &ellipsoid=CesiumGeospatial::Ellipsoid::WGS84) + + + const Ellipsoid & + getEllipsoid + classCesiumGeospatial_1_1EllipsoidTangentPlane.html + a4c1150ac021f9cabec5c2f6636face6c + () const noexcept + + + const glm::dvec3 & + getOrigin + classCesiumGeospatial_1_1EllipsoidTangentPlane.html + a3039a7f5a9220378362f79883ce2e54e + () const noexcept + + + const glm::dvec3 & + getXAxis + classCesiumGeospatial_1_1EllipsoidTangentPlane.html + ae0a6b9c622f9d50bd2dc7aa7535a895a + () const noexcept + + + const glm::dvec3 & + getYAxis + classCesiumGeospatial_1_1EllipsoidTangentPlane.html + a7a381b847102b8ddb3fd2dddcda98305 + () const noexcept + + + const glm::dvec3 & + getZAxis + classCesiumGeospatial_1_1EllipsoidTangentPlane.html + aae402f2045cd890af60fb552d7d37e0d + () const noexcept + + + const CesiumGeometry::Plane & + getPlane + classCesiumGeospatial_1_1EllipsoidTangentPlane.html + a89b1ad0fdaf9725d6292019abd64dcea + () const noexcept + + + glm::dvec2 + projectPointToNearestOnPlane + classCesiumGeospatial_1_1EllipsoidTangentPlane.html + a5da798ab98d445206897454eb7ba196b + (const glm::dvec3 &cartesian) const noexcept + + + + Cesium3DTilesSelection::EllipsoidTilesetLoader + classCesium3DTilesSelection_1_1EllipsoidTilesetLoader.html + Cesium3DTilesSelection::TilesetContentLoader + Cesium3DTilesSelection::ITilesetHeightSampler + + + EllipsoidTilesetLoader + classCesium3DTilesSelection_1_1EllipsoidTilesetLoader.html + a91a68bac85a15c0cb8538f274559f246 + (const CesiumGeospatial::Ellipsoid &ellipsoid=CesiumGeospatial::Ellipsoid::WGS84) + + + CesiumAsync::Future< TileLoadResult > + loadTileContent + classCesium3DTilesSelection_1_1EllipsoidTilesetLoader.html + ace535ba4d8d0e9100cfa2530eacd84c9 + (const TileLoadInput &input) override + + + TileChildrenResult + createTileChildren + classCesium3DTilesSelection_1_1EllipsoidTilesetLoader.html + a881e23c2dcd29bbed428237b6d910f66 + (const Tile &tile, const CesiumGeospatial::Ellipsoid &ellipsoid=CesiumGeospatial::Ellipsoid::WGS84) override + + + ITilesetHeightSampler * + getHeightSampler + classCesium3DTilesSelection_1_1EllipsoidTilesetLoader.html + a92d776dd8b37016017e1c18326c5fe51 + () override + + + CesiumAsync::Future< SampleHeightResult > + sampleHeights + classCesium3DTilesSelection_1_1EllipsoidTilesetLoader.html + ad44ecb28efcd75156f4d99b82e957ad5 + (const CesiumAsync::AsyncSystem &asyncSystem, std::vector< CesiumGeospatial::Cartographic > &&positions) override + + + static std::unique_ptr< Tileset > + createTileset + classCesium3DTilesSelection_1_1EllipsoidTilesetLoader.html + a4db6444ac04fa7e815a3493d0e14e922 + (const TilesetExternals &externals, const TilesetOptions &options=TilesetOptions{}) + + + + Cesium3DTiles::Enum + structCesium3DTiles_1_1Enum.html + CesiumUtility::ExtensibleObject + Cesium3DTiles::Enum::ValueType + + int64_t + getSizeBytes + structCesium3DTiles_1_1Enum.html + aefa2996f006583a58d50e9f8d790f560 + () const + + + std::optional< std::string > + name + structCesium3DTiles_1_1Enum.html + aa24c52d7f12311bcf4ba0f848f7b3d07 + + + + std::optional< std::string > + description + structCesium3DTiles_1_1Enum.html + a92bed88d52d41e0c2e463328c800f7e8 + + + + std::string + valueType + structCesium3DTiles_1_1Enum.html + a2d07cfda402320fa187d13f7074bf0e7 + + + + std::vector< Cesium3DTiles::EnumValue > + values + structCesium3DTiles_1_1Enum.html + a389fd93dd5cdeea233cd0e0a083ba478 + + + + static constexpr const char * + TypeName + structCesium3DTiles_1_1Enum.html + a2c0e506811dfb130c8d3604babca999f + + + + + CesiumGltf::Enum + structCesiumGltf_1_1Enum.html + CesiumUtility::ExtensibleObject + CesiumGltf::Enum::ValueType + + int64_t + getSizeBytes + structCesiumGltf_1_1Enum.html + a9b11f695a1dae5f0bad2bc4c6eab6603 + () const + + + std::optional< std::string > + name + structCesiumGltf_1_1Enum.html + aa7a79c328779bcf32e15457712d50a62 + + + + std::optional< std::string > + description + structCesiumGltf_1_1Enum.html + ab5c4adf6625b2d4cf947ec68e21664ae + + + + std::string + valueType + structCesiumGltf_1_1Enum.html + a3111c6a26fe952606f93f2c976720608 + + + + std::vector< CesiumGltf::EnumValue > + values + structCesiumGltf_1_1Enum.html + a5a5ec14641357b5922c4c77f7775408a + + + + static constexpr const char * + TypeName + structCesiumGltf_1_1Enum.html + a02bc8409fd331e7f8db665ff64894d12 + + + + + Cesium3DTilesReader::EnumReader + classCesium3DTilesReader_1_1EnumReader.html + + + EnumReader + classCesium3DTilesReader_1_1EnumReader.html + a1cd520ef2a3d213d03ccda961f220cf9 + () + + + CesiumJsonReader::JsonReaderOptions & + getOptions + classCesium3DTilesReader_1_1EnumReader.html + aef6eeaa1324fcd3efbe41a787893951c + () + + + const CesiumJsonReader::JsonReaderOptions & + getOptions + classCesium3DTilesReader_1_1EnumReader.html + a25c5645b4594aa236f035a0942a61ce2 + () const + + + CesiumJsonReader::ReadJsonResult< Cesium3DTiles::Enum > + readFromJson + classCesium3DTilesReader_1_1EnumReader.html + a9093fba4440814004c3f4c30567a3926 + (const std::span< const std::byte > &data) const + + + CesiumJsonReader::ReadJsonResult< Cesium3DTiles::Enum > + readFromJson + classCesium3DTilesReader_1_1EnumReader.html + a80527bed16c2689dabce72aab5be3c71 + (const rapidjson::Value &value) const + + + CesiumJsonReader::ReadJsonResult< std::vector< Cesium3DTiles::Enum > > + readArrayFromJson + classCesium3DTilesReader_1_1EnumReader.html + a5450c6f2bba7a5c1d1cea6f4b8b44bbd + (const rapidjson::Value &value) const + + + + CesiumGltfReader::EnumReader + classCesiumGltfReader_1_1EnumReader.html + + + EnumReader + classCesiumGltfReader_1_1EnumReader.html + ae32c30274904e8d248beba4dd7b6f449 + () + + + CesiumJsonReader::JsonReaderOptions & + getOptions + classCesiumGltfReader_1_1EnumReader.html + afd53c107be2cb9626532dc6695083e8a + () + + + const CesiumJsonReader::JsonReaderOptions & + getOptions + classCesiumGltfReader_1_1EnumReader.html + a944cd9d0a33e18030840b66c6c3afa10 + () const + + + CesiumJsonReader::ReadJsonResult< CesiumGltf::Enum > + readFromJson + classCesiumGltfReader_1_1EnumReader.html + aed60f28a6e27abf03cc4de0f2b186b72 + (const std::span< const std::byte > &data) const + + + CesiumJsonReader::ReadJsonResult< CesiumGltf::Enum > + readFromJson + classCesiumGltfReader_1_1EnumReader.html + a096e70bd246e2783fa62b8cd404d2edd + (const rapidjson::Value &value) const + + + CesiumJsonReader::ReadJsonResult< std::vector< CesiumGltf::Enum > > + readArrayFromJson + classCesiumGltfReader_1_1EnumReader.html + ae584e5ce6713d8048e02e1529c8eb73d + (const rapidjson::Value &value) const + + + + Cesium3DTiles::EnumValue + structCesium3DTiles_1_1EnumValue.html + CesiumUtility::ExtensibleObject + + int64_t + getSizeBytes + structCesium3DTiles_1_1EnumValue.html + a4c066ca771fc1d3a829319acfc009dea + () const + + + std::string + name + structCesium3DTiles_1_1EnumValue.html + aae6738adeeb2e5782206b65bc239da61 + + + + std::optional< std::string > + description + structCesium3DTiles_1_1EnumValue.html + aa5abd6e39c19676893205d1f1844b2b1 + + + + int64_t + value + structCesium3DTiles_1_1EnumValue.html + a19d65178baf60707d4b6588cde9a8ff6 + + + + static constexpr const char * + TypeName + structCesium3DTiles_1_1EnumValue.html + a02583ced3fe903926e638277bb2a6e7e + + + + + CesiumGltf::EnumValue + structCesiumGltf_1_1EnumValue.html + CesiumUtility::ExtensibleObject + + int64_t + getSizeBytes + structCesiumGltf_1_1EnumValue.html + a2d5d1512a9fbdd5c33e6c36fc64364ea + () const + + + std::string + name + structCesiumGltf_1_1EnumValue.html + a6bab9c111daeaefee974031ea3a06131 + + + + std::optional< std::string > + description + structCesiumGltf_1_1EnumValue.html + a1b4ad7527aec2fe619f9c2b2adef3cef + + + + int64_t + value + structCesiumGltf_1_1EnumValue.html + aac7ca4a2620d51a1fb7300fd9524a346 + + + + static constexpr const char * + TypeName + structCesiumGltf_1_1EnumValue.html + a1564099ace5240c77857cc8546d087d3 + + + + + Cesium3DTilesReader::EnumValueReader + classCesium3DTilesReader_1_1EnumValueReader.html + + + EnumValueReader + classCesium3DTilesReader_1_1EnumValueReader.html + a3c58296f2d0779da08b55c8316d36ffa + () + + + CesiumJsonReader::JsonReaderOptions & + getOptions + classCesium3DTilesReader_1_1EnumValueReader.html + a346a5feaeac664d6c2248e5f619aa43b + () + + + const CesiumJsonReader::JsonReaderOptions & + getOptions + classCesium3DTilesReader_1_1EnumValueReader.html + a20d04ab41a487bb7763188dd0ef48392 + () const + + + CesiumJsonReader::ReadJsonResult< Cesium3DTiles::EnumValue > + readFromJson + classCesium3DTilesReader_1_1EnumValueReader.html + a8ef70a2a865a49a706e7091f5b4ed8a1 + (const std::span< const std::byte > &data) const + + + CesiumJsonReader::ReadJsonResult< Cesium3DTiles::EnumValue > + readFromJson + classCesium3DTilesReader_1_1EnumValueReader.html + aeb1eb416468f79b601ce68780e70bc43 + (const rapidjson::Value &value) const + + + CesiumJsonReader::ReadJsonResult< std::vector< Cesium3DTiles::EnumValue > > + readArrayFromJson + classCesium3DTilesReader_1_1EnumValueReader.html + a09705a2364ad9151b4cd9ab818fcc3c9 + (const rapidjson::Value &value) const + + + + CesiumGltfReader::EnumValueReader + classCesiumGltfReader_1_1EnumValueReader.html + + + EnumValueReader + classCesiumGltfReader_1_1EnumValueReader.html + aa815acece71c50a1334d5d0b449241b3 + () + + + CesiumJsonReader::JsonReaderOptions & + getOptions + classCesiumGltfReader_1_1EnumValueReader.html + abf6f5251df329d32d13d32aea28f08e7 + () + + + const CesiumJsonReader::JsonReaderOptions & + getOptions + classCesiumGltfReader_1_1EnumValueReader.html + a1fd0c154ce9a8d881883670eb28ba0f4 + () const + + + CesiumJsonReader::ReadJsonResult< CesiumGltf::EnumValue > + readFromJson + classCesiumGltfReader_1_1EnumValueReader.html + a9421fe28ec05335f35dddcc33d631521 + (const std::span< const std::byte > &data) const + + + CesiumJsonReader::ReadJsonResult< CesiumGltf::EnumValue > + readFromJson + classCesiumGltfReader_1_1EnumValueReader.html + a7cb0c0680da8216fa0893e054db1e9e9 + (const rapidjson::Value &value) const + + + CesiumJsonReader::ReadJsonResult< std::vector< CesiumGltf::EnumValue > > + readArrayFromJson + classCesiumGltfReader_1_1EnumValueReader.html + ad17c73e5fd65a1b1d8b49ce753452e79 + (const rapidjson::Value &value) const + + + + CesiumUtility::ErrorList + structCesiumUtility_1_1ErrorList.html + + void + merge + structCesiumUtility_1_1ErrorList.html + afa1ac6dff850c5cfd1e21f58620023e2 + (const ErrorList &errorList) + + + void + merge + structCesiumUtility_1_1ErrorList.html + a8f06cda70416bb803936ef8e441d13b7 + (ErrorList &&errorList) + + + void + emplaceError + structCesiumUtility_1_1ErrorList.html + ab4aee4c2f6669ecf0a064436464add47 + (ErrorStr &&error) + + + void + emplaceWarning + structCesiumUtility_1_1ErrorList.html + a33af559299828ed50018874bf3a3961d + (WarningStr &&warning) + + + bool + hasErrors + structCesiumUtility_1_1ErrorList.html + a1ed5c89761a5e1dcbd51c5a12abdeb21 + () const noexcept + + + void + logError + structCesiumUtility_1_1ErrorList.html + ab1a641081b1d8f7e11b083e3c2bcdb7b + (const std::shared_ptr< spdlog::logger > &pLogger, PromptStr &&prompt) const noexcept + + + void + logWarning + structCesiumUtility_1_1ErrorList.html + a8dd62e6ba39fc13710fde7b8e78f0786 + (const std::shared_ptr< spdlog::logger > &pLogger, PromptStr &&prompt) const noexcept + + + + operator bool + structCesiumUtility_1_1ErrorList.html + a75101afb4609f7872f20d4856514c50e + () const noexcept + + + static ErrorList + error + structCesiumUtility_1_1ErrorList.html + a33938b54aaf0b519c7bf7fad24a72785 + (std::string errorMessage) + + + static ErrorList + warning + structCesiumUtility_1_1ErrorList.html + a80e179fa40ccf1fdbeb527f9db5e037a + (std::string warningMessage) + + + std::vector< std::string > + errors + structCesiumUtility_1_1ErrorList.html + a22d94a6ed7dc30258e47ca45f61a939f + + + + std::vector< std::string > + warnings + structCesiumUtility_1_1ErrorList.html + a8effd40f0094fea6be331dec589ee2cf + + + + + CesiumUtility::ExtensibleObject + structCesiumUtility_1_1ExtensibleObject.html + + bool + hasExtension + structCesiumUtility_1_1ExtensibleObject.html + ae8a23633e243fb244bb7cf70cc77d4bc + () const noexcept + + + const T * + getExtension + structCesiumUtility_1_1ExtensibleObject.html + a3ec522cd12197ed51bdab41464b7e380 + () const noexcept + + + T * + getExtension + structCesiumUtility_1_1ExtensibleObject.html + a5543ab637a26a414243500a5be54f99a + () noexcept + + + const JsonValue * + getGenericExtension + structCesiumUtility_1_1ExtensibleObject.html + a9673af03070412821238d388a4f00e23 + (const std::string &extensionName) const noexcept + + + JsonValue * + getGenericExtension + structCesiumUtility_1_1ExtensibleObject.html + ac64c83ee7449261804cd73a0565d2ad7 + (const std::string &extensionName) noexcept + + + T & + addExtension + structCesiumUtility_1_1ExtensibleObject.html + aad6c9f5497220d515eb94448eeb49918 + (ConstructorArgumentTypes &&... constructorArguments) + + + void + removeExtension + structCesiumUtility_1_1ExtensibleObject.html + ad62313a6cfceac51d613f549a9f2966c + () + + + int64_t + getSizeBytes + structCesiumUtility_1_1ExtensibleObject.html + a652b115ef8c20da0a7f93c824e9478e3 + () const + + + std::unordered_map< std::string, std::any > + extensions + structCesiumUtility_1_1ExtensibleObject.html + af3e9bf3ed3ac567c5458148cf6716c01 + + + + JsonValue::Object + extras + structCesiumUtility_1_1ExtensibleObject.html + a522604c174eb0e1a47c472bc8107001a + + + + JsonValue::Object + unknownProperties + structCesiumUtility_1_1ExtensibleObject.html + a58523c003491479667290ad3cffc26c6 + + + + + CesiumJsonReader::ExtensibleObjectJsonHandler + classCesiumJsonReader_1_1ExtensibleObjectJsonHandler.html + CesiumJsonReader::ObjectJsonHandler + + + ExtensibleObjectJsonHandler + classCesiumJsonReader_1_1ExtensibleObjectJsonHandler.html + aa932eac9aff675b2b8d1950bfba6e09d + (const JsonReaderOptions &context) noexcept + + + void + reset + classCesiumJsonReader_1_1ExtensibleObjectJsonHandler.html + aa6cdf0b2899e3aaf8d65b76b5d91afcf + (IJsonHandler *pParent, CesiumUtility::ExtensibleObject *pObject) + + + IJsonHandler * + readObjectKeyExtensibleObject + classCesiumJsonReader_1_1ExtensibleObjectJsonHandler.html + a21d5b61b98db164fa9baa770a3eeec67 + (const std::string &objectType, const std::string_view &str, CesiumUtility::ExtensibleObject &o) + + + + Cesium3DTiles::Extension3dTilesBoundingVolumeS2 + structCesium3DTiles_1_1Extension3dTilesBoundingVolumeS2.html + CesiumUtility::ExtensibleObject + + int64_t + getSizeBytes + structCesium3DTiles_1_1Extension3dTilesBoundingVolumeS2.html + a201839f81942499d9b39411ae904c85c + () const + + + std::string + token + structCesium3DTiles_1_1Extension3dTilesBoundingVolumeS2.html + a84ebce13a832103ffe71cdbd0dda4f2e + + + + double + minimumHeight + structCesium3DTiles_1_1Extension3dTilesBoundingVolumeS2.html + af8ab664c4f203ce14a708c202ed7808a + + + + double + maximumHeight + structCesium3DTiles_1_1Extension3dTilesBoundingVolumeS2.html + a8f8d92801ba797537b5410ce38c8743f + + + + static constexpr const char * + TypeName + structCesium3DTiles_1_1Extension3dTilesBoundingVolumeS2.html + ac8c668310169c24878ece9865775273d + + + + static constexpr const char * + ExtensionName + structCesium3DTiles_1_1Extension3dTilesBoundingVolumeS2.html + a075d8e3c0d18a7b97eef60656a3db34d + + + + + Cesium3DTilesReader::Extension3dTilesBoundingVolumeS2Reader + classCesium3DTilesReader_1_1Extension3dTilesBoundingVolumeS2Reader.html + + + Extension3dTilesBoundingVolumeS2Reader + classCesium3DTilesReader_1_1Extension3dTilesBoundingVolumeS2Reader.html + a7f851da5eac35b8dfb9c545dcaec10e3 + () + + + CesiumJsonReader::JsonReaderOptions & + getOptions + classCesium3DTilesReader_1_1Extension3dTilesBoundingVolumeS2Reader.html + af2918fbd56c226c4fe6031ac5774f854 + () + + + const CesiumJsonReader::JsonReaderOptions & + getOptions + classCesium3DTilesReader_1_1Extension3dTilesBoundingVolumeS2Reader.html + a57f2f9724c904d0439d6d21742f14322 + () const + + + CesiumJsonReader::ReadJsonResult< Cesium3DTiles::Extension3dTilesBoundingVolumeS2 > + readFromJson + classCesium3DTilesReader_1_1Extension3dTilesBoundingVolumeS2Reader.html + a7a4ac2a0e6b50321a55429c016035c63 + (const std::span< const std::byte > &data) const + + + CesiumJsonReader::ReadJsonResult< Cesium3DTiles::Extension3dTilesBoundingVolumeS2 > + readFromJson + classCesium3DTilesReader_1_1Extension3dTilesBoundingVolumeS2Reader.html + ad6235600f9c18845dfa011021cf36921 + (const rapidjson::Value &value) const + + + CesiumJsonReader::ReadJsonResult< std::vector< Cesium3DTiles::Extension3dTilesBoundingVolumeS2 > > + readArrayFromJson + classCesium3DTilesReader_1_1Extension3dTilesBoundingVolumeS2Reader.html + ae2ee2d1ee49eac4bebd92cc46df9fca6 + (const rapidjson::Value &value) const + + + + CesiumGltf::ExtensionBufferExtMeshoptCompression + structCesiumGltf_1_1ExtensionBufferExtMeshoptCompression.html + CesiumUtility::ExtensibleObject + + int64_t + getSizeBytes + structCesiumGltf_1_1ExtensionBufferExtMeshoptCompression.html + a5550d1844a68637db6354300dbab0ac2 + () const + + + bool + fallback + structCesiumGltf_1_1ExtensionBufferExtMeshoptCompression.html + ac42e394f6a424d077dd763c7c5a1e898 + + + + static constexpr const char * + TypeName + structCesiumGltf_1_1ExtensionBufferExtMeshoptCompression.html + a546d50b9fd51f1ecc3aa82a5f7c5c82a + + + + static constexpr const char * + ExtensionName + structCesiumGltf_1_1ExtensionBufferExtMeshoptCompression.html + a8d6e7c5174db2ea8b1e7cfb25da31d1f + + + + + CesiumGltfReader::ExtensionBufferExtMeshoptCompressionReader + classCesiumGltfReader_1_1ExtensionBufferExtMeshoptCompressionReader.html + + + ExtensionBufferExtMeshoptCompressionReader + classCesiumGltfReader_1_1ExtensionBufferExtMeshoptCompressionReader.html + a1466504392a83b8309e5297b428c4a59 + () + + + CesiumJsonReader::JsonReaderOptions & + getOptions + classCesiumGltfReader_1_1ExtensionBufferExtMeshoptCompressionReader.html + a936bb178cd78795f71fae4fef0c5d677 + () + + + const CesiumJsonReader::JsonReaderOptions & + getOptions + classCesiumGltfReader_1_1ExtensionBufferExtMeshoptCompressionReader.html + a4e1a3e1897fff47d184092f220a4a4a6 + () const + + + CesiumJsonReader::ReadJsonResult< CesiumGltf::ExtensionBufferExtMeshoptCompression > + readFromJson + classCesiumGltfReader_1_1ExtensionBufferExtMeshoptCompressionReader.html + af75e1e22afb4af859b4616e34da7ac50 + (const std::span< const std::byte > &data) const + + + CesiumJsonReader::ReadJsonResult< CesiumGltf::ExtensionBufferExtMeshoptCompression > + readFromJson + classCesiumGltfReader_1_1ExtensionBufferExtMeshoptCompressionReader.html + aa51765eec55376857b36ffcb6353ac36 + (const rapidjson::Value &value) const + + + CesiumJsonReader::ReadJsonResult< std::vector< CesiumGltf::ExtensionBufferExtMeshoptCompression > > + readArrayFromJson + classCesiumGltfReader_1_1ExtensionBufferExtMeshoptCompressionReader.html + a391f1061948f0541cec2df74c5e8637b + (const rapidjson::Value &value) const + + + + CesiumGltf::ExtensionBufferViewExtMeshoptCompression + structCesiumGltf_1_1ExtensionBufferViewExtMeshoptCompression.html + CesiumUtility::ExtensibleObject + CesiumGltf::ExtensionBufferViewExtMeshoptCompression::Filter + CesiumGltf::ExtensionBufferViewExtMeshoptCompression::Mode + + int64_t + getSizeBytes + structCesiumGltf_1_1ExtensionBufferViewExtMeshoptCompression.html + a6c2889ad2e4a44c9a0d3742a79b845b7 + () const + + + int32_t + buffer + structCesiumGltf_1_1ExtensionBufferViewExtMeshoptCompression.html + a6600f170254ce0fb7ec0ab2f16caea87 + + + + int64_t + byteOffset + structCesiumGltf_1_1ExtensionBufferViewExtMeshoptCompression.html + a7a93192149c4873680228bcbb02e3274 + + + + int64_t + byteLength + structCesiumGltf_1_1ExtensionBufferViewExtMeshoptCompression.html + a4b792a761d95b39bfccfd2fd3bd49fa3 + + + + int64_t + byteStride + structCesiumGltf_1_1ExtensionBufferViewExtMeshoptCompression.html + adb598c518f9913148d3b4dc465b6fb9e + + + + int64_t + count + structCesiumGltf_1_1ExtensionBufferViewExtMeshoptCompression.html + ad35f7176dcc22caf3e269132cd87647c + + + + std::string + mode + structCesiumGltf_1_1ExtensionBufferViewExtMeshoptCompression.html + a564ec9600de0bb79b26429d55afb2934 + + + + std::string + filter + structCesiumGltf_1_1ExtensionBufferViewExtMeshoptCompression.html + a231c47ad95274a726f3855cba21352a6 + + + + static constexpr const char * + TypeName + structCesiumGltf_1_1ExtensionBufferViewExtMeshoptCompression.html + a1afd826f92ebf6f4998bb253cfd04d28 + + + + static constexpr const char * + ExtensionName + structCesiumGltf_1_1ExtensionBufferViewExtMeshoptCompression.html + a9bc7d4214d492c57f4efbdd0838473aa + + + + + CesiumGltfReader::ExtensionBufferViewExtMeshoptCompressionReader + classCesiumGltfReader_1_1ExtensionBufferViewExtMeshoptCompressionReader.html + + + ExtensionBufferViewExtMeshoptCompressionReader + classCesiumGltfReader_1_1ExtensionBufferViewExtMeshoptCompressionReader.html + a30b2481bdf9948cc6ca96c6fe973808e + () + + + CesiumJsonReader::JsonReaderOptions & + getOptions + classCesiumGltfReader_1_1ExtensionBufferViewExtMeshoptCompressionReader.html + a5efcf7cccdb739b32f67b60d10426f9e + () + + + const CesiumJsonReader::JsonReaderOptions & + getOptions + classCesiumGltfReader_1_1ExtensionBufferViewExtMeshoptCompressionReader.html + a2eaa6ffe977d8632f411ea3d71260e3e + () const + + + CesiumJsonReader::ReadJsonResult< CesiumGltf::ExtensionBufferViewExtMeshoptCompression > + readFromJson + classCesiumGltfReader_1_1ExtensionBufferViewExtMeshoptCompressionReader.html + a318f8b4bcb418f56b1afa90aa3fbd4d1 + (const std::span< const std::byte > &data) const + + + CesiumJsonReader::ReadJsonResult< CesiumGltf::ExtensionBufferViewExtMeshoptCompression > + readFromJson + classCesiumGltfReader_1_1ExtensionBufferViewExtMeshoptCompressionReader.html + ac75e9ea6ed71ae59639785503fa4fbc9 + (const rapidjson::Value &value) const + + + CesiumJsonReader::ReadJsonResult< std::vector< CesiumGltf::ExtensionBufferViewExtMeshoptCompression > > + readArrayFromJson + classCesiumGltfReader_1_1ExtensionBufferViewExtMeshoptCompressionReader.html + a127033020da05069205af786ccc25ba8 + (const rapidjson::Value &value) const + + + + CesiumGltf::ExtensionCesiumPrimitiveOutline + structCesiumGltf_1_1ExtensionCesiumPrimitiveOutline.html + CesiumUtility::ExtensibleObject + + int64_t + getSizeBytes + structCesiumGltf_1_1ExtensionCesiumPrimitiveOutline.html + a99018c6c81e724002cb7be6753eca4fb + () const + + + int32_t + indices + structCesiumGltf_1_1ExtensionCesiumPrimitiveOutline.html + a39f0356e131072df1c00661b9918851b + + + + static constexpr const char * + TypeName + structCesiumGltf_1_1ExtensionCesiumPrimitiveOutline.html + a4d1b1f21e58e10e42e77397ecf1b0239 + + + + static constexpr const char * + ExtensionName + structCesiumGltf_1_1ExtensionCesiumPrimitiveOutline.html + a15d43d8943fd58a1d087b9f1fe1acdb0 + + + + + CesiumGltfReader::ExtensionCesiumPrimitiveOutlineReader + classCesiumGltfReader_1_1ExtensionCesiumPrimitiveOutlineReader.html + + + ExtensionCesiumPrimitiveOutlineReader + classCesiumGltfReader_1_1ExtensionCesiumPrimitiveOutlineReader.html + abd91f00b54bab8384df5787c2fa8cfc1 + () + + + CesiumJsonReader::JsonReaderOptions & + getOptions + classCesiumGltfReader_1_1ExtensionCesiumPrimitiveOutlineReader.html + ac2f64ac505089e3f5987ea8730c2e988 + () + + + const CesiumJsonReader::JsonReaderOptions & + getOptions + classCesiumGltfReader_1_1ExtensionCesiumPrimitiveOutlineReader.html + a2b0e8376d2887956c174862f3dfc188a + () const + + + CesiumJsonReader::ReadJsonResult< CesiumGltf::ExtensionCesiumPrimitiveOutline > + readFromJson + classCesiumGltfReader_1_1ExtensionCesiumPrimitiveOutlineReader.html + a4fa48c478a69290ef0178442b1531265 + (const std::span< const std::byte > &data) const + + + CesiumJsonReader::ReadJsonResult< CesiumGltf::ExtensionCesiumPrimitiveOutline > + readFromJson + classCesiumGltfReader_1_1ExtensionCesiumPrimitiveOutlineReader.html + a772ece3a65775c46b19dd614969c5c61 + (const rapidjson::Value &value) const + + + CesiumJsonReader::ReadJsonResult< std::vector< CesiumGltf::ExtensionCesiumPrimitiveOutline > > + readArrayFromJson + classCesiumGltfReader_1_1ExtensionCesiumPrimitiveOutlineReader.html + a5c05c4688dd03a16c1ef08bd57f3512b + (const rapidjson::Value &value) const + + + + CesiumGltf::ExtensionCesiumRTC + structCesiumGltf_1_1ExtensionCesiumRTC.html + CesiumUtility::ExtensibleObject + + int64_t + getSizeBytes + structCesiumGltf_1_1ExtensionCesiumRTC.html + aee6f1d0135859c8e4fbff016e5b9b6d0 + () const + + + std::vector< double > + center + structCesiumGltf_1_1ExtensionCesiumRTC.html + ae1c2ec50484a5636f9fa3bc722c6398b + + + + static constexpr const char * + TypeName + structCesiumGltf_1_1ExtensionCesiumRTC.html + a70173a9484f66d9691a3a9b2d29422a4 + + + + static constexpr const char * + ExtensionName + structCesiumGltf_1_1ExtensionCesiumRTC.html + a5fc63a537b5f4b4089bace029a0a3e42 + + + + + CesiumGltfReader::ExtensionCesiumRTCReader + classCesiumGltfReader_1_1ExtensionCesiumRTCReader.html + + + ExtensionCesiumRTCReader + classCesiumGltfReader_1_1ExtensionCesiumRTCReader.html + a2b105ef855f6fbb317c16d25d9dc7588 + () + + + CesiumJsonReader::JsonReaderOptions & + getOptions + classCesiumGltfReader_1_1ExtensionCesiumRTCReader.html + aec1bebe947a3aaa9f629965d48fa14e4 + () + + + const CesiumJsonReader::JsonReaderOptions & + getOptions + classCesiumGltfReader_1_1ExtensionCesiumRTCReader.html + a83b103954c495fb62592c8746990428b + () const + + + CesiumJsonReader::ReadJsonResult< CesiumGltf::ExtensionCesiumRTC > + readFromJson + classCesiumGltfReader_1_1ExtensionCesiumRTCReader.html + ad642c507788f8fe64d9115af43c66b79 + (const std::span< const std::byte > &data) const + + + CesiumJsonReader::ReadJsonResult< CesiumGltf::ExtensionCesiumRTC > + readFromJson + classCesiumGltfReader_1_1ExtensionCesiumRTCReader.html + a2671eeabd0e0c5553b4983b5c3e76152 + (const rapidjson::Value &value) const + + + CesiumJsonReader::ReadJsonResult< std::vector< CesiumGltf::ExtensionCesiumRTC > > + readArrayFromJson + classCesiumGltfReader_1_1ExtensionCesiumRTCReader.html + ae9833a056e4b7afd9bcae09376616f9f + (const rapidjson::Value &value) const + + + + CesiumGltf::ExtensionCesiumTileEdges + structCesiumGltf_1_1ExtensionCesiumTileEdges.html + CesiumUtility::ExtensibleObject + + int64_t + getSizeBytes + structCesiumGltf_1_1ExtensionCesiumTileEdges.html + a78caba197fc940274f95cabac38640e2 + () const + + + int32_t + left + structCesiumGltf_1_1ExtensionCesiumTileEdges.html + a1df66eab38792f8f303369052c93583c + + + + int32_t + bottom + structCesiumGltf_1_1ExtensionCesiumTileEdges.html + ad93299efb8acfbbbc7f0e6d045683234 + + + + int32_t + right + structCesiumGltf_1_1ExtensionCesiumTileEdges.html + a9d329795b747c06fb22eecc9d6127060 + + + + int32_t + top + structCesiumGltf_1_1ExtensionCesiumTileEdges.html + ab770983bec2ecfb3df1a46c6066f7a67 + + + + static constexpr const char * + TypeName + structCesiumGltf_1_1ExtensionCesiumTileEdges.html + a566232d3eaa58aa055490a9b83f94f42 + + + + static constexpr const char * + ExtensionName + structCesiumGltf_1_1ExtensionCesiumTileEdges.html + acec423710dc31af8350ee2b243ff6760 + + + + + CesiumGltfReader::ExtensionCesiumTileEdgesReader + classCesiumGltfReader_1_1ExtensionCesiumTileEdgesReader.html + + + ExtensionCesiumTileEdgesReader + classCesiumGltfReader_1_1ExtensionCesiumTileEdgesReader.html + aed1fe83fb6f6c040028d04b8bf8b0fba + () + + + CesiumJsonReader::JsonReaderOptions & + getOptions + classCesiumGltfReader_1_1ExtensionCesiumTileEdgesReader.html + a6c589c52253a905c5da0f2cc12fb0363 + () + + + const CesiumJsonReader::JsonReaderOptions & + getOptions + classCesiumGltfReader_1_1ExtensionCesiumTileEdgesReader.html + a8d92695eb33aae52a9053014ec1e37b6 + () const + + + CesiumJsonReader::ReadJsonResult< CesiumGltf::ExtensionCesiumTileEdges > + readFromJson + classCesiumGltfReader_1_1ExtensionCesiumTileEdgesReader.html + ab38b798a8d30b97422eeb60e85a64782 + (const std::span< const std::byte > &data) const + + + CesiumJsonReader::ReadJsonResult< CesiumGltf::ExtensionCesiumTileEdges > + readFromJson + classCesiumGltfReader_1_1ExtensionCesiumTileEdgesReader.html + a4b2fe357f849c5e42c613e550904bff1 + (const rapidjson::Value &value) const + + + CesiumJsonReader::ReadJsonResult< std::vector< CesiumGltf::ExtensionCesiumTileEdges > > + readArrayFromJson + classCesiumGltfReader_1_1ExtensionCesiumTileEdgesReader.html + aa4d08377c73a637d891cdf0351397642 + (const rapidjson::Value &value) const + + + + CesiumGltf::ExtensionExtInstanceFeatures + structCesiumGltf_1_1ExtensionExtInstanceFeatures.html + CesiumUtility::ExtensibleObject + + int64_t + getSizeBytes + structCesiumGltf_1_1ExtensionExtInstanceFeatures.html + aeba5ff918a96cb12cdcebd3cc4e22dd4 + () const + + + std::vector< CesiumGltf::ExtensionExtInstanceFeaturesFeatureId > + featureIds + structCesiumGltf_1_1ExtensionExtInstanceFeatures.html + a5260cdfde01c2e128310b96658627ff9 + + + + static constexpr const char * + TypeName + structCesiumGltf_1_1ExtensionExtInstanceFeatures.html + a26f5d87be702494fc414141cd4dbe416 + + + + static constexpr const char * + ExtensionName + structCesiumGltf_1_1ExtensionExtInstanceFeatures.html + a4face678114219fae9b87a913e9d6696 + + + + + CesiumGltf::ExtensionExtInstanceFeaturesFeatureId + structCesiumGltf_1_1ExtensionExtInstanceFeaturesFeatureId.html + CesiumUtility::ExtensibleObject + + int64_t + getSizeBytes + structCesiumGltf_1_1ExtensionExtInstanceFeaturesFeatureId.html + a343f452a431ddd824603deeb9628bf76 + () const + + + int64_t + featureCount + structCesiumGltf_1_1ExtensionExtInstanceFeaturesFeatureId.html + ae811faca7cda07f48b359a74c0f37809 + + + + std::optional< int64_t > + nullFeatureId + structCesiumGltf_1_1ExtensionExtInstanceFeaturesFeatureId.html + ada10d11e9e79b4335ad422d624bbd30c + + + + std::optional< std::string > + label + structCesiumGltf_1_1ExtensionExtInstanceFeaturesFeatureId.html + a4554848d17153533c354078031c7a348 + + + + std::optional< int64_t > + attribute + structCesiumGltf_1_1ExtensionExtInstanceFeaturesFeatureId.html + a98157faadf3b699ec9be4c398a179554 + + + + std::optional< int64_t > + propertyTable + structCesiumGltf_1_1ExtensionExtInstanceFeaturesFeatureId.html + aef7d92c7f52c8f529afdb8f0570c71cf + + + + static constexpr const char * + TypeName + structCesiumGltf_1_1ExtensionExtInstanceFeaturesFeatureId.html + ab252164b72e163c6b69c89fc44d2ccfa + + + + + CesiumGltfReader::ExtensionExtInstanceFeaturesFeatureIdReader + classCesiumGltfReader_1_1ExtensionExtInstanceFeaturesFeatureIdReader.html + + + ExtensionExtInstanceFeaturesFeatureIdReader + classCesiumGltfReader_1_1ExtensionExtInstanceFeaturesFeatureIdReader.html + a6697e103be967d922f2b5057fb4aec8e + () + + + CesiumJsonReader::JsonReaderOptions & + getOptions + classCesiumGltfReader_1_1ExtensionExtInstanceFeaturesFeatureIdReader.html + a5c46ce06ed3badb8dbd074c8a2601f7b + () + + + const CesiumJsonReader::JsonReaderOptions & + getOptions + classCesiumGltfReader_1_1ExtensionExtInstanceFeaturesFeatureIdReader.html + a0cabb50e6a69a5859c602630eaf5c12d + () const + + + CesiumJsonReader::ReadJsonResult< CesiumGltf::ExtensionExtInstanceFeaturesFeatureId > + readFromJson + classCesiumGltfReader_1_1ExtensionExtInstanceFeaturesFeatureIdReader.html + a3c4cf77f4ca987587ce7ca5511dc4324 + (const std::span< const std::byte > &data) const + + + CesiumJsonReader::ReadJsonResult< CesiumGltf::ExtensionExtInstanceFeaturesFeatureId > + readFromJson + classCesiumGltfReader_1_1ExtensionExtInstanceFeaturesFeatureIdReader.html + a129a5eeac0e855b7f47dc060dcb8c2c5 + (const rapidjson::Value &value) const + + + CesiumJsonReader::ReadJsonResult< std::vector< CesiumGltf::ExtensionExtInstanceFeaturesFeatureId > > + readArrayFromJson + classCesiumGltfReader_1_1ExtensionExtInstanceFeaturesFeatureIdReader.html + a053b7ca80df8889651c6bf2c704e4329 + (const rapidjson::Value &value) const + + + + CesiumGltfReader::ExtensionExtInstanceFeaturesReader + classCesiumGltfReader_1_1ExtensionExtInstanceFeaturesReader.html + + + ExtensionExtInstanceFeaturesReader + classCesiumGltfReader_1_1ExtensionExtInstanceFeaturesReader.html + ae44a4eedb40182b3df412f677b4ffae8 + () + + + CesiumJsonReader::JsonReaderOptions & + getOptions + classCesiumGltfReader_1_1ExtensionExtInstanceFeaturesReader.html + aa1c45e12714398e1e1fddd431563c223 + () + + + const CesiumJsonReader::JsonReaderOptions & + getOptions + classCesiumGltfReader_1_1ExtensionExtInstanceFeaturesReader.html + abf59d92b057ab1a10dfffa10406afb35 + () const + + + CesiumJsonReader::ReadJsonResult< CesiumGltf::ExtensionExtInstanceFeatures > + readFromJson + classCesiumGltfReader_1_1ExtensionExtInstanceFeaturesReader.html + a645fd1af19e5ae18f491c08965b33490 + (const std::span< const std::byte > &data) const + + + CesiumJsonReader::ReadJsonResult< CesiumGltf::ExtensionExtInstanceFeatures > + readFromJson + classCesiumGltfReader_1_1ExtensionExtInstanceFeaturesReader.html + aa0ae9ea5ee7c2aea5faac62ec3785762 + (const rapidjson::Value &value) const + + + CesiumJsonReader::ReadJsonResult< std::vector< CesiumGltf::ExtensionExtInstanceFeatures > > + readArrayFromJson + classCesiumGltfReader_1_1ExtensionExtInstanceFeaturesReader.html + a48f061832dcd2030b121d9e351c38a17 + (const rapidjson::Value &value) const + + + + CesiumGltf::ExtensionExtMeshFeatures + structCesiumGltf_1_1ExtensionExtMeshFeatures.html + CesiumUtility::ExtensibleObject + + int64_t + getSizeBytes + structCesiumGltf_1_1ExtensionExtMeshFeatures.html + a3ba105dcbe3aa50dd8f571a9ad8666c0 + () const + + + std::vector< CesiumGltf::FeatureId > + featureIds + structCesiumGltf_1_1ExtensionExtMeshFeatures.html + a6e8ffe77cd6961dd29018aad970690b3 + + + + static constexpr const char * + TypeName + structCesiumGltf_1_1ExtensionExtMeshFeatures.html + acdcd2a4b03179d2c890974b0e5f41193 + + + + static constexpr const char * + ExtensionName + structCesiumGltf_1_1ExtensionExtMeshFeatures.html + a01170b1d435f72bd8be76fef6b3518ce + + + + + CesiumGltfReader::ExtensionExtMeshFeaturesReader + classCesiumGltfReader_1_1ExtensionExtMeshFeaturesReader.html + + + ExtensionExtMeshFeaturesReader + classCesiumGltfReader_1_1ExtensionExtMeshFeaturesReader.html + a17c1bf0f9187138ba412e149b86e6259 + () + + + CesiumJsonReader::JsonReaderOptions & + getOptions + classCesiumGltfReader_1_1ExtensionExtMeshFeaturesReader.html + a4112f63b4987c2910f884c0928f8b18c + () + + + const CesiumJsonReader::JsonReaderOptions & + getOptions + classCesiumGltfReader_1_1ExtensionExtMeshFeaturesReader.html + ab99b6ee30ef22b5b72f598d6ef47f4e6 + () const + + + CesiumJsonReader::ReadJsonResult< CesiumGltf::ExtensionExtMeshFeatures > + readFromJson + classCesiumGltfReader_1_1ExtensionExtMeshFeaturesReader.html + ae1d0b7e31466b7c9d5e9a89a88ce5bdf + (const std::span< const std::byte > &data) const + + + CesiumJsonReader::ReadJsonResult< CesiumGltf::ExtensionExtMeshFeatures > + readFromJson + classCesiumGltfReader_1_1ExtensionExtMeshFeaturesReader.html + ad192e5983cc5c2e3489b31db4b54d59a + (const rapidjson::Value &value) const + + + CesiumJsonReader::ReadJsonResult< std::vector< CesiumGltf::ExtensionExtMeshFeatures > > + readArrayFromJson + classCesiumGltfReader_1_1ExtensionExtMeshFeaturesReader.html + a87a93c250eec685faa98cdc69ec86b99 + (const rapidjson::Value &value) const + + + + CesiumGltf::ExtensionExtMeshGpuInstancing + structCesiumGltf_1_1ExtensionExtMeshGpuInstancing.html + CesiumUtility::ExtensibleObject + + int64_t + getSizeBytes + structCesiumGltf_1_1ExtensionExtMeshGpuInstancing.html + ab4e4149c2e7558c57c1eb74f2d87d010 + () const + + + std::unordered_map< std::string, int32_t > + attributes + structCesiumGltf_1_1ExtensionExtMeshGpuInstancing.html + aceeb0aa1148062631c81dc497abe3a63 + + + + static constexpr const char * + TypeName + structCesiumGltf_1_1ExtensionExtMeshGpuInstancing.html + a33350d57d18081d420ea28b18f92ce16 + + + + static constexpr const char * + ExtensionName + structCesiumGltf_1_1ExtensionExtMeshGpuInstancing.html + a26ce893849675a3108d4dd832b53effb + + + + + CesiumGltfReader::ExtensionExtMeshGpuInstancingReader + classCesiumGltfReader_1_1ExtensionExtMeshGpuInstancingReader.html + + + ExtensionExtMeshGpuInstancingReader + classCesiumGltfReader_1_1ExtensionExtMeshGpuInstancingReader.html + af9134c4889c039cf44f9d47dbf63fcc7 + () + + + CesiumJsonReader::JsonReaderOptions & + getOptions + classCesiumGltfReader_1_1ExtensionExtMeshGpuInstancingReader.html + a15888aa6e8f9b21d1362ca4fa8a50cef + () + + + const CesiumJsonReader::JsonReaderOptions & + getOptions + classCesiumGltfReader_1_1ExtensionExtMeshGpuInstancingReader.html + a3f15d59d692b6f97753a34780ab2143d + () const + + + CesiumJsonReader::ReadJsonResult< CesiumGltf::ExtensionExtMeshGpuInstancing > + readFromJson + classCesiumGltfReader_1_1ExtensionExtMeshGpuInstancingReader.html + a976c2e7c5c5a023196c38ecabc5ea28b + (const std::span< const std::byte > &data) const + + + CesiumJsonReader::ReadJsonResult< CesiumGltf::ExtensionExtMeshGpuInstancing > + readFromJson + classCesiumGltfReader_1_1ExtensionExtMeshGpuInstancingReader.html + aa736075419b7bcc1e9eced1e13789ea4 + (const rapidjson::Value &value) const + + + CesiumJsonReader::ReadJsonResult< std::vector< CesiumGltf::ExtensionExtMeshGpuInstancing > > + readArrayFromJson + classCesiumGltfReader_1_1ExtensionExtMeshGpuInstancingReader.html + a9aa010f8cd8e1b61a73aa3c13e201ab0 + (const rapidjson::Value &value) const + + + + CesiumGltf::ExtensionExtStructuralMetadata + structCesiumGltf_1_1ExtensionExtStructuralMetadata.html + CesiumUtility::ExtensibleObject + + int64_t + getSizeBytes + structCesiumGltf_1_1ExtensionExtStructuralMetadata.html + ade3a8dbe8927e768e1ded00c143195ca + () const + + + std::optional< std::string > + classProperty + structCesiumGltf_1_1ExtensionExtStructuralMetadata.html + a27912500c90d5d1aa3a569a77202d103 + + + + std::unordered_map< std::string, CesiumUtility::JsonValue > + properties + structCesiumGltf_1_1ExtensionExtStructuralMetadata.html + a675270f455a3df8d34a783f4d36f3162 + + + + static constexpr const char * + TypeName + structCesiumGltf_1_1ExtensionExtStructuralMetadata.html + ac66c54850bb9845f97af2bdb9c925bc5 + + + + static constexpr const char * + ExtensionName + structCesiumGltf_1_1ExtensionExtStructuralMetadata.html + a65043fb3a83e5afbc00d03b95c24d596 + + + + + CesiumGltfReader::ExtensionExtStructuralMetadataReader + classCesiumGltfReader_1_1ExtensionExtStructuralMetadataReader.html + + + ExtensionExtStructuralMetadataReader + classCesiumGltfReader_1_1ExtensionExtStructuralMetadataReader.html + a29f3569fdb4c1a09b6b736136c910a12 + () + + + CesiumJsonReader::JsonReaderOptions & + getOptions + classCesiumGltfReader_1_1ExtensionExtStructuralMetadataReader.html + a726fbbc457a2df4c21fa4c002233e9f2 + () + + + const CesiumJsonReader::JsonReaderOptions & + getOptions + classCesiumGltfReader_1_1ExtensionExtStructuralMetadataReader.html + ae88053f4fa299a76da941f692647ea11 + () const + + + CesiumJsonReader::ReadJsonResult< CesiumGltf::ExtensionExtStructuralMetadata > + readFromJson + classCesiumGltfReader_1_1ExtensionExtStructuralMetadataReader.html + ad65bb40e358be1df34982c1bb828b094 + (const std::span< const std::byte > &data) const + + + CesiumJsonReader::ReadJsonResult< CesiumGltf::ExtensionExtStructuralMetadata > + readFromJson + classCesiumGltfReader_1_1ExtensionExtStructuralMetadataReader.html + aa15bf1b4f4788a78c6058e4d2f904e1d + (const rapidjson::Value &value) const + + + CesiumJsonReader::ReadJsonResult< std::vector< CesiumGltf::ExtensionExtStructuralMetadata > > + readArrayFromJson + classCesiumGltfReader_1_1ExtensionExtStructuralMetadataReader.html + a21fabfc728cb175395a40020ee439eed + (const rapidjson::Value &value) const + + + + CesiumGltf::ExtensionKhrDracoMeshCompression + structCesiumGltf_1_1ExtensionKhrDracoMeshCompression.html + CesiumUtility::ExtensibleObject + + int64_t + getSizeBytes + structCesiumGltf_1_1ExtensionKhrDracoMeshCompression.html + a7a025ce23f460ee1b165191f3837e9e2 + () const + + + int32_t + bufferView + structCesiumGltf_1_1ExtensionKhrDracoMeshCompression.html + a72c513ce653b627fff51928325540dec + + + + std::unordered_map< std::string, int32_t > + attributes + structCesiumGltf_1_1ExtensionKhrDracoMeshCompression.html + addeed2caeb51c4537a806fb4ce06dc4b + + + + static constexpr const char * + TypeName + structCesiumGltf_1_1ExtensionKhrDracoMeshCompression.html + a93436da2842dd4a7c80575c2c449c119 + + + + static constexpr const char * + ExtensionName + structCesiumGltf_1_1ExtensionKhrDracoMeshCompression.html + a0db7b3bc9ee90fd7c6eb3d94c0c7d120 + + + + + CesiumGltfReader::ExtensionKhrDracoMeshCompressionReader + classCesiumGltfReader_1_1ExtensionKhrDracoMeshCompressionReader.html + + + ExtensionKhrDracoMeshCompressionReader + classCesiumGltfReader_1_1ExtensionKhrDracoMeshCompressionReader.html + aebd134c459e5a2e420cc3d6008779d1d + () + + + CesiumJsonReader::JsonReaderOptions & + getOptions + classCesiumGltfReader_1_1ExtensionKhrDracoMeshCompressionReader.html + a8f91cf955fc5e37103bbc34c46066e23 + () + + + const CesiumJsonReader::JsonReaderOptions & + getOptions + classCesiumGltfReader_1_1ExtensionKhrDracoMeshCompressionReader.html + a3bcee39901262d302ea1cadc207ea37a + () const + + + CesiumJsonReader::ReadJsonResult< CesiumGltf::ExtensionKhrDracoMeshCompression > + readFromJson + classCesiumGltfReader_1_1ExtensionKhrDracoMeshCompressionReader.html + aacf4875dc0e74d2b16322fb83479e3c9 + (const std::span< const std::byte > &data) const + + + CesiumJsonReader::ReadJsonResult< CesiumGltf::ExtensionKhrDracoMeshCompression > + readFromJson + classCesiumGltfReader_1_1ExtensionKhrDracoMeshCompressionReader.html + a76e2f61d3598275ce3aa0a11fb15b86e + (const rapidjson::Value &value) const + + + CesiumJsonReader::ReadJsonResult< std::vector< CesiumGltf::ExtensionKhrDracoMeshCompression > > + readArrayFromJson + classCesiumGltfReader_1_1ExtensionKhrDracoMeshCompressionReader.html + a943099cc0cb3d10e6126c4feaf60debe + (const rapidjson::Value &value) const + + + + CesiumGltf::ExtensionKhrMaterialsUnlit + structCesiumGltf_1_1ExtensionKhrMaterialsUnlit.html + CesiumUtility::ExtensibleObject + + int64_t + getSizeBytes + structCesiumGltf_1_1ExtensionKhrMaterialsUnlit.html + ad24d5f7bb9d3e277f1a02fec792dfc28 + () const + + + static constexpr const char * + TypeName + structCesiumGltf_1_1ExtensionKhrMaterialsUnlit.html + a8cfb63b9d629ec9c42360b52f91f40ab + + + + static constexpr const char * + ExtensionName + structCesiumGltf_1_1ExtensionKhrMaterialsUnlit.html + a2ff9405078991d78d3fda967bd145a05 + + + + + CesiumGltfReader::ExtensionKhrMaterialsUnlitReader + classCesiumGltfReader_1_1ExtensionKhrMaterialsUnlitReader.html + + + ExtensionKhrMaterialsUnlitReader + classCesiumGltfReader_1_1ExtensionKhrMaterialsUnlitReader.html + a23d290b2a5952ab4b8c5d81de986f56e + () + + + CesiumJsonReader::JsonReaderOptions & + getOptions + classCesiumGltfReader_1_1ExtensionKhrMaterialsUnlitReader.html + a23b235fedafe03e0b5dcc50be40ebba5 + () + + + const CesiumJsonReader::JsonReaderOptions & + getOptions + classCesiumGltfReader_1_1ExtensionKhrMaterialsUnlitReader.html + a91cb47f2fbaf4ca5f7725676ec2a0020 + () const + + + CesiumJsonReader::ReadJsonResult< CesiumGltf::ExtensionKhrMaterialsUnlit > + readFromJson + classCesiumGltfReader_1_1ExtensionKhrMaterialsUnlitReader.html + ae9d13a6d4d62dcd30733e06863a98444 + (const std::span< const std::byte > &data) const + + + CesiumJsonReader::ReadJsonResult< CesiumGltf::ExtensionKhrMaterialsUnlit > + readFromJson + classCesiumGltfReader_1_1ExtensionKhrMaterialsUnlitReader.html + ae3893b6c7b6e695ffacba631efa24995 + (const rapidjson::Value &value) const + + + CesiumJsonReader::ReadJsonResult< std::vector< CesiumGltf::ExtensionKhrMaterialsUnlit > > + readArrayFromJson + classCesiumGltfReader_1_1ExtensionKhrMaterialsUnlitReader.html + ad9c20deaa95147fa386de22444c9a85b + (const rapidjson::Value &value) const + + + + CesiumGltf::ExtensionKhrTextureBasisu + structCesiumGltf_1_1ExtensionKhrTextureBasisu.html + CesiumUtility::ExtensibleObject + + int64_t + getSizeBytes + structCesiumGltf_1_1ExtensionKhrTextureBasisu.html + ae8b24d237a21e3556bbed6b4b5ce1527 + () const + + + int32_t + source + structCesiumGltf_1_1ExtensionKhrTextureBasisu.html + a99d6b72de24768de31487a64fbaf7e7c + + + + static constexpr const char * + TypeName + structCesiumGltf_1_1ExtensionKhrTextureBasisu.html + a522207ee0f9be7be88816d8aadb3b3c2 + + + + static constexpr const char * + ExtensionName + structCesiumGltf_1_1ExtensionKhrTextureBasisu.html + ac329561592be813f09ff39eaeb520eb1 + + + + + CesiumGltfReader::ExtensionKhrTextureBasisuReader + classCesiumGltfReader_1_1ExtensionKhrTextureBasisuReader.html + + + ExtensionKhrTextureBasisuReader + classCesiumGltfReader_1_1ExtensionKhrTextureBasisuReader.html + a469c11b253063c5b01aa8cd4e23c76bb + () + + + CesiumJsonReader::JsonReaderOptions & + getOptions + classCesiumGltfReader_1_1ExtensionKhrTextureBasisuReader.html + a45d376a22e6231dc0ee00ea38ec03d4f + () + + + const CesiumJsonReader::JsonReaderOptions & + getOptions + classCesiumGltfReader_1_1ExtensionKhrTextureBasisuReader.html + af2c3438f202cd39821bd8c91d3673cc5 + () const + + + CesiumJsonReader::ReadJsonResult< CesiumGltf::ExtensionKhrTextureBasisu > + readFromJson + classCesiumGltfReader_1_1ExtensionKhrTextureBasisuReader.html + af1cb7993906ba3daef9f6db81683a47f + (const std::span< const std::byte > &data) const + + + CesiumJsonReader::ReadJsonResult< CesiumGltf::ExtensionKhrTextureBasisu > + readFromJson + classCesiumGltfReader_1_1ExtensionKhrTextureBasisuReader.html + a57c59a51ccaec5e7d92da1f1a573b153 + (const rapidjson::Value &value) const + + + CesiumJsonReader::ReadJsonResult< std::vector< CesiumGltf::ExtensionKhrTextureBasisu > > + readArrayFromJson + classCesiumGltfReader_1_1ExtensionKhrTextureBasisuReader.html + a7a59b4420560f9c5f97213326afea266 + (const rapidjson::Value &value) const + + + + CesiumGltf::ExtensionKhrTextureTransform + structCesiumGltf_1_1ExtensionKhrTextureTransform.html + CesiumUtility::ExtensibleObject + + int64_t + getSizeBytes + structCesiumGltf_1_1ExtensionKhrTextureTransform.html + a2b102c689efd7f472fc29a3ab9dc4bd1 + () const + + + std::vector< double > + offset + structCesiumGltf_1_1ExtensionKhrTextureTransform.html + ae86eb8768b5520d421cc2d09a5d918c5 + + + + double + rotation + structCesiumGltf_1_1ExtensionKhrTextureTransform.html + a86a2e10684a6b143bbb333878e414e24 + + + + std::vector< double > + scale + structCesiumGltf_1_1ExtensionKhrTextureTransform.html + acc936126cc1c8d28998f73021c9db215 + + + + std::optional< int64_t > + texCoord + structCesiumGltf_1_1ExtensionKhrTextureTransform.html + aa083d98a88520d5ae11c786b301f4006 + + + + static constexpr const char * + TypeName + structCesiumGltf_1_1ExtensionKhrTextureTransform.html + a1c51ee569d99f45bb2403417d784a6ac + + + + static constexpr const char * + ExtensionName + structCesiumGltf_1_1ExtensionKhrTextureTransform.html + a879ef5b9453c07a51c85168d08fab8cc + + + + + CesiumGltfReader::ExtensionKhrTextureTransformReader + classCesiumGltfReader_1_1ExtensionKhrTextureTransformReader.html + + + ExtensionKhrTextureTransformReader + classCesiumGltfReader_1_1ExtensionKhrTextureTransformReader.html + a8b063db8f36d140606e9967810a5957e + () + + + CesiumJsonReader::JsonReaderOptions & + getOptions + classCesiumGltfReader_1_1ExtensionKhrTextureTransformReader.html + a9537e41a42997f0e560363fa82dc71d9 + () + + + const CesiumJsonReader::JsonReaderOptions & + getOptions + classCesiumGltfReader_1_1ExtensionKhrTextureTransformReader.html + a6783f518db893590eb24b17ec1635e67 + () const + + + CesiumJsonReader::ReadJsonResult< CesiumGltf::ExtensionKhrTextureTransform > + readFromJson + classCesiumGltfReader_1_1ExtensionKhrTextureTransformReader.html + a87e5044cb5efdcdecda4c86fe26cfb94 + (const std::span< const std::byte > &data) const + + + CesiumJsonReader::ReadJsonResult< CesiumGltf::ExtensionKhrTextureTransform > + readFromJson + classCesiumGltfReader_1_1ExtensionKhrTextureTransformReader.html + a4005e08cff63b219cabf96145a42ad8d + (const rapidjson::Value &value) const + + + CesiumJsonReader::ReadJsonResult< std::vector< CesiumGltf::ExtensionKhrTextureTransform > > + readArrayFromJson + classCesiumGltfReader_1_1ExtensionKhrTextureTransformReader.html + a07a13f84ce800dc43f01439dfb533028 + (const rapidjson::Value &value) const + + + + CesiumGltf::ExtensionMeshPrimitiveExtStructuralMetadata + structCesiumGltf_1_1ExtensionMeshPrimitiveExtStructuralMetadata.html + CesiumUtility::ExtensibleObject + + int64_t + getSizeBytes + structCesiumGltf_1_1ExtensionMeshPrimitiveExtStructuralMetadata.html + ac0090e4effb1036a8dc24fd9f6886be4 + () const + + + std::vector< int32_t > + propertyTextures + structCesiumGltf_1_1ExtensionMeshPrimitiveExtStructuralMetadata.html + a88d7d364e82d70972b69115656fc49fa + + + + std::vector< int32_t > + propertyAttributes + structCesiumGltf_1_1ExtensionMeshPrimitiveExtStructuralMetadata.html + a4f4cedc1117db5ac623cb0b7cca05d45 + + + + static constexpr const char * + TypeName + structCesiumGltf_1_1ExtensionMeshPrimitiveExtStructuralMetadata.html + a976d15505a5d8230981d87552d38ff26 + + + + static constexpr const char * + ExtensionName + structCesiumGltf_1_1ExtensionMeshPrimitiveExtStructuralMetadata.html + a810ed75108c94d5f58ecea42709e4ea6 + + + + + CesiumGltfReader::ExtensionMeshPrimitiveExtStructuralMetadataReader + classCesiumGltfReader_1_1ExtensionMeshPrimitiveExtStructuralMetadataReader.html + + + ExtensionMeshPrimitiveExtStructuralMetadataReader + classCesiumGltfReader_1_1ExtensionMeshPrimitiveExtStructuralMetadataReader.html + ac88d5581252e74c8fd648a4abf5c4404 + () + + + CesiumJsonReader::JsonReaderOptions & + getOptions + classCesiumGltfReader_1_1ExtensionMeshPrimitiveExtStructuralMetadataReader.html + ae5405321156316c5c8a8a1ea7fee689d + () + + + const CesiumJsonReader::JsonReaderOptions & + getOptions + classCesiumGltfReader_1_1ExtensionMeshPrimitiveExtStructuralMetadataReader.html + a24cc328351e630ffbef6424b0ddb7a82 + () const + + + CesiumJsonReader::ReadJsonResult< CesiumGltf::ExtensionMeshPrimitiveExtStructuralMetadata > + readFromJson + classCesiumGltfReader_1_1ExtensionMeshPrimitiveExtStructuralMetadataReader.html + aa04fb0be8089117d88763ba6b77763dc + (const std::span< const std::byte > &data) const + + + CesiumJsonReader::ReadJsonResult< CesiumGltf::ExtensionMeshPrimitiveExtStructuralMetadata > + readFromJson + classCesiumGltfReader_1_1ExtensionMeshPrimitiveExtStructuralMetadataReader.html + ad4373285a776ad4ece45c01a92432b92 + (const rapidjson::Value &value) const + + + CesiumJsonReader::ReadJsonResult< std::vector< CesiumGltf::ExtensionMeshPrimitiveExtStructuralMetadata > > + readArrayFromJson + classCesiumGltfReader_1_1ExtensionMeshPrimitiveExtStructuralMetadataReader.html + a64747f8ff16cacb0fdfa583ec3e18e5f + (const rapidjson::Value &value) const + + + + CesiumGltf::ExtensionMeshPrimitiveKhrMaterialsVariants + structCesiumGltf_1_1ExtensionMeshPrimitiveKhrMaterialsVariants.html + CesiumUtility::ExtensibleObject + + int64_t + getSizeBytes + structCesiumGltf_1_1ExtensionMeshPrimitiveKhrMaterialsVariants.html + aa9eee8890d1acb72c4bfefc4c5defbfa + () const + + + std::vector< CesiumGltf::ExtensionMeshPrimitiveKhrMaterialsVariantsMappingsValue > + mappings + structCesiumGltf_1_1ExtensionMeshPrimitiveKhrMaterialsVariants.html + a0584b5c2d4f7102195034c71066ba5e1 + + + + static constexpr const char * + TypeName + structCesiumGltf_1_1ExtensionMeshPrimitiveKhrMaterialsVariants.html + a8917a0db64ca58fb0f603c6b8674fe35 + + + + static constexpr const char * + ExtensionName + structCesiumGltf_1_1ExtensionMeshPrimitiveKhrMaterialsVariants.html + a1203ade1b2abe878f147ac8ccce29ac6 + + + + + CesiumGltf::ExtensionMeshPrimitiveKhrMaterialsVariantsMappingsValue + structCesiumGltf_1_1ExtensionMeshPrimitiveKhrMaterialsVariantsMappingsValue.html + CesiumUtility::ExtensibleObject + + int64_t + getSizeBytes + structCesiumGltf_1_1ExtensionMeshPrimitiveKhrMaterialsVariantsMappingsValue.html + af03a42aefe12076933219a564f1613eb + () const + + + std::vector< int32_t > + variants + structCesiumGltf_1_1ExtensionMeshPrimitiveKhrMaterialsVariantsMappingsValue.html + ac3a0aa5557a804b0cd031e5ca0b2266e + + + + int32_t + material + structCesiumGltf_1_1ExtensionMeshPrimitiveKhrMaterialsVariantsMappingsValue.html + aab71c0f0126de6846d9bb950078ac0a6 + + + + std::optional< std::string > + name + structCesiumGltf_1_1ExtensionMeshPrimitiveKhrMaterialsVariantsMappingsValue.html + ac96ae151da7ac8e5821749bb281b2880 + + + + static constexpr const char * + TypeName + structCesiumGltf_1_1ExtensionMeshPrimitiveKhrMaterialsVariantsMappingsValue.html + a8602502bb52ceb0a899a2463e47c1c90 + + + + + CesiumGltfReader::ExtensionMeshPrimitiveKhrMaterialsVariantsMappingsValueReader + classCesiumGltfReader_1_1ExtensionMeshPrimitiveKhrMaterialsVariantsMappingsValueReader.html + + + ExtensionMeshPrimitiveKhrMaterialsVariantsMappingsValueReader + classCesiumGltfReader_1_1ExtensionMeshPrimitiveKhrMaterialsVariantsMappingsValueReader.html + a4bf71c522e4938bb951971790c39323a + () + + + CesiumJsonReader::JsonReaderOptions & + getOptions + classCesiumGltfReader_1_1ExtensionMeshPrimitiveKhrMaterialsVariantsMappingsValueReader.html + ab33569a5088356e8ec56699c73a60c3b + () + + + const CesiumJsonReader::JsonReaderOptions & + getOptions + classCesiumGltfReader_1_1ExtensionMeshPrimitiveKhrMaterialsVariantsMappingsValueReader.html + a87db478352fc5a7abf9cfc3c61e56c4b + () const + + + CesiumJsonReader::ReadJsonResult< CesiumGltf::ExtensionMeshPrimitiveKhrMaterialsVariantsMappingsValue > + readFromJson + classCesiumGltfReader_1_1ExtensionMeshPrimitiveKhrMaterialsVariantsMappingsValueReader.html + a326aa38e10fe356aa25cea15e01aed42 + (const std::span< const std::byte > &data) const + + + CesiumJsonReader::ReadJsonResult< CesiumGltf::ExtensionMeshPrimitiveKhrMaterialsVariantsMappingsValue > + readFromJson + classCesiumGltfReader_1_1ExtensionMeshPrimitiveKhrMaterialsVariantsMappingsValueReader.html + ace8d5274c9d65f623c6ab0544ef624c1 + (const rapidjson::Value &value) const + + + CesiumJsonReader::ReadJsonResult< std::vector< CesiumGltf::ExtensionMeshPrimitiveKhrMaterialsVariantsMappingsValue > > + readArrayFromJson + classCesiumGltfReader_1_1ExtensionMeshPrimitiveKhrMaterialsVariantsMappingsValueReader.html + a1f1ad3a1ae9a41330ef89bcdd8e70a47 + (const rapidjson::Value &value) const + + + + CesiumGltfReader::ExtensionMeshPrimitiveKhrMaterialsVariantsReader + classCesiumGltfReader_1_1ExtensionMeshPrimitiveKhrMaterialsVariantsReader.html + + + ExtensionMeshPrimitiveKhrMaterialsVariantsReader + classCesiumGltfReader_1_1ExtensionMeshPrimitiveKhrMaterialsVariantsReader.html + a60b9b13569f9e276ebf6093bec5a2ee1 + () + + + CesiumJsonReader::JsonReaderOptions & + getOptions + classCesiumGltfReader_1_1ExtensionMeshPrimitiveKhrMaterialsVariantsReader.html + ad40ca3a84af6387467ec1cbdd6786460 + () + + + const CesiumJsonReader::JsonReaderOptions & + getOptions + classCesiumGltfReader_1_1ExtensionMeshPrimitiveKhrMaterialsVariantsReader.html + a407f641c104562238b07c5cb36866c0e + () const + + + CesiumJsonReader::ReadJsonResult< CesiumGltf::ExtensionMeshPrimitiveKhrMaterialsVariants > + readFromJson + classCesiumGltfReader_1_1ExtensionMeshPrimitiveKhrMaterialsVariantsReader.html + a16535b05ba2f5cedded92aea76a08569 + (const std::span< const std::byte > &data) const + + + CesiumJsonReader::ReadJsonResult< CesiumGltf::ExtensionMeshPrimitiveKhrMaterialsVariants > + readFromJson + classCesiumGltfReader_1_1ExtensionMeshPrimitiveKhrMaterialsVariantsReader.html + a0290a236fc0a665ecd88b8ce118faf81 + (const rapidjson::Value &value) const + + + CesiumJsonReader::ReadJsonResult< std::vector< CesiumGltf::ExtensionMeshPrimitiveKhrMaterialsVariants > > + readArrayFromJson + classCesiumGltfReader_1_1ExtensionMeshPrimitiveKhrMaterialsVariantsReader.html + a47aaf144b8170df76d925f0bf3b101a1 + (const rapidjson::Value &value) const + + + + CesiumGltf::ExtensionModelExtStructuralMetadata + structCesiumGltf_1_1ExtensionModelExtStructuralMetadata.html + CesiumUtility::ExtensibleObject + + int64_t + getSizeBytes + structCesiumGltf_1_1ExtensionModelExtStructuralMetadata.html + aedf31c2ef20c62ddccbdc7c0024d73e8 + () const + + + CesiumUtility::IntrusivePointer< CesiumGltf::Schema > + schema + structCesiumGltf_1_1ExtensionModelExtStructuralMetadata.html + a054103d6c42bd033bae562efd689978e + + + + std::optional< std::string > + schemaUri + structCesiumGltf_1_1ExtensionModelExtStructuralMetadata.html + a30754ff949c0dbc4ed3ac11e02ccee09 + + + + std::vector< CesiumGltf::PropertyTable > + propertyTables + structCesiumGltf_1_1ExtensionModelExtStructuralMetadata.html + a68691d008b0797e660b294c8528bf855 + + + + std::vector< CesiumGltf::PropertyTexture > + propertyTextures + structCesiumGltf_1_1ExtensionModelExtStructuralMetadata.html + a7ba62fc5b604575a1f29c743c3088193 + + + + std::vector< CesiumGltf::PropertyAttribute > + propertyAttributes + structCesiumGltf_1_1ExtensionModelExtStructuralMetadata.html + a0ccf385eabe02416f7d2c2dc548476cc + + + + static constexpr const char * + TypeName + structCesiumGltf_1_1ExtensionModelExtStructuralMetadata.html + a4e2ba5b816ee676a37c1d12663e2bdff + + + + static constexpr const char * + ExtensionName + structCesiumGltf_1_1ExtensionModelExtStructuralMetadata.html + a791e065a09e0fd05ba62a6c0e1ffd38d + + + + + CesiumGltfReader::ExtensionModelExtStructuralMetadataReader + classCesiumGltfReader_1_1ExtensionModelExtStructuralMetadataReader.html + + + ExtensionModelExtStructuralMetadataReader + classCesiumGltfReader_1_1ExtensionModelExtStructuralMetadataReader.html + a576d141a30d2f475cf5be1e19e1f5540 + () + + + CesiumJsonReader::JsonReaderOptions & + getOptions + classCesiumGltfReader_1_1ExtensionModelExtStructuralMetadataReader.html + a2089a40622b55933a91455c3cb3ccbf4 + () + + + const CesiumJsonReader::JsonReaderOptions & + getOptions + classCesiumGltfReader_1_1ExtensionModelExtStructuralMetadataReader.html + abf66f2abeacf7f39ad6d964d28a588d4 + () const + + + CesiumJsonReader::ReadJsonResult< CesiumGltf::ExtensionModelExtStructuralMetadata > + readFromJson + classCesiumGltfReader_1_1ExtensionModelExtStructuralMetadataReader.html + ab3a943aeef009c31a17642e37e94304d + (const std::span< const std::byte > &data) const + + + CesiumJsonReader::ReadJsonResult< CesiumGltf::ExtensionModelExtStructuralMetadata > + readFromJson + classCesiumGltfReader_1_1ExtensionModelExtStructuralMetadataReader.html + adb1d5e203b206599682cba0207678494 + (const rapidjson::Value &value) const + + + CesiumJsonReader::ReadJsonResult< std::vector< CesiumGltf::ExtensionModelExtStructuralMetadata > > + readArrayFromJson + classCesiumGltfReader_1_1ExtensionModelExtStructuralMetadataReader.html + a8a929b4d9b549927ab19596b52ceda6a + (const rapidjson::Value &value) const + + + + CesiumGltf::ExtensionModelKhrMaterialsVariants + structCesiumGltf_1_1ExtensionModelKhrMaterialsVariants.html + CesiumUtility::ExtensibleObject + + int64_t + getSizeBytes + structCesiumGltf_1_1ExtensionModelKhrMaterialsVariants.html + adda990591b6fe88dc6d15b4084aec51a + () const + + + std::vector< CesiumGltf::ExtensionModelKhrMaterialsVariantsValue > + variants + structCesiumGltf_1_1ExtensionModelKhrMaterialsVariants.html + aac485f34678a018a8b66ed2733624676 + + + + static constexpr const char * + TypeName + structCesiumGltf_1_1ExtensionModelKhrMaterialsVariants.html + a1b12adadb9d6733402ec50d1ca1697f4 + + + + static constexpr const char * + ExtensionName + structCesiumGltf_1_1ExtensionModelKhrMaterialsVariants.html + abda1c19c1ee982609b1aeb4d06c3819d + + + + + CesiumGltfReader::ExtensionModelKhrMaterialsVariantsReader + classCesiumGltfReader_1_1ExtensionModelKhrMaterialsVariantsReader.html + + + ExtensionModelKhrMaterialsVariantsReader + classCesiumGltfReader_1_1ExtensionModelKhrMaterialsVariantsReader.html + a27c1d39b1ec508a4680d85c048702ed5 + () + + + CesiumJsonReader::JsonReaderOptions & + getOptions + classCesiumGltfReader_1_1ExtensionModelKhrMaterialsVariantsReader.html + ae7c41c6e231c57fc0c89e6adf5efcdf5 + () + + + const CesiumJsonReader::JsonReaderOptions & + getOptions + classCesiumGltfReader_1_1ExtensionModelKhrMaterialsVariantsReader.html + a51a8d0f98fd9249ec1ead194aa195cb0 + () const + + + CesiumJsonReader::ReadJsonResult< CesiumGltf::ExtensionModelKhrMaterialsVariants > + readFromJson + classCesiumGltfReader_1_1ExtensionModelKhrMaterialsVariantsReader.html + a5d93365a036b19add119546f0bcbc5d5 + (const std::span< const std::byte > &data) const + + + CesiumJsonReader::ReadJsonResult< CesiumGltf::ExtensionModelKhrMaterialsVariants > + readFromJson + classCesiumGltfReader_1_1ExtensionModelKhrMaterialsVariantsReader.html + a95a835c94a2ab004af425d1c0b53f008 + (const rapidjson::Value &value) const + + + CesiumJsonReader::ReadJsonResult< std::vector< CesiumGltf::ExtensionModelKhrMaterialsVariants > > + readArrayFromJson + classCesiumGltfReader_1_1ExtensionModelKhrMaterialsVariantsReader.html + a732d324634a3b2ce05a9297f32e2c617 + (const rapidjson::Value &value) const + + + + CesiumGltf::ExtensionModelKhrMaterialsVariantsValue + structCesiumGltf_1_1ExtensionModelKhrMaterialsVariantsValue.html + CesiumGltf::NamedObject + + int64_t + getSizeBytes + structCesiumGltf_1_1ExtensionModelKhrMaterialsVariantsValue.html + acbf911589c55ad3df77f97a54305850f + () const + + + std::string + name + structCesiumGltf_1_1ExtensionModelKhrMaterialsVariantsValue.html + a92431bcf0e181b0ad890c93f454fec1f + + + + static constexpr const char * + TypeName + structCesiumGltf_1_1ExtensionModelKhrMaterialsVariantsValue.html + a35e4ad473f42e3828bff61580b1760a0 + + + + + CesiumGltfReader::ExtensionModelKhrMaterialsVariantsValueReader + classCesiumGltfReader_1_1ExtensionModelKhrMaterialsVariantsValueReader.html + + + ExtensionModelKhrMaterialsVariantsValueReader + classCesiumGltfReader_1_1ExtensionModelKhrMaterialsVariantsValueReader.html + a65e939716d046713afbf8b1a909270f2 + () + + + CesiumJsonReader::JsonReaderOptions & + getOptions + classCesiumGltfReader_1_1ExtensionModelKhrMaterialsVariantsValueReader.html + afdf961fd990410f5f5bb008c99ac85b0 + () + + + const CesiumJsonReader::JsonReaderOptions & + getOptions + classCesiumGltfReader_1_1ExtensionModelKhrMaterialsVariantsValueReader.html + a935aa3f41e3b0b69747720db6ddb8a8e + () const + + + CesiumJsonReader::ReadJsonResult< CesiumGltf::ExtensionModelKhrMaterialsVariantsValue > + readFromJson + classCesiumGltfReader_1_1ExtensionModelKhrMaterialsVariantsValueReader.html + adf186650bed013f7a9aa0363cbffcc89 + (const std::span< const std::byte > &data) const + + + CesiumJsonReader::ReadJsonResult< CesiumGltf::ExtensionModelKhrMaterialsVariantsValue > + readFromJson + classCesiumGltfReader_1_1ExtensionModelKhrMaterialsVariantsValueReader.html + af3b5bd7d74bb0be12343f0bf23ae1d2d + (const rapidjson::Value &value) const + + + CesiumJsonReader::ReadJsonResult< std::vector< CesiumGltf::ExtensionModelKhrMaterialsVariantsValue > > + readArrayFromJson + classCesiumGltfReader_1_1ExtensionModelKhrMaterialsVariantsValueReader.html + ae5162a5dac002684973a9b972dab8e4f + (const rapidjson::Value &value) const + + + + CesiumGltf::ExtensionModelMaxarMeshVariants + structCesiumGltf_1_1ExtensionModelMaxarMeshVariants.html + CesiumUtility::ExtensibleObject + + int64_t + getSizeBytes + structCesiumGltf_1_1ExtensionModelMaxarMeshVariants.html + a5edb4bfec9532ba3bdc5ec1e71966da7 + () const + + + int32_t + defaultProperty + structCesiumGltf_1_1ExtensionModelMaxarMeshVariants.html + afe8327e771155dcbf8a2ff4925f2b434 + + + + std::vector< CesiumGltf::ExtensionModelMaxarMeshVariantsValue > + variants + structCesiumGltf_1_1ExtensionModelMaxarMeshVariants.html + a4600c81ef90cba33345a6a2b38d841d2 + + + + static constexpr const char * + TypeName + structCesiumGltf_1_1ExtensionModelMaxarMeshVariants.html + a202bc4fdbe17308342973170217aef67 + + + + static constexpr const char * + ExtensionName + structCesiumGltf_1_1ExtensionModelMaxarMeshVariants.html + a1b315a837e074e6b27a726abca2bc604 + + + + + CesiumGltfReader::ExtensionModelMaxarMeshVariantsReader + classCesiumGltfReader_1_1ExtensionModelMaxarMeshVariantsReader.html + + + ExtensionModelMaxarMeshVariantsReader + classCesiumGltfReader_1_1ExtensionModelMaxarMeshVariantsReader.html + a42003d354dc74814242979122c62d538 + () + + + CesiumJsonReader::JsonReaderOptions & + getOptions + classCesiumGltfReader_1_1ExtensionModelMaxarMeshVariantsReader.html + a339075a673da3bd42ee72fd5c8c16b3b + () + + + const CesiumJsonReader::JsonReaderOptions & + getOptions + classCesiumGltfReader_1_1ExtensionModelMaxarMeshVariantsReader.html + aef86e5788d1d5047b795de1de30d3671 + () const + + + CesiumJsonReader::ReadJsonResult< CesiumGltf::ExtensionModelMaxarMeshVariants > + readFromJson + classCesiumGltfReader_1_1ExtensionModelMaxarMeshVariantsReader.html + a18474bcf72bee4605838e8f5c824c9be + (const std::span< const std::byte > &data) const + + + CesiumJsonReader::ReadJsonResult< CesiumGltf::ExtensionModelMaxarMeshVariants > + readFromJson + classCesiumGltfReader_1_1ExtensionModelMaxarMeshVariantsReader.html + a38de7f78c5d6a0c97757a10ec340317c + (const rapidjson::Value &value) const + + + CesiumJsonReader::ReadJsonResult< std::vector< CesiumGltf::ExtensionModelMaxarMeshVariants > > + readArrayFromJson + classCesiumGltfReader_1_1ExtensionModelMaxarMeshVariantsReader.html + ac61e953161cb0a0ce244afaa678ed943 + (const rapidjson::Value &value) const + + + + CesiumGltf::ExtensionModelMaxarMeshVariantsValue + structCesiumGltf_1_1ExtensionModelMaxarMeshVariantsValue.html + CesiumGltf::NamedObject + + int64_t + getSizeBytes + structCesiumGltf_1_1ExtensionModelMaxarMeshVariantsValue.html + abed7e30be79aec4c7ecf591a2cdbfe7b + () const + + + std::string + name + structCesiumGltf_1_1ExtensionModelMaxarMeshVariantsValue.html + a25514e9565b13ccfc0e64c40ce78f748 + + + + static constexpr const char * + TypeName + structCesiumGltf_1_1ExtensionModelMaxarMeshVariantsValue.html + a64ac638226cfc11c86d14b3e17088df1 + + + + + CesiumGltfReader::ExtensionModelMaxarMeshVariantsValueReader + classCesiumGltfReader_1_1ExtensionModelMaxarMeshVariantsValueReader.html + + + ExtensionModelMaxarMeshVariantsValueReader + classCesiumGltfReader_1_1ExtensionModelMaxarMeshVariantsValueReader.html + ae9121a66d239a118dbca91f0f24b528a + () + + + CesiumJsonReader::JsonReaderOptions & + getOptions + classCesiumGltfReader_1_1ExtensionModelMaxarMeshVariantsValueReader.html + ace55f14d2c5d7a5f77cbeaefca1d6580 + () + + + const CesiumJsonReader::JsonReaderOptions & + getOptions + classCesiumGltfReader_1_1ExtensionModelMaxarMeshVariantsValueReader.html + a19c943aaf36245614ba1b56d62cbdabb + () const + + + CesiumJsonReader::ReadJsonResult< CesiumGltf::ExtensionModelMaxarMeshVariantsValue > + readFromJson + classCesiumGltfReader_1_1ExtensionModelMaxarMeshVariantsValueReader.html + a171f59cfe27fee388476c1756818b972 + (const std::span< const std::byte > &data) const + + + CesiumJsonReader::ReadJsonResult< CesiumGltf::ExtensionModelMaxarMeshVariantsValue > + readFromJson + classCesiumGltfReader_1_1ExtensionModelMaxarMeshVariantsValueReader.html + a0b3e63f24edc63f323e462acfacdc078 + (const rapidjson::Value &value) const + + + CesiumJsonReader::ReadJsonResult< std::vector< CesiumGltf::ExtensionModelMaxarMeshVariantsValue > > + readArrayFromJson + classCesiumGltfReader_1_1ExtensionModelMaxarMeshVariantsValueReader.html + a81b17c3759155337e5770aec182d74cc + (const rapidjson::Value &value) const + + + + CesiumGltf::ExtensionNodeMaxarMeshVariants + structCesiumGltf_1_1ExtensionNodeMaxarMeshVariants.html + CesiumUtility::ExtensibleObject + + int64_t + getSizeBytes + structCesiumGltf_1_1ExtensionNodeMaxarMeshVariants.html + aeba655a094c32ab5fadf2caef4d26f00 + () const + + + std::vector< CesiumGltf::ExtensionNodeMaxarMeshVariantsMappingsValue > + mappings + structCesiumGltf_1_1ExtensionNodeMaxarMeshVariants.html + a3ae4b5769e1e7e35d462b0af5f4bc562 + + + + static constexpr const char * + TypeName + structCesiumGltf_1_1ExtensionNodeMaxarMeshVariants.html + a5c96ef3f312f827f8840743bc2e93534 + + + + static constexpr const char * + ExtensionName + structCesiumGltf_1_1ExtensionNodeMaxarMeshVariants.html + ac6b876882b31addd2063527030bb94ee + + + + + CesiumGltf::ExtensionNodeMaxarMeshVariantsMappingsValue + structCesiumGltf_1_1ExtensionNodeMaxarMeshVariantsMappingsValue.html + CesiumUtility::ExtensibleObject + + int64_t + getSizeBytes + structCesiumGltf_1_1ExtensionNodeMaxarMeshVariantsMappingsValue.html + a685014f1c04c9a28c0599f7433858a46 + () const + + + std::vector< int32_t > + variants + structCesiumGltf_1_1ExtensionNodeMaxarMeshVariantsMappingsValue.html + a12e58fadf04bf658a0acfce7a88a0c90 + + + + int32_t + mesh + structCesiumGltf_1_1ExtensionNodeMaxarMeshVariantsMappingsValue.html + ac7137d5b2000a77758e527d0d25e5627 + + + + std::optional< std::string > + name + structCesiumGltf_1_1ExtensionNodeMaxarMeshVariantsMappingsValue.html + a9db2b7d7866409eeb16ca0251e8da92f + + + + static constexpr const char * + TypeName + structCesiumGltf_1_1ExtensionNodeMaxarMeshVariantsMappingsValue.html + a257400089a9547b4faf96338342a2cd5 + + + + + CesiumGltfReader::ExtensionNodeMaxarMeshVariantsMappingsValueReader + classCesiumGltfReader_1_1ExtensionNodeMaxarMeshVariantsMappingsValueReader.html + + + ExtensionNodeMaxarMeshVariantsMappingsValueReader + classCesiumGltfReader_1_1ExtensionNodeMaxarMeshVariantsMappingsValueReader.html + a8784a97b3cd17935baa8ef08bfceb1c8 + () + + + CesiumJsonReader::JsonReaderOptions & + getOptions + classCesiumGltfReader_1_1ExtensionNodeMaxarMeshVariantsMappingsValueReader.html + a41fbad53dc0208073fe3aeae0712edb7 + () + + + const CesiumJsonReader::JsonReaderOptions & + getOptions + classCesiumGltfReader_1_1ExtensionNodeMaxarMeshVariantsMappingsValueReader.html + a0465efa55875392b96a70245469169f1 + () const + + + CesiumJsonReader::ReadJsonResult< CesiumGltf::ExtensionNodeMaxarMeshVariantsMappingsValue > + readFromJson + classCesiumGltfReader_1_1ExtensionNodeMaxarMeshVariantsMappingsValueReader.html + a5a1c4bd072663dcb3a06294121d35b8f + (const std::span< const std::byte > &data) const + + + CesiumJsonReader::ReadJsonResult< CesiumGltf::ExtensionNodeMaxarMeshVariantsMappingsValue > + readFromJson + classCesiumGltfReader_1_1ExtensionNodeMaxarMeshVariantsMappingsValueReader.html + af9a7593cb22f037f5d30d7291b5b260f + (const rapidjson::Value &value) const + + + CesiumJsonReader::ReadJsonResult< std::vector< CesiumGltf::ExtensionNodeMaxarMeshVariantsMappingsValue > > + readArrayFromJson + classCesiumGltfReader_1_1ExtensionNodeMaxarMeshVariantsMappingsValueReader.html + a6c2b7362624a90b077b672594d5b602c + (const rapidjson::Value &value) const + + + + CesiumGltfReader::ExtensionNodeMaxarMeshVariantsReader + classCesiumGltfReader_1_1ExtensionNodeMaxarMeshVariantsReader.html + + + ExtensionNodeMaxarMeshVariantsReader + classCesiumGltfReader_1_1ExtensionNodeMaxarMeshVariantsReader.html + a01195a312d1bb8bd86c4d877cb7e82d1 + () + + + CesiumJsonReader::JsonReaderOptions & + getOptions + classCesiumGltfReader_1_1ExtensionNodeMaxarMeshVariantsReader.html + a59a449c49d2fdb99d679929a95276af4 + () + + + const CesiumJsonReader::JsonReaderOptions & + getOptions + classCesiumGltfReader_1_1ExtensionNodeMaxarMeshVariantsReader.html + a825b978faf7e2d637be9fd0eec9f1557 + () const + + + CesiumJsonReader::ReadJsonResult< CesiumGltf::ExtensionNodeMaxarMeshVariants > + readFromJson + classCesiumGltfReader_1_1ExtensionNodeMaxarMeshVariantsReader.html + ad2b2b9b69873e3d5b6212884d09793db + (const std::span< const std::byte > &data) const + + + CesiumJsonReader::ReadJsonResult< CesiumGltf::ExtensionNodeMaxarMeshVariants > + readFromJson + classCesiumGltfReader_1_1ExtensionNodeMaxarMeshVariantsReader.html + ae484bfd892f5aca6a5db120e9a9f2f51 + (const rapidjson::Value &value) const + + + CesiumJsonReader::ReadJsonResult< std::vector< CesiumGltf::ExtensionNodeMaxarMeshVariants > > + readArrayFromJson + classCesiumGltfReader_1_1ExtensionNodeMaxarMeshVariantsReader.html + a1aaec52f2a600ae89a066082b805053e + (const rapidjson::Value &value) const + + + + CesiumJsonReader::ExtensionsJsonHandler + classCesiumJsonReader_1_1ExtensionsJsonHandler.html + CesiumJsonReader::ObjectJsonHandler + + + ExtensionsJsonHandler + classCesiumJsonReader_1_1ExtensionsJsonHandler.html + a23209ff23ea6e1689f56f8b0d1af07ab + (const JsonReaderOptions &context) noexcept + + + void + reset + classCesiumJsonReader_1_1ExtensionsJsonHandler.html + ac9e9ecb9a3de9f3c37e1be54d03bdc04 + (IJsonHandler *pParent, CesiumUtility::ExtensibleObject *pObject, const std::string &objectType) + + + virtual IJsonHandler * + readObjectKey + classCesiumJsonReader_1_1ExtensionsJsonHandler.html + a47fed876caf757e4a9fe775d23698db3 + (const std::string_view &str) override + + + + CesiumGltf::ExtensionTextureWebp + structCesiumGltf_1_1ExtensionTextureWebp.html + CesiumUtility::ExtensibleObject + + int64_t + getSizeBytes + structCesiumGltf_1_1ExtensionTextureWebp.html + afaea641320658ead9c828ba5abae3b86 + () const + + + int32_t + source + structCesiumGltf_1_1ExtensionTextureWebp.html + abc82036cc668a57ee080eaf77fe769f2 + + + + static constexpr const char * + TypeName + structCesiumGltf_1_1ExtensionTextureWebp.html + a01de16bbaaf4c5f7f811fae7b15a4ee5 + + + + static constexpr const char * + ExtensionName + structCesiumGltf_1_1ExtensionTextureWebp.html + a7ef0041011930107f2b17f5cb83e8591 + + + + + CesiumGltfReader::ExtensionTextureWebpReader + classCesiumGltfReader_1_1ExtensionTextureWebpReader.html + + + ExtensionTextureWebpReader + classCesiumGltfReader_1_1ExtensionTextureWebpReader.html + a1a875ebd758b593ac0b9ffbe8ad66106 + () + + + CesiumJsonReader::JsonReaderOptions & + getOptions + classCesiumGltfReader_1_1ExtensionTextureWebpReader.html + a8fdcd017e556e74d14f1921d7be74b33 + () + + + const CesiumJsonReader::JsonReaderOptions & + getOptions + classCesiumGltfReader_1_1ExtensionTextureWebpReader.html + a98d46810cc61d06fefbf554caca7a119 + () const + + + CesiumJsonReader::ReadJsonResult< CesiumGltf::ExtensionTextureWebp > + readFromJson + classCesiumGltfReader_1_1ExtensionTextureWebpReader.html + ad2c35c344a54b5d825cf71f0d2189bb7 + (const std::span< const std::byte > &data) const + + + CesiumJsonReader::ReadJsonResult< CesiumGltf::ExtensionTextureWebp > + readFromJson + classCesiumGltfReader_1_1ExtensionTextureWebpReader.html + a3cc7f4c200ab2598ad07b71fd220cdaf + (const rapidjson::Value &value) const + + + CesiumJsonReader::ReadJsonResult< std::vector< CesiumGltf::ExtensionTextureWebp > > + readArrayFromJson + classCesiumGltfReader_1_1ExtensionTextureWebpReader.html + ab48985234dfaeaca8fc34e861ffce3fc + (const rapidjson::Value &value) const + + + + CesiumJsonWriter::ExtensionWriterContext + classCesiumJsonWriter_1_1ExtensionWriterContext.html + + void + registerExtension + classCesiumJsonWriter_1_1ExtensionWriterContext.html + a34a4a959c6e701d35ca2d511d29fd8d1 + (const std::string &extensionName) + + + void + registerExtension + classCesiumJsonWriter_1_1ExtensionWriterContext.html + a383dcd1091c1534c57d8034ee9474710 + () + + + ExtensionState + getExtensionState + classCesiumJsonWriter_1_1ExtensionWriterContext.html + a878b7a25b86eaf51c72babbbc4e431de + (const std::string &extensionName) const + + + void + setExtensionState + classCesiumJsonWriter_1_1ExtensionWriterContext.html + a1971f411064fe523c4c272e170eb0194 + (const std::string &extensionName, ExtensionState newState) + + + ExtensionHandler< std::any > + createExtensionHandler + classCesiumJsonWriter_1_1ExtensionWriterContext.html + aab0afb3dc54efce2cb2b9db2429f934a + (const std::string_view &extensionName, const std::any &obj, const std::string &extendedObjectType) const + + + + CesiumGltf::FeatureId + structCesiumGltf_1_1FeatureId.html + CesiumUtility::ExtensibleObject + + int64_t + getSizeBytes + structCesiumGltf_1_1FeatureId.html + a73f197508ac26df4f925fe059afe1bcc + () const + + + int64_t + featureCount + structCesiumGltf_1_1FeatureId.html + aa24a1c888c0dd2269132f5e54b726135 + + + + std::optional< int64_t > + nullFeatureId + structCesiumGltf_1_1FeatureId.html + aeba4850f86867037fccdec03328c7cf3 + + + + std::optional< std::string > + label + structCesiumGltf_1_1FeatureId.html + a0a41bd7a38a986f6dc4d5fe0e2d9bb7f + + + + std::optional< int64_t > + attribute + structCesiumGltf_1_1FeatureId.html + a521fb9b2a1fc2fec6cf6003460f3eccd + + + + std::optional< CesiumGltf::FeatureIdTexture > + texture + structCesiumGltf_1_1FeatureId.html + a81b6db70387680b09294cd9809c7d5f6 + + + + int32_t + propertyTable + structCesiumGltf_1_1FeatureId.html + a07294fbbfd36db477f58061347301ddc + + + + static constexpr const char * + TypeName + structCesiumGltf_1_1FeatureId.html + a2093f9acacfd9285bae0d065730036da + + + + + CesiumGltf::FeatureIdFromAccessor + structCesiumGltf_1_1FeatureIdFromAccessor.html + + int64_t + operator() + structCesiumGltf_1_1FeatureIdFromAccessor.html + a02274f17ae26625d043976ee203bd964 + (const AccessorView< float > &value) + + + int64_t + operator() + structCesiumGltf_1_1FeatureIdFromAccessor.html + a3ad8fe6a8220ecf61651859c12a487a3 + (const AccessorView< T > &value) + + + int64_t + index + structCesiumGltf_1_1FeatureIdFromAccessor.html + aae9a70f2a53fec8d15693f9d750781a4 + + + + + CesiumGltfReader::FeatureIdReader + classCesiumGltfReader_1_1FeatureIdReader.html + + + FeatureIdReader + classCesiumGltfReader_1_1FeatureIdReader.html + a0f611ea6243009d241318612010aabef + () + + + CesiumJsonReader::JsonReaderOptions & + getOptions + classCesiumGltfReader_1_1FeatureIdReader.html + a9a09ba472d79497d789f1fa0b9dad479 + () + + + const CesiumJsonReader::JsonReaderOptions & + getOptions + classCesiumGltfReader_1_1FeatureIdReader.html + a9db8b76932a23206f2c24e680040edfa + () const + + + CesiumJsonReader::ReadJsonResult< CesiumGltf::FeatureId > + readFromJson + classCesiumGltfReader_1_1FeatureIdReader.html + a8f16447893b928af3025601c9d3d6536 + (const std::span< const std::byte > &data) const + + + CesiumJsonReader::ReadJsonResult< CesiumGltf::FeatureId > + readFromJson + classCesiumGltfReader_1_1FeatureIdReader.html + ae75d22b64110e7df87a8d8f02a3fb7e0 + (const rapidjson::Value &value) const + + + CesiumJsonReader::ReadJsonResult< std::vector< CesiumGltf::FeatureId > > + readArrayFromJson + classCesiumGltfReader_1_1FeatureIdReader.html + a79c2365500d5611aeca17f1e1cf56279 + (const rapidjson::Value &value) const + + + + CesiumGltf::FeatureIdTexture + structCesiumGltf_1_1FeatureIdTexture.html + CesiumGltf::TextureInfo + + int64_t + getSizeBytes + structCesiumGltf_1_1FeatureIdTexture.html + a09a2a283e824f4d34549f024e749a4a0 + () const + + + std::vector< int64_t > + channels + structCesiumGltf_1_1FeatureIdTexture.html + a77fa86042c3ac71b86a3ead5e88ef429 + + + + static constexpr const char * + TypeName + structCesiumGltf_1_1FeatureIdTexture.html + af74123451f017359302bbfb626e6e29c + + + + + CesiumGltfReader::FeatureIdTextureReader + classCesiumGltfReader_1_1FeatureIdTextureReader.html + + + FeatureIdTextureReader + classCesiumGltfReader_1_1FeatureIdTextureReader.html + ab51000104f6bdee646779a32e1d9da01 + () + + + CesiumJsonReader::JsonReaderOptions & + getOptions + classCesiumGltfReader_1_1FeatureIdTextureReader.html + a5679bb2daab3773594409e5a273e7172 + () + + + const CesiumJsonReader::JsonReaderOptions & + getOptions + classCesiumGltfReader_1_1FeatureIdTextureReader.html + a6d772a675b38333e63fc9dc90f84f873 + () const + + + CesiumJsonReader::ReadJsonResult< CesiumGltf::FeatureIdTexture > + readFromJson + classCesiumGltfReader_1_1FeatureIdTextureReader.html + a0f008fdab9d571259f7f145e184a1acb + (const std::span< const std::byte > &data) const + + + CesiumJsonReader::ReadJsonResult< CesiumGltf::FeatureIdTexture > + readFromJson + classCesiumGltfReader_1_1FeatureIdTextureReader.html + aba7f0542419d10545dbd4f0fac4e487c + (const rapidjson::Value &value) const + + + CesiumJsonReader::ReadJsonResult< std::vector< CesiumGltf::FeatureIdTexture > > + readArrayFromJson + classCesiumGltfReader_1_1FeatureIdTextureReader.html + a6f14f00cca2bc67678476f4fd644aa07 + (const rapidjson::Value &value) const + + + + CesiumGltf::FeatureIdTextureView + classCesiumGltf_1_1FeatureIdTextureView.html + CesiumGltf::TextureView + + + FeatureIdTextureView + classCesiumGltf_1_1FeatureIdTextureView.html + ac851919fa9c067b4031f8be73349aad5 + () noexcept + + + + FeatureIdTextureView + classCesiumGltf_1_1FeatureIdTextureView.html + aca63f3a6fd574ef9f1a19e5d71a50b16 + (const Model &model, const FeatureIdTexture &featureIdTexture, const TextureViewOptions &options=TextureViewOptions()) noexcept + + + int64_t + getFeatureID + classCesiumGltf_1_1FeatureIdTextureView.html + aede2e22fd905c1388ee11c28e469053b + (double u, double v) const noexcept + + + FeatureIdTextureViewStatus + status + classCesiumGltf_1_1FeatureIdTextureView.html + a0c659d7c6903d4a7cecf69c42cd830b9 + () const noexcept + + + std::vector< int64_t > + getChannels + classCesiumGltf_1_1FeatureIdTextureView.html + ad5e06486af561ff17a2156cc59f6b128 + () const noexcept + + + + CesiumGltf::ExtensionBufferViewExtMeshoptCompression::Filter + structCesiumGltf_1_1ExtensionBufferViewExtMeshoptCompression_1_1Filter.html + + static const std::string + NONE + structCesiumGltf_1_1ExtensionBufferViewExtMeshoptCompression_1_1Filter.html + adc7268ffc5d81818d54002b06866420d + + + + static const std::string + OCTAHEDRAL + structCesiumGltf_1_1ExtensionBufferViewExtMeshoptCompression_1_1Filter.html + adbaaf54cf263f4bccf1163c04b28653b + + + + static const std::string + QUATERNION + structCesiumGltf_1_1ExtensionBufferViewExtMeshoptCompression_1_1Filter.html + afbe9fabf40f253c5ee37a3b80b80125b + + + + static const std::string + EXPONENTIAL + structCesiumGltf_1_1ExtensionBufferViewExtMeshoptCompression_1_1Filter.html + a5da287df4b32d64313d730403af635fc + + + + + Cesium3DTilesSelection::FogDensityAtHeight + structCesium3DTilesSelection_1_1FogDensityAtHeight.html + + double + cameraHeight + structCesium3DTilesSelection_1_1FogDensityAtHeight.html + a2c636b68866392b2a5e6ca63387dfa32 + + + + double + fogDensity + structCesium3DTilesSelection_1_1FogDensityAtHeight.html + a54e25e69a7d488da396d388ec738881f + + + + + Cesium3DTiles::FoundMetadataProperty + structCesium3DTiles_1_1FoundMetadataProperty.html + + const std::string & + classIdentifier + structCesium3DTiles_1_1FoundMetadataProperty.html + a52705b5c8b011c9c916654cbbae9dd8c + + + + const Class & + classDefinition + structCesium3DTiles_1_1FoundMetadataProperty.html + a5ec2fe4981376a79f7eb227b0ea3a146 + + + + const std::string & + propertyIdentifier + structCesium3DTiles_1_1FoundMetadataProperty.html + a920f69611038f5031d0207a47209b414 + + + + const ClassProperty & + propertyDefinition + structCesium3DTiles_1_1FoundMetadataProperty.html + a98e6fead69d791fe01c0170f4b7f9dfc + + + + const CesiumUtility::JsonValue & + propertyValue + structCesium3DTiles_1_1FoundMetadataProperty.html + acb53a36e8898839b60b818b157ae9b81 + + + + + CesiumAsync::Future + classCesiumAsync_1_1Future.html + typename T + + + Future + classCesiumAsync_1_1Future.html + a8169f5817ea0eabd26380595a35304ef + (Future< T > &&rhs) noexcept + + + Future< T > & + operator= + classCesiumAsync_1_1Future.html + a29a108b993803e7d96a0596e7c539cf0 + (Future< T > &&rhs) noexcept + + + CesiumImpl::ContinuationFutureType_t< Func, T > + thenInWorkerThread + classCesiumAsync_1_1Future.html + a90e10820f70465bd782b58c3eeef3241 + (Func &&f) && + + + CesiumImpl::ContinuationFutureType_t< Func, T > + thenInMainThread + classCesiumAsync_1_1Future.html + a15b2e036dc31166b4ae70b82ffb346fe + (Func &&f) && + + + CesiumImpl::ContinuationFutureType_t< Func, T > + thenImmediately + classCesiumAsync_1_1Future.html + a58262df2f3beca36c02a23a926b7bb09 + (Func &&f) && + + + CesiumImpl::ContinuationFutureType_t< Func, T > + thenInThreadPool + classCesiumAsync_1_1Future.html + a7e949f4dff7341995f6eaff644a97781 + (const ThreadPool &threadPool, Func &&f) && + + + Future< T > + catchInMainThread + classCesiumAsync_1_1Future.html + ae15f5a98bb5584a2ab5787dc08d54e4e + (Func &&f) && + + + Future< T > + catchImmediately + classCesiumAsync_1_1Future.html + a9e50a98126c4fd09bf23c029dad52d8a + (Func &&f) && + + + Future< std::tuple< std::remove_cvref_t< TPassThrough >..., T > > + thenPassThrough + classCesiumAsync_1_1Future.html + ae7f6e47f5c31775cd2ad7385139ae25e + (TPassThrough &&... values) && + + + T + wait + classCesiumAsync_1_1Future.html + aabe6c7dce5076b8a48ea8140490d6a3d + () + + + T + waitInMainThread + classCesiumAsync_1_1Future.html + ad0bacea8d37206b0ad3c5edeac63929e + () + + + bool + isReady + classCesiumAsync_1_1Future.html + ae3734374a25d1ad0cd2b2995469af345 + () const + + + SharedFuture< T > + share + classCesiumAsync_1_1Future.html + a1a6fb6c620c1a62c29beb0e4b9c6d804 + () && + + + + CesiumGeospatial::GeographicProjection + classCesiumGeospatial_1_1GeographicProjection.html + + + GeographicProjection + classCesiumGeospatial_1_1GeographicProjection.html + af54b92b8baa18ea05cf3d0327be8d020 + (const Ellipsoid &ellipsoid=CesiumGeospatial::Ellipsoid::WGS84) noexcept + + + const Ellipsoid & + getEllipsoid + classCesiumGeospatial_1_1GeographicProjection.html + a64e27ef2508eae9df0869c7768cc5317 + () const noexcept + + + glm::dvec3 + project + classCesiumGeospatial_1_1GeographicProjection.html + af674f2db66a570d2afcfa1a215b3646f + (const Cartographic &cartographic) const noexcept + + + CesiumGeometry::Rectangle + project + classCesiumGeospatial_1_1GeographicProjection.html + adf906e7f420082481c10cc6d3322baa2 + (const CesiumGeospatial::GlobeRectangle &rectangle) const noexcept + + + Cartographic + unproject + classCesiumGeospatial_1_1GeographicProjection.html + aefc5501a17154eb998592d85c24cf9d5 + (const glm::dvec2 &projectedCoordinates) const noexcept + + + Cartographic + unproject + classCesiumGeospatial_1_1GeographicProjection.html + a53ca712fbb904ff6d9d2bcd6803a7f6e + (const glm::dvec3 &projectedCoordinates) const noexcept + + + CesiumGeospatial::GlobeRectangle + unproject + classCesiumGeospatial_1_1GeographicProjection.html + a63c612c046bd375fbb1a86c95d3d0b17 + (const CesiumGeometry::Rectangle &rectangle) const noexcept + + + bool + operator== + classCesiumGeospatial_1_1GeographicProjection.html + a35f2ed2373d4501c77f1f27c57c933bb + (const GeographicProjection &rhs) const noexcept + + + bool + operator!= + classCesiumGeospatial_1_1GeographicProjection.html + a1d1068edcf014d3b328948185cc3d42d + (const GeographicProjection &rhs) const noexcept + + + static constexpr CesiumGeometry::Rectangle + computeMaximumProjectedRectangle + classCesiumGeospatial_1_1GeographicProjection.html + ad82d1303d68122ddb0d27818186fe0e2 + (const Ellipsoid &ellipsoid=CesiumGeospatial::Ellipsoid::WGS84) noexcept + + + static constexpr GlobeRectangle + MAXIMUM_GLOBE_RECTANGLE + classCesiumGeospatial_1_1GeographicProjection.html + a4cdfd8103a77803096df9db78aa903a2 + + + + + CesiumGeospatial::GlobeAnchor + classCesiumGeospatial_1_1GlobeAnchor.html + + + GlobeAnchor + classCesiumGeospatial_1_1GlobeAnchor.html + a2620d488ebf15ec9ae772bfd004aecf6 + (const glm::dmat4 &anchorToFixed) + + + const glm::dmat4 & + getAnchorToFixedTransform + classCesiumGeospatial_1_1GlobeAnchor.html + a6d7db8e4d440cecab720546e44807f53 + () const + + + void + setAnchorToFixedTransform + classCesiumGeospatial_1_1GlobeAnchor.html + a7152c67767a736f039499a42fb3895d9 + (const glm::dmat4 &newAnchorToFixed, bool adjustOrientation, const Ellipsoid &ellipsoid=CesiumGeospatial::Ellipsoid::WGS84) + + + glm::dmat4 + getAnchorToLocalTransform + classCesiumGeospatial_1_1GlobeAnchor.html + add0173e8c04fa7c877a7a084bf1dcf70 + (const LocalHorizontalCoordinateSystem &localCoordinateSystem) const + + + void + setAnchorToLocalTransform + classCesiumGeospatial_1_1GlobeAnchor.html + a61c92ca04d22403266363ac449724003 + (const LocalHorizontalCoordinateSystem &localCoordinateSystem, const glm::dmat4 &newAnchorToLocal, bool adjustOrientation, const Ellipsoid &ellipsoid=CesiumGeospatial::Ellipsoid::WGS84) + + + static GlobeAnchor + fromAnchorToLocalTransform + classCesiumGeospatial_1_1GlobeAnchor.html + a21d53256f4d09d75cf97938c9d605ec2 + (const LocalHorizontalCoordinateSystem &localCoordinateSystem, const glm::dmat4 &anchorToLocal) + + + static GlobeAnchor + fromAnchorToFixedTransform + classCesiumGeospatial_1_1GlobeAnchor.html + a970b3df64f16d8c4df6d06970ca16209 + (const glm::dmat4 &anchorToFixed) + + + + CesiumGeospatial::GlobeRectangle + classCesiumGeospatial_1_1GlobeRectangle.html + + constexpr + GlobeRectangle + classCesiumGeospatial_1_1GlobeRectangle.html + a432ad11ea5c0ee8b82b35d748c4a9bee + (double west, double south, double east, double north) noexcept + + + constexpr double + getWest + classCesiumGeospatial_1_1GlobeRectangle.html + a18082fd36bff3a2d01b2a305591a678a + () const noexcept + + + void + setWest + classCesiumGeospatial_1_1GlobeRectangle.html + a7cbb4ef83a646e0d8ee6cc7bab36cb96 + (double value) noexcept + + + constexpr double + getSouth + classCesiumGeospatial_1_1GlobeRectangle.html + af155dc444f35720e23ed72b9312b8f96 + () const noexcept + + + void + setSouth + classCesiumGeospatial_1_1GlobeRectangle.html + abccf3549ca0a6aca2c6314e3bd2a3b16 + (double value) noexcept + + + constexpr double + getEast + classCesiumGeospatial_1_1GlobeRectangle.html + a7ca110a13f775658cd56a7d7982455da + () const noexcept + + + void + setEast + classCesiumGeospatial_1_1GlobeRectangle.html + ac0012eeb8b78e5939a759d0286fb2310 + (double value) noexcept + + + constexpr double + getNorth + classCesiumGeospatial_1_1GlobeRectangle.html + a26cc961a088e0b32077fd9dce825055a + () const noexcept + + + void + setNorth + classCesiumGeospatial_1_1GlobeRectangle.html + a3e95ae8500f2e2ed91e894cc1af44aa9 + (double value) noexcept + + + constexpr Cartographic + getSouthwest + classCesiumGeospatial_1_1GlobeRectangle.html + a48e9f4653b78cbb3411e0b31c1c21620 + () const noexcept + + + constexpr Cartographic + getSoutheast + classCesiumGeospatial_1_1GlobeRectangle.html + aa41f2e923225ccd69e199de32908b866 + () const noexcept + + + constexpr Cartographic + getNorthwest + classCesiumGeospatial_1_1GlobeRectangle.html + af133e5b8c5394b388d2654db4879ccb9 + () const noexcept + + + constexpr Cartographic + getNortheast + classCesiumGeospatial_1_1GlobeRectangle.html + a7489d6f8f35c41f3269a4a8f7c8bae3e + () const noexcept + + + constexpr CesiumGeometry::Rectangle + toSimpleRectangle + classCesiumGeospatial_1_1GlobeRectangle.html + aa5bd6760c1c8d2686c56f0f590d5c034 + () const noexcept + + + constexpr double + computeWidth + classCesiumGeospatial_1_1GlobeRectangle.html + a2581208c886ba6974f0838d1134fe956 + () const noexcept + + + constexpr double + computeHeight + classCesiumGeospatial_1_1GlobeRectangle.html + ac0ddbedcbb041af9662fd91ff2c768cc + () const noexcept + + + Cartographic + computeCenter + classCesiumGeospatial_1_1GlobeRectangle.html + a28b1332731cbb8b02bf12f64aec314a9 + () const noexcept + + + bool + contains + classCesiumGeospatial_1_1GlobeRectangle.html + a88675f72c2c7388f4048352e9374a917 + (const Cartographic &cartographic) const noexcept + + + bool + isEmpty + classCesiumGeospatial_1_1GlobeRectangle.html + a4ca1934e02591c5f6c837858bcbaaedf + () const noexcept + + + std::optional< GlobeRectangle > + computeIntersection + classCesiumGeospatial_1_1GlobeRectangle.html + aa0b674c43af8e44aaf2b9e0289214ad2 + (const GlobeRectangle &other) const noexcept + + + GlobeRectangle + computeUnion + classCesiumGeospatial_1_1GlobeRectangle.html + ac41506ae3886911e79ea17885f24be32 + (const GlobeRectangle &other) const noexcept + + + std::pair< GlobeRectangle, std::optional< GlobeRectangle > > + splitAtAntiMeridian + classCesiumGeospatial_1_1GlobeRectangle.html + afbfc8e6486b59c1c2ddb66667d7aadcf + () const noexcept + + + static constexpr GlobeRectangle + fromDegrees + classCesiumGeospatial_1_1GlobeRectangle.html + a7571663912ede011ddef7350d24dabca + (double westDegrees, double southDegrees, double eastDegrees, double northDegrees) noexcept + + + static bool + equals + classCesiumGeospatial_1_1GlobeRectangle.html + a47c8f5152c74dcfdd03b40198ae8cd88 + (const GlobeRectangle &left, const GlobeRectangle &right) noexcept + + + static bool + equalsEpsilon + classCesiumGeospatial_1_1GlobeRectangle.html + a76d8b785755bde1475f9571fbff289a9 + (const GlobeRectangle &left, const GlobeRectangle &right, double relativeEpsilon) noexcept + + + static const GlobeRectangle + EMPTY + classCesiumGeospatial_1_1GlobeRectangle.html + ad32da6dc77efbc1a9f5b5fd5f87619be + + + + static const GlobeRectangle + MAXIMUM + classCesiumGeospatial_1_1GlobeRectangle.html + a2ba728a3b2202c92ea5ab2d2be2fcda7 + + + + + CesiumGeospatial::GlobeTransforms + classCesiumGeospatial_1_1GlobeTransforms.html + + static glm::dmat4x4 + eastNorthUpToFixedFrame + classCesiumGeospatial_1_1GlobeTransforms.html + a971af83be5216d4fb0a4b4e7119565a1 + (const glm::dvec3 &origin, const Ellipsoid &ellipsoid=CesiumGeospatial::Ellipsoid::WGS84) noexcept + + + + Cesium3DTilesContent::GltfConverterResult + structCesium3DTilesContent_1_1GltfConverterResult.html + + std::optional< CesiumGltf::Model > + model + structCesium3DTilesContent_1_1GltfConverterResult.html + a2ad0ecaa37748979af84cbf711a355dc + + + + CesiumUtility::ErrorList + errors + structCesium3DTilesContent_1_1GltfConverterResult.html + a122be277a3603df76a09fa93f9d7c11a + + + + + Cesium3DTilesContent::GltfConverters + classCesium3DTilesContent_1_1GltfConverters.html + + CesiumAsync::Future< GltfConverterResult >(*)( const std::span< const std::byte > &content, const CesiumGltfReader::GltfReaderOptions &options, const AssetFetcher &subprocessor) + ConverterFunction + classCesium3DTilesContent_1_1GltfConverters.html + ae442babb2508f7852aaf99a534c44130 + + + + static void + registerMagic + classCesium3DTilesContent_1_1GltfConverters.html + a0fe170b9e3dba0921787a83aab964025 + (const std::string &magic, ConverterFunction converter) + + + static void + registerFileExtension + classCesium3DTilesContent_1_1GltfConverters.html + a5596437676034b0a948e5ba3d367575f + (const std::string &fileExtension, ConverterFunction converter) + + + static ConverterFunction + getConverterByFileExtension + classCesium3DTilesContent_1_1GltfConverters.html + a96171d50c56a659a44d13c405cf0ff4b + (const std::string &filePath) + + + static ConverterFunction + getConverterByMagic + classCesium3DTilesContent_1_1GltfConverters.html + aec4011575397207f0b30f20d411e23b5 + (const std::span< const std::byte > &content) + + + static CesiumAsync::Future< GltfConverterResult > + convert + classCesium3DTilesContent_1_1GltfConverters.html + aa9a76e516b83f78818c06a3461643263 + (const std::string &filePath, const std::span< const std::byte > &content, const CesiumGltfReader::GltfReaderOptions &options, const AssetFetcher &assetFetcher) + + + static CesiumAsync::Future< GltfConverterResult > + convert + classCesium3DTilesContent_1_1GltfConverters.html + a5587ad94330b04d98c999fc5be6d0df2 + (const std::span< const std::byte > &content, const CesiumGltfReader::GltfReaderOptions &options, const AssetFetcher &assetFetcher) + + + + CesiumGltfReader::GltfReader + classCesiumGltfReader_1_1GltfReader.html + + + GltfReader + classCesiumGltfReader_1_1GltfReader.html + a323700279640902c78557e880c5aecf6 + () + + + CesiumJsonReader::JsonReaderOptions & + getOptions + classCesiumGltfReader_1_1GltfReader.html + aee512169e03591664831866260ee2b5c + () + + + const CesiumJsonReader::JsonReaderOptions & + getExtensions + classCesiumGltfReader_1_1GltfReader.html + a3cdcb33981da8c131867c24e3765d83d + () const + + + GltfReaderResult + readGltf + classCesiumGltfReader_1_1GltfReader.html + a20ffae5f1336b9cc5f0f5a21218328e4 + (const std::span< const std::byte > &data, const GltfReaderOptions &options=GltfReaderOptions()) const + + + CesiumAsync::Future< GltfReaderResult > + loadGltf + classCesiumGltfReader_1_1GltfReader.html + a6aa696d1da207804615fc3dea573c384 + (const CesiumAsync::AsyncSystem &asyncSystem, const std::string &url, const std::vector< CesiumAsync::IAssetAccessor::THeader > &headers, const std::shared_ptr< CesiumAsync::IAssetAccessor > &pAssetAccessor, const GltfReaderOptions &options=GltfReaderOptions()) const + + + void + postprocessGltf + classCesiumGltfReader_1_1GltfReader.html + a556a4ac5c37380f6641cbdc34805aae4 + (GltfReaderResult &readGltf, const GltfReaderOptions &options) + + + static CesiumAsync::Future< GltfReaderResult > + resolveExternalData + classCesiumGltfReader_1_1GltfReader.html + a3e8cc88d6c34d7392581d254fb32dc77 + (const CesiumAsync::AsyncSystem &asyncSystem, const std::string &baseUrl, const CesiumAsync::HttpHeaders &headers, const std::shared_ptr< CesiumAsync::IAssetAccessor > &pAssetAccessor, const GltfReaderOptions &options, GltfReaderResult &&result) + + + static ImageReaderResult + readImage + classCesiumGltfReader_1_1GltfReader.html + a5b93105362a394b7ad30dfad26664f46 + (const std::span< const std::byte > &data, const CesiumGltf::Ktx2TranscodeTargets &ktx2TranscodeTargets) + + + static std::optional< std::string > + generateMipMaps + classCesiumGltfReader_1_1GltfReader.html + a42f7cddff5a0ac7c2fb8f4eb4ef13793 + (CesiumGltf::ImageAsset &image) + + + + CesiumGltfReader::GltfReaderOptions + structCesiumGltfReader_1_1GltfReaderOptions.html + + bool + decodeDataUrls + structCesiumGltfReader_1_1GltfReaderOptions.html + aeae3e513028c721d52984616996657da + + + + bool + clearDecodedDataUrls + structCesiumGltfReader_1_1GltfReaderOptions.html + a57f83e7d25c00a06177c3b60df0c7ba3 + + + + bool + decodeEmbeddedImages + structCesiumGltfReader_1_1GltfReaderOptions.html + a10fed440a86c18e390b951c2dabff7b1 + + + + bool + resolveExternalImages + structCesiumGltfReader_1_1GltfReaderOptions.html + a8b8b0f09846e21c76024c536523a9a60 + + + + bool + decodeDraco + structCesiumGltfReader_1_1GltfReaderOptions.html + a40bfb0885e056f425d537021e4f0f122 + + + + bool + decodeMeshOptData + structCesiumGltfReader_1_1GltfReaderOptions.html + ac4dd6e79a35a58c43e50bf4dba1148f2 + + + + bool + dequantizeMeshData + structCesiumGltfReader_1_1GltfReaderOptions.html + a1d9ea4a2f14d9c36fcc02c993a043c4a + + + + bool + applyTextureTransform + structCesiumGltfReader_1_1GltfReaderOptions.html + a6540292cb140ce8fa3de9d6895ecfe48 + + + + CesiumGltf::Ktx2TranscodeTargets + ktx2TranscodeTargets + structCesiumGltfReader_1_1GltfReaderOptions.html + ab6d7761afacbd1f89540973c0ff82172 + + + + CesiumUtility::IntrusivePointer< GltfSharedAssetSystem > + pSharedAssetSystem + structCesiumGltfReader_1_1GltfReaderOptions.html + a47b4119471c5f5c74edf7bf0aa861045 + + + + bool + resolveExternalStructuralMetadata + structCesiumGltfReader_1_1GltfReaderOptions.html + a48a18286868d3c106edc4253fcf03df9 + + + + + CesiumGltfReader::GltfReaderResult + structCesiumGltfReader_1_1GltfReaderResult.html + + std::optional< CesiumGltf::Model > + model + structCesiumGltfReader_1_1GltfReaderResult.html + a0e5648af8efca975ab762dcbad4e0768 + + + + std::vector< std::string > + errors + structCesiumGltfReader_1_1GltfReaderResult.html + ab0b9bd284c9ddc2f900c92c229345d07 + + + + std::vector< std::string > + warnings + structCesiumGltfReader_1_1GltfReaderResult.html + ab5ed51dc33efe963e8a98ebd852b9fcd + + + + + CesiumGltfReader::GltfSharedAssetSystem + classCesiumGltfReader_1_1GltfSharedAssetSystem.html + CesiumUtility::ReferenceCounted< T, isThreadSafe > + + CesiumAsync:: SharedAssetDepot< CesiumGltf::ImageAsset, NetworkImageAssetDescriptor > + ImageDepot + classCesiumGltfReader_1_1GltfSharedAssetSystem.html + a27213b46ce3b7b2683c274a472dfc8a3 + + + + CesiumAsync:: SharedAssetDepot< CesiumGltf::Schema, NetworkSchemaAssetDescriptor > + SchemaDepot + classCesiumGltfReader_1_1GltfSharedAssetSystem.html + a6f39836e08bc05c26dafccde48d68f9d + + + + static CesiumUtility::IntrusivePointer< GltfSharedAssetSystem > + getDefault + classCesiumGltfReader_1_1GltfSharedAssetSystem.html + aa0c6d7f8f850cbd352c80aa49942b2dc + () + + + CesiumUtility::IntrusivePointer< ImageDepot > + pImage + classCesiumGltfReader_1_1GltfSharedAssetSystem.html + a2c111df10115de95d7d35aa929942f90 + + + + CesiumUtility::IntrusivePointer< SchemaDepot > + pExternalMetadataSchema + classCesiumGltfReader_1_1GltfSharedAssetSystem.html + ae99d34b1b1cafe368651cf5ce7462513 + + + + + CesiumGltfContent::GltfUtilities + structCesiumGltfContent_1_1GltfUtilities.html + CesiumGltfContent::GltfUtilities::IntersectResult + CesiumGltfContent::GltfUtilities::RayGltfHit + + static std::optional< glm::dmat4x4 > + getNodeTransform + structCesiumGltfContent_1_1GltfUtilities.html + a6c3b9bcdfaac6c61993c8047f4a8db03 + (const CesiumGltf::Node &node) + + + static void + setNodeTransform + structCesiumGltfContent_1_1GltfUtilities.html + a38c6bd97ba09f50ce5ad5cbe93117e45 + (CesiumGltf::Node &node, const glm::dmat4x4 &newTransform) + + + static glm::dmat4x4 + applyRtcCenter + structCesiumGltfContent_1_1GltfUtilities.html + a1ff6d91c483b62d0c0985f58c8d760d1 + (const CesiumGltf::Model &gltf, const glm::dmat4x4 &rootTransform) + + + static glm::dmat4x4 + applyGltfUpAxisTransform + structCesiumGltfContent_1_1GltfUtilities.html + a6e0300d1ead0b9309ab2d269b788b393 + (const CesiumGltf::Model &model, const glm::dmat4x4 &rootTransform) + + + static CesiumGeospatial::BoundingRegion + computeBoundingRegion + structCesiumGltfContent_1_1GltfUtilities.html + a747d008d6bb6816fb744203de2336631 + (const CesiumGltf::Model &gltf, const glm::dmat4 &transform, const CesiumGeospatial::Ellipsoid &ellipsoid=CesiumGeospatial::Ellipsoid::WGS84) + + + static std::vector< std::string_view > + parseGltfCopyright + structCesiumGltfContent_1_1GltfUtilities.html + a2cf19eee4512f3b4d70834a9a8347c88 + (const CesiumGltf::Model &gltf) + + + static void + collapseToSingleBuffer + structCesiumGltfContent_1_1GltfUtilities.html + ae19fe48f088f403bfb579d64859062eb + (CesiumGltf::Model &gltf) + + + static void + moveBufferContent + structCesiumGltfContent_1_1GltfUtilities.html + a4313e9cbc45570233c70f0574a181a59 + (CesiumGltf::Model &gltf, CesiumGltf::Buffer &destination, CesiumGltf::Buffer &source) + + + static void + removeUnusedTextures + structCesiumGltfContent_1_1GltfUtilities.html + ad29de37108792e1ee3db1abc2f41aa32 + (CesiumGltf::Model &gltf, const std::vector< int32_t > &extraUsedTextureIndices={}) + + + static void + removeUnusedSamplers + structCesiumGltfContent_1_1GltfUtilities.html + a19b275a194e8be5c2d2d05085e968d31 + (CesiumGltf::Model &gltf, const std::vector< int32_t > &extraUsedSamplerIndices={}) + + + static void + removeUnusedImages + structCesiumGltfContent_1_1GltfUtilities.html + a9eedb45dbe4fbdb29ca7c565d51c3702 + (CesiumGltf::Model &gltf, const std::vector< int32_t > &extraUsedImageIndices={}) + + + static void + removeUnusedAccessors + structCesiumGltfContent_1_1GltfUtilities.html + a4f126edd8e47007df9778d4cbdd25e0b + (CesiumGltf::Model &gltf, const std::vector< int32_t > &extraUsedAccessorIndices={}) + + + static void + removeUnusedBufferViews + structCesiumGltfContent_1_1GltfUtilities.html + a1dab520b023027b956da75dbbfec1496 + (CesiumGltf::Model &gltf, const std::vector< int32_t > &extraUsedBufferViewIndices={}) + + + static void + removeUnusedBuffers + structCesiumGltfContent_1_1GltfUtilities.html + a64b996f4b45b2b0c76381f37b44fd2c6 + (CesiumGltf::Model &gltf, const std::vector< int32_t > &extraUsedBufferIndices={}) + + + static void + removeUnusedMeshes + structCesiumGltfContent_1_1GltfUtilities.html + afa66b97a39c7fb97e88c5b8d7dc860c6 + (CesiumGltf::Model &gltf, const std::vector< int32_t > &extraUsedMeshIndices={}) + + + static void + removeUnusedMaterials + structCesiumGltfContent_1_1GltfUtilities.html + a9c099e6e365121c814db5872df986c1e + (CesiumGltf::Model &gltf, const std::vector< int32_t > &extraUsedMaterialIndices={}) + + + static void + compactBuffers + structCesiumGltfContent_1_1GltfUtilities.html + a176a8a121a9399730deac316bbae1cea + (CesiumGltf::Model &gltf) + + + static void + compactBuffer + structCesiumGltfContent_1_1GltfUtilities.html + aea99c39d376f73740b9a92a439563b7b + (CesiumGltf::Model &gltf, int32_t bufferIndex) + + + static IntersectResult + intersectRayGltfModel + structCesiumGltfContent_1_1GltfUtilities.html + a2a0ff73a9b135af2cbf96a48226da7bf + (const CesiumGeometry::Ray &ray, const CesiumGltf::Model &gltf, bool cullBackFaces=true, const glm::dmat4x4 &gltfTransform=glm::dmat4(1.0)) + + + + CesiumGltfWriter::GltfWriter + classCesiumGltfWriter_1_1GltfWriter.html + + + GltfWriter + classCesiumGltfWriter_1_1GltfWriter.html + a8c4fe059306fe52a8a485525a16226c3 + () + + + CesiumJsonWriter::ExtensionWriterContext & + getExtensions + classCesiumGltfWriter_1_1GltfWriter.html + a0b0a6c716420d131bc85f3968880b58b + () + + + const CesiumJsonWriter::ExtensionWriterContext & + getExtensions + classCesiumGltfWriter_1_1GltfWriter.html + a81eefc769aba3f521a620b9a5e92a43c + () const + + + GltfWriterResult + writeGltf + classCesiumGltfWriter_1_1GltfWriter.html + ab685fbd671ee170eaa8e32bf4730f671 + (const CesiumGltf::Model &model, const GltfWriterOptions &options=GltfWriterOptions()) const + + + GltfWriterResult + writeGlb + classCesiumGltfWriter_1_1GltfWriter.html + a04d9c5a12b3e790d4767b775113487a4 + (const CesiumGltf::Model &model, const std::span< const std::byte > &bufferData, const GltfWriterOptions &options=GltfWriterOptions()) const + + + + CesiumGltfWriter::GltfWriterOptions + structCesiumGltfWriter_1_1GltfWriterOptions.html + + bool + prettyPrint + structCesiumGltfWriter_1_1GltfWriterOptions.html + a8fa94d94df6cbb2ca6b519fab3e8583b + + + + size_t + binaryChunkByteAlignment + structCesiumGltfWriter_1_1GltfWriterOptions.html + af2b10bfa012704e725f8e6cacd72382a + + + + + CesiumGltfWriter::GltfWriterResult + structCesiumGltfWriter_1_1GltfWriterResult.html + + std::vector< std::byte > + gltfBytes + structCesiumGltfWriter_1_1GltfWriterResult.html + aed91c8a8105757ae8f11c6adbe5a4a40 + + + + std::vector< std::string > + errors + structCesiumGltfWriter_1_1GltfWriterResult.html + a1284cd79dd59d2551ac1da431684c3e4 + + + + std::vector< std::string > + warnings + structCesiumGltfWriter_1_1GltfWriterResult.html + ad2adae5f9fba09b3d6314d4eace1ef19 + + + + + Cesium3DTiles::GroupMetadata + structCesium3DTiles_1_1GroupMetadata.html + Cesium3DTiles::MetadataEntity + + int64_t + getSizeBytes + structCesium3DTiles_1_1GroupMetadata.html + a7348ee4ab589ca2ee146e0868b53b2cc + () const + + + static constexpr const char * + TypeName + structCesium3DTiles_1_1GroupMetadata.html + a0991ccd9f72c1f12c67efeaa6db69800 + + + + + Cesium3DTilesReader::GroupMetadataReader + classCesium3DTilesReader_1_1GroupMetadataReader.html + + + GroupMetadataReader + classCesium3DTilesReader_1_1GroupMetadataReader.html + ae15b79ce394824f43da634368c868b15 + () + + + CesiumJsonReader::JsonReaderOptions & + getOptions + classCesium3DTilesReader_1_1GroupMetadataReader.html + a1b2774461c1660c4cdb02d3c91b2789e + () + + + const CesiumJsonReader::JsonReaderOptions & + getOptions + classCesium3DTilesReader_1_1GroupMetadataReader.html + a306676df8f67d90e4f3d1246e00b1374 + () const + + + CesiumJsonReader::ReadJsonResult< Cesium3DTiles::GroupMetadata > + readFromJson + classCesium3DTilesReader_1_1GroupMetadataReader.html + a20833be32452889b6fe817e268172508 + (const std::span< const std::byte > &data) const + + + CesiumJsonReader::ReadJsonResult< Cesium3DTiles::GroupMetadata > + readFromJson + classCesium3DTilesReader_1_1GroupMetadataReader.html + aa68e7d290728015c6b81f45156e563e1 + (const rapidjson::Value &value) const + + + CesiumJsonReader::ReadJsonResult< std::vector< Cesium3DTiles::GroupMetadata > > + readArrayFromJson + classCesium3DTilesReader_1_1GroupMetadataReader.html + a0da238cf9588deee2d308d244a30106a + (const rapidjson::Value &value) const + + + + CesiumAsync::GunzipAssetAccessor + classCesiumAsync_1_1GunzipAssetAccessor.html + CesiumAsync::IAssetAccessor + + + GunzipAssetAccessor + classCesiumAsync_1_1GunzipAssetAccessor.html + a7d57293a393e5dd27ac0ec9d2ad1e23b + (const std::shared_ptr< IAssetAccessor > &pAssetAccessor) + + + virtual Future< std::shared_ptr< IAssetRequest > > + get + classCesiumAsync_1_1GunzipAssetAccessor.html + a496ea44714a63da98dd96ce66bb44f2a + (const AsyncSystem &asyncSystem, const std::string &url, const std::vector< THeader > &headers) override + + + virtual Future< std::shared_ptr< IAssetRequest > > + request + classCesiumAsync_1_1GunzipAssetAccessor.html + a3ea3489fe215d6e6da4db287239a4918 + (const AsyncSystem &asyncSystem, const std::string &verb, const std::string &url, const std::vector< THeader > &headers, const std::span< const std::byte > &contentPayload) override + + + virtual void + tick + classCesiumAsync_1_1GunzipAssetAccessor.html + a17d0f6f6825effadb3564f1ff26fb64c + () noexcept override + + + + CesiumUtility::Hash + structCesiumUtility_1_1Hash.html + + static std::size_t + combine + structCesiumUtility_1_1Hash.html + ab65aecf85aaed6844c039ecec8ba8d7c + (std::size_t first, std::size_t second) + + + + std::hash< CesiumAsync::NetworkAssetDescriptor > + structstd_1_1hash_3_01CesiumAsync_1_1NetworkAssetDescriptor_01_4.html + + std::size_t + operator() + structstd_1_1hash_3_01CesiumAsync_1_1NetworkAssetDescriptor_01_4.html + ae6d1f7b79f409e58cdc50247b0d6c6b1 + (const CesiumAsync::NetworkAssetDescriptor &key) const noexcept + + + + std::hash< CesiumGeometry::QuadtreeTileID > + structstd_1_1hash_3_01CesiumGeometry_1_1QuadtreeTileID_01_4.html + + size_t + operator() + structstd_1_1hash_3_01CesiumGeometry_1_1QuadtreeTileID_01_4.html + a32659100b02af4484fcf58c84a899b76 + (const CesiumGeometry::QuadtreeTileID &key) const noexcept + + + + std::hash< CesiumGltfReader::NetworkImageAssetDescriptor > + structstd_1_1hash_3_01CesiumGltfReader_1_1NetworkImageAssetDescriptor_01_4.html + + std::size_t + operator() + structstd_1_1hash_3_01CesiumGltfReader_1_1NetworkImageAssetDescriptor_01_4.html + afe091b61db99cf790c7bfe26fc88116e + (const CesiumGltfReader::NetworkImageAssetDescriptor &key) const noexcept + + + + std::hash< CesiumGltfReader::NetworkSchemaAssetDescriptor > + structstd_1_1hash_3_01CesiumGltfReader_1_1NetworkSchemaAssetDescriptor_01_4.html + + std::size_t + operator() + structstd_1_1hash_3_01CesiumGltfReader_1_1NetworkSchemaAssetDescriptor_01_4.html + afb515e63dd66683ec4d9674721a81865 + (const CesiumGltfReader::NetworkSchemaAssetDescriptor &key) const noexcept + + + + Cesium3DTilesContent::I3dmToGltfConverter + structCesium3DTilesContent_1_1I3dmToGltfConverter.html + + static CesiumAsync::Future< GltfConverterResult > + convert + structCesium3DTilesContent_1_1I3dmToGltfConverter.html + ad77695b8b4154c6ebfd82d60d01b1ee1 + (const std::span< const std::byte > &instancesBinary, const CesiumGltfReader::GltfReaderOptions &options, const AssetFetcher &assetFetcher) + + + + CesiumAsync::IAssetAccessor + classCesiumAsync_1_1IAssetAccessor.html + + std::pair< std::string, std::string > + THeader + classCesiumAsync_1_1IAssetAccessor.html + ab9efa397440bcf5eb039b3c368242ca9 + + + + virtual CesiumAsync::Future< std::shared_ptr< IAssetRequest > > + get + classCesiumAsync_1_1IAssetAccessor.html + ae568a57a571ef87f01784338a09defef + (const AsyncSystem &asyncSystem, const std::string &url, const std::vector< THeader > &headers={})=0 + + + virtual CesiumAsync::Future< std::shared_ptr< IAssetRequest > > + request + classCesiumAsync_1_1IAssetAccessor.html + a7ad13dd91f37709c96b7e4ee0d033143 + (const AsyncSystem &asyncSystem, const std::string &verb, const std::string &url, const std::vector< THeader > &headers=std::vector< THeader >(), const std::span< const std::byte > &contentPayload={})=0 + + + virtual void + tick + classCesiumAsync_1_1IAssetAccessor.html + a73dd437e29437d2a5089b8e31b25f5ec + () noexcept=0 + + + + CesiumAsync::IAssetRequest + classCesiumAsync_1_1IAssetRequest.html + + virtual const std::string & + method + classCesiumAsync_1_1IAssetRequest.html + a02d5166e606f9ccd8c59daba3017b520 + () const =0 + + + virtual const std::string & + url + classCesiumAsync_1_1IAssetRequest.html + a123dd382de14b7218390bae3dcb4f4a0 + () const =0 + + + virtual const HttpHeaders & + headers + classCesiumAsync_1_1IAssetRequest.html + a81297de96ca759956df7ee0f58a4bc37 + () const =0 + + + virtual const IAssetResponse * + response + classCesiumAsync_1_1IAssetRequest.html + a04fbe6f1de2a95487f68993cddc31ebc + () const =0 + + + + CesiumAsync::IAssetResponse + classCesiumAsync_1_1IAssetResponse.html + + virtual + ~IAssetResponse + classCesiumAsync_1_1IAssetResponse.html + abaee1631f5f97f86a9747279e0320f52 + ()=default + + + virtual uint16_t + statusCode + classCesiumAsync_1_1IAssetResponse.html + af686a9054eaf3ba99a098b102704584d + () const =0 + + + virtual std::string + contentType + classCesiumAsync_1_1IAssetResponse.html + ad7b2ada0b82a9e551dbcafede5e6d284 + () const =0 + + + virtual const HttpHeaders & + headers + classCesiumAsync_1_1IAssetResponse.html + a37ef683ab90f3dcba93680e0530a3ef5 + () const =0 + + + virtual std::span< const std::byte > + data + classCesiumAsync_1_1IAssetResponse.html + ab834f8d1b6bd4ec123447e0264760739 + () const =0 + + + + CesiumAsync::ICacheDatabase + classCesiumAsync_1_1ICacheDatabase.html + + virtual std::optional< CacheItem > + getEntry + classCesiumAsync_1_1ICacheDatabase.html + aaa3efdfe5170ad631c80565d9145f954 + (const std::string &key) const =0 + + + virtual bool + storeEntry + classCesiumAsync_1_1ICacheDatabase.html + a42a40850571aefcef5384b1cf9193488 + (const std::string &key, std::time_t expiryTime, const std::string &url, const std::string &requestMethod, const HttpHeaders &requestHeaders, uint16_t statusCode, const HttpHeaders &responseHeaders, const std::span< const std::byte > &responseData)=0 + + + virtual bool + prune + classCesiumAsync_1_1ICacheDatabase.html + a93e0a259db6378a47b0a19d9b5093d6e + ()=0 + + + virtual bool + clearAll + classCesiumAsync_1_1ICacheDatabase.html + a0f3242e5005f1713cd071cd99b412c3b + ()=0 + + + + CesiumUtility::IDepotOwningAsset + classCesiumUtility_1_1IDepotOwningAsset.html + typename TAssetType + + virtual void + markDeletionCandidate + classCesiumUtility_1_1IDepotOwningAsset.html + af6b6e71bd28aef3aa115a57bd98a6d68 + (const TAssetType &asset, bool threadOwnsDepotLock)=0 + + + virtual void + unmarkDeletionCandidate + classCesiumUtility_1_1IDepotOwningAsset.html + a42e9f5ac9320922a6c756f645f705b4c + (const TAssetType &asset, bool threadOwnsDepotLock)=0 + + + + CesiumJsonReader::IExtensionJsonHandler + classCesiumJsonReader_1_1IExtensionJsonHandler.html + + virtual void + reset + classCesiumJsonReader_1_1IExtensionJsonHandler.html + a7bfe6c593edc7b9f6fc8cc7d0abfe229 + (IJsonHandler *pParentHandler, CesiumUtility::ExtensibleObject &o, const std::string_view &extensionName)=0 + + + virtual IJsonHandler & + getHandler + classCesiumJsonReader_1_1IExtensionJsonHandler.html + a78172b251a7e17ea16c36b788a4c6b62 + ()=0 + + + + CesiumJsonReader::IgnoreValueJsonHandler + classCesiumJsonReader_1_1IgnoreValueJsonHandler.html + CesiumJsonReader::IJsonHandler + + void + reset + classCesiumJsonReader_1_1IgnoreValueJsonHandler.html + a524fedb394516ecb9b420b0e49a925a3 + (IJsonHandler *pParent) noexcept + + + virtual IJsonHandler * + readNull + classCesiumJsonReader_1_1IgnoreValueJsonHandler.html + a1e4c577192c455945f2100802d499799 + () override + + + virtual IJsonHandler * + readBool + classCesiumJsonReader_1_1IgnoreValueJsonHandler.html + a5c091b606fdc0148a6d9c0417236547c + (bool b) override + + + virtual IJsonHandler * + readInt32 + classCesiumJsonReader_1_1IgnoreValueJsonHandler.html + ada5e4910598458d30380e385d5df2db9 + (int32_t i) override + + + virtual IJsonHandler * + readUint32 + classCesiumJsonReader_1_1IgnoreValueJsonHandler.html + a9d96f6dda1abc02c4d16332d6326da55 + (uint32_t i) override + + + virtual IJsonHandler * + readInt64 + classCesiumJsonReader_1_1IgnoreValueJsonHandler.html + a8490083f56d2e7efcda6c74b726d33b0 + (int64_t i) override + + + virtual IJsonHandler * + readUint64 + classCesiumJsonReader_1_1IgnoreValueJsonHandler.html + ae855f8651f4fa8d3e7738a0bdb245acb + (uint64_t i) override + + + virtual IJsonHandler * + readDouble + classCesiumJsonReader_1_1IgnoreValueJsonHandler.html + ad2f609a17a63d7b0d76b786e2a4276e8 + (double d) override + + + virtual IJsonHandler * + readString + classCesiumJsonReader_1_1IgnoreValueJsonHandler.html + a3d1a88da3d3b182177aef971b21584ae + (const std::string_view &str) override + + + virtual IJsonHandler * + readObjectStart + classCesiumJsonReader_1_1IgnoreValueJsonHandler.html + aad38723a2fb0768e4d40e09e846382cf + () override + + + virtual IJsonHandler * + readObjectKey + classCesiumJsonReader_1_1IgnoreValueJsonHandler.html + a46ee8224bc2d70f2698566f9bda361ae + (const std::string_view &str) override + + + virtual IJsonHandler * + readObjectEnd + classCesiumJsonReader_1_1IgnoreValueJsonHandler.html + a5f4b1efadb9065e546ba190d11f6574b + () override + + + virtual IJsonHandler * + readArrayStart + classCesiumJsonReader_1_1IgnoreValueJsonHandler.html + ad2aa1ef2ec11d6c8240d4a6a24a56849 + () override + + + virtual IJsonHandler * + readArrayEnd + classCesiumJsonReader_1_1IgnoreValueJsonHandler.html + a1017ab9a78acd04dac903963f16eaa31 + () override + + + virtual void + reportWarning + classCesiumJsonReader_1_1IgnoreValueJsonHandler.html + a449473cdc3080d4e1f733f8d707143ed + (const std::string &warning, std::vector< std::string > &&context=std::vector< std::string >()) override + + + IJsonHandler * + parent + classCesiumJsonReader_1_1IgnoreValueJsonHandler.html + a57b328d029a1de9f2d4ae927942aaeb6 + () noexcept + + + + CesiumJsonReader::IJsonHandler + classCesiumJsonReader_1_1IJsonHandler.html + + virtual IJsonHandler * + readNull + classCesiumJsonReader_1_1IJsonHandler.html + a3fc9a94422472b47a769d64d155a5991 + ()=0 + + + virtual IJsonHandler * + readBool + classCesiumJsonReader_1_1IJsonHandler.html + a58784ce489baa129f1883a9c6e537432 + (bool b)=0 + + + virtual IJsonHandler * + readInt32 + classCesiumJsonReader_1_1IJsonHandler.html + afeac3c5cfb20802cf50bee81c2c5d138 + (int32_t i)=0 + + + virtual IJsonHandler * + readUint32 + classCesiumJsonReader_1_1IJsonHandler.html + a1889d882d354b86a53faf5ae4057f78b + (uint32_t i)=0 + + + virtual IJsonHandler * + readInt64 + classCesiumJsonReader_1_1IJsonHandler.html + af532d5b74735305f471c3e85051ecdef + (int64_t i)=0 + + + virtual IJsonHandler * + readUint64 + classCesiumJsonReader_1_1IJsonHandler.html + a1c80b6fb6752bed66ebec94087ec52b1 + (uint64_t i)=0 + + + virtual IJsonHandler * + readDouble + classCesiumJsonReader_1_1IJsonHandler.html + a51c4e890532e6b795cac6615cd04209d + (double d)=0 + + + virtual IJsonHandler * + readString + classCesiumJsonReader_1_1IJsonHandler.html + add3ecbe6fa607ea43d14f2737c669fe5 + (const std::string_view &str)=0 + + + virtual IJsonHandler * + readObjectStart + classCesiumJsonReader_1_1IJsonHandler.html + a8a4e59df296408c8d0de57dc9bed88bb + ()=0 + + + virtual IJsonHandler * + readObjectKey + classCesiumJsonReader_1_1IJsonHandler.html + a192612321be7ffde9d81a84ac6303893 + (const std::string_view &str)=0 + + + virtual IJsonHandler * + readObjectEnd + classCesiumJsonReader_1_1IJsonHandler.html + a40c2fe56e03277df2efd11414cd0f667 + ()=0 + + + virtual IJsonHandler * + readArrayStart + classCesiumJsonReader_1_1IJsonHandler.html + a0773938f92951d38dab0beee46beff39 + ()=0 + + + virtual IJsonHandler * + readArrayEnd + classCesiumJsonReader_1_1IJsonHandler.html + a05e51e1322d6a72ffde139f593d68c49 + ()=0 + + + virtual void + reportWarning + classCesiumJsonReader_1_1IJsonHandler.html + a5a278b19a131a6379fb9d30fd9fbe6ec + (const std::string &warning, std::vector< std::string > &&context=std::vector< std::string >())=0 + + + + CesiumGltf::Image + structCesiumGltf_1_1Image.html + CesiumGltf::ImageSpec + + CesiumUtility::IntrusivePointer< ImageAsset > + pAsset + structCesiumGltf_1_1Image.html + ab0a947348552c934b32a1e57a926da26 + + + + + CesiumGltf::ImageAsset + structCesiumGltf_1_1ImageAsset.html + CesiumUtility::SharedAsset< ImageAsset > + + + ImageAsset + structCesiumGltf_1_1ImageAsset.html + a902ea99a53ae1321e4d825b6afa36ac2 + ()=default + + + int64_t + getSizeBytes + structCesiumGltf_1_1ImageAsset.html + a9a37686e909fca6d711c4fa69af16fc8 + () const + + + int32_t + width + structCesiumGltf_1_1ImageAsset.html + aa044e0a78e7faba3c0e795dbbb7cd48c + + + + int32_t + height + structCesiumGltf_1_1ImageAsset.html + a2770998439df3927050d4b7b8434dafa + + + + int32_t + channels + structCesiumGltf_1_1ImageAsset.html + abfe5967c6bb3ac2e5e5005af54bfa60e + + + + int32_t + bytesPerChannel + structCesiumGltf_1_1ImageAsset.html + a12d5659fe92696edbaed0d6e4a34f2e1 + + + + GpuCompressedPixelFormat + compressedPixelFormat + structCesiumGltf_1_1ImageAsset.html + afb474188b9e198b154eaa53aa4d649aa + + + + std::vector< ImageAssetMipPosition > + mipPositions + structCesiumGltf_1_1ImageAsset.html + a839601bf1a74d9658c3e6a340f027ad0 + + + + std::vector< std::byte > + pixelData + structCesiumGltf_1_1ImageAsset.html + afe91734a641b1b7bb0384b9ab8a878f0 + + + + int64_t + sizeBytes + structCesiumGltf_1_1ImageAsset.html + a026cd0dd193d606cdf11a37ae01522f7 + + + + + CesiumGltf::ImageAssetMipPosition + structCesiumGltf_1_1ImageAssetMipPosition.html + + size_t + byteOffset + structCesiumGltf_1_1ImageAssetMipPosition.html + a75ff609019094554e913870dbc62e494 + + + + size_t + byteSize + structCesiumGltf_1_1ImageAssetMipPosition.html + aa50262420f347aa1bae33f6de9c904e3 + + + + + CesiumGltfReader::ImageDecoder + classCesiumGltfReader_1_1ImageDecoder.html + + static ImageReaderResult + readImage + classCesiumGltfReader_1_1ImageDecoder.html + a32d0bac022f2e2a76245fac2e895d7a1 + (const std::span< const std::byte > &data, const CesiumGltf::Ktx2TranscodeTargets &ktx2TranscodeTargets) + + + static std::optional< std::string > + generateMipMaps + classCesiumGltfReader_1_1ImageDecoder.html + ab8de4bab10a1d89701b6840ab7378d1b + (CesiumGltf::ImageAsset &image) + + + static bool + unsafeResize + classCesiumGltfReader_1_1ImageDecoder.html + a26d58923243b0c17bcd838d071347048 + (const std::byte *pInputPixels, int32_t inputWidth, int32_t inputHeight, int32_t inputStrideBytes, std::byte *pOutputPixels, int32_t outputWidth, int32_t outputHeight, int32_t outputStrideBytes, int32_t channels) + + + + CesiumGltfContent::ImageManipulation + classCesiumGltfContent_1_1ImageManipulation.html + + static void + unsafeBlitImage + classCesiumGltfContent_1_1ImageManipulation.html + abf13b7f2ccd59db52900df293a52b188 + (std::byte *pTarget, size_t targetRowStride, const std::byte *pSource, size_t sourceRowStride, size_t sourceWidth, size_t sourceHeight, size_t bytesPerPixel) + + + static bool + blitImage + classCesiumGltfContent_1_1ImageManipulation.html + a9ea92ed6c75b1f0ea344c442a3f86cb2 + (CesiumGltf::ImageAsset &target, const PixelRectangle &targetPixels, const CesiumGltf::ImageAsset &source, const PixelRectangle &sourcePixels) + + + static std::vector< std::byte > + savePng + classCesiumGltfContent_1_1ImageManipulation.html + a48d008b4f35a751ba9546a76266498d5 + (const CesiumGltf::ImageAsset &image) + + + static void + savePng + classCesiumGltfContent_1_1ImageManipulation.html + ad7b529461d783abd84526d3f93901c16 + (const CesiumGltf::ImageAsset &image, std::vector< std::byte > &output) + + + + CesiumGltfReader::ImageReader + classCesiumGltfReader_1_1ImageReader.html + + + ImageReader + classCesiumGltfReader_1_1ImageReader.html + a0eb81186e6b9f4863172f927047cd65a + () + + + CesiumJsonReader::JsonReaderOptions & + getOptions + classCesiumGltfReader_1_1ImageReader.html + ac25139900720131495e7e2c680698cf4 + () + + + const CesiumJsonReader::JsonReaderOptions & + getOptions + classCesiumGltfReader_1_1ImageReader.html + a1d4c243bdc114635c0b7f671ffc8e27a + () const + + + CesiumJsonReader::ReadJsonResult< CesiumGltf::Image > + readFromJson + classCesiumGltfReader_1_1ImageReader.html + ad8149f1e5ed4f408b7ec59ff8cd88e47 + (const std::span< const std::byte > &data) const + + + CesiumJsonReader::ReadJsonResult< CesiumGltf::Image > + readFromJson + classCesiumGltfReader_1_1ImageReader.html + a324302c9a5de13ada376bc8ccd3647b2 + (const rapidjson::Value &value) const + + + CesiumJsonReader::ReadJsonResult< std::vector< CesiumGltf::Image > > + readArrayFromJson + classCesiumGltfReader_1_1ImageReader.html + a0097fc24d8d33e9c49721354029ad261 + (const rapidjson::Value &value) const + + + + CesiumGltfReader::ImageReaderResult + structCesiumGltfReader_1_1ImageReaderResult.html + + CesiumUtility::IntrusivePointer< CesiumGltf::ImageAsset > + pImage + structCesiumGltfReader_1_1ImageReaderResult.html + ab7935576da072f896518aa9851299514 + + + + std::vector< std::string > + errors + structCesiumGltfReader_1_1ImageReaderResult.html + aa6d574596405add97bcd416eda3151af + + + + std::vector< std::string > + warnings + structCesiumGltfReader_1_1ImageReaderResult.html + aef1bb079f2a9a7128942b3b056a16873 + + + + + CesiumGltf::ImageSpec + structCesiumGltf_1_1ImageSpec.html + CesiumGltf::NamedObject + CesiumGltf::ImageSpec::MimeType + + int64_t + getSizeBytes + structCesiumGltf_1_1ImageSpec.html + ad61d96dda50174a3dacf6badde510d1a + () const + + + std::optional< std::string > + uri + structCesiumGltf_1_1ImageSpec.html + a8fb528f7f997e4a7e9edddaa2de98b51 + + + + std::optional< std::string > + mimeType + structCesiumGltf_1_1ImageSpec.html + a1b6e492ef9a2b4af5d561546bc90cb7c + + + + int32_t + bufferView + structCesiumGltf_1_1ImageSpec.html + a6d32adc6c562402ac99850344f8ab4a7 + + + + static constexpr const char * + TypeName + structCesiumGltf_1_1ImageSpec.html + a2bb67944cec4dcebbba51fa872cd2b8c + + + + + ImageSpec + structCesiumGltf_1_1ImageSpec.html + a1656d9f88e2d161ee4d7eeaedf63bc96 + ()=default + + + + Cesium3DTiles::ImplicitTiling + structCesium3DTiles_1_1ImplicitTiling.html + CesiumUtility::ExtensibleObject + Cesium3DTiles::ImplicitTiling::SubdivisionScheme + + int64_t + getSizeBytes + structCesium3DTiles_1_1ImplicitTiling.html + a0c2b0a4cb87f5f344a10792b178f91fe + () const + + + std::string + subdivisionScheme + structCesium3DTiles_1_1ImplicitTiling.html + af98a19bc0b5edd70988e855efdffe5f1 + + + + int64_t + subtreeLevels + structCesium3DTiles_1_1ImplicitTiling.html + a6252a01bfbbc5790704d7414c7c394e1 + + + + int64_t + availableLevels + structCesium3DTiles_1_1ImplicitTiling.html + a415e3e502da2339fc09b8f1ccbccdb6d + + + + Cesium3DTiles::Subtrees + subtrees + structCesium3DTiles_1_1ImplicitTiling.html + ae6c9dc51fa309eba3ef1d2672a5b58da + + + + static constexpr const char * + TypeName + structCesium3DTiles_1_1ImplicitTiling.html + ac590baf0b03e2ecdc29e5a9a654d05d3 + + + + + Cesium3DTilesReader::ImplicitTilingReader + classCesium3DTilesReader_1_1ImplicitTilingReader.html + + + ImplicitTilingReader + classCesium3DTilesReader_1_1ImplicitTilingReader.html + afc7fa32dcbdedf37dc422ae8972005f8 + () + + + CesiumJsonReader::JsonReaderOptions & + getOptions + classCesium3DTilesReader_1_1ImplicitTilingReader.html + a8def5c327e25e3df2535d2bf1511ef1e + () + + + const CesiumJsonReader::JsonReaderOptions & + getOptions + classCesium3DTilesReader_1_1ImplicitTilingReader.html + a988959b79c0d51b75b6a8568ded44d0a + () const + + + CesiumJsonReader::ReadJsonResult< Cesium3DTiles::ImplicitTiling > + readFromJson + classCesium3DTilesReader_1_1ImplicitTilingReader.html + ad668d2eb74013a55c882c16b71251566 + (const std::span< const std::byte > &data) const + + + CesiumJsonReader::ReadJsonResult< Cesium3DTiles::ImplicitTiling > + readFromJson + classCesium3DTilesReader_1_1ImplicitTilingReader.html + a3f69a7d27326d8cb0afb3027d4f93b35 + (const rapidjson::Value &value) const + + + CesiumJsonReader::ReadJsonResult< std::vector< Cesium3DTiles::ImplicitTiling > > + readArrayFromJson + classCesium3DTilesReader_1_1ImplicitTilingReader.html + af9063fce6120949d0e2dd4f55cabca89 + (const rapidjson::Value &value) const + + + + Cesium3DTilesContent::ImplicitTilingUtilities + classCesium3DTilesContent_1_1ImplicitTilingUtilities.html + + static std::string + resolveUrl + classCesium3DTilesContent_1_1ImplicitTilingUtilities.html + a76075ad810b0717a4dc38dfecb91374f + (const std::string &baseUrl, const std::string &urlTemplate, const CesiumGeometry::QuadtreeTileID &quadtreeID) + + + static std::string + resolveUrl + classCesium3DTilesContent_1_1ImplicitTilingUtilities.html + afe71d529e8da19fde55ab16495ea96b7 + (const std::string &baseUrl, const std::string &urlTemplate, const CesiumGeometry::OctreeTileID &octreeID) + + + static double + computeLevelDenominator + classCesium3DTilesContent_1_1ImplicitTilingUtilities.html + aa2401bc6debf7821c1e992f807d89f2f + (uint32_t level) noexcept + + + static uint64_t + computeMortonIndex + classCesium3DTilesContent_1_1ImplicitTilingUtilities.html + ae4c5e2a350f9d7c279c7136d6e78bae2 + (const CesiumGeometry::QuadtreeTileID &tileID) + + + static uint64_t + computeMortonIndex + classCesium3DTilesContent_1_1ImplicitTilingUtilities.html + a52ae81faa2c5b8fd1d557e7a74b69c82 + (const CesiumGeometry::OctreeTileID &tileID) + + + static uint64_t + computeRelativeMortonIndex + classCesium3DTilesContent_1_1ImplicitTilingUtilities.html + a111964d175bc909f4785f08444f648b5 + (const CesiumGeometry::QuadtreeTileID &subtreeID, const CesiumGeometry::QuadtreeTileID &tileID) + + + static uint64_t + computeRelativeMortonIndex + classCesium3DTilesContent_1_1ImplicitTilingUtilities.html + abc1353ff6372255fa43ca5a37bb9a649 + (const CesiumGeometry::OctreeTileID &subtreeRootID, const CesiumGeometry::OctreeTileID &tileID) + + + static CesiumGeometry::QuadtreeTileID + getSubtreeRootID + classCesium3DTilesContent_1_1ImplicitTilingUtilities.html + a6b528c809f0f78bffba680208112dce2 + (uint32_t subtreeLevels, const CesiumGeometry::QuadtreeTileID &tileID) noexcept + + + static CesiumGeometry::OctreeTileID + getSubtreeRootID + classCesium3DTilesContent_1_1ImplicitTilingUtilities.html + a6404d5d51d40150ea60f3f2642fd7222 + (uint32_t subtreeLevels, const CesiumGeometry::OctreeTileID &tileID) noexcept + + + static CesiumGeometry::QuadtreeTileID + absoluteTileIDToRelative + classCesium3DTilesContent_1_1ImplicitTilingUtilities.html + afe7df68555efc8baa3d3a7fc5ca6e8d7 + (const CesiumGeometry::QuadtreeTileID &rootID, const CesiumGeometry::QuadtreeTileID &tileID) noexcept + + + static CesiumGeometry::OctreeTileID + absoluteTileIDToRelative + classCesium3DTilesContent_1_1ImplicitTilingUtilities.html + a4a5d83775add829b4d208bc628a89561 + (const CesiumGeometry::OctreeTileID &rootID, const CesiumGeometry::OctreeTileID &tileID) noexcept + + + static QuadtreeChildren + getChildren + classCesium3DTilesContent_1_1ImplicitTilingUtilities.html + aaea3cbe5dcbb7620b541e5049e46d383 + (const CesiumGeometry::QuadtreeTileID &tileID) noexcept + + + static OctreeChildren + getChildren + classCesium3DTilesContent_1_1ImplicitTilingUtilities.html + aa7ab59433e9ef614ab9d697e90ec7de5 + (const CesiumGeometry::OctreeTileID &tileID) noexcept + + + static Cesium3DTiles::BoundingVolume + computeBoundingVolume + classCesium3DTilesContent_1_1ImplicitTilingUtilities.html + a9c37f31c952aadb100e6582e8bf66c21 + (const Cesium3DTiles::BoundingVolume &rootBoundingVolume, const CesiumGeometry::QuadtreeTileID &tileID, const CesiumGeospatial::Ellipsoid &ellipsoid=CesiumGeospatial::Ellipsoid::WGS84) noexcept + + + static Cesium3DTiles::BoundingVolume + computeBoundingVolume + classCesium3DTilesContent_1_1ImplicitTilingUtilities.html + ac8130776b5682d097f37a56ae62d9955 + (const Cesium3DTiles::BoundingVolume &rootBoundingVolume, const CesiumGeometry::OctreeTileID &tileID, const CesiumGeospatial::Ellipsoid &ellipsoid=CesiumGeospatial::Ellipsoid::WGS84) noexcept + + + static CesiumGeospatial::BoundingRegion + computeBoundingVolume + classCesium3DTilesContent_1_1ImplicitTilingUtilities.html + a45308bd06019c6fa7fa19860f54ebfa1 + (const CesiumGeospatial::BoundingRegion &rootBoundingVolume, const CesiumGeometry::QuadtreeTileID &tileID, const CesiumGeospatial::Ellipsoid &ellipsoid=CesiumGeospatial::Ellipsoid::WGS84) noexcept + + + static CesiumGeospatial::BoundingRegion + computeBoundingVolume + classCesium3DTilesContent_1_1ImplicitTilingUtilities.html + abd9f70dbdb912807323689709a99bc02 + (const CesiumGeospatial::BoundingRegion &rootBoundingVolume, const CesiumGeometry::OctreeTileID &tileID, const CesiumGeospatial::Ellipsoid &ellipsoid=CesiumGeospatial::Ellipsoid::WGS84) noexcept + + + static CesiumGeometry::OrientedBoundingBox + computeBoundingVolume + classCesium3DTilesContent_1_1ImplicitTilingUtilities.html + ab88b63dc506f1208e852cd29771af568 + (const CesiumGeometry::OrientedBoundingBox &rootBoundingVolume, const CesiumGeometry::QuadtreeTileID &tileID) noexcept + + + static CesiumGeometry::OrientedBoundingBox + computeBoundingVolume + classCesium3DTilesContent_1_1ImplicitTilingUtilities.html + a813349866bcd6c5ec461a9d24f9c7ad0 + (const CesiumGeometry::OrientedBoundingBox &rootBoundingVolume, const CesiumGeometry::OctreeTileID &tileID) noexcept + + + static CesiumGeospatial::S2CellBoundingVolume + computeBoundingVolume + classCesium3DTilesContent_1_1ImplicitTilingUtilities.html + a57766660df9c87e72db46bce5b2f9924 + (const CesiumGeospatial::S2CellBoundingVolume &rootBoundingVolume, const CesiumGeometry::QuadtreeTileID &tileID, const CesiumGeospatial::Ellipsoid &ellipsoid=CesiumGeospatial::Ellipsoid::WGS84) noexcept + + + static CesiumGeospatial::S2CellBoundingVolume + computeBoundingVolume + classCesium3DTilesContent_1_1ImplicitTilingUtilities.html + a2d428583e6c82ba848e310fe750ef31c + (const CesiumGeospatial::S2CellBoundingVolume &rootBoundingVolume, const CesiumGeometry::OctreeTileID &tileID, const CesiumGeospatial::Ellipsoid &ellipsoid=CesiumGeospatial::Ellipsoid::WGS84) noexcept + + + + CesiumGltf::IndexFromAccessor + structCesiumGltf_1_1IndexFromAccessor.html + + int64_t + operator() + structCesiumGltf_1_1IndexFromAccessor.html + a76f90e0904b0cb334643fcbbebbefea6 + (std::monostate) + + + int64_t + operator() + structCesiumGltf_1_1IndexFromAccessor.html + a3d0a4046d501c243113aaa41fa65d566 + (const CesiumGltf::AccessorView< T > &value) + + + int64_t + index + structCesiumGltf_1_1IndexFromAccessor.html + a74ebac504fd44c8f58b2e1fa7219feba + + + + + CesiumGltf::IndicesForFaceFromAccessor + structCesiumGltf_1_1IndicesForFaceFromAccessor.html + + std::array< int64_t, 3 > + operator() + structCesiumGltf_1_1IndicesForFaceFromAccessor.html + aafcc6bef548575fe35546daf4ba448e6 + (std::monostate) + + + std::array< int64_t, 3 > + operator() + structCesiumGltf_1_1IndicesForFaceFromAccessor.html + a216e9baca8f7fd6a991f29bea2ad9e0a + (const AccessorView< T > &value) + + + int64_t + faceIndex + structCesiumGltf_1_1IndicesForFaceFromAccessor.html + a5234eeba249ff317ab9ec598cdd0c124 + + + + int64_t + vertexCount + structCesiumGltf_1_1IndicesForFaceFromAccessor.html + acf9d39f409e42520f9fd6033265cae9d + + + + int32_t + primitiveMode + structCesiumGltf_1_1IndicesForFaceFromAccessor.html + af0f94a9c14c2fc169c25c0b049adb150 + + + + + CesiumGltf::InstanceAttributeSemantics + structCesiumGltf_1_1InstanceAttributeSemantics.html + + static const std::string + TRANSLATION + structCesiumGltf_1_1InstanceAttributeSemantics.html + a39488f689dd3993058bc8f66eb978e93 + + + + static const std::string + ROTATION + structCesiumGltf_1_1InstanceAttributeSemantics.html + a08c90dac54c6fd03944a08f06e814ba0 + + + + static const std::string + SCALE + structCesiumGltf_1_1InstanceAttributeSemantics.html + a81db6b2bf62f2befb88c27da5e93d17c + + + + static const std::array< std::string, 8 > + FEATURE_ID_n + structCesiumGltf_1_1InstanceAttributeSemantics.html + aacd84e0f12cb8503dc858e0b1d45c18a + + + + + CesiumJsonReader::IntegerJsonHandler + classCesiumJsonReader_1_1IntegerJsonHandler.html + typename T + CesiumJsonReader::JsonHandler + + void + reset + classCesiumJsonReader_1_1IntegerJsonHandler.html + aa1dc60c44b5439bbbee7e5fadc24a77d + (IJsonHandler *pParent, T *pInteger) + + + T * + getObject + classCesiumJsonReader_1_1IntegerJsonHandler.html + afa317c4839c422706d9707c35af4aca2 + () + + + virtual IJsonHandler * + readInt32 + classCesiumJsonReader_1_1IntegerJsonHandler.html + ab321b88a4877d2f2b4885b2c8729948c + (int32_t i) override + + + virtual IJsonHandler * + readUint32 + classCesiumJsonReader_1_1IntegerJsonHandler.html + a5d9498254d411e82fa6ecc33eeee41bc + (uint32_t i) override + + + virtual IJsonHandler * + readInt64 + classCesiumJsonReader_1_1IntegerJsonHandler.html + abdd41e60a85c72e2ef73715ec7b18700 + (int64_t i) override + + + virtual IJsonHandler * + readUint64 + classCesiumJsonReader_1_1IntegerJsonHandler.html + a76a8c455b7c60814428d6c3355871489 + (uint64_t i) override + + + virtual IJsonHandler * + readDouble + classCesiumJsonReader_1_1IntegerJsonHandler.html + a647afa1c3fcf0f6d646afe795886b8ea + (double d) override + + + virtual void + reportWarning + classCesiumJsonReader_1_1IntegerJsonHandler.html + af8134db41605e4146f7c84c65557fd31 + (const std::string &warning, std::vector< std::string > &&context) override + + + + CesiumGeometry::InterpolatedVertex + structCesiumGeometry_1_1InterpolatedVertex.html + + constexpr bool + operator== + structCesiumGeometry_1_1InterpolatedVertex.html + ab568d2e4c317de4b8e57d0a72b976e82 + (const InterpolatedVertex &other) const noexcept + + + constexpr bool + operator!= + structCesiumGeometry_1_1InterpolatedVertex.html + a3096f913d3949bed8f6ee390245c8fed + (const InterpolatedVertex &other) const noexcept + + + int + first + structCesiumGeometry_1_1InterpolatedVertex.html + accee1d9ca1efb09e443891d717aaf7c6 + + + + int + second + structCesiumGeometry_1_1InterpolatedVertex.html + ad434be9be59cd9c4dd5f4b6982a22c49 + + + + double + t + structCesiumGeometry_1_1InterpolatedVertex.html + aa5e6178ad9052193734d34f01395f490 + + + + + CesiumGltf::AnimationSampler::Interpolation + structCesiumGltf_1_1AnimationSampler_1_1Interpolation.html + + static const std::string + LINEAR + structCesiumGltf_1_1AnimationSampler_1_1Interpolation.html + a55254cf21bdbd20dcf2511d41bbc528c + + + + static const std::string + STEP + structCesiumGltf_1_1AnimationSampler_1_1Interpolation.html + ad51f10aa46ff58ba89a3523538fa5474 + + + + static const std::string + CUBICSPLINE + structCesiumGltf_1_1AnimationSampler_1_1Interpolation.html + a0dc0e8a0a0ce205d13b23a47903658a9 + + + + + CesiumGeometry::IntersectionTests + classCesiumGeometry_1_1IntersectionTests.html + + static std::optional< glm::dvec3 > + rayPlane + classCesiumGeometry_1_1IntersectionTests.html + ae85b6aecffcb8332c835cca6b478ad03 + (const Ray &ray, const Plane &plane) noexcept + + + static std::optional< glm::dvec2 > + rayEllipsoid + classCesiumGeometry_1_1IntersectionTests.html + a5b2efc7f8944dd7641a2823c3d1bb2b6 + (const Ray &ray, const glm::dvec3 &radii) noexcept + + + static bool + pointInTriangle + classCesiumGeometry_1_1IntersectionTests.html + a86d260111721b2c355a1a5bcf373d94c + (const glm::dvec2 &point, const glm::dvec2 &triangleVertA, const glm::dvec2 &triangleVertB, const glm::dvec2 &triangleVertC) noexcept + + + static bool + pointInTriangle + classCesiumGeometry_1_1IntersectionTests.html + a1989753ca8a0ea7f2f62b3a0df892b29 + (const glm::dvec3 &point, const glm::dvec3 &triangleVertA, const glm::dvec3 &triangleVertB, const glm::dvec3 &triangleVertC) noexcept + + + static bool + pointInTriangle + classCesiumGeometry_1_1IntersectionTests.html + a6bcf68911b2f35d0eb9a162a46ec0a48 + (const glm::dvec3 &point, const glm::dvec3 &triangleVertA, const glm::dvec3 &triangleVertB, const glm::dvec3 &triangleVertC, glm::dvec3 &barycentricCoordinates) noexcept + + + static std::optional< glm::dvec3 > + rayTriangle + classCesiumGeometry_1_1IntersectionTests.html + a4ff305f4193325db881e0359e269e317 + (const Ray &ray, const glm::dvec3 &p0, const glm::dvec3 &p1, const glm::dvec3 &p2, bool cullBackFaces=false) + + + static std::optional< double > + rayTriangleParametric + classCesiumGeometry_1_1IntersectionTests.html + a82f34da6c30d8e3402c7cea2032d37c5 + (const Ray &ray, const glm::dvec3 &p0, const glm::dvec3 &p1, const glm::dvec3 &p2, bool cullBackFaces=false) + + + static std::optional< glm::dvec3 > + rayAABB + classCesiumGeometry_1_1IntersectionTests.html + a646aeff4ffc851cd7b4b5a1377bb381e + (const Ray &ray, const AxisAlignedBox &aabb) + + + static std::optional< double > + rayAABBParametric + classCesiumGeometry_1_1IntersectionTests.html + a88883b0a131be4e3d827f0700df5f835 + (const Ray &ray, const AxisAlignedBox &aabb) + + + static std::optional< glm::dvec3 > + rayOBB + classCesiumGeometry_1_1IntersectionTests.html + a27ffcac5fa7a6fb419d5d148b975657f + (const Ray &ray, const OrientedBoundingBox &obb) + + + static std::optional< double > + rayOBBParametric + classCesiumGeometry_1_1IntersectionTests.html + a1c67415f8fc888d973c3f71939e5d11c + (const Ray &ray, const OrientedBoundingBox &obb) + + + static std::optional< glm::dvec3 > + raySphere + classCesiumGeometry_1_1IntersectionTests.html + aa4b810b2e32416e74e2f7068b7a368ce + (const Ray &ray, const BoundingSphere &sphere) + + + static std::optional< double > + raySphereParametric + classCesiumGeometry_1_1IntersectionTests.html + a1ac8914b5ec48122682a2071fd707444 + (const Ray &ray, const BoundingSphere &sphere) + + + + CesiumGltfContent::GltfUtilities::IntersectResult + structCesiumGltfContent_1_1GltfUtilities_1_1IntersectResult.html + + std::optional< RayGltfHit > + hit + structCesiumGltfContent_1_1GltfUtilities_1_1IntersectResult.html + a741bf2c5dbca8b73e916ff3ddd4c83cb + + + + std::vector< std::string > + warnings + structCesiumGltfContent_1_1GltfUtilities_1_1IntersectResult.html + aa5376613eb2af2e320aa511fbc1680ed + + + + + CesiumUtility::IntrusivePointer + classCesiumUtility_1_1IntrusivePointer.html + class T + + + IntrusivePointer + classCesiumUtility_1_1IntrusivePointer.html + addd8a621acb70b27eede0b2b3c0159cd + (T *p=nullptr) noexcept + + + + IntrusivePointer + classCesiumUtility_1_1IntrusivePointer.html + a6da37310d34090aae0597209913a9d4b + (const IntrusivePointer< T > &rhs) noexcept + + + + IntrusivePointer + classCesiumUtility_1_1IntrusivePointer.html + a78dfde115322a90143c380e6a71f179f + (const IntrusivePointer< U > &rhs) noexcept + + + + IntrusivePointer + classCesiumUtility_1_1IntrusivePointer.html + a2d91ff099aa1a3a6112b197fccdf20ab + (IntrusivePointer< T > &&rhs) noexcept + + + + IntrusivePointer + classCesiumUtility_1_1IntrusivePointer.html + a5d65044afa6e2fdbe8b9bc8a0a0319fe + (IntrusivePointer< U > &&rhs) noexcept + + + + ~IntrusivePointer + classCesiumUtility_1_1IntrusivePointer.html + acb51ab4648372358b8dd6a60b8c4ae26 + () noexcept + + + T & + emplace + classCesiumUtility_1_1IntrusivePointer.html + ae2d6e87844a2c4983387d4feee41cfc4 + (ConstructorArgumentTypes &&... constructorArguments) + + + void + reset + classCesiumUtility_1_1IntrusivePointer.html + a61927c086b04ed5631e89e293f9d4762 + () + + + IntrusivePointer & + operator= + classCesiumUtility_1_1IntrusivePointer.html + a2bc346b0d3182cb6ae6ef9b3f775b645 + (const IntrusivePointer &rhs) noexcept + + + IntrusivePointer & + operator= + classCesiumUtility_1_1IntrusivePointer.html + a664189509d487ced2cc7cec185a5e29c + (const IntrusivePointer< U > &rhs) noexcept + + + IntrusivePointer & + operator= + classCesiumUtility_1_1IntrusivePointer.html + a37df608a9f762f7f132b0d363c1c4c5f + (IntrusivePointer &&rhs) noexcept + + + IntrusivePointer & + operator= + classCesiumUtility_1_1IntrusivePointer.html + aa76833242b6c9514ce3bdafc126a4323 + (T *p) noexcept + + + T & + operator* + classCesiumUtility_1_1IntrusivePointer.html + a5c2a158d44a21e621b6e44bd8360bbbb + () const noexcept + + + T * + operator-> + classCesiumUtility_1_1IntrusivePointer.html + a0b7b55c93655c45a4b3d7afbb4d95faa + () const noexcept + + + + operator bool + classCesiumUtility_1_1IntrusivePointer.html + a5fa1b6053fc911d4a200b545837f62c6 + () const noexcept + + + T * + get + classCesiumUtility_1_1IntrusivePointer.html + ae199180250f57d3bff965cae887b1412 + () const noexcept + + + bool + operator== + classCesiumUtility_1_1IntrusivePointer.html + a0001e742980a2edc2d32987c446dc839 + (const IntrusivePointer< T > &rhs) const noexcept + + + bool + operator== + classCesiumUtility_1_1IntrusivePointer.html + a1c7b9905ea3f93780f7cde6460103cc9 + (const IntrusivePointer< U > &rhs) const noexcept + + + bool + operator!= + classCesiumUtility_1_1IntrusivePointer.html + a6e7aa7b341b32aaf5fe6c47b014ef306 + (const IntrusivePointer< T > &rhs) const noexcept + + + bool + operator== + classCesiumUtility_1_1IntrusivePointer.html + aed2fffe4cb520d28547e117848e6b4af + (const T *pRhs) const noexcept + + + bool + operator!= + classCesiumUtility_1_1IntrusivePointer.html + a38276baf8eb65f3051c78d2b0232a89f + (const T *pRhs) const noexcept + + + + CesiumRasterOverlays::IonRasterOverlay + classCesiumRasterOverlays_1_1IonRasterOverlay.html + CesiumRasterOverlays::RasterOverlay + + + IonRasterOverlay + classCesiumRasterOverlays_1_1IonRasterOverlay.html + ad1c5b0a0a87abfd6ec7f280ae9ae8000 + (const std::string &name, int64_t ionAssetID, const std::string &ionAccessToken, const RasterOverlayOptions &overlayOptions={}, const std::string &ionAssetEndpointUrl="https://api.cesium.com/") + + + virtual CesiumAsync::Future< CreateTileProviderResult > + createTileProvider + classCesiumRasterOverlays_1_1IonRasterOverlay.html + ae0a203f4dcb4489754aa9129765aa4ca + (const CesiumAsync::AsyncSystem &asyncSystem, const std::shared_ptr< CesiumAsync::IAssetAccessor > &pAssetAccessor, const std::shared_ptr< CesiumUtility::CreditSystem > &pCreditSystem, const std::shared_ptr< IPrepareRasterOverlayRendererResources > &pPrepareRendererResources, const std::shared_ptr< spdlog::logger > &pLogger, CesiumUtility::IntrusivePointer< const RasterOverlay > pOwner) const override + + + + CesiumRasterOverlays::IPrepareRasterOverlayRendererResources + classCesiumRasterOverlays_1_1IPrepareRasterOverlayRendererResources.html + + virtual void * + prepareRasterInLoadThread + classCesiumRasterOverlays_1_1IPrepareRasterOverlayRendererResources.html + afe9169e7fd318e7235d0e38ea4371584 + (CesiumGltf::ImageAsset &image, const std::any &rendererOptions)=0 + + + virtual void * + prepareRasterInMainThread + classCesiumRasterOverlays_1_1IPrepareRasterOverlayRendererResources.html + ad47cb3aea9927494583d1494a1b383ce + (RasterOverlayTile &rasterTile, void *pLoadThreadResult)=0 + + + virtual void + freeRaster + classCesiumRasterOverlays_1_1IPrepareRasterOverlayRendererResources.html + aeaf5bc3384b6cd8c4da620733729d851 + (const RasterOverlayTile &rasterTile, void *pLoadThreadResult, void *pMainThreadResult) noexcept=0 + + + + Cesium3DTilesSelection::IPrepareRendererResources + classCesium3DTilesSelection_1_1IPrepareRendererResources.html + CesiumRasterOverlays::IPrepareRasterOverlayRendererResources + + virtual CesiumAsync::Future< TileLoadResultAndRenderResources > + prepareInLoadThread + classCesium3DTilesSelection_1_1IPrepareRendererResources.html + adab6d8fa1ab89ac6d5479049930424f7 + (const CesiumAsync::AsyncSystem &asyncSystem, TileLoadResult &&tileLoadResult, const glm::dmat4 &transform, const std::any &rendererOptions)=0 + + + virtual void * + prepareInMainThread + classCesium3DTilesSelection_1_1IPrepareRendererResources.html + a64b6b51736d92fc283b1fc1e80cbe660 + (Tile &tile, void *pLoadThreadResult)=0 + + + virtual void + free + classCesium3DTilesSelection_1_1IPrepareRendererResources.html + a2d047553e0a227094a7e428515aafcf4 + (Tile &tile, void *pLoadThreadResult, void *pMainThreadResult) noexcept=0 + + + virtual void + attachRasterInMainThread + classCesium3DTilesSelection_1_1IPrepareRendererResources.html + a43a99582bb62579fac17bb513cba8619 + (const Tile &tile, int32_t overlayTextureCoordinateID, const CesiumRasterOverlays::RasterOverlayTile &rasterTile, void *pMainThreadRendererResources, const glm::dvec2 &translation, const glm::dvec2 &scale)=0 + + + virtual void + detachRasterInMainThread + classCesium3DTilesSelection_1_1IPrepareRendererResources.html + a0c5a962093bf8bc302e6758fb4451e24 + (const Tile &tile, int32_t overlayTextureCoordinateID, const CesiumRasterOverlays::RasterOverlayTile &rasterTile, void *pMainThreadRendererResources) noexcept=0 + + + + CesiumGltf::IsMetadataArray + structCesiumGltf_1_1IsMetadataArray.html + typename... T + + + CesiumGltf::IsMetadataArray< PropertyArrayCopy< T > > + structCesiumGltf_1_1IsMetadataArray_3_01PropertyArrayCopy_3_01T_01_4_01_4.html + typename T + + + CesiumGltf::IsMetadataArray< PropertyArrayView< T > > + structCesiumGltf_1_1IsMetadataArray_3_01PropertyArrayView_3_01T_01_4_01_4.html + typename T + + + CesiumGltf::IsMetadataArray< T > + structCesiumGltf_1_1IsMetadataArray_3_01T_01_4.html + typename T + + + CesiumGltf::IsMetadataBoolean + structCesiumGltf_1_1IsMetadataBoolean.html + typename... T + + + CesiumGltf::IsMetadataBoolean< bool > + structCesiumGltf_1_1IsMetadataBoolean_3_01bool_01_4.html + + + CesiumGltf::IsMetadataBoolean< T > + structCesiumGltf_1_1IsMetadataBoolean_3_01T_01_4.html + typename T + + + CesiumGltf::IsMetadataBooleanArray + structCesiumGltf_1_1IsMetadataBooleanArray.html + typename... T + + + CesiumGltf::IsMetadataBooleanArray< PropertyArrayView< bool > > + structCesiumGltf_1_1IsMetadataBooleanArray_3_01PropertyArrayView_3_01bool_01_4_01_4.html + + + CesiumGltf::IsMetadataBooleanArray< T > + structCesiumGltf_1_1IsMetadataBooleanArray_3_01T_01_4.html + typename T + + + CesiumGltf::IsMetadataFloating + structCesiumGltf_1_1IsMetadataFloating.html + typename... T + + + CesiumGltf::IsMetadataFloating< double > + structCesiumGltf_1_1IsMetadataFloating_3_01double_01_4.html + + + CesiumGltf::IsMetadataFloating< float > + structCesiumGltf_1_1IsMetadataFloating_3_01float_01_4.html + + + CesiumGltf::IsMetadataFloating< T > + structCesiumGltf_1_1IsMetadataFloating_3_01T_01_4.html + typename T + + + CesiumGltf::IsMetadataInteger + structCesiumGltf_1_1IsMetadataInteger.html + typename... T + + + CesiumGltf::IsMetadataInteger< int16_t > + structCesiumGltf_1_1IsMetadataInteger_3_01int16__t_01_4.html + + + CesiumGltf::IsMetadataInteger< int32_t > + structCesiumGltf_1_1IsMetadataInteger_3_01int32__t_01_4.html + + + CesiumGltf::IsMetadataInteger< int64_t > + structCesiumGltf_1_1IsMetadataInteger_3_01int64__t_01_4.html + + + CesiumGltf::IsMetadataInteger< int8_t > + structCesiumGltf_1_1IsMetadataInteger_3_01int8__t_01_4.html + + + CesiumGltf::IsMetadataInteger< T > + structCesiumGltf_1_1IsMetadataInteger_3_01T_01_4.html + typename T + + + CesiumGltf::IsMetadataInteger< uint16_t > + structCesiumGltf_1_1IsMetadataInteger_3_01uint16__t_01_4.html + + + CesiumGltf::IsMetadataInteger< uint32_t > + structCesiumGltf_1_1IsMetadataInteger_3_01uint32__t_01_4.html + + + CesiumGltf::IsMetadataInteger< uint64_t > + structCesiumGltf_1_1IsMetadataInteger_3_01uint64__t_01_4.html + + + CesiumGltf::IsMetadataInteger< uint8_t > + structCesiumGltf_1_1IsMetadataInteger_3_01uint8__t_01_4.html + + + CesiumGltf::IsMetadataMatN + structCesiumGltf_1_1IsMetadataMatN.html + typename... T + + + CesiumGltf::IsMetadataMatN< glm::mat< n, n, T, P > > + structCesiumGltf_1_1IsMetadataMatN_3_01glm_1_1mat_3_01n_00_01n_00_01T_00_01P_01_4_01_4.html + glm::length_t n + typename T + glm::qualifier P + CesiumGltf::IsMetadataScalar< T > + + + CesiumGltf::IsMetadataMatN< T > + structCesiumGltf_1_1IsMetadataMatN_3_01T_01_4.html + typename T + + + CesiumGltf::IsMetadataNumeric + structCesiumGltf_1_1IsMetadataNumeric.html + typename... T + + + CesiumGltf::IsMetadataNumeric< T > + structCesiumGltf_1_1IsMetadataNumeric_3_01T_01_4.html + typename T + + static constexpr bool + value + structCesiumGltf_1_1IsMetadataNumeric_3_01T_01_4.html + ad54b4a03663453454c58cdb1cd3deb54 + + + + + CesiumGltf::IsMetadataNumericArray + structCesiumGltf_1_1IsMetadataNumericArray.html + typename... T + + + CesiumGltf::IsMetadataNumericArray< PropertyArrayCopy< T > > + structCesiumGltf_1_1IsMetadataNumericArray_3_01PropertyArrayCopy_3_01T_01_4_01_4.html + typename T + + static constexpr bool + value + structCesiumGltf_1_1IsMetadataNumericArray_3_01PropertyArrayCopy_3_01T_01_4_01_4.html + a586e63107eb96869f69339ef1f467dd5 + + + + + CesiumGltf::IsMetadataNumericArray< PropertyArrayView< T > > + structCesiumGltf_1_1IsMetadataNumericArray_3_01PropertyArrayView_3_01T_01_4_01_4.html + typename T + + static constexpr bool + value + structCesiumGltf_1_1IsMetadataNumericArray_3_01PropertyArrayView_3_01T_01_4_01_4.html + ae661bd0eddf9b3443b2e624b8e86fcb3 + + + + + CesiumGltf::IsMetadataNumericArray< T > + structCesiumGltf_1_1IsMetadataNumericArray_3_01T_01_4.html + typename T + + + CesiumGltf::IsMetadataScalar + structCesiumGltf_1_1IsMetadataScalar.html + typename... T + + + CesiumGltf::IsMetadataScalar< double > + structCesiumGltf_1_1IsMetadataScalar_3_01double_01_4.html + + + CesiumGltf::IsMetadataScalar< float > + structCesiumGltf_1_1IsMetadataScalar_3_01float_01_4.html + + + CesiumGltf::IsMetadataScalar< int16_t > + structCesiumGltf_1_1IsMetadataScalar_3_01int16__t_01_4.html + + + CesiumGltf::IsMetadataScalar< int32_t > + structCesiumGltf_1_1IsMetadataScalar_3_01int32__t_01_4.html + + + CesiumGltf::IsMetadataScalar< int64_t > + structCesiumGltf_1_1IsMetadataScalar_3_01int64__t_01_4.html + + + CesiumGltf::IsMetadataScalar< int8_t > + structCesiumGltf_1_1IsMetadataScalar_3_01int8__t_01_4.html + + + CesiumGltf::IsMetadataScalar< T > + structCesiumGltf_1_1IsMetadataScalar_3_01T_01_4.html + typename T + + + CesiumGltf::IsMetadataScalar< uint16_t > + structCesiumGltf_1_1IsMetadataScalar_3_01uint16__t_01_4.html + + + CesiumGltf::IsMetadataScalar< uint32_t > + structCesiumGltf_1_1IsMetadataScalar_3_01uint32__t_01_4.html + + + CesiumGltf::IsMetadataScalar< uint64_t > + structCesiumGltf_1_1IsMetadataScalar_3_01uint64__t_01_4.html + + + CesiumGltf::IsMetadataScalar< uint8_t > + structCesiumGltf_1_1IsMetadataScalar_3_01uint8__t_01_4.html + + + CesiumGltf::IsMetadataString + structCesiumGltf_1_1IsMetadataString.html + typename... T + + + CesiumGltf::IsMetadataString< std::string_view > + structCesiumGltf_1_1IsMetadataString_3_01std_1_1string__view_01_4.html + + + CesiumGltf::IsMetadataString< T > + structCesiumGltf_1_1IsMetadataString_3_01T_01_4.html + typename T + + + CesiumGltf::IsMetadataStringArray + structCesiumGltf_1_1IsMetadataStringArray.html + typename... T + + + CesiumGltf::IsMetadataStringArray< PropertyArrayView< std::string_view > > + structCesiumGltf_1_1IsMetadataStringArray_3_01PropertyArrayView_3_01std_1_1string__view_01_4_01_4.html + + + CesiumGltf::IsMetadataStringArray< T > + structCesiumGltf_1_1IsMetadataStringArray_3_01T_01_4.html + typename T + + + CesiumGltf::IsMetadataVecN + structCesiumGltf_1_1IsMetadataVecN.html + typename... T + + + CesiumGltf::IsMetadataVecN< glm::vec< n, T, P > > + structCesiumGltf_1_1IsMetadataVecN_3_01glm_1_1vec_3_01n_00_01T_00_01P_01_4_01_4.html + glm::length_t n + typename T + glm::qualifier P + CesiumGltf::IsMetadataScalar< T > + + + CesiumGltf::IsMetadataVecN< T > + structCesiumGltf_1_1IsMetadataVecN_3_01T_01_4.html + typename T + + + CesiumAsync::ITaskProcessor + classCesiumAsync_1_1ITaskProcessor.html + + virtual + ~ITaskProcessor + classCesiumAsync_1_1ITaskProcessor.html + ae1b06d95c7e37b68c5510c18945e9d5d + ()=default + + + virtual void + startTask + classCesiumAsync_1_1ITaskProcessor.html + a9e22f39f2534c1adfdc0052e16669afc + (std::function< void()> f)=0 + + + + Cesium3DTilesContent::OctreeChildren::iterator + classCesium3DTilesContent_1_1OctreeChildren_1_1iterator.html + + std::forward_iterator_tag + iterator_category + classCesium3DTilesContent_1_1OctreeChildren_1_1iterator.html + a517204076d1a8b5e32ba3149b7bbe334 + + + + CesiumGeometry::OctreeTileID + value_type + classCesium3DTilesContent_1_1OctreeChildren_1_1iterator.html + a015ee827382f45c9e46c5840974bda83 + + + + void + difference_type + classCesium3DTilesContent_1_1OctreeChildren_1_1iterator.html + ab87f42b774bc39f41a5adc7e780958b0 + + + + CesiumGeometry::OctreeTileID * + pointer + classCesium3DTilesContent_1_1OctreeChildren_1_1iterator.html + a371a79ee624ecab3ac5da3702e9dc827 + + + + CesiumGeometry::OctreeTileID & + reference + classCesium3DTilesContent_1_1OctreeChildren_1_1iterator.html + a1a09820f4dcaac72852d929c3f04ba30 + + + + + iterator + classCesium3DTilesContent_1_1OctreeChildren_1_1iterator.html + a87023f3920c7a8f517a38bf92fcdd264 + (const CesiumGeometry::OctreeTileID &parentTileID, bool isEnd) noexcept + + + const CesiumGeometry::OctreeTileID & + operator* + classCesium3DTilesContent_1_1OctreeChildren_1_1iterator.html + a2264ec07041f8222f6ea1d3a3702874d + () const + + + const CesiumGeometry::OctreeTileID * + operator-> + classCesium3DTilesContent_1_1OctreeChildren_1_1iterator.html + ace8d9dd8a9bf8e83fd646f38b303a3dc + () const + + + iterator & + operator++ + classCesium3DTilesContent_1_1OctreeChildren_1_1iterator.html + a59c6006b55fa0db9d12440a2f93e0679 + () + + + iterator + operator++ + classCesium3DTilesContent_1_1OctreeChildren_1_1iterator.html + aaf4534293b861d80f6c1718cc0707e4f + (int) + + + bool + operator== + classCesium3DTilesContent_1_1OctreeChildren_1_1iterator.html + a365ebcae60cb776fc7c70d89c5a85aeb + (const iterator &rhs) const noexcept + + + bool + operator!= + classCesium3DTilesContent_1_1OctreeChildren_1_1iterator.html + ac87a473a0ec7d8b25e5a582f43ec358d + (const iterator &rhs) const noexcept + + + + Cesium3DTilesContent::QuadtreeChildren::iterator + classCesium3DTilesContent_1_1QuadtreeChildren_1_1iterator.html + + std::forward_iterator_tag + iterator_category + classCesium3DTilesContent_1_1QuadtreeChildren_1_1iterator.html + a74dbcd0de7410f29f51484f028acfc52 + + + + CesiumGeometry::QuadtreeTileID + value_type + classCesium3DTilesContent_1_1QuadtreeChildren_1_1iterator.html + ac9bd4c267bfb96013d9da996e21c276b + + + + void + difference_type + classCesium3DTilesContent_1_1QuadtreeChildren_1_1iterator.html + a2b968d0b54e9ea3f4cedf74877a1c775 + + + + CesiumGeometry::QuadtreeTileID * + pointer + classCesium3DTilesContent_1_1QuadtreeChildren_1_1iterator.html + ac5337f738c0f229878ff01769830dc66 + + + + CesiumGeometry::QuadtreeTileID & + reference + classCesium3DTilesContent_1_1QuadtreeChildren_1_1iterator.html + a17d11d01a06079da1bf17392c18bbb96 + + + + + iterator + classCesium3DTilesContent_1_1QuadtreeChildren_1_1iterator.html + afa12da18634e0d29804e717ce1945b3a + (const CesiumGeometry::QuadtreeTileID &parentTileID, bool isEnd) noexcept + + + const CesiumGeometry::QuadtreeTileID & + operator* + classCesium3DTilesContent_1_1QuadtreeChildren_1_1iterator.html + ad524070caf5cc6419778bae5220f950a + () const + + + const CesiumGeometry::QuadtreeTileID * + operator-> + classCesium3DTilesContent_1_1QuadtreeChildren_1_1iterator.html + a6ed2517cda40fc7e770ea65f9a8e973f + () const + + + iterator & + operator++ + classCesium3DTilesContent_1_1QuadtreeChildren_1_1iterator.html + aaba20f978cf8bf379b8c646cf6471afc + () + + + iterator + operator++ + classCesium3DTilesContent_1_1QuadtreeChildren_1_1iterator.html + a227edb6f0ca7873296a1e205665a160e + (int) + + + bool + operator== + classCesium3DTilesContent_1_1QuadtreeChildren_1_1iterator.html + ad8b3a9c86ae87cf6aa4660ead80b843f + (const iterator &rhs) const noexcept + + + bool + operator!= + classCesium3DTilesContent_1_1QuadtreeChildren_1_1iterator.html + a9c168fca1ca18eb365c9d5c0094b764c + (const iterator &rhs) const noexcept + + + + Cesium3DTilesSelection::ITileExcluder + classCesium3DTilesSelection_1_1ITileExcluder.html + + virtual void + startNewFrame + classCesium3DTilesSelection_1_1ITileExcluder.html + a5e25be27879df4d3c2dd9a03f305ecb3 + () noexcept + + + virtual bool + shouldExclude + classCesium3DTilesSelection_1_1ITileExcluder.html + a474f536c03f70c6934023074dcf6d0bc + (const Tile &tile) const noexcept=0 + + + + Cesium3DTilesSelection::ITilesetHeightSampler + classCesium3DTilesSelection_1_1ITilesetHeightSampler.html + + virtual CesiumAsync::Future< SampleHeightResult > + sampleHeights + classCesium3DTilesSelection_1_1ITilesetHeightSampler.html + a6a25736a00ea21fe661ca2dac34f8405 + (const CesiumAsync::AsyncSystem &asyncSystem, std::vector< CesiumGeospatial::Cartographic > &&positions)=0 + + + + CesiumJsonReader::JsonHandler + classCesiumJsonReader_1_1JsonHandler.html + CesiumJsonReader::IJsonHandler + + virtual IJsonHandler * + readNull + classCesiumJsonReader_1_1JsonHandler.html + a01fbb5306c806c1d574db4643c1f6d99 + () override + + + virtual IJsonHandler * + readBool + classCesiumJsonReader_1_1JsonHandler.html + ad5da111cc51cc6efbb08f58f22ec9754 + (bool b) override + + + virtual IJsonHandler * + readInt32 + classCesiumJsonReader_1_1JsonHandler.html + a1ea3a376d363caa01a3889a1c5b41ab6 + (int32_t i) override + + + virtual IJsonHandler * + readUint32 + classCesiumJsonReader_1_1JsonHandler.html + ac99f7c1d7bc76d647a32224057d83293 + (uint32_t i) override + + + virtual IJsonHandler * + readInt64 + classCesiumJsonReader_1_1JsonHandler.html + a8b6de7d2abb3e507054697bbed8b6fca + (int64_t i) override + + + virtual IJsonHandler * + readUint64 + classCesiumJsonReader_1_1JsonHandler.html + a1c3050c287390a78b3c0902d082e977f + (uint64_t i) override + + + virtual IJsonHandler * + readDouble + classCesiumJsonReader_1_1JsonHandler.html + ad60f0905ad998e59163ed29124b82d2c + (double d) override + + + virtual IJsonHandler * + readString + classCesiumJsonReader_1_1JsonHandler.html + a95cf23bf65519f9ace5e92698f430ecc + (const std::string_view &str) override + + + virtual IJsonHandler * + readObjectStart + classCesiumJsonReader_1_1JsonHandler.html + a3096f970544c85f58bfe6c7cbda6dfc4 + () override + + + virtual IJsonHandler * + readObjectKey + classCesiumJsonReader_1_1JsonHandler.html + ae1485094c6848a547613e149f4ed8745 + (const std::string_view &str) override + + + virtual IJsonHandler * + readObjectEnd + classCesiumJsonReader_1_1JsonHandler.html + aa910ec0cc0b423fc7da0ad9f19d108c8 + () override + + + virtual IJsonHandler * + readArrayStart + classCesiumJsonReader_1_1JsonHandler.html + ab48b2c3aff8be25a75b6cf9cd9adf513 + () override + + + virtual IJsonHandler * + readArrayEnd + classCesiumJsonReader_1_1JsonHandler.html + a583ada52ddfef765e665cc87d2bd6a20 + () override + + + virtual void + reportWarning + classCesiumJsonReader_1_1JsonHandler.html + a8c5efe7c4a40586c751bc4788025627b + (const std::string &warning, std::vector< std::string > &&context=std::vector< std::string >()) override + + + void + reset + classCesiumJsonReader_1_1JsonHandler.html + ac3b50c71aec4504a9634bb50a4332f9f + (IJsonHandler *pParent) + + + IJsonHandler * + parent + classCesiumJsonReader_1_1JsonHandler.html + ab3124f81a414ca226a65da0f0981cd13 + () + + + IJsonHandler * + ignoreAndReturnToParent + classCesiumJsonReader_1_1JsonHandler.html + a5c9c57876c5bc1c1a59ff36f0b11392b + () + + + IJsonHandler * + ignoreAndContinue + classCesiumJsonReader_1_1JsonHandler.html + aa543f3212ef91616cd5d600e82f41009 + () + + + + CesiumUtility::JsonHelpers + classCesiumUtility_1_1JsonHelpers.html + + static std::optional< double > + getScalarProperty + classCesiumUtility_1_1JsonHelpers.html + a28da139d05ec260830a149ca2ed2303d + (const rapidjson::Value &tileJson, const std::string &key) + + + static std::optional< glm::dmat4x4 > + getTransformProperty + classCesiumUtility_1_1JsonHelpers.html + a5adb5fe9ebe02c531aca4e93dda8684f + (const rapidjson::Value &tileJson, const std::string &key) + + + static std::optional< std::vector< double > > + getDoubles + classCesiumUtility_1_1JsonHelpers.html + aae60cd58d9fb1803c9e8a537181b6b37 + (const rapidjson::Value &json, int32_t expectedSize, const std::string &key) + + + static std::string + getStringOrDefault + classCesiumUtility_1_1JsonHelpers.html + a10c537aa87dafda5a5a2652cb7f79795 + (const rapidjson::Value &json, const std::string &key, const std::string &defaultValue) + + + static std::string + getStringOrDefault + classCesiumUtility_1_1JsonHelpers.html + a618796570c119412d2ab6cab7bba7fbe + (const rapidjson::Value &json, const std::string &defaultValue) + + + static double + getDoubleOrDefault + classCesiumUtility_1_1JsonHelpers.html + afc2a279e4ab78186c742adcee6c18fef + (const rapidjson::Value &json, const std::string &key, double defaultValue) + + + static double + getDoubleOrDefault + classCesiumUtility_1_1JsonHelpers.html + a9c7e20c2d668057bf030ac612cf7dbf3 + (const rapidjson::Value &json, double defaultValue) + + + static uint32_t + getUint32OrDefault + classCesiumUtility_1_1JsonHelpers.html + a84e07fffc790798c290d100b57563022 + (const rapidjson::Value &json, const std::string &key, uint32_t defaultValue) + + + static uint32_t + getUint32OrDefault + classCesiumUtility_1_1JsonHelpers.html + a4f167370451a58ec95c1bd3e48cef78e + (const rapidjson::Value &json, uint32_t defaultValue) + + + static int32_t + getInt32OrDefault + classCesiumUtility_1_1JsonHelpers.html + a0adfaaee2c87ede6cd1bc40cb6ce2d6b + (const rapidjson::Value &json, const std::string &key, int32_t defaultValue) + + + static int32_t + getInt32OrDefault + classCesiumUtility_1_1JsonHelpers.html + a722371ef23d4ed21ff9aba62081c3213 + (const rapidjson::Value &json, int32_t defaultValue) + + + static uint64_t + getUint64OrDefault + classCesiumUtility_1_1JsonHelpers.html + ad7410fe059454ddb8fb331640cb7bd79 + (const rapidjson::Value &json, const std::string &key, uint64_t defaultValue) + + + static uint64_t + getUint64OrDefault + classCesiumUtility_1_1JsonHelpers.html + af31da3918d291dae8e67611f8648409e + (const rapidjson::Value &json, uint64_t defaultValue) + + + static int64_t + getInt64OrDefault + classCesiumUtility_1_1JsonHelpers.html + a8a25d1cf081887a80f81acba50a1c914 + (const rapidjson::Value &json, const std::string &key, int64_t defaultValue) + + + static int64_t + getInt64OrDefault + classCesiumUtility_1_1JsonHelpers.html + a999a8923fee43793b8e28ed852d486f2 + (const rapidjson::Value &json, int64_t defaultValue) + + + static bool + getBoolOrDefault + classCesiumUtility_1_1JsonHelpers.html + a99371a7ebfedcdd79564295b62e79032 + (const rapidjson::Value &json, const std::string &key, bool defaultValue) + + + static bool + getBoolOrDefault + classCesiumUtility_1_1JsonHelpers.html + a2cb528cd4be14b73afac690fb949840a + (const rapidjson::Value &json, bool defaultValue) + + + static std::vector< std::string > + getStrings + classCesiumUtility_1_1JsonHelpers.html + ad549aec1fc730d0969ac8a10ba6bf265 + (const rapidjson::Value &json, const std::string &key) + + + static std::vector< int64_t > + getInt64s + classCesiumUtility_1_1JsonHelpers.html + a8e3be2acb7878c84176f80c40e8eb2fd + (const rapidjson::Value &json, const std::string &key) + + + + CesiumJsonReader::JsonObjectJsonHandler + classCesiumJsonReader_1_1JsonObjectJsonHandler.html + CesiumJsonReader::JsonHandler + + void + reset + classCesiumJsonReader_1_1JsonObjectJsonHandler.html + aba24a567583a78f2f284d103a65880c2 + (IJsonHandler *pParent, CesiumUtility::JsonValue *pValue) + + + virtual IJsonHandler * + readNull + classCesiumJsonReader_1_1JsonObjectJsonHandler.html + a62f4fe03fc734b0f504d52c12ab24295 + () override + + + virtual IJsonHandler * + readBool + classCesiumJsonReader_1_1JsonObjectJsonHandler.html + aa106b0cf0c1676828d3ce2858aa29596 + (bool b) override + + + virtual IJsonHandler * + readInt32 + classCesiumJsonReader_1_1JsonObjectJsonHandler.html + af2d959346d9a71dc39457a3598f60c7c + (int32_t i) override + + + virtual IJsonHandler * + readUint32 + classCesiumJsonReader_1_1JsonObjectJsonHandler.html + a954d6472f4e71cc75a8e227617ddc27b + (uint32_t i) override + + + virtual IJsonHandler * + readInt64 + classCesiumJsonReader_1_1JsonObjectJsonHandler.html + ad1720e8a6aab424235520079343ee8a3 + (int64_t i) override + + + virtual IJsonHandler * + readUint64 + classCesiumJsonReader_1_1JsonObjectJsonHandler.html + a9e304b0ac8a55e2110d40ebd07601fdb + (uint64_t i) override + + + virtual IJsonHandler * + readDouble + classCesiumJsonReader_1_1JsonObjectJsonHandler.html + ae3120bf23ef53e1bce8db3cb1fbf75f8 + (double d) override + + + virtual IJsonHandler * + readString + classCesiumJsonReader_1_1JsonObjectJsonHandler.html + a3adf83d2696809af48050aa67f8d31ef + (const std::string_view &str) override + + + virtual IJsonHandler * + readObjectStart + classCesiumJsonReader_1_1JsonObjectJsonHandler.html + a4a970a1b0d175950ef993899aabccb6e + () override + + + virtual IJsonHandler * + readObjectKey + classCesiumJsonReader_1_1JsonObjectJsonHandler.html + a16df36d9468d5f6bb6d821a7baf552ec + (const std::string_view &str) override + + + virtual IJsonHandler * + readObjectEnd + classCesiumJsonReader_1_1JsonObjectJsonHandler.html + ac7056105f3b5a3f0b43862a368361c16 + () override + + + virtual IJsonHandler * + readArrayStart + classCesiumJsonReader_1_1JsonObjectJsonHandler.html + a98c7eb1d9c67317b63d42dfce09f40e3 + () override + + + virtual IJsonHandler * + readArrayEnd + classCesiumJsonReader_1_1JsonObjectJsonHandler.html + adf44cd5bf8135b672446175b9afdb569 + () override + + + + CesiumJsonReader::JsonReader + classCesiumJsonReader_1_1JsonReader.html + + static ReadJsonResult< typename T::ValueType > + readJson + classCesiumJsonReader_1_1JsonReader.html + ad63e66b7e27f634da5222f1896930663 + (const std::span< const std::byte > &data, T &handler) + + + static ReadJsonResult< typename T::ValueType > + readJson + classCesiumJsonReader_1_1JsonReader.html + ad18da21d5ad47fdacfe11e8b428e6541 + (const rapidjson::Value &jsonValue, T &handler) + + + + CesiumJsonReader::JsonReaderOptions + classCesiumJsonReader_1_1JsonReaderOptions.html + + bool + getCaptureUnknownProperties + classCesiumJsonReader_1_1JsonReaderOptions.html + af0a6463ed4ddc292930734a8c6090373 + () const + + + void + setCaptureUnknownProperties + classCesiumJsonReader_1_1JsonReaderOptions.html + a38982076503b448cb150e692f6842cf8 + (bool value) + + + void + registerExtension + classCesiumJsonReader_1_1JsonReaderOptions.html + a9b189d5e64b47a54aa128a7c50a1fff0 + (const std::string &extensionName) + + + void + registerExtension + classCesiumJsonReader_1_1JsonReaderOptions.html + ae539217e7e25d8be649c262e84ea9428 + () + + + ExtensionState + getExtensionState + classCesiumJsonReader_1_1JsonReaderOptions.html + a81e0798c697b733e60ea37a85d96e970 + (const std::string &extensionName) const + + + void + setExtensionState + classCesiumJsonReader_1_1JsonReaderOptions.html + ad0997561c011cb063d8589bf58394359 + (const std::string &extensionName, ExtensionState newState) + + + std::unique_ptr< IExtensionJsonHandler > + createExtensionHandler + classCesiumJsonReader_1_1JsonReaderOptions.html + a0b91dd8fb519c2b8814c0642ab42630c + (const std::string_view &extensionName, const std::string &extendedObjectType) const + + + + CesiumUtility::JsonValue + classCesiumUtility_1_1JsonValue.html + + std::nullptr_t + Null + classCesiumUtility_1_1JsonValue.html + af36b27fef032568520cde7490fab7cba + + + + bool + Bool + classCesiumUtility_1_1JsonValue.html + a7d9da704fb45d5917f5f04e3153417cc + + + + std::string + String + classCesiumUtility_1_1JsonValue.html + a96e2f9c0104ea4cce62826a32135b1ef + + + + std::map< std::string, JsonValue > + Object + classCesiumUtility_1_1JsonValue.html + a16fc73aeddef5ec406e3b8c39fa64214 + + + + std::vector< JsonValue > + Array + classCesiumUtility_1_1JsonValue.html + a491a669c2859bff17d27fd319d335121 + + + + + JsonValue + classCesiumUtility_1_1JsonValue.html + aa5722a1ba1ad0688cb6693a48ba273db + () noexcept + + + + JsonValue + classCesiumUtility_1_1JsonValue.html + a769e90bf6036c24cc4ee6cd04bef4a10 + (std::nullptr_t) noexcept + + + + JsonValue + classCesiumUtility_1_1JsonValue.html + aadf8af1b10b26e002cee9d65baef182e + (double v) noexcept + + + + JsonValue + classCesiumUtility_1_1JsonValue.html + a196b17f64a2f11d4c2eb72f4940950c4 + (std::int8_t v) noexcept + + + + JsonValue + classCesiumUtility_1_1JsonValue.html + ac3154806c70de3d0bb6ed371ed536df8 + (std::uint8_t v) noexcept + + + + JsonValue + classCesiumUtility_1_1JsonValue.html + a370f2359359a8fd5f56382dcc3786d00 + (std::int16_t v) noexcept + + + + JsonValue + classCesiumUtility_1_1JsonValue.html + a6245b32c77212aec8e9fc6e746cf53b5 + (std::uint16_t v) noexcept + + + + JsonValue + classCesiumUtility_1_1JsonValue.html + ace099d24bdc438e09d85b4f67712ca30 + (std::int32_t v) noexcept + + + + JsonValue + classCesiumUtility_1_1JsonValue.html + abb799d5608208e84d1c3111b8bbb6817 + (std::uint32_t v) noexcept + + + + JsonValue + classCesiumUtility_1_1JsonValue.html + a9fee0eb37eb3547708717e71b47c9083 + (std::int64_t v) noexcept + + + + JsonValue + classCesiumUtility_1_1JsonValue.html + ad0d52e897953d862c8e98b7de1c5345f + (std::uint64_t v) noexcept + + + + JsonValue + classCesiumUtility_1_1JsonValue.html + a7df7a61c42fca485655a9ad6cf7b4ffc + (bool v) noexcept + + + + JsonValue + classCesiumUtility_1_1JsonValue.html + abaf3731fdfd5a8d08b3af28bfc497164 + (const std::string &v) + + + + JsonValue + classCesiumUtility_1_1JsonValue.html + a7714cb0c630e55ed2cebfaf927550e25 + (std::string &&v) noexcept + + + + JsonValue + classCesiumUtility_1_1JsonValue.html + a982b3e1f378db1b69e369dc92e106e0a + (const char *v) + + + + JsonValue + classCesiumUtility_1_1JsonValue.html + a1f31783762190d26e670ab3895aab4ec + (const std::map< std::string, JsonValue > &v) + + + + JsonValue + classCesiumUtility_1_1JsonValue.html + aaf5d92f215fc3156626db49675f9acb0 + (std::map< std::string, JsonValue > &&v) + + + + JsonValue + classCesiumUtility_1_1JsonValue.html + ae528c77a779bf8729b5c91962b1fa6b5 + (const std::vector< JsonValue > &v) + + + + JsonValue + classCesiumUtility_1_1JsonValue.html + a46250cb35a9ad393af6e83c3da96508e + (std::vector< JsonValue > &&v) noexcept + + + + JsonValue + classCesiumUtility_1_1JsonValue.html + a615371f90b6bf598ab7dcdb30e9fa001 + (std::initializer_list< JsonValue > v) + + + + JsonValue + classCesiumUtility_1_1JsonValue.html + ae9bbe1fefcd8223dec9f678f2ab288d2 + (std::initializer_list< std::pair< const std::string, JsonValue > > v) + + + const JsonValue * + getValuePtrForKey + classCesiumUtility_1_1JsonValue.html + ac0f2b8923c0766c7da8681a2d68f6081 + (const std::string &key) const + + + JsonValue * + getValuePtrForKey + classCesiumUtility_1_1JsonValue.html + a4dee5c711481f907bb3dc3bea90901a1 + (const std::string &key) + + + const T * + getValuePtrForKey + classCesiumUtility_1_1JsonValue.html + a824b02e0fc31115bd09a1fab5a538803 + (const std::string &key) const + + + T * + getValuePtrForKey + classCesiumUtility_1_1JsonValue.html + a9f268f78292c5bc4b149f8a49c298dc8 + (const std::string &key) + + + std::optional< To > + getSafeNumericalValueForKey + classCesiumUtility_1_1JsonValue.html + a1b860aad13d08fd650ce83b96c0e2ab9 + (const std::string &key) const + + + To + getSafeNumericalValueOrDefaultForKey + classCesiumUtility_1_1JsonValue.html + ad9399000ffdc3abbfb3c17f6349745ac + (const std::string &key, To defaultValue) const + + + bool + hasKey + classCesiumUtility_1_1JsonValue.html + af775c4456b40dc17c8de411827d16eb5 + (const std::string &key) const + + + std::optional< To > + getSafeNumber + classCesiumUtility_1_1JsonValue.html + ad0dee4aacf4b2ca0ad82831ed1449e18 + () const + + + To + getSafeNumberOrDefault + classCesiumUtility_1_1JsonValue.html + ab5a5ead79e48599687b3b8a5b4e047c1 + (To defaultValue) const noexcept + + + const JsonValue::Object & + getObject + classCesiumUtility_1_1JsonValue.html + abe4e050f85471083ff176a605fc370d3 + () const + + + const JsonValue::String & + getString + classCesiumUtility_1_1JsonValue.html + a2ff2d67784c7a35525d6a5d9f1ce34ac + () const + + + const JsonValue::Array & + getArray + classCesiumUtility_1_1JsonValue.html + ae0aae4d3a8662c37990debf27fa05fc8 + () const + + + std::vector< std::string > + getArrayOfStrings + classCesiumUtility_1_1JsonValue.html + a054b8bde34d02acba8976b891e51bacc + (const std::string &defaultString) const + + + bool + getBool + classCesiumUtility_1_1JsonValue.html + a1d70cccb551d72c0d3fe0f76d87aa413 + () const + + + double + getDouble + classCesiumUtility_1_1JsonValue.html + ab8dc3346b03fb35be55b7c0bfebe6306 + () const + + + std::uint64_t + getUint64 + classCesiumUtility_1_1JsonValue.html + a826e32c7697176e36e05eed9a9620bdd + () const + + + std::int64_t + getInt64 + classCesiumUtility_1_1JsonValue.html + aae761d6713d5fb4e092cfb67e613e719 + () const + + + bool + getBoolOrDefault + classCesiumUtility_1_1JsonValue.html + ab4236c46d3d0a759561c1c5d83c22295 + (bool defaultValue) const noexcept + + + const JsonValue::String + getStringOrDefault + classCesiumUtility_1_1JsonValue.html + a761352b5697d0e6a5a047f25d75d80d5 + (String defaultValue) const + + + double + getDoubleOrDefault + classCesiumUtility_1_1JsonValue.html + a4d837204523d4743f93661eabe939b63 + (double defaultValue) const noexcept + + + std::uint64_t + getUint64OrDefault + classCesiumUtility_1_1JsonValue.html + ac1797cd659e8c880bce2b9fb215a001b + (std::uint64_t defaultValue) const noexcept + + + std::int64_t + getInt64OrDefault + classCesiumUtility_1_1JsonValue.html + a94370394ba90da4680f0905df256e584 + (std::int64_t defaultValue) const noexcept + + + bool + isNull + classCesiumUtility_1_1JsonValue.html + a7f56cb2b96116521c65c3bc8ac4cea6f + () const noexcept + + + bool + isNumber + classCesiumUtility_1_1JsonValue.html + a375fd6de1238969f19627a77a04ae4a9 + () const noexcept + + + bool + isBool + classCesiumUtility_1_1JsonValue.html + a7047a867f5e2f03c769f4927a40e9f48 + () const noexcept + + + bool + isString + classCesiumUtility_1_1JsonValue.html + aa7bec2d04f65039a6467fde8ad339947 + () const noexcept + + + bool + isObject + classCesiumUtility_1_1JsonValue.html + aaba6074acd037b6a2804d2c58af1795a + () const noexcept + + + bool + isArray + classCesiumUtility_1_1JsonValue.html + aa2d2854c45d0a4ca4af2f9630de7f09d + () const noexcept + + + bool + isDouble + classCesiumUtility_1_1JsonValue.html + a3c2fb7cd27a4d78f55fb6ab2cd7af390 + () const noexcept + + + bool + isUint64 + classCesiumUtility_1_1JsonValue.html + a9dde7f809b10bfa2d4655a6c1c0e5317 + () const noexcept + + + bool + isInt64 + classCesiumUtility_1_1JsonValue.html + a2ceb69079dd4a1c44652120aee5120b7 + () const noexcept + + + bool + operator== + classCesiumUtility_1_1JsonValue.html + a82e6e45dbc4fb88d1d38bf60671d9f83 + (const JsonValue &rhs) const noexcept + + + int64_t + getSizeBytes + classCesiumUtility_1_1JsonValue.html + ac6a67b811225f64d13f14917449d079f + () const noexcept + + + std::variant< Null, double, std::uint64_t, std::int64_t, Bool, String, Object, Array > + value + classCesiumUtility_1_1JsonValue.html + a6b26b2a8dd2ec6b9f2ea57b2292de282 + + + + + CesiumJsonWriter::JsonWriter + classCesiumJsonWriter_1_1JsonWriter.html + + virtual bool + Null + classCesiumJsonWriter_1_1JsonWriter.html + acc1e99eb7a57663a340f592da0328155 + () + + + virtual bool + Bool + classCesiumJsonWriter_1_1JsonWriter.html + a79ab6c0e29580a3d37c727384db88983 + (bool b) + + + virtual bool + Int + classCesiumJsonWriter_1_1JsonWriter.html + a17a730c25f4a036b487eea62e07ee8f7 + (int i) + + + virtual bool + Uint + classCesiumJsonWriter_1_1JsonWriter.html + aead10975cdb2d26bbdd999548a905450 + (unsigned int i) + + + virtual bool + Uint64 + classCesiumJsonWriter_1_1JsonWriter.html + ab6cd0c78336670f402abfcc1cc43a35d + (std::uint64_t i) + + + virtual bool + Int64 + classCesiumJsonWriter_1_1JsonWriter.html + afa61b9f6b361bce943991a42992b9ef3 + (std::int64_t i) + + + virtual bool + Double + classCesiumJsonWriter_1_1JsonWriter.html + a4ba3ac4a4d8883a567bf7a5be0e30bda + (double d) + + + virtual bool + RawNumber + classCesiumJsonWriter_1_1JsonWriter.html + a8b2c30c0fd8523690ec3abb3a2e69505 + (const char *str, unsigned int length, bool copy) + + + virtual bool + Key + classCesiumJsonWriter_1_1JsonWriter.html + ab06f4b28fe0541ca9bad7a3181fb6cc9 + (std::string_view string) + + + virtual bool + String + classCesiumJsonWriter_1_1JsonWriter.html + acf9c8523b20f072b95f03d95bba5f2d6 + (std::string_view string) + + + virtual bool + StartObject + classCesiumJsonWriter_1_1JsonWriter.html + a45f0f7e35ca6009c4d261f68167de4a6 + () + + + virtual bool + EndObject + classCesiumJsonWriter_1_1JsonWriter.html + a76aead99bfe3c7ad8e98495b77011715 + () + + + virtual bool + StartArray + classCesiumJsonWriter_1_1JsonWriter.html + afc872d59a1eaab70ab9fc997e5cccba1 + () + + + virtual bool + EndArray + classCesiumJsonWriter_1_1JsonWriter.html + ac4eda9269a1493fcae5251f2500b06ca + () + + + virtual void + Primitive + classCesiumJsonWriter_1_1JsonWriter.html + a460fa8d75f225ac159e2eceebb57422a + (std::int32_t value) + + + virtual void + Primitive + classCesiumJsonWriter_1_1JsonWriter.html + a1f8fae23f6b31ef5e283d8c1a1f2edae + (std::uint32_t value) + + + virtual void + Primitive + classCesiumJsonWriter_1_1JsonWriter.html + abb715661bb29a388f7b91ab794cb7d39 + (std::int64_t value) + + + virtual void + Primitive + classCesiumJsonWriter_1_1JsonWriter.html + ac5bd3d0948be08fa24202443dee78d5a + (std::uint64_t value) + + + virtual void + Primitive + classCesiumJsonWriter_1_1JsonWriter.html + a68e37d66cafc0c2b9e8e61250cdfe1aa + (float value) + + + virtual void + Primitive + classCesiumJsonWriter_1_1JsonWriter.html + aa876a972ad291aeca0bd9212a8b29251 + (double value) + + + virtual void + Primitive + classCesiumJsonWriter_1_1JsonWriter.html + a4696921fdf8f815db3bb8b351279dfdc + (std::nullptr_t value) + + + virtual void + Primitive + classCesiumJsonWriter_1_1JsonWriter.html + abea6f79cbbbb4515ff0814cae6d53b25 + (std::string_view string) + + + virtual void + KeyPrimitive + classCesiumJsonWriter_1_1JsonWriter.html + ad3a25059e9e9d3d6d6b89e0824f5055f + (std::string_view keyName, std::int32_t value) + + + virtual void + KeyPrimitive + classCesiumJsonWriter_1_1JsonWriter.html + ad18c66ecff6d15013ff8a494922628ab + (std::string_view keyName, std::uint32_t value) + + + virtual void + KeyPrimitive + classCesiumJsonWriter_1_1JsonWriter.html + ab3c2ef30330a48c37224a89a1649c999 + (std::string_view keyName, std::int64_t value) + + + virtual void + KeyPrimitive + classCesiumJsonWriter_1_1JsonWriter.html + a3104c432566c77fccad1de6e52cc93cb + (std::string_view keyName, std::uint64_t value) + + + virtual void + KeyPrimitive + classCesiumJsonWriter_1_1JsonWriter.html + a6a79275c703a2cde86a3a08aa392d421 + (std::string_view keyName, std::string_view value) + + + virtual void + KeyPrimitive + classCesiumJsonWriter_1_1JsonWriter.html + a59c90ca41ee8e77b6e47aa2a2061ab44 + (std::string_view keyName, float value) + + + virtual void + KeyPrimitive + classCesiumJsonWriter_1_1JsonWriter.html + a0bdf591f03992c9d47a08620ad1e01b2 + (std::string_view keyName, double value) + + + virtual void + KeyPrimitive + classCesiumJsonWriter_1_1JsonWriter.html + ac998cca7a67ed8c6c05ecb5eff7d2118 + (std::string_view keyName, std::nullptr_t value) + + + virtual void + KeyArray + classCesiumJsonWriter_1_1JsonWriter.html + a6c3c860a7c97e17f2f000a4f7024e202 + (std::string_view keyName, std::function< void(void)> insideArray) + + + virtual void + KeyObject + classCesiumJsonWriter_1_1JsonWriter.html + a8aed938f5bc5c4f0a90403e42a706246 + (std::string_view keyName, std::function< void(void)> insideObject) + + + virtual std::string + toString + classCesiumJsonWriter_1_1JsonWriter.html + a9d8bddb3bf8fa9febeb454b2f00d2418 + () + + + virtual std::string_view + toStringView + classCesiumJsonWriter_1_1JsonWriter.html + adbd572efea8d5f9d6bd93645b77af400 + () + + + virtual std::vector< std::byte > + toBytes + classCesiumJsonWriter_1_1JsonWriter.html + af9660e877cecbf94156e5e8d214140b0 + () + + + void + emplaceError + classCesiumJsonWriter_1_1JsonWriter.html + a8883d9302009936a5da067ded9cde949 + (ErrorStr &&error) + + + void + emplaceWarning + classCesiumJsonWriter_1_1JsonWriter.html + a341dabf6005bbf05b3503f11196e2ed5 + (WarningStr &&warning) + + + const std::vector< std::string > & + getErrors + classCesiumJsonWriter_1_1JsonWriter.html + a370b0ae8b729374837562ab18c896258 + () const + + + const std::vector< std::string > & + getWarnings + classCesiumJsonWriter_1_1JsonWriter.html + ae600b0c3f882d4a1cdc5fb9353f9b45d + () const + + + + CesiumGltf::KhrTextureTransform + classCesiumGltf_1_1KhrTextureTransform.html + + + KhrTextureTransform + classCesiumGltf_1_1KhrTextureTransform.html + ad0a3ac0064be95a3bf2326195b80a0d9 + () noexcept + + + + KhrTextureTransform + classCesiumGltf_1_1KhrTextureTransform.html + a13d816f6ec421ade6aee6453c6f168b7 + (const ExtensionKhrTextureTransform &extension) noexcept + + + KhrTextureTransformStatus + status + classCesiumGltf_1_1KhrTextureTransform.html + aa8072a05a77827a314e2f94fdc9a1809 + () const noexcept + + + glm::dvec2 + offset + classCesiumGltf_1_1KhrTextureTransform.html + ae7c1945055c0e46361452c17f16191bd + () const noexcept + + + double + rotation + classCesiumGltf_1_1KhrTextureTransform.html + a410b4943742c66a8f9d5538649c92181 + () const noexcept + + + glm::dvec2 + rotationSineCosine + classCesiumGltf_1_1KhrTextureTransform.html + a0ede37567921f97459d701f33b425b23 + () const noexcept + + + glm::dvec2 + scale + classCesiumGltf_1_1KhrTextureTransform.html + a5815c6e78753d47cf963076393cd4c9c + () const noexcept + + + glm::dvec2 + applyTransform + classCesiumGltf_1_1KhrTextureTransform.html + aaddbdce2df5a76e04178e7925d83e12c + (double u, double v) const noexcept + + + std::optional< int64_t > + getTexCoordSetIndex + classCesiumGltf_1_1KhrTextureTransform.html + a773b3b6af99fc497faf8f9c8174cdf9b + () const noexcept + + + + CesiumGltf::Ktx2TranscodeTargets + structCesiumGltf_1_1Ktx2TranscodeTargets.html + + + Ktx2TranscodeTargets + structCesiumGltf_1_1Ktx2TranscodeTargets.html + a5083bbc5313e39d2c02fd46c2dfdfe05 + (const SupportedGpuCompressedPixelFormats &supportedFormats, bool preserveHighQuality) + + + GpuCompressedPixelFormat + ETC1S_R + structCesiumGltf_1_1Ktx2TranscodeTargets.html + a774fdd0047d1936ab52d163f7f7804d4 + + + + GpuCompressedPixelFormat + ETC1S_RG + structCesiumGltf_1_1Ktx2TranscodeTargets.html + ae434a835dacfa86f933aedbcf15fa574 + + + + GpuCompressedPixelFormat + ETC1S_RGB + structCesiumGltf_1_1Ktx2TranscodeTargets.html + aadc3df0d4ed64fb97e3b7331efe6bb0b + + + + GpuCompressedPixelFormat + ETC1S_RGBA + structCesiumGltf_1_1Ktx2TranscodeTargets.html + aa0cbfcfff24e8046bcfc91be3eff733f + + + + GpuCompressedPixelFormat + UASTC_R + structCesiumGltf_1_1Ktx2TranscodeTargets.html + a4d9dfc91def24801bf19313b1893e377 + + + + GpuCompressedPixelFormat + UASTC_RG + structCesiumGltf_1_1Ktx2TranscodeTargets.html + a03b3d0fd9e477836bb552f918cc274f3 + + + + GpuCompressedPixelFormat + UASTC_RGB + structCesiumGltf_1_1Ktx2TranscodeTargets.html + a0caf55ba02dc5408b90aeecade97e698 + + + + GpuCompressedPixelFormat + UASTC_RGBA + structCesiumGltf_1_1Ktx2TranscodeTargets.html + ab448dc989a04ea1601db6ee986100ac9 + + + + + CesiumQuantizedMeshTerrain::Layer + structCesiumQuantizedMeshTerrain_1_1Layer.html + CesiumQuantizedMeshTerrain::LayerSpec + + std::optional< CesiumGeospatial::Projection > + getProjection + structCesiumQuantizedMeshTerrain_1_1Layer.html + afdae893f6b73e3911147ed25c064a005 + (const CesiumGeospatial::Ellipsoid &ellipsoid=CesiumGeospatial::Ellipsoid::WGS84) const noexcept + + + std::optional< CesiumGeometry::QuadtreeTilingScheme > + getTilingScheme + structCesiumQuantizedMeshTerrain_1_1Layer.html + ab2f09da93c255a5cac028a426320f1de + (const CesiumGeospatial::Ellipsoid &ellipsoid=CesiumGeospatial::Ellipsoid::WGS84) const noexcept + + + std::optional< CesiumGeospatial::BoundingRegion > + getRootBoundingRegion + structCesiumQuantizedMeshTerrain_1_1Layer.html + afd631bb0d14fe2556e3769c22642567c + (const CesiumGeospatial::Ellipsoid &ellipsoid=CesiumGeospatial::Ellipsoid::WGS84) const noexcept + + + + CesiumQuantizedMeshTerrain::LayerReader + classCesiumQuantizedMeshTerrain_1_1LayerReader.html + + + LayerReader + classCesiumQuantizedMeshTerrain_1_1LayerReader.html + ac9207916a3f250c24c3aa2b9d81d3158 + () + + + CesiumJsonReader::JsonReaderOptions & + getOptions + classCesiumQuantizedMeshTerrain_1_1LayerReader.html + a1fac518682ffb66abc8164f1163510e6 + () + + + const CesiumJsonReader::JsonReaderOptions & + getOptions + classCesiumQuantizedMeshTerrain_1_1LayerReader.html + a37b7c4317e5c04ccfacab6cee354386f + () const + + + CesiumJsonReader::ReadJsonResult< CesiumQuantizedMeshTerrain::Layer > + readFromJson + classCesiumQuantizedMeshTerrain_1_1LayerReader.html + a8684bfc9e3bef1bb53fdb20372ddb2e6 + (const std::span< const std::byte > &data) const + + + CesiumJsonReader::ReadJsonResult< CesiumQuantizedMeshTerrain::Layer > + readFromJson + classCesiumQuantizedMeshTerrain_1_1LayerReader.html + ab45700bdb8bd855058329605069224e0 + (const rapidjson::Value &value) const + + + CesiumJsonReader::ReadJsonResult< std::vector< CesiumQuantizedMeshTerrain::Layer > > + readArrayFromJson + classCesiumQuantizedMeshTerrain_1_1LayerReader.html + a4ee167b8564368e37a2dd2ff4daa9ca9 + (const rapidjson::Value &value) const + + + + CesiumQuantizedMeshTerrain::LayerSpec + structCesiumQuantizedMeshTerrain_1_1LayerSpec.html + CesiumUtility::ExtensibleObject + + int64_t + getSizeBytes + structCesiumQuantizedMeshTerrain_1_1LayerSpec.html + a117dd81e59c8c7cff884953652ac11ea + () const + + + std::string + attribution + structCesiumQuantizedMeshTerrain_1_1LayerSpec.html + adf063c5edff0f092907e0cc01df560ef + + + + std::vector< std::vector< CesiumQuantizedMeshTerrain::AvailabilityRectangle > > + available + structCesiumQuantizedMeshTerrain_1_1LayerSpec.html + a9d6779abbe9d4cd536113480a040bb6a + + + + std::vector< double > + bounds + structCesiumQuantizedMeshTerrain_1_1LayerSpec.html + a77ef760f7232ab63339975cf149af96f + + + + std::string + description + structCesiumQuantizedMeshTerrain_1_1LayerSpec.html + acb7bcb7b780efceedd621863e66bee31 + + + + std::vector< std::string > + extensionsProperty + structCesiumQuantizedMeshTerrain_1_1LayerSpec.html + a3d8e145facc3d2317cc32af7265ddb9a + + + + std::string + format + structCesiumQuantizedMeshTerrain_1_1LayerSpec.html + ab41e43d11c2fe6926358e3fae32bd7dd + + + + int64_t + maxzoom + structCesiumQuantizedMeshTerrain_1_1LayerSpec.html + a759353076c3d16efde5f42fa584a9c64 + + + + int64_t + minzoom + structCesiumQuantizedMeshTerrain_1_1LayerSpec.html + a155481f06e56422e84d4b0c1af48b33e + + + + std::optional< int64_t > + metadataAvailability + structCesiumQuantizedMeshTerrain_1_1LayerSpec.html + ada9abdb5a447724b4f711bf8f22d1fe2 + + + + std::string + name + structCesiumQuantizedMeshTerrain_1_1LayerSpec.html + a29b51fb7dc69915eefc591f78dc329e9 + + + + std::optional< std::string > + parentUrl + structCesiumQuantizedMeshTerrain_1_1LayerSpec.html + a109b229bc247a882ec191b249d6b4893 + + + + std::string + projection + structCesiumQuantizedMeshTerrain_1_1LayerSpec.html + a875f74c507b23e0a690eca18121bfdf4 + + + + std::string + scheme + structCesiumQuantizedMeshTerrain_1_1LayerSpec.html + aed29e366b1dfdc601295658969877639 + + + + std::vector< std::string > + tiles + structCesiumQuantizedMeshTerrain_1_1LayerSpec.html + a6018d6af675320fc9a51f9e18ee48f2f + + + + std::string + version + structCesiumQuantizedMeshTerrain_1_1LayerSpec.html + aed4e99377e8c280abc554fbe476e4329 + + + + static constexpr const char * + TypeName + structCesiumQuantizedMeshTerrain_1_1LayerSpec.html + a28ef1bfbe2ba9eadd2eae03bb8a21442 + + + + + LayerSpec + structCesiumQuantizedMeshTerrain_1_1LayerSpec.html + aa0335095c8d30aa663a721270aadbc17 + ()=default + + + + CesiumQuantizedMeshTerrain::LayerWriter + classCesiumQuantizedMeshTerrain_1_1LayerWriter.html + + + LayerWriter + classCesiumQuantizedMeshTerrain_1_1LayerWriter.html + a23bad9fac66220c3688c10c3d8224692 + () + + + CesiumJsonWriter::ExtensionWriterContext & + getExtensions + classCesiumQuantizedMeshTerrain_1_1LayerWriter.html + ad32420d56dbf8af3c325a008d4034a12 + () + + + const CesiumJsonWriter::ExtensionWriterContext & + getExtensions + classCesiumQuantizedMeshTerrain_1_1LayerWriter.html + addea1d20c10836e108c689fdff888534 + () const + + + LayerWriterResult + write + classCesiumQuantizedMeshTerrain_1_1LayerWriter.html + ae40a913df8e923235696d10a61e59498 + (const CesiumQuantizedMeshTerrain::Layer &layer, const LayerWriterOptions &options=LayerWriterOptions()) const + + + + CesiumQuantizedMeshTerrain::LayerWriterOptions + structCesiumQuantizedMeshTerrain_1_1LayerWriterOptions.html + + bool + prettyPrint + structCesiumQuantizedMeshTerrain_1_1LayerWriterOptions.html + a097a8501a5365748bbea517549ab6482 + + + + + CesiumQuantizedMeshTerrain::LayerWriterResult + structCesiumQuantizedMeshTerrain_1_1LayerWriterResult.html + + std::vector< std::byte > + bytes + structCesiumQuantizedMeshTerrain_1_1LayerWriterResult.html + ab39e0497c056e27984336fc40c94b407 + + + + std::vector< std::string > + errors + structCesiumQuantizedMeshTerrain_1_1LayerWriterResult.html + a2b12318219b7f59dcc1bb66368653abb + + + + std::vector< std::string > + warnings + structCesiumQuantizedMeshTerrain_1_1LayerWriterResult.html + a7f8af4720b4a723a916fc28656f29d8b + + + + + CesiumIonClient::ListTokensOptions + structCesiumIonClient_1_1ListTokensOptions.html + + std::optional< int32_t > + limit + structCesiumIonClient_1_1ListTokensOptions.html + acadd2624b86e398b71628d12a27e2053 + + + + std::optional< int32_t > + page + structCesiumIonClient_1_1ListTokensOptions.html + a5a88a9150ccd5da0b0f6c944d1eb32c0 + + + + std::optional< std::string > + search + structCesiumIonClient_1_1ListTokensOptions.html + a56a3bf6814769eaf3a23605416655139 + + + + std::optional< std::string > + sortBy + structCesiumIonClient_1_1ListTokensOptions.html + a9ef670e14e3ad37a9968322c67df0c80 + + + + std::optional< SortOrder > + sortOrder + structCesiumIonClient_1_1ListTokensOptions.html + af03a162f8d2d9388ce7bd43fa0eaa9ab + + + + + CesiumRasterOverlays::LoadedRasterOverlayImage + structCesiumRasterOverlays_1_1LoadedRasterOverlayImage.html + + int64_t + getSizeBytes + structCesiumRasterOverlays_1_1LoadedRasterOverlayImage.html + a4480c947244b8a95ac502ca5231b4a53 + () const + + + CesiumUtility::IntrusivePointer< CesiumGltf::ImageAsset > + pImage + structCesiumRasterOverlays_1_1LoadedRasterOverlayImage.html + ab71971363cf24ff1815e20e99f93f958 + + + + CesiumGeometry::Rectangle + rectangle + structCesiumRasterOverlays_1_1LoadedRasterOverlayImage.html + a9c83073a0448f74d87e09fdac6f86ef5 + + + + std::vector< CesiumUtility::Credit > + credits + structCesiumRasterOverlays_1_1LoadedRasterOverlayImage.html + a97795997b2a6b1ca8921a16bd872147c + + + + CesiumUtility::ErrorList + errorList + structCesiumRasterOverlays_1_1LoadedRasterOverlayImage.html + a4a76c015e1d8b7b5dd775a8a7ad5ea6f + + + + bool + moreDetailAvailable + structCesiumRasterOverlays_1_1LoadedRasterOverlayImage.html + aafd8ad36124b3929bed23fef4f934705 + + + + + CesiumRasterOverlays::LoadTileImageFromUrlOptions + structCesiumRasterOverlays_1_1LoadTileImageFromUrlOptions.html + + CesiumGeometry::Rectangle + rectangle + structCesiumRasterOverlays_1_1LoadTileImageFromUrlOptions.html + a60ce82c881ec445ba59cdf1a294b98ba + + + + std::vector< CesiumUtility::Credit > + credits + structCesiumRasterOverlays_1_1LoadTileImageFromUrlOptions.html + a8c1a8339f4b5c3b25219291bd9207897 + + + + bool + moreDetailAvailable + structCesiumRasterOverlays_1_1LoadTileImageFromUrlOptions.html + a99e9df655a58521b2255d13e792a086e + + + + bool + allowEmptyImages + structCesiumRasterOverlays_1_1LoadTileImageFromUrlOptions.html + af1d0e01e2d2fad67d57038d38129a721 + + + + + CesiumGeospatial::LocalHorizontalCoordinateSystem + classCesiumGeospatial_1_1LocalHorizontalCoordinateSystem.html + + + LocalHorizontalCoordinateSystem + classCesiumGeospatial_1_1LocalHorizontalCoordinateSystem.html + a95c160d217afeab06b96b2feaa4d3dba + (const Cartographic &origin, LocalDirection xAxisDirection=LocalDirection::East, LocalDirection yAxisDirection=LocalDirection::North, LocalDirection zAxisDirection=LocalDirection::Up, double scaleToMeters=1.0, const Ellipsoid &ellipsoid=CesiumGeospatial::Ellipsoid::WGS84) + + + + LocalHorizontalCoordinateSystem + classCesiumGeospatial_1_1LocalHorizontalCoordinateSystem.html + af6ba2c0169f909d805a6cde147b3883c + (const glm::dvec3 &originEcef, LocalDirection xAxisDirection=LocalDirection::East, LocalDirection yAxisDirection=LocalDirection::North, LocalDirection zAxisDirection=LocalDirection::Up, double scaleToMeters=1.0, const Ellipsoid &ellipsoid=CesiumGeospatial::Ellipsoid::WGS84) + + + + LocalHorizontalCoordinateSystem + classCesiumGeospatial_1_1LocalHorizontalCoordinateSystem.html + aaf605d0fdb98002b2430256cdec40a8c + (const glm::dmat4 &localToEcef) + + + + LocalHorizontalCoordinateSystem + classCesiumGeospatial_1_1LocalHorizontalCoordinateSystem.html + a1c715f85332ab5031db71f32fb2f43c5 + (const glm::dmat4 &localToEcef, const glm::dmat4 &ecefToLocal) + + + const glm::dmat4 & + getLocalToEcefTransformation + classCesiumGeospatial_1_1LocalHorizontalCoordinateSystem.html + aaec3a7f6dd6f3825004adc45bd4f435c + () const noexcept + + + const glm::dmat4 & + getEcefToLocalTransformation + classCesiumGeospatial_1_1LocalHorizontalCoordinateSystem.html + a482d398f8215b946786d888b68c08a1e + () const noexcept + + + glm::dvec3 + localPositionToEcef + classCesiumGeospatial_1_1LocalHorizontalCoordinateSystem.html + a68ef33c7d201a161e7225d7adfeaf513 + (const glm::dvec3 &localPosition) const noexcept + + + glm::dvec3 + ecefPositionToLocal + classCesiumGeospatial_1_1LocalHorizontalCoordinateSystem.html + a70dee277832ce2d39710e3d3abaabd17 + (const glm::dvec3 &ecefPosition) const noexcept + + + glm::dvec3 + localDirectionToEcef + classCesiumGeospatial_1_1LocalHorizontalCoordinateSystem.html + a78562df8c089c4ac33e2cd5c6fd21b2a + (const glm::dvec3 &localDirection) const noexcept + + + glm::dvec3 + ecefDirectionToLocal + classCesiumGeospatial_1_1LocalHorizontalCoordinateSystem.html + a23a7766a5103b6b662f2a24c0b40977b + (const glm::dvec3 &ecefDirection) const noexcept + + + glm::dmat4 + computeTransformationToAnotherLocal + classCesiumGeospatial_1_1LocalHorizontalCoordinateSystem.html + acbe4a635b388827261d406fcb0944c37 + (const LocalHorizontalCoordinateSystem &target) const noexcept + + + + CesiumGltf::Sampler::MagFilter + structCesiumGltf_1_1Sampler_1_1MagFilter.html + + static constexpr int32_t + NEAREST + structCesiumGltf_1_1Sampler_1_1MagFilter.html + aa9d077286b1eb726dcc748662f04040e + + + + static constexpr int32_t + LINEAR + structCesiumGltf_1_1Sampler_1_1MagFilter.html + a4c0540049adfd3ad31cdbd3192999bda + + + + + CesiumGltf::AccessorTypes::MAT2 + structCesiumGltf_1_1AccessorTypes_1_1MAT2.html + typename T + + T + value + structCesiumGltf_1_1AccessorTypes_1_1MAT2.html + aa426ab5617777e131490cfb0d97d5663 + [4] + + + + CesiumGltf::AccessorTypes::MAT3 + structCesiumGltf_1_1AccessorTypes_1_1MAT3.html + typename T + + T + value + structCesiumGltf_1_1AccessorTypes_1_1MAT3.html + afcf12ce689adc3a9df02ffe1e2e79c1c + [9] + + + + CesiumGltf::AccessorTypes::MAT4 + structCesiumGltf_1_1AccessorTypes_1_1MAT4.html + typename T + + T + value + structCesiumGltf_1_1AccessorTypes_1_1MAT4.html + ac144e8a019d82dde5469da0c6c7bf288 + [16] + + + + CesiumGltf::Material + structCesiumGltf_1_1Material.html + CesiumGltf::NamedObject + CesiumGltf::Material::AlphaMode + + int64_t + getSizeBytes + structCesiumGltf_1_1Material.html + a6d289899629f229c2a5944d18b42e726 + () const + + + std::optional< CesiumGltf::MaterialPBRMetallicRoughness > + pbrMetallicRoughness + structCesiumGltf_1_1Material.html + aadb323eca43cd1b4b1e348967906dba1 + + + + std::optional< CesiumGltf::MaterialNormalTextureInfo > + normalTexture + structCesiumGltf_1_1Material.html + a2a10900c103085c0ef356a0ec1e0f490 + + + + std::optional< CesiumGltf::MaterialOcclusionTextureInfo > + occlusionTexture + structCesiumGltf_1_1Material.html + aa84146afc2c3738fafc9b7c78f0b815a + + + + std::optional< CesiumGltf::TextureInfo > + emissiveTexture + structCesiumGltf_1_1Material.html + ab4e0ff3b9d3381da320e883582521dec + + + + std::vector< double > + emissiveFactor + structCesiumGltf_1_1Material.html + a305c67469c7cfe8767d2069f9bb95e72 + + + + std::string + alphaMode + structCesiumGltf_1_1Material.html + a9c1061727c71495d31347075397712db + + + + double + alphaCutoff + structCesiumGltf_1_1Material.html + a22522f29f6af2d5f14748aa1ab5e6601 + + + + bool + doubleSided + structCesiumGltf_1_1Material.html + a70b87aed6585c29455c59b0a942f3449 + + + + static constexpr const char * + TypeName + structCesiumGltf_1_1Material.html + a1701640bd7c88105d82dea2ed0cd0fcd + + + + + CesiumGltf::MaterialNormalTextureInfo + structCesiumGltf_1_1MaterialNormalTextureInfo.html + CesiumGltf::TextureInfo + + int64_t + getSizeBytes + structCesiumGltf_1_1MaterialNormalTextureInfo.html + ad86f2f8f6f186f8e88673cb6e58bb512 + () const + + + double + scale + structCesiumGltf_1_1MaterialNormalTextureInfo.html + af28bcb9f2b701951f04f5d3a0f8116c4 + + + + static constexpr const char * + TypeName + structCesiumGltf_1_1MaterialNormalTextureInfo.html + a5d202269b1d6a4cb72bb0e7f439b0b6a + + + + + CesiumGltfReader::MaterialNormalTextureInfoReader + classCesiumGltfReader_1_1MaterialNormalTextureInfoReader.html + + + MaterialNormalTextureInfoReader + classCesiumGltfReader_1_1MaterialNormalTextureInfoReader.html + a596859991cd3a366525a135c9f6cdd6a + () + + + CesiumJsonReader::JsonReaderOptions & + getOptions + classCesiumGltfReader_1_1MaterialNormalTextureInfoReader.html + aef4ec5e13e2b0975da1d70d69f261919 + () + + + const CesiumJsonReader::JsonReaderOptions & + getOptions + classCesiumGltfReader_1_1MaterialNormalTextureInfoReader.html + a369081540276677b4ede0c8c4454159a + () const + + + CesiumJsonReader::ReadJsonResult< CesiumGltf::MaterialNormalTextureInfo > + readFromJson + classCesiumGltfReader_1_1MaterialNormalTextureInfoReader.html + aad5352e6d57449791a06368b9f85d5e7 + (const std::span< const std::byte > &data) const + + + CesiumJsonReader::ReadJsonResult< CesiumGltf::MaterialNormalTextureInfo > + readFromJson + classCesiumGltfReader_1_1MaterialNormalTextureInfoReader.html + a352d698508e4d32fb33c09664b77454f + (const rapidjson::Value &value) const + + + CesiumJsonReader::ReadJsonResult< std::vector< CesiumGltf::MaterialNormalTextureInfo > > + readArrayFromJson + classCesiumGltfReader_1_1MaterialNormalTextureInfoReader.html + a9c2f2e448228c3d09196a0f9d2430721 + (const rapidjson::Value &value) const + + + + CesiumGltf::MaterialOcclusionTextureInfo + structCesiumGltf_1_1MaterialOcclusionTextureInfo.html + CesiumGltf::TextureInfo + + int64_t + getSizeBytes + structCesiumGltf_1_1MaterialOcclusionTextureInfo.html + a96dbcccaec164c1caf5a72445c14cbcf + () const + + + double + strength + structCesiumGltf_1_1MaterialOcclusionTextureInfo.html + a328dc233e5b17acbaf50e95cfd51ad94 + + + + static constexpr const char * + TypeName + structCesiumGltf_1_1MaterialOcclusionTextureInfo.html + a670672d4eb9ec86907772cfddba83724 + + + + + CesiumGltfReader::MaterialOcclusionTextureInfoReader + classCesiumGltfReader_1_1MaterialOcclusionTextureInfoReader.html + + + MaterialOcclusionTextureInfoReader + classCesiumGltfReader_1_1MaterialOcclusionTextureInfoReader.html + a0d533df12721411273531b166d4cbb39 + () + + + CesiumJsonReader::JsonReaderOptions & + getOptions + classCesiumGltfReader_1_1MaterialOcclusionTextureInfoReader.html + af808dac78275440c766083b3f2f8d172 + () + + + const CesiumJsonReader::JsonReaderOptions & + getOptions + classCesiumGltfReader_1_1MaterialOcclusionTextureInfoReader.html + a2fab9b02263a49043620fb928ab3e537 + () const + + + CesiumJsonReader::ReadJsonResult< CesiumGltf::MaterialOcclusionTextureInfo > + readFromJson + classCesiumGltfReader_1_1MaterialOcclusionTextureInfoReader.html + a10a977b800722f25097088577cad39ee + (const std::span< const std::byte > &data) const + + + CesiumJsonReader::ReadJsonResult< CesiumGltf::MaterialOcclusionTextureInfo > + readFromJson + classCesiumGltfReader_1_1MaterialOcclusionTextureInfoReader.html + aa7925d980f5fb3bba050a52d4d049461 + (const rapidjson::Value &value) const + + + CesiumJsonReader::ReadJsonResult< std::vector< CesiumGltf::MaterialOcclusionTextureInfo > > + readArrayFromJson + classCesiumGltfReader_1_1MaterialOcclusionTextureInfoReader.html + aea6cd2485e92962b66e3d27dc719017e + (const rapidjson::Value &value) const + + + + CesiumGltf::MaterialPBRMetallicRoughness + structCesiumGltf_1_1MaterialPBRMetallicRoughness.html + CesiumUtility::ExtensibleObject + + int64_t + getSizeBytes + structCesiumGltf_1_1MaterialPBRMetallicRoughness.html + a29f58a9e2c311d344770e2201f496105 + () const + + + std::vector< double > + baseColorFactor + structCesiumGltf_1_1MaterialPBRMetallicRoughness.html + a21a844eec27e43a84d29caaed24df292 + + + + std::optional< CesiumGltf::TextureInfo > + baseColorTexture + structCesiumGltf_1_1MaterialPBRMetallicRoughness.html + a8e0b2e191b77dd51fa3da248eb43b47a + + + + double + metallicFactor + structCesiumGltf_1_1MaterialPBRMetallicRoughness.html + a07da921748eddd69c6492cad574458b2 + + + + double + roughnessFactor + structCesiumGltf_1_1MaterialPBRMetallicRoughness.html + acbfcafdce16b421f8913d2554693a266 + + + + std::optional< CesiumGltf::TextureInfo > + metallicRoughnessTexture + structCesiumGltf_1_1MaterialPBRMetallicRoughness.html + a32cb51517c9dda3906725aefc442df2d + + + + static constexpr const char * + TypeName + structCesiumGltf_1_1MaterialPBRMetallicRoughness.html + a15564d7dde7e6bca2060e9181c912606 + + + + + CesiumGltfReader::MaterialPBRMetallicRoughnessReader + classCesiumGltfReader_1_1MaterialPBRMetallicRoughnessReader.html + + + MaterialPBRMetallicRoughnessReader + classCesiumGltfReader_1_1MaterialPBRMetallicRoughnessReader.html + ab1730c0f4b7755f4ea906ed2b9ed5055 + () + + + CesiumJsonReader::JsonReaderOptions & + getOptions + classCesiumGltfReader_1_1MaterialPBRMetallicRoughnessReader.html + a843f90ad80b949efd5f5b8c1830067be + () + + + const CesiumJsonReader::JsonReaderOptions & + getOptions + classCesiumGltfReader_1_1MaterialPBRMetallicRoughnessReader.html + affa08a7ee93ee555618e53c70c75cf59 + () const + + + CesiumJsonReader::ReadJsonResult< CesiumGltf::MaterialPBRMetallicRoughness > + readFromJson + classCesiumGltfReader_1_1MaterialPBRMetallicRoughnessReader.html + a8d292dec4753648e2fc58d8f312e194c + (const std::span< const std::byte > &data) const + + + CesiumJsonReader::ReadJsonResult< CesiumGltf::MaterialPBRMetallicRoughness > + readFromJson + classCesiumGltfReader_1_1MaterialPBRMetallicRoughnessReader.html + adb75afe60ddb9456f65f0dc78a132680 + (const rapidjson::Value &value) const + + + CesiumJsonReader::ReadJsonResult< std::vector< CesiumGltf::MaterialPBRMetallicRoughness > > + readArrayFromJson + classCesiumGltfReader_1_1MaterialPBRMetallicRoughnessReader.html + a5acb84a9313a9f8a57f3f6687ea61a3b + (const rapidjson::Value &value) const + + + + CesiumGltfReader::MaterialReader + classCesiumGltfReader_1_1MaterialReader.html + + + MaterialReader + classCesiumGltfReader_1_1MaterialReader.html + aa0207da21300743955fadad9ac1da83a + () + + + CesiumJsonReader::JsonReaderOptions & + getOptions + classCesiumGltfReader_1_1MaterialReader.html + a6bc3db016ea80c55ba4a98c1c3da4787 + () + + + const CesiumJsonReader::JsonReaderOptions & + getOptions + classCesiumGltfReader_1_1MaterialReader.html + a5e8bec4c91763bbccd98772c661784d4 + () const + + + CesiumJsonReader::ReadJsonResult< CesiumGltf::Material > + readFromJson + classCesiumGltfReader_1_1MaterialReader.html + a4a2c7af0168a90c2cdbd17a46159ed39 + (const std::span< const std::byte > &data) const + + + CesiumJsonReader::ReadJsonResult< CesiumGltf::Material > + readFromJson + classCesiumGltfReader_1_1MaterialReader.html + a00c77a0f12539d22c975100e55c6fd23 + (const rapidjson::Value &value) const + + + CesiumJsonReader::ReadJsonResult< std::vector< CesiumGltf::Material > > + readArrayFromJson + classCesiumGltfReader_1_1MaterialReader.html + adf6d21e9fca724ea0a97acb1488850ba + (const rapidjson::Value &value) const + + + + CesiumUtility::Math + classCesiumUtility_1_1Math.html + + static constexpr glm::vec< L, T, Q > + relativeEpsilonToAbsolute + classCesiumUtility_1_1Math.html + a2e5c624823b80d7b0a9e0d26f9fd1f89 + (const glm::vec< L, T, Q > &a, const glm::vec< L, T, Q > &b, double relativeEpsilon) noexcept + + + static constexpr double + relativeEpsilonToAbsolute + classCesiumUtility_1_1Math.html + aae7f89173323088d19367e42c84a360a + (double a, double b, double relativeEpsilon) noexcept + + + static bool constexpr + equalsEpsilon + classCesiumUtility_1_1Math.html + a548c7372bc2dfc9a27a0780769e1393f + (const glm::vec< L, T, Q > &left, const glm::vec< L, T, Q > &right, double relativeEpsilon) noexcept + + + static constexpr bool + equalsEpsilon + classCesiumUtility_1_1Math.html + a8d401eb548c2fb5516fe0035c91df589 + (double left, double right, double relativeEpsilon) noexcept + + + static constexpr bool + equalsEpsilon + classCesiumUtility_1_1Math.html + a341f580fbf91dd4797e71052fd5e549b + (double left, double right, double relativeEpsilon, double absoluteEpsilon) noexcept + + + static constexpr bool + equalsEpsilon + classCesiumUtility_1_1Math.html + a2437b2df2dc5635233a175acd8fcb7d3 + (const glm::vec< L, T, Q > &left, const glm::vec< L, T, Q > &right, double relativeEpsilon, double absoluteEpsilon) noexcept + + + static constexpr double + sign + classCesiumUtility_1_1Math.html + a4b11770fd4dad64b745158041b8201a1 + (double value) noexcept + + + static constexpr double + signNotZero + classCesiumUtility_1_1Math.html + aa49e5078b2078880c9cd4f676d9e06b2 + (double value) noexcept + + + static double + negativePiToPi + classCesiumUtility_1_1Math.html + a774fc8df675918cc4e88e6dad0ed4fc6 + (double angle) noexcept + + + static double + zeroToTwoPi + classCesiumUtility_1_1Math.html + a8405f313a830db7bffddaa93ec326d44 + (double angle) noexcept + + + static double + mod + classCesiumUtility_1_1Math.html + a09fa9f9fc1f9d46c76042537b99d79fb + (double m, double n) noexcept + + + static constexpr double + degreesToRadians + classCesiumUtility_1_1Math.html + a138ef81f1b65afffdb53fbc39987422f + (double angleDegrees) noexcept + + + static constexpr double + radiansToDegrees + classCesiumUtility_1_1Math.html + a0e7c23a2a21bef46937f36e547b15b0c + (double angleRadians) noexcept + + + static double + lerp + classCesiumUtility_1_1Math.html + aa0897ebec00cb50fe50f01b56b2ed04d + (double p, double q, double time) noexcept + + + static constexpr double + clamp + classCesiumUtility_1_1Math.html + a9c3d238cd21964aee5fff3bf6903ea71 + (double value, double min, double max) noexcept + + + static double + toSNorm + classCesiumUtility_1_1Math.html + a3d538073be66423908acc0f926e010d6 + (double value, double rangeMaximum=255.0) noexcept + + + static constexpr double + fromSNorm + classCesiumUtility_1_1Math.html + ad3bcf60bd07c294f9c85714a97f32b60 + (double value, double rangeMaximum=255.0) noexcept + + + static double + convertLongitudeRange + classCesiumUtility_1_1Math.html + aa13d506da7f26e5f2230d936cf0e096b + (double angle) noexcept + + + static double + roundUp + classCesiumUtility_1_1Math.html + a749681dd18be454482e10ea987d6701d + (double value, double tolerance) noexcept + + + static double + roundDown + classCesiumUtility_1_1Math.html + a92e221d8e61303c8648484420453a265 + (double value, double tolerance) noexcept + + + static glm::vec< 3, T, Q > + perpVec + classCesiumUtility_1_1Math.html + a2e8b378b9b86fcc099fc674da2827d20 + (const glm::vec< 3, T, Q > &v) + + + static glm::qua< T, Q > + rotation + classCesiumUtility_1_1Math.html + a2441e1bfdd248a62f638452d8942f903 + (const glm::vec< 3, T, Q > &vec1, const glm::vec< 3, T, Q > &vec2) + + + static constexpr double + Epsilon1 + classCesiumUtility_1_1Math.html + a5f49ece5936348bdfb4276f38ec0519e + + + + static constexpr double + Epsilon2 + classCesiumUtility_1_1Math.html + a7123d08f65e962764aa6ee4457eccc8d + + + + static constexpr double + Epsilon3 + classCesiumUtility_1_1Math.html + ac8853bf77eaccdb25cce5a7e4c5d6060 + + + + static constexpr double + Epsilon4 + classCesiumUtility_1_1Math.html + a31e393b79481b0c0b9318f2828e78597 + + + + static constexpr double + Epsilon5 + classCesiumUtility_1_1Math.html + ad2096b1cc95e58d679ad877d433a36d1 + + + + static constexpr double + Epsilon6 + classCesiumUtility_1_1Math.html + ac052825dd859f422d324a8c4ba7f4adf + + + + static constexpr double + Epsilon7 + classCesiumUtility_1_1Math.html + ac5541db9f0444cbda0f4aa7cc769b555 + + + + static constexpr double + Epsilon8 + classCesiumUtility_1_1Math.html + af4f2727fa9b615f28abc78214347e917 + + + + static constexpr double + Epsilon9 + classCesiumUtility_1_1Math.html + a2ba1d9ab3b3dfa59f7adcd582c0babc0 + + + + static constexpr double + Epsilon10 + classCesiumUtility_1_1Math.html + a901c053c4fff083723a8bc092569e2f4 + + + + static constexpr double + Epsilon11 + classCesiumUtility_1_1Math.html + ad9506d219f6d8eac53491b2c9bbedf22 + + + + static constexpr double + Epsilon12 + classCesiumUtility_1_1Math.html + a1f66a5cabfbaf7cd501947f946104370 + + + + static constexpr double + Epsilon13 + classCesiumUtility_1_1Math.html + a563a4a3f9b697b36aa2987cb67829b88 + + + + static constexpr double + Epsilon14 + classCesiumUtility_1_1Math.html + a0648bab92bd63f2a005e7e3eced625d9 + + + + static constexpr double + Epsilon15 + classCesiumUtility_1_1Math.html + aaf9b0b85984c72c541924ea8f82653ca + + + + static constexpr double + Epsilon16 + classCesiumUtility_1_1Math.html + a5920a607614607e4379f74e03f42a92a + + + + static constexpr double + Epsilon17 + classCesiumUtility_1_1Math.html + a9e699d3ae56b3610767e098efc952ce8 + + + + static constexpr double + Epsilon18 + classCesiumUtility_1_1Math.html + a8fce427ece258909259993a0607e444f + + + + static constexpr double + Epsilon19 + classCesiumUtility_1_1Math.html + af2fc841d0e9d88c6f75015b3e856bbdc + + + + static constexpr double + Epsilon20 + classCesiumUtility_1_1Math.html + a20d6cf3b2697aec4a681bb4c90505c6f + + + + static constexpr double + Epsilon21 + classCesiumUtility_1_1Math.html + a3b54c28986c1cfa1b7a76bd0e5d45990 + + + + static constexpr double + OnePi + classCesiumUtility_1_1Math.html + a6a41ce03763e1710ba7f54cf176a640b + + + + static constexpr double + TwoPi + classCesiumUtility_1_1Math.html + a4b66b112fcd793f88c5e18cedf0d4071 + + + + static constexpr double + PiOverTwo + classCesiumUtility_1_1Math.html + a539077924731389b2db7c52cd1fcc0ea + + + + + CesiumGltf::Mesh + structCesiumGltf_1_1Mesh.html + CesiumGltf::NamedObject + + int64_t + getSizeBytes + structCesiumGltf_1_1Mesh.html + ac615efcd104f25b52e1ca44dc108d4da + () const + + + std::vector< CesiumGltf::MeshPrimitive > + primitives + structCesiumGltf_1_1Mesh.html + a4bdacf645455dec43ead388890edc43d + + + + std::vector< double > + weights + structCesiumGltf_1_1Mesh.html + a3a46c1343d3ee976ca8c4ba7664c2159 + + + + static constexpr const char * + TypeName + structCesiumGltf_1_1Mesh.html + a0f3526dddae0ea3cf35542308f25213a + + + + + CesiumGltf::MeshPrimitive + structCesiumGltf_1_1MeshPrimitive.html + CesiumUtility::ExtensibleObject + CesiumGltf::MeshPrimitive::Mode + + int64_t + getSizeBytes + structCesiumGltf_1_1MeshPrimitive.html + ad03807ac4bb3b746309592f3eddaddf2 + () const + + + std::unordered_map< std::string, int32_t > + attributes + structCesiumGltf_1_1MeshPrimitive.html + aa33f4e93b8dc49d315129a6879b4c4b1 + + + + int32_t + indices + structCesiumGltf_1_1MeshPrimitive.html + a33db1245d16aae037f3a066b93d4e563 + + + + int32_t + material + structCesiumGltf_1_1MeshPrimitive.html + a59af3eb5ea132ff1e748e3b6f739f0a8 + + + + int32_t + mode + structCesiumGltf_1_1MeshPrimitive.html + abefd6eb6b1c6825d9e71bc140fe0201d + + + + std::vector< std::unordered_map< std::string, int32_t > > + targets + structCesiumGltf_1_1MeshPrimitive.html + a8d9050d798d28909c67e15100d8a6811 + + + + static constexpr const char * + TypeName + structCesiumGltf_1_1MeshPrimitive.html + aed1512d62c5bd4cac9b7c1660bf6170c + + + + + CesiumGltfReader::MeshPrimitiveReader + classCesiumGltfReader_1_1MeshPrimitiveReader.html + + + MeshPrimitiveReader + classCesiumGltfReader_1_1MeshPrimitiveReader.html + a04ea2c698a2038df278e447cdd83866f + () + + + CesiumJsonReader::JsonReaderOptions & + getOptions + classCesiumGltfReader_1_1MeshPrimitiveReader.html + ac0f5512533c4113d219acdcc56d6fa76 + () + + + const CesiumJsonReader::JsonReaderOptions & + getOptions + classCesiumGltfReader_1_1MeshPrimitiveReader.html + a3056d7eec7df0d13b99c4c33a8be0f5f + () const + + + CesiumJsonReader::ReadJsonResult< CesiumGltf::MeshPrimitive > + readFromJson + classCesiumGltfReader_1_1MeshPrimitiveReader.html + ae5d68a798a87b0ba8d2c633a67efa60b + (const std::span< const std::byte > &data) const + + + CesiumJsonReader::ReadJsonResult< CesiumGltf::MeshPrimitive > + readFromJson + classCesiumGltfReader_1_1MeshPrimitiveReader.html + ae1af8408ea137682a4e21bacef720c8a + (const rapidjson::Value &value) const + + + CesiumJsonReader::ReadJsonResult< std::vector< CesiumGltf::MeshPrimitive > > + readArrayFromJson + classCesiumGltfReader_1_1MeshPrimitiveReader.html + af01b857b1957c4984a3eace74b2e1e99 + (const rapidjson::Value &value) const + + + + CesiumGltfReader::MeshReader + classCesiumGltfReader_1_1MeshReader.html + + + MeshReader + classCesiumGltfReader_1_1MeshReader.html + a05b7d34902a2695deccf3e108c7c7ae4 + () + + + CesiumJsonReader::JsonReaderOptions & + getOptions + classCesiumGltfReader_1_1MeshReader.html + ab4b0dc62678be2809f4d057215cfe363 + () + + + const CesiumJsonReader::JsonReaderOptions & + getOptions + classCesiumGltfReader_1_1MeshReader.html + a20d4d549526c4bfcc0e9b3cb03834722 + () const + + + CesiumJsonReader::ReadJsonResult< CesiumGltf::Mesh > + readFromJson + classCesiumGltfReader_1_1MeshReader.html + aa162157bea3607bfb38facbfb180f9e2 + (const std::span< const std::byte > &data) const + + + CesiumJsonReader::ReadJsonResult< CesiumGltf::Mesh > + readFromJson + classCesiumGltfReader_1_1MeshReader.html + a5408e7b4637471f6035a0a6bd6b58b4c + (const rapidjson::Value &value) const + + + CesiumJsonReader::ReadJsonResult< std::vector< CesiumGltf::Mesh > > + readArrayFromJson + classCesiumGltfReader_1_1MeshReader.html + a6f4960dce19a4e0c37104d6dfa2fa7f6 + (const rapidjson::Value &value) const + + + + CesiumGltf::MetadataArrayType + structCesiumGltf_1_1MetadataArrayType.html + typename T + + void + type + structCesiumGltf_1_1MetadataArrayType.html + a6e8894f0659ec16fdd3406a4b841fb86 + + + + + CesiumGltf::MetadataArrayType< CesiumGltf::PropertyArrayCopy< T > > + structCesiumGltf_1_1MetadataArrayType_3_01CesiumGltf_1_1PropertyArrayCopy_3_01T_01_4_01_4.html + typename T + + T + type + structCesiumGltf_1_1MetadataArrayType_3_01CesiumGltf_1_1PropertyArrayCopy_3_01T_01_4_01_4.html + aa60fa41431eb948be358e7796bafb0bd + + + + + CesiumGltf::MetadataArrayType< CesiumGltf::PropertyArrayView< T > > + structCesiumGltf_1_1MetadataArrayType_3_01CesiumGltf_1_1PropertyArrayView_3_01T_01_4_01_4.html + typename T + + T + type + structCesiumGltf_1_1MetadataArrayType_3_01CesiumGltf_1_1PropertyArrayView_3_01T_01_4_01_4.html + a1a335e6d30fc70bc5a62af4242d47d2b + + + + + CesiumGltf::MetadataConversions + structCesiumGltf_1_1MetadataConversions.html + typename TTo + typename TFrom + typename Enable + + static std::optional< TTo > + convert + structCesiumGltf_1_1MetadataConversions.html + ae116094ab42a15ee240b27eed4d68764 + (TFrom) + + + + CesiumGltf::MetadataConversions< bool, std::string > + structCesiumGltf_1_1MetadataConversions_3_01bool_00_01std_1_1string_01_4.html + + static std::optional< bool > + convert + structCesiumGltf_1_1MetadataConversions_3_01bool_00_01std_1_1string_01_4.html + a43e9f15d2e7037a2af02b2e8b16e027a + (const std::string &from) + + + + CesiumGltf::MetadataConversions< bool, std::string_view > + structCesiumGltf_1_1MetadataConversions_3_01bool_00_01std_1_1string__view_01_4.html + + static std::optional< bool > + convert + structCesiumGltf_1_1MetadataConversions_3_01bool_00_01std_1_1string__view_01_4.html + ac410f524855806cff6656b06784b03f1 + (const std::string_view &from) + + + + CesiumGltf::MetadataConversions< bool, TFrom, std::enable_if_t< CesiumGltf::IsMetadataScalar< TFrom >::value > > + structCesiumGltf_1_1MetadataConversions_3_01bool_00_01TFrom_00_01std_1_1enable__if__t_3_01Cesiuma97880b9fb5b5409d1ac0a933899b878.html + typename TFrom + + static std::optional< bool > + convert + structCesiumGltf_1_1MetadataConversions_3_01bool_00_01TFrom_00_01std_1_1enable__if__t_3_01Cesiuma97880b9fb5b5409d1ac0a933899b878.html + af6ac4112f535310ea60437ce2628e04a + (TFrom from) + + + + CesiumGltf::MetadataConversions< double, bool > + structCesiumGltf_1_1MetadataConversions_3_01double_00_01bool_01_4.html + + static std::optional< double > + convert + structCesiumGltf_1_1MetadataConversions_3_01double_00_01bool_01_4.html + aedbcaae177c80c746c64c3a04dd686c5 + (bool from) + + + + CesiumGltf::MetadataConversions< double, float > + structCesiumGltf_1_1MetadataConversions_3_01double_00_01float_01_4.html + + static std::optional< double > + convert + structCesiumGltf_1_1MetadataConversions_3_01double_00_01float_01_4.html + a3f7c13a375ea6946a3faea0272643597 + (float from) + + + + CesiumGltf::MetadataConversions< double, std::string > + structCesiumGltf_1_1MetadataConversions_3_01double_00_01std_1_1string_01_4.html + + static std::optional< double > + convert + structCesiumGltf_1_1MetadataConversions_3_01double_00_01std_1_1string_01_4.html + a642f3af4dfdecfb1e198c8aac0d3b6f8 + (const std::string &from) + + + + CesiumGltf::MetadataConversions< double, std::string_view > + structCesiumGltf_1_1MetadataConversions_3_01double_00_01std_1_1string__view_01_4.html + + static std::optional< double > + convert + structCesiumGltf_1_1MetadataConversions_3_01double_00_01std_1_1string__view_01_4.html + a9955ae6c5e7f9f2387eab4f54304a6f4 + (const std::string_view &from) + + + + CesiumGltf::MetadataConversions< double, TFrom, std::enable_if_t< CesiumGltf::IsMetadataInteger< TFrom >::value > > + structCesiumGltf_1_1MetadataConversions_3_01double_00_01TFrom_00_01std_1_1enable__if__t_3_01Cesi06005ff6b5995fe879976126e5a633f2.html + typename TFrom + + static std::optional< double > + convert + structCesiumGltf_1_1MetadataConversions_3_01double_00_01TFrom_00_01std_1_1enable__if__t_3_01Cesi06005ff6b5995fe879976126e5a633f2.html + a04dba0f9c4c440da75d698e35a85071b + (TFrom from) + + + + CesiumGltf::MetadataConversions< float, bool > + structCesiumGltf_1_1MetadataConversions_3_01float_00_01bool_01_4.html + + static std::optional< float > + convert + structCesiumGltf_1_1MetadataConversions_3_01float_00_01bool_01_4.html + a5c435c8de3600abe2f0e2160ec39ede5 + (bool from) + + + + CesiumGltf::MetadataConversions< float, double > + structCesiumGltf_1_1MetadataConversions_3_01float_00_01double_01_4.html + + static std::optional< float > + convert + structCesiumGltf_1_1MetadataConversions_3_01float_00_01double_01_4.html + afc2e29b2c4fade4f6fdebcea91c48a6b + (double from) + + + + CesiumGltf::MetadataConversions< float, std::string > + structCesiumGltf_1_1MetadataConversions_3_01float_00_01std_1_1string_01_4.html + + static std::optional< float > + convert + structCesiumGltf_1_1MetadataConversions_3_01float_00_01std_1_1string_01_4.html + aae6a193a2960eb87fa6dfd29d718b372 + (const std::string &from) + + + + CesiumGltf::MetadataConversions< float, std::string_view > + structCesiumGltf_1_1MetadataConversions_3_01float_00_01std_1_1string__view_01_4.html + + static std::optional< float > + convert + structCesiumGltf_1_1MetadataConversions_3_01float_00_01std_1_1string__view_01_4.html + ab85060ce8f2ab376c6ecf5164e2c5e5b + (const std::string_view &from) + + + + CesiumGltf::MetadataConversions< float, TFrom, std::enable_if_t< CesiumGltf::IsMetadataInteger< TFrom >::value > > + structCesiumGltf_1_1MetadataConversions_3_01float_00_01TFrom_00_01std_1_1enable__if__t_3_01Cesiu4b206e4137a0fa01bfa4d2ae901c2919.html + typename TFrom + + static std::optional< float > + convert + structCesiumGltf_1_1MetadataConversions_3_01float_00_01TFrom_00_01std_1_1enable__if__t_3_01Cesiu4b206e4137a0fa01bfa4d2ae901c2919.html + a09d46b280afc964c862fbcd72dc3d1fb + (TFrom from) + + + + CesiumGltf::MetadataConversions< std::string, bool > + structCesiumGltf_1_1MetadataConversions_3_01std_1_1string_00_01bool_01_4.html + + static std::optional< std::string > + convert + structCesiumGltf_1_1MetadataConversions_3_01std_1_1string_00_01bool_01_4.html + a114be11236f2292a45d7987779f0dc33 + (bool from) + + + + CesiumGltf::MetadataConversions< std::string, std::string_view > + structCesiumGltf_1_1MetadataConversions_3_01std_1_1string_00_01std_1_1string__view_01_4.html + + static std::optional< std::string > + convert + structCesiumGltf_1_1MetadataConversions_3_01std_1_1string_00_01std_1_1string__view_01_4.html + af96a1523a01095b7076d3e8c0049ef6e + (const std::string_view &from) + + + + CesiumGltf::MetadataConversions< std::string, TFrom, std::enable_if_t< IsMetadataScalar< TFrom >::value > > + structCesiumGltf_1_1MetadataConversions_3_01std_1_1string_00_01TFrom_00_01std_1_1enable__if__t_3580db25a5d2c53f6d1b365a222306f37.html + typename TFrom + + static std::optional< std::string > + convert + structCesiumGltf_1_1MetadataConversions_3_01std_1_1string_00_01TFrom_00_01std_1_1enable__if__t_3580db25a5d2c53f6d1b365a222306f37.html + afd9ba4c8997643ea11a48a3844159e7f + (TFrom from) + + + + CesiumGltf::MetadataConversions< std::string, TFrom, std::enable_if_t< IsMetadataVecN< TFrom >::value||IsMetadataMatN< TFrom >::value > > + structCesiumGltf_1_1MetadataConversions_3_01std_1_1string_00_01TFrom_00_01std_1_1enable__if__t_345890a9b7f167d2d3091e59cafe7f5da.html + typename TFrom + + static std::optional< std::string > + convert + structCesiumGltf_1_1MetadataConversions_3_01std_1_1string_00_01TFrom_00_01std_1_1enable__if__t_345890a9b7f167d2d3091e59cafe7f5da.html + ad5614035a75137748b9fba24da166699 + (const TFrom &from) + + + + CesiumGltf::MetadataConversions< T, T > + structCesiumGltf_1_1MetadataConversions_3_01T_00_01T_01_4.html + typename T + + static std::optional< T > + convert + structCesiumGltf_1_1MetadataConversions_3_01T_00_01T_01_4.html + a91fbf236a480689a115b7fb8c8715a9c + (T from) + + + + CesiumGltf::MetadataConversions< TTo, bool, std::enable_if_t< CesiumGltf::IsMetadataInteger< TTo >::value > > + structCesiumGltf_1_1MetadataConversions_3_01TTo_00_01bool_00_01std_1_1enable__if__t_3_01CesiumGl5b84e61cb31d553b84a6d746aa08b755.html + typename TTo + + static std::optional< TTo > + convert + structCesiumGltf_1_1MetadataConversions_3_01TTo_00_01bool_00_01std_1_1enable__if__t_3_01CesiumGl5b84e61cb31d553b84a6d746aa08b755.html + a9787717554dde9dfc3a888ecb5f06cbf + (bool from) + + + + CesiumGltf::MetadataConversions< TTo, bool, std::enable_if_t< IsMetadataMatN< TTo >::value > > + structCesiumGltf_1_1MetadataConversions_3_01TTo_00_01bool_00_01std_1_1enable__if__t_3_01IsMetada9c9f38f5f006d13cc89b8f437e924973.html + typename TTo + + static std::optional< TTo > + convert + structCesiumGltf_1_1MetadataConversions_3_01TTo_00_01bool_00_01std_1_1enable__if__t_3_01IsMetada9c9f38f5f006d13cc89b8f437e924973.html + a5f576df7db16d2936e5941c4f5e409c6 + (bool from) + + + + CesiumGltf::MetadataConversions< TTo, bool, std::enable_if_t< IsMetadataVecN< TTo >::value > > + structCesiumGltf_1_1MetadataConversions_3_01TTo_00_01bool_00_01std_1_1enable__if__t_3_01IsMetadad412fba8f834969bf2f0ced8fe2c6477.html + typename TTo + + static std::optional< TTo > + convert + structCesiumGltf_1_1MetadataConversions_3_01TTo_00_01bool_00_01std_1_1enable__if__t_3_01IsMetadad412fba8f834969bf2f0ced8fe2c6477.html + a10c525b17d6e3f95604629a23e7f4e1c + (bool from) + + + + CesiumGltf::MetadataConversions< TTo, std::string, std::enable_if_t< CesiumGltf::IsMetadataInteger< TTo >::value &&!std::is_signed_v< TTo > > > + structCesiumGltf_1_1MetadataConversions_3_01TTo_00_01std_1_1string_00_01std_1_1enable__if__t_3_09c46f6793e1963751ee12692d9b1b90a.html + typename TTo + + static std::optional< TTo > + convert + structCesiumGltf_1_1MetadataConversions_3_01TTo_00_01std_1_1string_00_01std_1_1enable__if__t_3_09c46f6793e1963751ee12692d9b1b90a.html + a766362f6a5f200cd95ab249a66890b91 + (const std::string &from) + + + + CesiumGltf::MetadataConversions< TTo, std::string, std::enable_if_t< CesiumGltf::IsMetadataInteger< TTo >::value &&std::is_signed_v< TTo > > > + structCesiumGltf_1_1MetadataConversions_3_01TTo_00_01std_1_1string_00_01std_1_1enable__if__t_3_077efe2d0d80b27ab86b53a49dba48c09.html + typename TTo + + static std::optional< TTo > + convert + structCesiumGltf_1_1MetadataConversions_3_01TTo_00_01std_1_1string_00_01std_1_1enable__if__t_3_077efe2d0d80b27ab86b53a49dba48c09.html + a8c69a23f2cf938ddf6f87122c4c1e528 + (const std::string &from) + + + + CesiumGltf::MetadataConversions< TTo, std::string_view, std::enable_if_t< CesiumGltf::IsMetadataInteger< TTo >::value > > + structCesiumGltf_1_1MetadataConversions_3_01TTo_00_01std_1_1string__view_00_01std_1_1enable__if_106de5a74bceaa1d1625a2b153dfe0ae.html + typename TTo + + static std::optional< TTo > + convert + structCesiumGltf_1_1MetadataConversions_3_01TTo_00_01std_1_1string__view_00_01std_1_1enable__if_106de5a74bceaa1d1625a2b153dfe0ae.html + a0e4e5db1c0908f18fca3d5d49300657f + (const std::string_view &from) + + + + CesiumGltf::MetadataConversions< TTo, TFrom, std::enable_if_t< CesiumGltf::IsMetadataInteger< TTo >::value &&CesiumGltf::IsMetadataFloating< TFrom >::value > > + structCesiumGltf_1_1MetadataConversions_3_01TTo_00_01TFrom_00_01std_1_1enable__if__t_3_01CesiumG675ddf160d6617a0e8a3d787919e938b.html + typename TTo + typename TFrom + + static std::optional< TTo > + convert + structCesiumGltf_1_1MetadataConversions_3_01TTo_00_01TFrom_00_01std_1_1enable__if__t_3_01CesiumG675ddf160d6617a0e8a3d787919e938b.html + ac3f29376ebea3af662e98464647d191a + (TFrom from) + + + + CesiumGltf::MetadataConversions< TTo, TFrom, std::enable_if_t< CesiumGltf::IsMetadataInteger< TTo >::value &&CesiumGltf::IsMetadataInteger< TFrom >::value &&!std::is_same_v< TTo, TFrom > > > + structCesiumGltf_1_1MetadataConversions_3_01TTo_00_01TFrom_00_01std_1_1enable__if__t_3_01CesiumG22af27724db4d99181ee0019b97637f3.html + typename TTo + typename TFrom + + static std::optional< TTo > + convert + structCesiumGltf_1_1MetadataConversions_3_01TTo_00_01TFrom_00_01std_1_1enable__if__t_3_01CesiumG22af27724db4d99181ee0019b97637f3.html + ad53c651f8855c1a21df2610a7c0b849f + (TFrom from) + + + + CesiumGltf::MetadataConversions< TTo, TFrom, std::enable_if_t< CesiumGltf::IsMetadataMatN< TTo >::value &&CesiumGltf::IsMetadataMatN< TFrom >::value &&!std::is_same_v< TTo, TFrom > > > + structCesiumGltf_1_1MetadataConversions_3_01TTo_00_01TFrom_00_01std_1_1enable__if__t_3_01CesiumGbd99036533c5c47f0172684c69ecf181.html + typename TTo + typename TFrom + + static std::optional< TTo > + convert + structCesiumGltf_1_1MetadataConversions_3_01TTo_00_01TFrom_00_01std_1_1enable__if__t_3_01CesiumGbd99036533c5c47f0172684c69ecf181.html + a6e163a7fc940bf5495f6acefec8b60e6 + (TFrom from) + + + + CesiumGltf::MetadataConversions< TTo, TFrom, std::enable_if_t< CesiumGltf::IsMetadataMatN< TTo >::value &&CesiumGltf::IsMetadataScalar< TFrom >::value > > + structCesiumGltf_1_1MetadataConversions_3_01TTo_00_01TFrom_00_01std_1_1enable__if__t_3_01CesiumGd3cf2e3c1986482bf3d24ecf86ac322d.html + typename TTo + typename TFrom + + static std::optional< TTo > + convert + structCesiumGltf_1_1MetadataConversions_3_01TTo_00_01TFrom_00_01std_1_1enable__if__t_3_01CesiumGd3cf2e3c1986482bf3d24ecf86ac322d.html + adabddc9ad32e094f81300405daf737f8 + (TFrom from) + + + + CesiumGltf::MetadataConversions< TTo, TFrom, std::enable_if_t< CesiumGltf::IsMetadataVecN< TTo >::value &&CesiumGltf::IsMetadataScalar< TFrom >::value > > + structCesiumGltf_1_1MetadataConversions_3_01TTo_00_01TFrom_00_01std_1_1enable__if__t_3_01CesiumGf9d7b450fd09dfe47055174c8192909c.html + typename TTo + typename TFrom + + static std::optional< TTo > + convert + structCesiumGltf_1_1MetadataConversions_3_01TTo_00_01TFrom_00_01std_1_1enable__if__t_3_01CesiumGf9d7b450fd09dfe47055174c8192909c.html + a99cc68e72b75a6f1e32eb9c00c3bfe95 + (TFrom from) + + + + CesiumGltf::MetadataConversions< TTo, TFrom, std::enable_if_t< CesiumGltf::IsMetadataVecN< TTo >::value &&CesiumGltf::IsMetadataVecN< TFrom >::value &&!std::is_same_v< TTo, TFrom > > > + structCesiumGltf_1_1MetadataConversions_3_01TTo_00_01TFrom_00_01std_1_1enable__if__t_3_01CesiumG99d627b723c172c5e3b1602c7379fc23.html + typename TTo + typename TFrom + + static std::optional< TTo > + convert + structCesiumGltf_1_1MetadataConversions_3_01TTo_00_01TFrom_00_01std_1_1enable__if__t_3_01CesiumG99d627b723c172c5e3b1602c7379fc23.html + adb78f1bc0faa035cfa6f60e188987f8e + (TFrom from) + + + + Cesium3DTiles::MetadataEntity + structCesium3DTiles_1_1MetadataEntity.html + CesiumUtility::ExtensibleObject + + int64_t + getSizeBytes + structCesium3DTiles_1_1MetadataEntity.html + ab3e40f3357529c01ead7613baf9f46e1 + () const + + + std::string + classProperty + structCesium3DTiles_1_1MetadataEntity.html + adc9c848d3c9bbe50a0f78d69f4d24852 + + + + std::unordered_map< std::string, CesiumUtility::JsonValue > + properties + structCesium3DTiles_1_1MetadataEntity.html + aec3bfa46343db420ee3e8469f9a5e133 + + + + static constexpr const char * + TypeName + structCesium3DTiles_1_1MetadataEntity.html + ab496471b1d557c5bd04a1ca7b2110ad3 + + + + + Cesium3DTilesReader::MetadataEntityReader + classCesium3DTilesReader_1_1MetadataEntityReader.html + + + MetadataEntityReader + classCesium3DTilesReader_1_1MetadataEntityReader.html + a91dea145271ff13858c8901ef938e51c + () + + + CesiumJsonReader::JsonReaderOptions & + getOptions + classCesium3DTilesReader_1_1MetadataEntityReader.html + ab51261f7b5a95fd85fd233d1d296dbf8 + () + + + const CesiumJsonReader::JsonReaderOptions & + getOptions + classCesium3DTilesReader_1_1MetadataEntityReader.html + ab5a81c7eba757fd7ad9e4f985af334c3 + () const + + + CesiumJsonReader::ReadJsonResult< Cesium3DTiles::MetadataEntity > + readFromJson + classCesium3DTilesReader_1_1MetadataEntityReader.html + a6fe8eba6ddc3377b59dba994d1ebb21e + (const std::span< const std::byte > &data) const + + + CesiumJsonReader::ReadJsonResult< Cesium3DTiles::MetadataEntity > + readFromJson + classCesium3DTilesReader_1_1MetadataEntityReader.html + a08024466c181b65c3ae4d959aa66bac0 + (const rapidjson::Value &value) const + + + CesiumJsonReader::ReadJsonResult< std::vector< Cesium3DTiles::MetadataEntity > > + readArrayFromJson + classCesium3DTilesReader_1_1MetadataEntityReader.html + a3c60da720271ab27a1b78d915182cbfc + (const rapidjson::Value &value) const + + + + Cesium3DTiles::MetadataQuery + classCesium3DTiles_1_1MetadataQuery.html + + static std::optional< FoundMetadataProperty > + findFirstPropertyWithSemantic + classCesium3DTiles_1_1MetadataQuery.html + a1f1c3c27a591329673ee504dff9a6e64 + (const Schema &schema, const MetadataEntity &entity, const std::string &semantic) + + + + CesiumGltf::ImageSpec::MimeType + structCesiumGltf_1_1ImageSpec_1_1MimeType.html + + static const std::string + image_jpeg + structCesiumGltf_1_1ImageSpec_1_1MimeType.html + a3232c4d1553bef425c628b5c901abb57 + + + + static const std::string + image_png + structCesiumGltf_1_1ImageSpec_1_1MimeType.html + a9c1fcd57a804f789504caa0b19a3cf0a + + + + + CesiumGltf::Sampler::MinFilter + structCesiumGltf_1_1Sampler_1_1MinFilter.html + + static constexpr int32_t + NEAREST + structCesiumGltf_1_1Sampler_1_1MinFilter.html + aae415f6151e25ded694a835f4caeec54 + + + + static constexpr int32_t + LINEAR + structCesiumGltf_1_1Sampler_1_1MinFilter.html + ae55efd25106174721173f71dbde203f4 + + + + static constexpr int32_t + NEAREST_MIPMAP_NEAREST + structCesiumGltf_1_1Sampler_1_1MinFilter.html + a35abd623e6726ca1ed89b6f63958143d + + + + static constexpr int32_t + LINEAR_MIPMAP_NEAREST + structCesiumGltf_1_1Sampler_1_1MinFilter.html + a4fed2c5e80eb090851e54a0c5e519721 + + + + static constexpr int32_t + NEAREST_MIPMAP_LINEAR + structCesiumGltf_1_1Sampler_1_1MinFilter.html + ad758d2c4a46e477c48d3c770e3796a83 + + + + static constexpr int32_t + LINEAR_MIPMAP_LINEAR + structCesiumGltf_1_1Sampler_1_1MinFilter.html + adcce2f51548aabbd57aba4ccc5887a50 + + + + + CesiumGltf::ExtensionBufferViewExtMeshoptCompression::Mode + structCesiumGltf_1_1ExtensionBufferViewExtMeshoptCompression_1_1Mode.html + + static const std::string + ATTRIBUTES + structCesiumGltf_1_1ExtensionBufferViewExtMeshoptCompression_1_1Mode.html + ae54727ab12f579d6494649a69a5dfbac + + + + static const std::string + TRIANGLES + structCesiumGltf_1_1ExtensionBufferViewExtMeshoptCompression_1_1Mode.html + a9ea6d75f2ad3f4281e7ecb15dbe82348 + + + + static const std::string + INDICES + structCesiumGltf_1_1ExtensionBufferViewExtMeshoptCompression_1_1Mode.html + ab29afb1473a194269c5329ea9c068da0 + + + + + CesiumGltf::MeshPrimitive::Mode + structCesiumGltf_1_1MeshPrimitive_1_1Mode.html + + static constexpr int32_t + POINTS + structCesiumGltf_1_1MeshPrimitive_1_1Mode.html + ac5b3d55f48e29d87a96dc3005df72a07 + + + + static constexpr int32_t + LINES + structCesiumGltf_1_1MeshPrimitive_1_1Mode.html + a412bc774bbcde8cb9cb491e194b8e4c7 + + + + static constexpr int32_t + LINE_LOOP + structCesiumGltf_1_1MeshPrimitive_1_1Mode.html + a2598e8ab2930f40a7e89acb61b9ac9dd + + + + static constexpr int32_t + LINE_STRIP + structCesiumGltf_1_1MeshPrimitive_1_1Mode.html + a97869afb0c4fc5a898d32c47e82e8835 + + + + static constexpr int32_t + TRIANGLES + structCesiumGltf_1_1MeshPrimitive_1_1Mode.html + a34950080315ac83bc0b8c0cf21a1d5c8 + + + + static constexpr int32_t + TRIANGLE_STRIP + structCesiumGltf_1_1MeshPrimitive_1_1Mode.html + ae7dceb1c9b13e8f2ebfb8ae824330a5b + + + + static constexpr int32_t + TRIANGLE_FAN + structCesiumGltf_1_1MeshPrimitive_1_1Mode.html + adc9bf41aa6cccef19f2e86958ae38f61 + + + + + CesiumGltf::Model + structCesiumGltf_1_1Model.html + CesiumGltf::ModelSpec + + void + ForEachRootNodeInSceneCallback + structCesiumGltf_1_1Model.html + ac4ce1d62972c88e60fb7af47002886ce + (Model &gltf, Node &node) + + + void + ForEachRootNodeInSceneConstCallback + structCesiumGltf_1_1Model.html + ace9ec609b9e3da0f6f25ee6595b6da86 + (const Model &gltf, const Node &node) + + + void + ForEachNodeInSceneCallback + structCesiumGltf_1_1Model.html + a0f18065e0736d2dee1eb1cc935867824 + (Model &gltf, Node &node, const glm::dmat4 &transform) + + + void + ForEachNodeInSceneConstCallback + structCesiumGltf_1_1Model.html + a47dec9a101f8176ca7d8001c0303acf0 + (const Model &gltf, const Node &node, const glm::dmat4 &transform) + + + void + ForEachPrimitiveInSceneCallback + structCesiumGltf_1_1Model.html + ac12930fe2e783f751f8bcb065a7ae0b6 + (Model &gltf, Node &node, Mesh &mesh, MeshPrimitive &primitive, const glm::dmat4 &transform) + + + void + ForEachPrimitiveInSceneConstCallback + structCesiumGltf_1_1Model.html + a7f33bbf3e625f7470fa91f39230db8a2 + (const Model &gltf, const Node &node, const Mesh &mesh, const MeshPrimitive &primitive, const glm::dmat4 &transform) + + + CesiumUtility::ErrorList + merge + structCesiumGltf_1_1Model.html + af4e082bc8cc85dc82a699744e52f255f + (Model &&rhs) + + + void + forEachRootNodeInScene + structCesiumGltf_1_1Model.html + a7d83814d09db76dca9b2139b564b46ab + (int32_t sceneID, std::function< ForEachRootNodeInSceneCallback > &&callback) + + + void + forEachRootNodeInScene + structCesiumGltf_1_1Model.html + a9d45db35135f50a194ffed3c9e57d830 + (int32_t sceneID, std::function< ForEachRootNodeInSceneConstCallback > &&callback) const + + + void + forEachNodeInScene + structCesiumGltf_1_1Model.html + a8b808f2898420539de231a45b0701327 + (int32_t sceneID, std::function< ForEachNodeInSceneCallback > &&callback) + + + void + forEachNodeInScene + structCesiumGltf_1_1Model.html + a357d7a615dc43bf4e58e8104bad446d5 + (int32_t sceneID, std::function< ForEachNodeInSceneConstCallback > &&callback) const + + + void + forEachPrimitiveInScene + structCesiumGltf_1_1Model.html + a6782264b34187dd2c0b89bfa34a848ef + (int32_t sceneID, std::function< ForEachPrimitiveInSceneCallback > &&callback) + + + void + forEachPrimitiveInScene + structCesiumGltf_1_1Model.html + ae709e8815517c807dc2b63540ba9e5e2 + (int32_t sceneID, std::function< ForEachPrimitiveInSceneConstCallback > &&callback) const + + + void + generateMissingNormalsSmooth + structCesiumGltf_1_1Model.html + a64928f1c18d45b4b5f0bc4c6350af055 + () + + + void + addExtensionUsed + structCesiumGltf_1_1Model.html + ab9834aa4d54b0fd9d04677e68a39da4b + (const std::string &extensionName) + + + void + addExtensionRequired + structCesiumGltf_1_1Model.html + a0b561f0fb8037ea395305ab4c9b949f0 + (const std::string &extensionName) + + + void + removeExtensionUsed + structCesiumGltf_1_1Model.html + a9fa37aa4384a3dd0fe7d6de585ba55f4 + (const std::string &extensionName) + + + void + removeExtensionRequired + structCesiumGltf_1_1Model.html + a0739a41b7690e876cc57b0f9ea25ed36 + (const std::string &extensionName) + + + bool + isExtensionUsed + structCesiumGltf_1_1Model.html + a4a9168a0aaa55996dbef08aff4df506b + (const std::string &extensionName) const noexcept + + + bool + isExtensionRequired + structCesiumGltf_1_1Model.html + a62021d65817e732056b4d7f571d0763d + (const std::string &extensionName) const noexcept + + + static const T & + getSafe + structCesiumGltf_1_1Model.html + ab457463e6f8cffc6434b616ac81120c3 + (const std::vector< T > &items, int32_t index) + + + static const T * + getSafe + structCesiumGltf_1_1Model.html + a9d05e31d44dfb4c21f83e75d7ff0e914 + (const std::vector< T > *pItems, int32_t index) noexcept + + + static T * + getSafe + structCesiumGltf_1_1Model.html + a432af104d7ef57210b5657e1dc4473e9 + (std::vector< T > *pItems, int32_t index) noexcept + + + + CesiumGltfReader::ModelReader + classCesiumGltfReader_1_1ModelReader.html + + + ModelReader + classCesiumGltfReader_1_1ModelReader.html + ac53b4e7d7205f91d4878023ff342811d + () + + + CesiumJsonReader::JsonReaderOptions & + getOptions + classCesiumGltfReader_1_1ModelReader.html + aa511dc1200c10bd098ebd8508edb9783 + () + + + const CesiumJsonReader::JsonReaderOptions & + getOptions + classCesiumGltfReader_1_1ModelReader.html + ae22fd96cab7edc3ca4f59ecda0a64de1 + () const + + + CesiumJsonReader::ReadJsonResult< CesiumGltf::Model > + readFromJson + classCesiumGltfReader_1_1ModelReader.html + af4f58bc991db024e42ed5ccfdab489fc + (const std::span< const std::byte > &data) const + + + CesiumJsonReader::ReadJsonResult< CesiumGltf::Model > + readFromJson + classCesiumGltfReader_1_1ModelReader.html + a4ae404ff5543ce9e49a4820c1221cc9d + (const rapidjson::Value &value) const + + + CesiumJsonReader::ReadJsonResult< std::vector< CesiumGltf::Model > > + readArrayFromJson + classCesiumGltfReader_1_1ModelReader.html + ab77293ede63f49e891fd94c7cfc736c7 + (const rapidjson::Value &value) const + + + + CesiumGltf::ModelSpec + structCesiumGltf_1_1ModelSpec.html + CesiumUtility::ExtensibleObject + + int64_t + getSizeBytes + structCesiumGltf_1_1ModelSpec.html + ad6c29153d0885cd96934ba539dd7d18a + () const + + + std::vector< std::string > + extensionsUsed + structCesiumGltf_1_1ModelSpec.html + ad2db871668c05320be9fe1b8c40211f2 + + + + std::vector< std::string > + extensionsRequired + structCesiumGltf_1_1ModelSpec.html + aac0f3f63f49d4a5d2a2b0265559b92df + + + + std::vector< CesiumGltf::Accessor > + accessors + structCesiumGltf_1_1ModelSpec.html + ac663d15ff98850b9face710915d9bef9 + + + + std::vector< CesiumGltf::Animation > + animations + structCesiumGltf_1_1ModelSpec.html + a5c457f8606da6514edac19d3e11cb5dc + + + + CesiumGltf::Asset + asset + structCesiumGltf_1_1ModelSpec.html + a9e6e4979bb6efe2fc6ad26fb601bf237 + + + + std::vector< CesiumGltf::Buffer > + buffers + structCesiumGltf_1_1ModelSpec.html + af77093917cf40528622507cefada094b + + + + std::vector< CesiumGltf::BufferView > + bufferViews + structCesiumGltf_1_1ModelSpec.html + a26cf36c148bce80ef01393b9fbaab3df + + + + std::vector< CesiumGltf::Camera > + cameras + structCesiumGltf_1_1ModelSpec.html + a1cfff69fa6e42bdd93da720f943eafc0 + + + + std::vector< CesiumGltf::Image > + images + structCesiumGltf_1_1ModelSpec.html + abd224c09e8ebf4f182984fee95feb813 + + + + std::vector< CesiumGltf::Material > + materials + structCesiumGltf_1_1ModelSpec.html + a8a2cb5355e7b67f582e9456c8876d34b + + + + std::vector< CesiumGltf::Mesh > + meshes + structCesiumGltf_1_1ModelSpec.html + ab41902830ebe26c613c33569a704bbbb + + + + std::vector< CesiumGltf::Node > + nodes + structCesiumGltf_1_1ModelSpec.html + ab52f74ddd98057d67efc7d86fe0eb29b + + + + std::vector< CesiumGltf::Sampler > + samplers + structCesiumGltf_1_1ModelSpec.html + a658792c62e5bba772e1a2ac096a8ccbc + + + + int32_t + scene + structCesiumGltf_1_1ModelSpec.html + aa9c0fe1f9f310cce96422705f567a00c + + + + std::vector< CesiumGltf::Scene > + scenes + structCesiumGltf_1_1ModelSpec.html + a20457516532726e39901432f5cd16e9a + + + + std::vector< CesiumGltf::Skin > + skins + structCesiumGltf_1_1ModelSpec.html + a21d1ce9ec4280b6c14835876ca1129a4 + + + + std::vector< CesiumGltf::Texture > + textures + structCesiumGltf_1_1ModelSpec.html + ad226c051178dca5c6e8d484831176b38 + + + + static constexpr const char * + TypeName + structCesiumGltf_1_1ModelSpec.html + a24132139840b7efe440fbe64ea6d3039 + + + + + ModelSpec + structCesiumGltf_1_1ModelSpec.html + a21a0dd5d43102f64b5be55bdc0d6be9f + ()=default + + + + CesiumGltf::NamedObject + structCesiumGltf_1_1NamedObject.html + CesiumUtility::ExtensibleObject + + int64_t + getSizeBytes + structCesiumGltf_1_1NamedObject.html + a400e97ea26d3adbdc2e6063deb2993bb + () const + + + std::string + name + structCesiumGltf_1_1NamedObject.html + a4d2bfa1ff26e4c5534fe5f5f836e564b + + + + + CesiumAsync::NetworkAssetDescriptor + structCesiumAsync_1_1NetworkAssetDescriptor.html + + bool + operator== + structCesiumAsync_1_1NetworkAssetDescriptor.html + a82edbf1e81346ed34996306a89e21732 + (const NetworkAssetDescriptor &rhs) const noexcept + + + Future< std::shared_ptr< CesiumAsync::IAssetRequest > > + loadFromNetwork + structCesiumAsync_1_1NetworkAssetDescriptor.html + a7ee0caa79c232571546e331b92690010 + (const CesiumAsync::AsyncSystem &asyncSystem, const std::shared_ptr< IAssetAccessor > &pAssetAccessor) const + + + Future< CesiumUtility::Result< std::vector< std::byte > > > + loadBytesFromNetwork + structCesiumAsync_1_1NetworkAssetDescriptor.html + a6522a1bdbfaf1fbcefbb2e2ff1687191 + (const CesiumAsync::AsyncSystem &asyncSystem, const std::shared_ptr< IAssetAccessor > &pAssetAccessor) const + + + std::string + url + structCesiumAsync_1_1NetworkAssetDescriptor.html + a4226fe3818eada116efe3d98dc72ed07 + + + + std::vector< IAssetAccessor::THeader > + headers + structCesiumAsync_1_1NetworkAssetDescriptor.html + a85affefdbbfaf02dea2e0c63a0340e7c + + + + + CesiumGltfReader::NetworkImageAssetDescriptor + structCesiumGltfReader_1_1NetworkImageAssetDescriptor.html + CesiumAsync::NetworkAssetDescriptor + + bool + operator== + structCesiumGltfReader_1_1NetworkImageAssetDescriptor.html + ad94db0d3126d781624a32cc145797c13 + (const NetworkImageAssetDescriptor &rhs) const noexcept + + + CesiumAsync::Future< CesiumUtility::ResultPointer< CesiumGltf::ImageAsset > > + load + structCesiumGltfReader_1_1NetworkImageAssetDescriptor.html + a04eebd340e4cd7e5c78093eb446d3d77 + (const CesiumAsync::AsyncSystem &asyncSystem, const std::shared_ptr< CesiumAsync::IAssetAccessor > &pAssetAccessor) const + + + CesiumGltf::Ktx2TranscodeTargets + ktx2TranscodeTargets + structCesiumGltfReader_1_1NetworkImageAssetDescriptor.html + acc30772e12924b168be749a4d2035078 + + + + + CesiumGltfReader::NetworkSchemaAssetDescriptor + structCesiumGltfReader_1_1NetworkSchemaAssetDescriptor.html + CesiumAsync::NetworkAssetDescriptor + + bool + operator== + structCesiumGltfReader_1_1NetworkSchemaAssetDescriptor.html + ae88167eb094a8d744add83b48a6cd369 + (const NetworkSchemaAssetDescriptor &rhs) const noexcept + + + CesiumAsync::Future< CesiumUtility::ResultPointer< CesiumGltf::Schema > > + load + structCesiumGltfReader_1_1NetworkSchemaAssetDescriptor.html + a8544141d0065690790e2564d24f47e93 + (const CesiumAsync::AsyncSystem &asyncSystem, const std::shared_ptr< CesiumAsync::IAssetAccessor > &pAssetAccessor) const + + + + CesiumGltf::Node + structCesiumGltf_1_1Node.html + CesiumGltf::NamedObject + + int64_t + getSizeBytes + structCesiumGltf_1_1Node.html + aff79dfe0171c8c25f2ba0726bb3144a6 + () const + + + int32_t + camera + structCesiumGltf_1_1Node.html + ac0fda8ccff27ce3b6a7fc0c427baeb81 + + + + std::vector< int32_t > + children + structCesiumGltf_1_1Node.html + a576120a397ba823369059613d22e07e7 + + + + int32_t + skin + structCesiumGltf_1_1Node.html + ae06849bbdc68ec3956520c3c179f51cd + + + + std::vector< double > + matrix + structCesiumGltf_1_1Node.html + a00a5e48dacfcf4e9717d1b23844f8177 + + + + int32_t + mesh + structCesiumGltf_1_1Node.html + ae7b18a6d149c6adfba4c1d4ae427c341 + + + + std::vector< double > + rotation + structCesiumGltf_1_1Node.html + a3ef7ac1b6c4712e736f9c1811c6c63b2 + + + + std::vector< double > + scale + structCesiumGltf_1_1Node.html + a3f55d3dc17c224774488bb946d1b94ee + + + + std::vector< double > + translation + structCesiumGltf_1_1Node.html + a0b2337242ff59e9aac341d4366e2049f + + + + std::vector< double > + weights + structCesiumGltf_1_1Node.html + a94a1e33af9db051674253634c4ba2ec0 + + + + static constexpr const char * + TypeName + structCesiumGltf_1_1Node.html + aae5964f0122946940b9859d6d2f8965b + + + + + CesiumGltfReader::NodeReader + classCesiumGltfReader_1_1NodeReader.html + + + NodeReader + classCesiumGltfReader_1_1NodeReader.html + ad78044b1e62b28b2572ff7f90587d5fe + () + + + CesiumJsonReader::JsonReaderOptions & + getOptions + classCesiumGltfReader_1_1NodeReader.html + a3b239d277cb722ff1c9b76bbb742dca9 + () + + + const CesiumJsonReader::JsonReaderOptions & + getOptions + classCesiumGltfReader_1_1NodeReader.html + a6603d095edb275978576164af66514f6 + () const + + + CesiumJsonReader::ReadJsonResult< CesiumGltf::Node > + readFromJson + classCesiumGltfReader_1_1NodeReader.html + a6f6f776f3cf7193154ec10e39bc3a5de + (const std::span< const std::byte > &data) const + + + CesiumJsonReader::ReadJsonResult< CesiumGltf::Node > + readFromJson + classCesiumGltfReader_1_1NodeReader.html + a4671bb03bc8e23ded786ea48542e71c2 + (const rapidjson::Value &value) const + + + CesiumJsonReader::ReadJsonResult< std::vector< CesiumGltf::Node > > + readArrayFromJson + classCesiumGltfReader_1_1NodeReader.html + a18ea6e5b90f2a4cf85d40da8065b85d5 + (const rapidjson::Value &value) const + + + + CesiumIonClient::NoValue + structCesiumIonClient_1_1NoValue.html + + + CesiumJsonReader::ObjectJsonHandler + classCesiumJsonReader_1_1ObjectJsonHandler.html + CesiumJsonReader::JsonHandler + + virtual IJsonHandler * + readObjectStart + classCesiumJsonReader_1_1ObjectJsonHandler.html + a2cb620c9b21ea9f14b5f9cf875c0c7c9 + () override + + + virtual IJsonHandler * + readObjectEnd + classCesiumJsonReader_1_1ObjectJsonHandler.html + a2b07caf371949b2cb63e9ddb0b6a9daa + () override + + + virtual IJsonHandler * + StartSubObject + classCesiumJsonReader_1_1ObjectJsonHandler.html + abaa7aa5c5951b6ebbf53d2b283844bf4 + () noexcept + + + virtual IJsonHandler * + EndSubObject + classCesiumJsonReader_1_1ObjectJsonHandler.html + a17f68441fe82947f7b70bc863d0bc727 + () noexcept + + + IJsonHandler * + property + classCesiumJsonReader_1_1ObjectJsonHandler.html + a0d25afbf9a9b943fff57ed558f27fe63 + (const char *currentKey, TAccessor &accessor, TProperty &value) + + + const char * + getCurrentKey + classCesiumJsonReader_1_1ObjectJsonHandler.html + af439383716e87fc6af8b6218d069eac6 + () const noexcept + + + virtual void + reportWarning + classCesiumJsonReader_1_1ObjectJsonHandler.html + aeb71f3e989205dc8f3165335e5966caa + (const std::string &warning, std::vector< std::string > &&context=std::vector< std::string >()) override + + + void + setCurrentKey + classCesiumJsonReader_1_1ObjectJsonHandler.html + a6c582bc542bb23a5588583d7b12debfb + (const char *key) noexcept + + + + CesiumGeometry::OctreeAvailability + classCesiumGeometry_1_1OctreeAvailability.html + + + OctreeAvailability + classCesiumGeometry_1_1OctreeAvailability.html + a0795821ebe8fb44580aa310de36c93fc + (uint32_t subtreeLevels, uint32_t maximumLevel) noexcept + + + uint8_t + computeAvailability + classCesiumGeometry_1_1OctreeAvailability.html + abf71a9040d7de4d839086ebe04cf8f27 + (const OctreeTileID &tileID) const noexcept + + + bool + addSubtree + classCesiumGeometry_1_1OctreeAvailability.html + ae720206973230d40cc622eb513aa9658 + (const OctreeTileID &tileID, AvailabilitySubtree &&newSubtree) noexcept + + + uint8_t + computeAvailability + classCesiumGeometry_1_1OctreeAvailability.html + ab35b02f586f0682f85f628b4f8cd0a1b + (const OctreeTileID &tileID, const AvailabilityNode *pNode) const noexcept + + + AvailabilityNode * + addNode + classCesiumGeometry_1_1OctreeAvailability.html + aba71cdcacebf0cb6502e378f412aca12 + (const OctreeTileID &tileID, AvailabilityNode *pParentNode) noexcept + + + bool + addLoadedSubtree + classCesiumGeometry_1_1OctreeAvailability.html + a0d9cfe751ea9466bb69066f294a9408b + (AvailabilityNode *pNode, AvailabilitySubtree &&newSubtree) noexcept + + + std::optional< uint32_t > + findChildNodeIndex + classCesiumGeometry_1_1OctreeAvailability.html + a0bff911944a0405611d2f53763859c29 + (const OctreeTileID &tileID, const AvailabilityNode *pParentNode) const + + + AvailabilityNode * + findChildNode + classCesiumGeometry_1_1OctreeAvailability.html + a1a3c17a197732ba5e63de80a21f05528 + (const OctreeTileID &tileID, AvailabilityNode *pParentNode) const + + + constexpr uint32_t + getSubtreeLevels + classCesiumGeometry_1_1OctreeAvailability.html + a5003a5bda16a135c616f3ebeebc701dc + () const noexcept + + + constexpr uint32_t + getMaximumLevel + classCesiumGeometry_1_1OctreeAvailability.html + a9df6fa40c85581cfc7b8566bfdbf92b4 + () const noexcept + + + AvailabilityNode * + getRootNode + classCesiumGeometry_1_1OctreeAvailability.html + aec8bf93dbf213bd93b75b428ff383162 + () noexcept + + + + Cesium3DTilesContent::OctreeChildren + classCesium3DTilesContent_1_1OctreeChildren.html + Cesium3DTilesContent::OctreeChildren::iterator + + iterator + const_iterator + classCesium3DTilesContent_1_1OctreeChildren.html + a26c905170affa614ef458394d0935d44 + + + + + OctreeChildren + classCesium3DTilesContent_1_1OctreeChildren.html + af9efd9e29da51641fc6ffc924a3cdc06 + (const CesiumGeometry::OctreeTileID &tileID) noexcept + + + iterator + begin + classCesium3DTilesContent_1_1OctreeChildren.html + af81c5ec0f013128c964933b6500c0cab + () const noexcept + + + iterator + end + classCesium3DTilesContent_1_1OctreeChildren.html + a4e7540083573ce26a0ca2bc57eec6c36 + () const noexcept + + + constexpr int64_t + size + classCesium3DTilesContent_1_1OctreeChildren.html + a2de883f24e5682c369e0db6ddc7a13bd + () const noexcept + + + + CesiumGeometry::OctreeTileID + structCesiumGeometry_1_1OctreeTileID.html + + constexpr + OctreeTileID + structCesiumGeometry_1_1OctreeTileID.html + a8821492c1431517e371557ecad12fb6e + () + + + constexpr + OctreeTileID + structCesiumGeometry_1_1OctreeTileID.html + a364e5d8bfba76c99355e54778504e103 + (uint32_t level_, uint32_t x_, uint32_t y_, uint32_t z_) noexcept + + + constexpr bool + operator== + structCesiumGeometry_1_1OctreeTileID.html + aff1032ba9eb4ae949c7bbf366cd97c2a + (const OctreeTileID &other) const noexcept + + + constexpr bool + operator!= + structCesiumGeometry_1_1OctreeTileID.html + aae3da50fd5e1e37bdf69e4e7c5e8916d + (const OctreeTileID &other) const noexcept + + + uint32_t + level + structCesiumGeometry_1_1OctreeTileID.html + a64f33d532c44fe961274f69078f52af1 + + + + uint32_t + x + structCesiumGeometry_1_1OctreeTileID.html + a274ffff959033560668a0c4a4d9ad376 + + + + uint32_t + y + structCesiumGeometry_1_1OctreeTileID.html + a8a12a8af85879cef4bce57fd18ac15a6 + + + + uint32_t + z + structCesiumGeometry_1_1OctreeTileID.html + a710fe73a8fd372c3b2d68c7544632632 + + + + + CesiumGeometry::OctreeTilingScheme + classCesiumGeometry_1_1OctreeTilingScheme.html + + + OctreeTilingScheme + classCesiumGeometry_1_1OctreeTilingScheme.html + aa7708fe9c50bc21370a361af61f23f85 + (const AxisAlignedBox &box, uint32_t rootTilesX, uint32_t rootTilesY, uint32_t rootTilesZ) noexcept + + + const AxisAlignedBox & + getBox + classCesiumGeometry_1_1OctreeTilingScheme.html + a1b4c296e04b00d5745cf0b161c1b13f2 + () const noexcept + + + uint32_t + getRootTilesX + classCesiumGeometry_1_1OctreeTilingScheme.html + a4a79334cad82d4231f1c0944357f9a13 + () const noexcept + + + uint32_t + getRootTilesY + classCesiumGeometry_1_1OctreeTilingScheme.html + acfcf23ad433f3b8bf8dc52a62f617ffb + () const noexcept + + + uint32_t + getRootTilesZ + classCesiumGeometry_1_1OctreeTilingScheme.html + a6b463f4b5f3a9dcd6ef05b7f5113605a + () const noexcept + + + uint32_t + getNumberOfXTilesAtLevel + classCesiumGeometry_1_1OctreeTilingScheme.html + a10d91e37f5cb662575d36a5d4c2bf094 + (uint32_t level) const noexcept + + + uint32_t + getNumberOfYTilesAtLevel + classCesiumGeometry_1_1OctreeTilingScheme.html + ae2c8ba56ec9f9691372a0f803fd6f19a + (uint32_t level) const noexcept + + + uint32_t + getNumberOfZTilesAtLevel + classCesiumGeometry_1_1OctreeTilingScheme.html + af5d4e7b51a157286b3ff9fe3213961f8 + (uint32_t level) const noexcept + + + std::optional< CesiumGeometry::OctreeTileID > + positionToTile + classCesiumGeometry_1_1OctreeTilingScheme.html + a4464b82d65dd46179714d3b6a751a834 + (const glm::dvec3 &position, uint32_t level) const noexcept + + + AxisAlignedBox + tileToBox + classCesiumGeometry_1_1OctreeTilingScheme.html + ab7aa548dc6c97be5e6214ed401d4f60c + (const CesiumGeometry::OctreeTileID &tileID) const noexcept + + + + CesiumGeometry::OrientedBoundingBox + classCesiumGeometry_1_1OrientedBoundingBox.html + + + OrientedBoundingBox + classCesiumGeometry_1_1OrientedBoundingBox.html + a9cff581d37f5528b42055dcfaa1a4e57 + (const glm::dvec3 &center, const glm::dmat3 &halfAxes) noexcept + + + constexpr const glm::dvec3 & + getCenter + classCesiumGeometry_1_1OrientedBoundingBox.html + aa6d3bd270fde9e40737a791418fcfc0f + () const noexcept + + + constexpr const glm::dmat3 & + getHalfAxes + classCesiumGeometry_1_1OrientedBoundingBox.html + a4ed7cf3ed5615dc742d19f1dc1ed3dfe + () const noexcept + + + constexpr const glm::dmat3 & + getInverseHalfAxes + classCesiumGeometry_1_1OrientedBoundingBox.html + aad5a61ecfe3031f47288ba9de7dd55d2 + () const noexcept + + + constexpr const glm::dvec3 & + getLengths + classCesiumGeometry_1_1OrientedBoundingBox.html + ab6222305e9cceb1dd6bb8259f2f826f0 + () const noexcept + + + CullingResult + intersectPlane + classCesiumGeometry_1_1OrientedBoundingBox.html + a6015b4402c9b39c2f154b42f231450cb + (const Plane &plane) const noexcept + + + double + computeDistanceSquaredToPosition + classCesiumGeometry_1_1OrientedBoundingBox.html + a2a6e7763fca3aedeeea728934e779de3 + (const glm::dvec3 &position) const noexcept + + + bool + contains + classCesiumGeometry_1_1OrientedBoundingBox.html + aefd7d506c2eabd1eec343243a79f0188 + (const glm::dvec3 &position) const noexcept + + + OrientedBoundingBox + transform + classCesiumGeometry_1_1OrientedBoundingBox.html + a31418aa531ae28856f49cb912609a7c4 + (const glm::dmat4 &transformation) const noexcept + + + AxisAlignedBox + toAxisAligned + classCesiumGeometry_1_1OrientedBoundingBox.html + a98c4c486a199adffeb2d5f3c9aff2a73 + () const noexcept + + + BoundingSphere + toSphere + classCesiumGeometry_1_1OrientedBoundingBox.html + ac2e84cf23c68e6e9d7dbb4ff71213c4e + () const noexcept + + + static OrientedBoundingBox + fromAxisAligned + classCesiumGeometry_1_1OrientedBoundingBox.html + a6510fd2d0b7fc4d66fe84c979e4d8069 + (const AxisAlignedBox &axisAligned) noexcept + + + static OrientedBoundingBox + fromSphere + classCesiumGeometry_1_1OrientedBoundingBox.html + a7949e3bd9abddd38af054f22b5ad1fd5 + (const BoundingSphere &sphere) noexcept + + + + CesiumAsync::CesiumImpl::ParameterizedTaskUnwrapper + structCesiumAsync_1_1CesiumImpl_1_1ParameterizedTaskUnwrapper.html + typename R + + + CesiumGltf::AnimationChannelTarget::Path + structCesiumGltf_1_1AnimationChannelTarget_1_1Path.html + + static const std::string + translation + structCesiumGltf_1_1AnimationChannelTarget_1_1Path.html + a1382ff8622e0dda663130fc7a604dab1 + + + + static const std::string + rotation + structCesiumGltf_1_1AnimationChannelTarget_1_1Path.html + a25197b1b95cbd134bb806b768cd9fae3 + + + + static const std::string + scale + structCesiumGltf_1_1AnimationChannelTarget_1_1Path.html + abf9aa43e0c981bada36a9ff25127c78a + + + + static const std::string + weights + structCesiumGltf_1_1AnimationChannelTarget_1_1Path.html + a6632f9025c70b5c81935b40208612e6c + + + + + CesiumGltfContent::PixelRectangle + structCesiumGltfContent_1_1PixelRectangle.html + + int32_t + x + structCesiumGltfContent_1_1PixelRectangle.html + ad667a1769b8b6bee24c9356dfacf171a + + + + int32_t + y + structCesiumGltfContent_1_1PixelRectangle.html + af53149b5c5e7a4ba8639006fdfcada67 + + + + int32_t + width + structCesiumGltfContent_1_1PixelRectangle.html + a50948faa9dc28b56f70d87ebc42c32a6 + + + + int32_t + height + structCesiumGltfContent_1_1PixelRectangle.html + abe6385d3ba142fbe114f67d615da232a + + + + + CesiumGeometry::Plane + classCesiumGeometry_1_1Plane.html + + + Plane + classCesiumGeometry_1_1Plane.html + ad030465f35b6cc6a0df0b4a94b57dd62 + () noexcept + + + + Plane + classCesiumGeometry_1_1Plane.html + a5dd3ea583b27e5b0c8b1c8618b458000 + (const glm::dvec3 &normal, double distance) + + + + Plane + classCesiumGeometry_1_1Plane.html + a80cb61ea891fe39d6468eca8dbb67291 + (const glm::dvec3 &point, const glm::dvec3 &normal) + + + const glm::dvec3 & + getNormal + classCesiumGeometry_1_1Plane.html + a4d92a3349650ca02dd11725197a3059f + () const noexcept + + + double + getDistance + classCesiumGeometry_1_1Plane.html + aed10746f588f6b3fba165ed7f2eda12d + () const noexcept + + + double + getPointDistance + classCesiumGeometry_1_1Plane.html + a4a20435c82b06bee7068d967fe5b4421 + (const glm::dvec3 &point) const noexcept + + + glm::dvec3 + projectPointOntoPlane + classCesiumGeometry_1_1Plane.html + ad7cb903a61d45eff57d79aeb41f7a07f + (const glm::dvec3 &point) const noexcept + + + static const Plane + ORIGIN_XY_PLANE + classCesiumGeometry_1_1Plane.html + aedc018ef4a00a1bbdc6335abc20572e4 + + + + static const Plane + ORIGIN_YZ_PLANE + classCesiumGeometry_1_1Plane.html + a8a34e7fdcbeb0aa76b6ace047bee60f9 + + + + static const Plane + ORIGIN_ZX_PLANE + classCesiumGeometry_1_1Plane.html + a30196e35d6019096e285da3dce2815cd + + + + + Cesium3DTilesContent::PntsToGltfConverter + structCesium3DTilesContent_1_1PntsToGltfConverter.html + + static CesiumAsync::Future< GltfConverterResult > + convert + structCesium3DTilesContent_1_1PntsToGltfConverter.html + a49f3b25c77e99270e3ac8cad817929cc + (const std::span< const std::byte > &pntsBinary, const CesiumGltfReader::GltfReaderOptions &options, const AssetFetcher &assetFetcher) + + + + CesiumJsonWriter::PrettyJsonWriter + classCesiumJsonWriter_1_1PrettyJsonWriter.html + CesiumJsonWriter::JsonWriter + + bool + Null + classCesiumJsonWriter_1_1PrettyJsonWriter.html + a1cf66df11ddebfdf04f3e950811f125a + () override + + + bool + Bool + classCesiumJsonWriter_1_1PrettyJsonWriter.html + a5a9f3afcae1ed75cd6a3020371f1b20a + (bool b) override + + + bool + Int + classCesiumJsonWriter_1_1PrettyJsonWriter.html + ab34be71961d8f133df87ea2a1149477f + (int i) override + + + bool + Uint + classCesiumJsonWriter_1_1PrettyJsonWriter.html + a7770c287da7b692467a21f51aedcb775 + (unsigned int i) override + + + bool + Uint64 + classCesiumJsonWriter_1_1PrettyJsonWriter.html + af081f55914adeaf2c3f5b4b6c043c1cc + (std::uint64_t i) override + + + bool + Int64 + classCesiumJsonWriter_1_1PrettyJsonWriter.html + ab3a458b7b536f79072eefdf1f4b05f2b + (std::int64_t i) override + + + bool + Double + classCesiumJsonWriter_1_1PrettyJsonWriter.html + a8a8f13a14974414d7e5090ba21ad5e5e + (double d) override + + + bool + RawNumber + classCesiumJsonWriter_1_1PrettyJsonWriter.html + a4e8aab14f983599f120e726ceae0c915 + (const char *str, unsigned int length, bool copy) override + + + bool + Key + classCesiumJsonWriter_1_1PrettyJsonWriter.html + a94680eba46c583f581ec5456993e973f + (std::string_view string) override + + + bool + String + classCesiumJsonWriter_1_1PrettyJsonWriter.html + a24a4ce5b64701075867fbc1b7ae90041 + (std::string_view string) override + + + bool + StartObject + classCesiumJsonWriter_1_1PrettyJsonWriter.html + a8148cfa7e4a6bced5be17e72e403d588 + () override + + + bool + EndObject + classCesiumJsonWriter_1_1PrettyJsonWriter.html + add7ff3ef4c81b502f7f2cdc851885057 + () override + + + bool + StartArray + classCesiumJsonWriter_1_1PrettyJsonWriter.html + a16690405cebfd881208794f77a4724de + () override + + + bool + EndArray + classCesiumJsonWriter_1_1PrettyJsonWriter.html + a7c721890ebcb1f041b45251cc9cdb65e + () override + + + void + Primitive + classCesiumJsonWriter_1_1PrettyJsonWriter.html + a1334373b5ef26b63c4dbd0688d66c208 + (std::int32_t value) override + + + void + Primitive + classCesiumJsonWriter_1_1PrettyJsonWriter.html + a80a3996c03b447861a54717c4ae6f636 + (std::uint32_t value) override + + + void + Primitive + classCesiumJsonWriter_1_1PrettyJsonWriter.html + ae6d61d43dd8895d65c6e83c6e0131a4a + (std::int64_t value) override + + + void + Primitive + classCesiumJsonWriter_1_1PrettyJsonWriter.html + ad48cb140ed09be0cca388885f709f943 + (std::uint64_t value) override + + + void + Primitive + classCesiumJsonWriter_1_1PrettyJsonWriter.html + a794c8967a409667dcc69575ac1c175fc + (float value) override + + + void + Primitive + classCesiumJsonWriter_1_1PrettyJsonWriter.html + a2173b196d3969a614fdd2199b86bb3fd + (double value) override + + + void + Primitive + classCesiumJsonWriter_1_1PrettyJsonWriter.html + aff37092cbf62057b2cee1fca95972c0c + (std::nullptr_t value) override + + + void + Primitive + classCesiumJsonWriter_1_1PrettyJsonWriter.html + a9e309abf85902dbdcdabea0196d78da6 + (std::string_view string) override + + + void + KeyPrimitive + classCesiumJsonWriter_1_1PrettyJsonWriter.html + a897b1bfbdf35a87296a2aca1e1a29ac9 + (std::string_view keyName, std::int32_t value) override + + + void + KeyPrimitive + classCesiumJsonWriter_1_1PrettyJsonWriter.html + ac169f199959db646f79b3ce3aeb47d82 + (std::string_view keyName, std::uint32_t value) override + + + void + KeyPrimitive + classCesiumJsonWriter_1_1PrettyJsonWriter.html + af82a28b7ff715f8f5ae7981a2336a1bc + (std::string_view keyName, std::int64_t value) override + + + void + KeyPrimitive + classCesiumJsonWriter_1_1PrettyJsonWriter.html + a381eb5b19fd3347a7d392b8e45ea5bce + (std::string_view keyName, std::uint64_t value) override + + + void + KeyPrimitive + classCesiumJsonWriter_1_1PrettyJsonWriter.html + ac8103c3e80513304083fbccb4555854b + (std::string_view keyName, std::string_view value) override + + + void + KeyPrimitive + classCesiumJsonWriter_1_1PrettyJsonWriter.html + a458cb06c70571915d3766ec86147798d + (std::string_view keyName, float value) override + + + void + KeyPrimitive + classCesiumJsonWriter_1_1PrettyJsonWriter.html + a63eeccfa8c1172213660d0f805f761ba + (std::string_view keyName, double value) override + + + void + KeyPrimitive + classCesiumJsonWriter_1_1PrettyJsonWriter.html + a0453e757cc4103839f8931df04cfdcf5 + (std::string_view keyName, std::nullptr_t value) override + + + void + KeyArray + classCesiumJsonWriter_1_1PrettyJsonWriter.html + ad29898472cf0ca6fbadbc4d6135a4f81 + (std::string_view keyName, std::function< void(void)> insideArray) override + + + void + KeyObject + classCesiumJsonWriter_1_1PrettyJsonWriter.html + a3f7b34a1720b19088f0a9595aed14093 + (std::string_view keyName, std::function< void(void)> insideObject) override + + + std::string + toString + classCesiumJsonWriter_1_1PrettyJsonWriter.html + a1dc02ad424d8ea98bc99d5d5862167e4 + () override + + + std::string_view + toStringView + classCesiumJsonWriter_1_1PrettyJsonWriter.html + a4ef65d37fa5f96349ec044f26eb6877c + () override + + + std::vector< std::byte > + toBytes + classCesiumJsonWriter_1_1PrettyJsonWriter.html + a9c7c3a94ea0d7c7b8a776532cfe1460d + () override + + + + CesiumIonClient::Profile + structCesiumIonClient_1_1Profile.html + + int64_t + id + structCesiumIonClient_1_1Profile.html + a65b588fc794948f4bfd94527cab1fba7 + + + + std::vector< std::string > + scopes + structCesiumIonClient_1_1Profile.html + abcaa7d4046d692e7a8b26c4ed30cdd6a + + + + std::string + username + structCesiumIonClient_1_1Profile.html + a53a00f51336904067e1d5996be74cb3b + + + + std::string + email + structCesiumIonClient_1_1Profile.html + a1a073d66fa655f70e9883bce8374c36f + + + + bool + emailVerified + structCesiumIonClient_1_1Profile.html + a85f5d9a13af1b995a8dbfb41eaf8c7d1 + + + + std::string + avatar + structCesiumIonClient_1_1Profile.html + ab1d7df3e33651517894089ac00eb1f8d + + + + ProfileStorage + storage + structCesiumIonClient_1_1Profile.html + ae27bdb9e2dfac1cd3b07b33ffd123516 + + + + + CesiumIonClient::ProfileStorage + structCesiumIonClient_1_1ProfileStorage.html + + int64_t + used + structCesiumIonClient_1_1ProfileStorage.html + aab9be9a7f0bd90f8bcd6ae0ad585572c + + + + int64_t + available + structCesiumIonClient_1_1ProfileStorage.html + a44cbee0281dc798b87470e934c63659e + + + + int64_t + total + structCesiumIonClient_1_1ProfileStorage.html + a3f537127d6dc57858c9fc174bba1b64d + + + + + CesiumAsync::Promise + classCesiumAsync_1_1Promise.html + typename T + + void + resolve + classCesiumAsync_1_1Promise.html + a8ae4009eaf3d2e85d610e4114678c276 + (T &&value) const + + + void + resolve + classCesiumAsync_1_1Promise.html + a4b3afc5fdc964c76f60f2e93da9981f7 + (const T &value) const + + + void + reject + classCesiumAsync_1_1Promise.html + a9a158ea6ba977f3d846814ed95584d79 + (TException error) const + + + void + reject + classCesiumAsync_1_1Promise.html + a5f75876a0c6a7239cecb930cdf013641 + (const std::exception_ptr &error) const + + + Future< T > + getFuture + classCesiumAsync_1_1Promise.html + ab7c0060c20a4f96e0903eeb3b9e03fd9 + () const + + + + CesiumAsync::Promise< void > + classCesiumAsync_1_1Promise_3_01void_01_4.html + + void + resolve + classCesiumAsync_1_1Promise_3_01void_01_4.html + a0577d402a2f11d9e0b2e81b9194bbb3f + () const + + + void + reject + classCesiumAsync_1_1Promise_3_01void_01_4.html + ab8ff932dfd3e9632dbf53e6ee65ed51f + (TException error) const + + + void + reject + classCesiumAsync_1_1Promise_3_01void_01_4.html + a25779cc73aec02cbe1eabda4818af77a + (const std::exception_ptr &error) const + + + Future< void > + getFuture + classCesiumAsync_1_1Promise_3_01void_01_4.html + a4f48b2d4685595dbc88b65dd19647bdc + () const + + + + Cesium3DTiles::Properties + structCesium3DTiles_1_1Properties.html + CesiumUtility::ExtensibleObject + + int64_t + getSizeBytes + structCesium3DTiles_1_1Properties.html + ac77d62ef8cdbbf0e32aef5181bb9c0ce + () const + + + double + maximum + structCesium3DTiles_1_1Properties.html + abc0345337e229ca4a6acfa45270b2ca6 + + + + double + minimum + structCesium3DTiles_1_1Properties.html + a2dd118c5f46c0815eb349ce8fb21c0dd + + + + static constexpr const char * + TypeName + structCesium3DTiles_1_1Properties.html + acf945842cd6e87e60477a4f31a65d64e + + + + + Cesium3DTilesReader::PropertiesReader + classCesium3DTilesReader_1_1PropertiesReader.html + + + PropertiesReader + classCesium3DTilesReader_1_1PropertiesReader.html + a31aed4f9c36f866d9095a4a59a4a3e51 + () + + + CesiumJsonReader::JsonReaderOptions & + getOptions + classCesium3DTilesReader_1_1PropertiesReader.html + a46efbd04d2af003e7dc6c20fb2fd4bbe + () + + + const CesiumJsonReader::JsonReaderOptions & + getOptions + classCesium3DTilesReader_1_1PropertiesReader.html + a4c77116077daff857d6875235e0054a8 + () const + + + CesiumJsonReader::ReadJsonResult< Cesium3DTiles::Properties > + readFromJson + classCesium3DTilesReader_1_1PropertiesReader.html + af68802fc5d8adfe88e59e7a171b5d5b3 + (const std::span< const std::byte > &data) const + + + CesiumJsonReader::ReadJsonResult< Cesium3DTiles::Properties > + readFromJson + classCesium3DTilesReader_1_1PropertiesReader.html + a650fb4ba10fde035e6c208054e395066 + (const rapidjson::Value &value) const + + + CesiumJsonReader::ReadJsonResult< std::vector< Cesium3DTiles::Properties > > + readArrayFromJson + classCesium3DTilesReader_1_1PropertiesReader.html + a0f383e63b213a68aa5b5ef55ba2aa37e + (const rapidjson::Value &value) const + + + + CesiumGltf::PropertyArrayCopy + classCesiumGltf_1_1PropertyArrayCopy.html + typename ElementType + + + PropertyArrayCopy + classCesiumGltf_1_1PropertyArrayCopy.html + ae06ee628f4dbcaf77084ef7ee9ef30ee + () + + + + PropertyArrayCopy + classCesiumGltf_1_1PropertyArrayCopy.html + a22c19b4015607bd8e124afb2822bc4c1 + (const std::vector< ElementType > &values) noexcept + + + + PropertyArrayCopy + classCesiumGltf_1_1PropertyArrayCopy.html + ade04a01a7e18b1f75822b8b7ac5a78bc + (PropertyArrayCopy &&)=default + + + PropertyArrayCopy & + operator= + classCesiumGltf_1_1PropertyArrayCopy.html + a7b65e73b123da3d0174d20e686c751ca + (PropertyArrayCopy &&)=default + + + + PropertyArrayCopy + classCesiumGltf_1_1PropertyArrayCopy.html + a7ca0e94cfdd58b7da2750b1e2b2146b8 + (std::vector< std::byte > &&buffer) noexcept + + + + PropertyArrayCopy + classCesiumGltf_1_1PropertyArrayCopy.html + a8209aea9150a5b53b3148c1e75cb6e5f + (const PropertyArrayCopy &rhs) + + + PropertyArrayCopy & + operator= + classCesiumGltf_1_1PropertyArrayCopy.html + a1f9527d7633d37012d544eacf5fb55e8 + (const PropertyArrayCopy &rhs) + + + const ElementType & + operator[] + classCesiumGltf_1_1PropertyArrayCopy.html + a967fafcef3177a79d5e65301e58285aa + (int64_t index) const noexcept + + + int64_t + size + classCesiumGltf_1_1PropertyArrayCopy.html + a8904188981da9441f5270d70411b1a06 + () const noexcept + + + auto + begin + classCesiumGltf_1_1PropertyArrayCopy.html + a710d4c9e862a74b9f4864c957917f517 + () + + + auto + end + classCesiumGltf_1_1PropertyArrayCopy.html + a868a4914bda93244833da724fb875e9c + () + + + auto + begin + classCesiumGltf_1_1PropertyArrayCopy.html + a2354564ac1fc8c0ad22dff44f325b3ee + () const + + + auto + end + classCesiumGltf_1_1PropertyArrayCopy.html + a2d34cbc6715f1b5e2c5121f6ddffd098 + () const + + + const PropertyArrayView< ElementType > & + view + classCesiumGltf_1_1PropertyArrayCopy.html + abadf658cbe552868b7e42905f48b2dfe + () const + + + PropertyArrayView< ElementType > + toViewAndExternalBuffer + classCesiumGltf_1_1PropertyArrayCopy.html + ae4d15a2e0aad3b64f992599f985a2ed5 + (std::vector< std::byte > &outBuffer) && + + + + CesiumGltf::PropertyArrayView + classCesiumGltf_1_1PropertyArrayView.html + typename ElementType + + + PropertyArrayView + classCesiumGltf_1_1PropertyArrayView.html + ace2b29e639dc0830464a060079c98e3d + () + + + + PropertyArrayView + classCesiumGltf_1_1PropertyArrayView.html + ab9dd6def92aead4cd8ed7620b491e80c + (const std::span< const std::byte > &buffer) noexcept + + + const ElementType & + operator[] + classCesiumGltf_1_1PropertyArrayView.html + a92b0fc0986249ff0502d750c17b6fc22 + (int64_t index) const noexcept + + + int64_t + size + classCesiumGltf_1_1PropertyArrayView.html + ae869ce0aa789433a5289806133ee0397 + () const noexcept + + + auto + begin + classCesiumGltf_1_1PropertyArrayView.html + adcf6f8939ba382770e54f3099ad17016 + () + + + auto + end + classCesiumGltf_1_1PropertyArrayView.html + a1f91682cfefe7bb406e7fb265d206ce7 + () + + + auto + begin + classCesiumGltf_1_1PropertyArrayView.html + ad8c8a742a98729041c1d14f5fe5abd3a + () const + + + auto + end + classCesiumGltf_1_1PropertyArrayView.html + aa4028d0712c64dc7f3ca9314a82a789a + () const + + + + CesiumGltf::PropertyArrayView< bool > + classCesiumGltf_1_1PropertyArrayView_3_01bool_01_4.html + + + PropertyArrayView + classCesiumGltf_1_1PropertyArrayView_3_01bool_01_4.html + a458b21690b97fe621ea9d2e00ef6c7ea + () + + + + PropertyArrayView + classCesiumGltf_1_1PropertyArrayView_3_01bool_01_4.html + a6174642e425a31c27783decc06f2408b + (const std::span< const std::byte > &buffer, int64_t bitOffset, int64_t size) noexcept + + + bool + operator[] + classCesiumGltf_1_1PropertyArrayView_3_01bool_01_4.html + aea35fd9d1631623b555d6286736ded4b + (int64_t index) const noexcept + + + int64_t + size + classCesiumGltf_1_1PropertyArrayView_3_01bool_01_4.html + af74bad36b3fea23545bbe029f3207d7d + () const noexcept + + + + CesiumGltf::PropertyArrayView< std::string_view > + classCesiumGltf_1_1PropertyArrayView_3_01std_1_1string__view_01_4.html + + + PropertyArrayView + classCesiumGltf_1_1PropertyArrayView_3_01std_1_1string__view_01_4.html + af000298f20131974c29a74cdcff17ca4 + () + + + + PropertyArrayView + classCesiumGltf_1_1PropertyArrayView_3_01std_1_1string__view_01_4.html + a385127606352c6496b29863fe024612f + (const std::span< const std::byte > &values, const std::span< const std::byte > &stringOffsets, PropertyComponentType stringOffsetType, int64_t size) noexcept + + + std::string_view + operator[] + classCesiumGltf_1_1PropertyArrayView_3_01std_1_1string__view_01_4.html + a08488e776486e2eba01c0df61d6b732a + (int64_t index) const noexcept + + + int64_t + size + classCesiumGltf_1_1PropertyArrayView_3_01std_1_1string__view_01_4.html + ad27e617b67c400a16021bd12c420d286 + () const noexcept + + + + CesiumGltf::PropertyAttribute + structCesiumGltf_1_1PropertyAttribute.html + CesiumUtility::ExtensibleObject + + int64_t + getSizeBytes + structCesiumGltf_1_1PropertyAttribute.html + a58e498d7cdf2aed4625b24670376ad22 + () const + + + std::optional< std::string > + name + structCesiumGltf_1_1PropertyAttribute.html + a09ec4f8657dafffa9c611e66d559cd11 + + + + std::string + classProperty + structCesiumGltf_1_1PropertyAttribute.html + a7eb08d5918bc1dd7c6d8e5f70d4d3686 + + + + std::unordered_map< std::string, CesiumGltf::PropertyAttributeProperty > + properties + structCesiumGltf_1_1PropertyAttribute.html + af33750044fb006e3f2ed3c011fcb8c84 + + + + static constexpr const char * + TypeName + structCesiumGltf_1_1PropertyAttribute.html + ac45150d8fd8070c87018330d442ade87 + + + + + CesiumGltf::PropertyAttributeProperty + structCesiumGltf_1_1PropertyAttributeProperty.html + CesiumUtility::ExtensibleObject + + int64_t + getSizeBytes + structCesiumGltf_1_1PropertyAttributeProperty.html + a4e4a3140ea88c3acc817b0eb47aafbc9 + () const + + + std::string + attribute + structCesiumGltf_1_1PropertyAttributeProperty.html + a137f22b72f0d7c894d2a8a709eed5e62 + + + + std::optional< CesiumUtility::JsonValue > + offset + structCesiumGltf_1_1PropertyAttributeProperty.html + aab34e4c473e9e5e206c49b029e3e896e + + + + std::optional< CesiumUtility::JsonValue > + scale + structCesiumGltf_1_1PropertyAttributeProperty.html + af3d58ff4f7ced6e60efa223b5de3aeee + + + + std::optional< CesiumUtility::JsonValue > + max + structCesiumGltf_1_1PropertyAttributeProperty.html + a32889ffaf0f4d0723605fa0f93d0037b + + + + std::optional< CesiumUtility::JsonValue > + min + structCesiumGltf_1_1PropertyAttributeProperty.html + aa1a77e79f21239dcd795ba5bba34335d + + + + static constexpr const char * + TypeName + structCesiumGltf_1_1PropertyAttributeProperty.html + aed2e366f985d0405dc2ef116e8edc9be + + + + + CesiumGltfReader::PropertyAttributePropertyReader + classCesiumGltfReader_1_1PropertyAttributePropertyReader.html + + + PropertyAttributePropertyReader + classCesiumGltfReader_1_1PropertyAttributePropertyReader.html + abd2f43d3e9854fb3e54c05586783359f + () + + + CesiumJsonReader::JsonReaderOptions & + getOptions + classCesiumGltfReader_1_1PropertyAttributePropertyReader.html + abaf2ea923cf3b9d1dba87fc72c51125b + () + + + const CesiumJsonReader::JsonReaderOptions & + getOptions + classCesiumGltfReader_1_1PropertyAttributePropertyReader.html + a089fc81da6d08d4fae74b84690757d3f + () const + + + CesiumJsonReader::ReadJsonResult< CesiumGltf::PropertyAttributeProperty > + readFromJson + classCesiumGltfReader_1_1PropertyAttributePropertyReader.html + a3ab2ca4d96ff3a041449516a07d4298e + (const std::span< const std::byte > &data) const + + + CesiumJsonReader::ReadJsonResult< CesiumGltf::PropertyAttributeProperty > + readFromJson + classCesiumGltfReader_1_1PropertyAttributePropertyReader.html + a896495dddc0cbc0ad1042cee2cecb2a7 + (const rapidjson::Value &value) const + + + CesiumJsonReader::ReadJsonResult< std::vector< CesiumGltf::PropertyAttributeProperty > > + readArrayFromJson + classCesiumGltfReader_1_1PropertyAttributePropertyReader.html + abaef78785f937e380a4b60bca5633260 + (const rapidjson::Value &value) const + + + + CesiumGltf::PropertyAttributePropertyView + classCesiumGltf_1_1PropertyAttributePropertyView.html + typename ElementType + bool Normalized + + + CesiumGltf::PropertyAttributePropertyView< ElementType, false > + classCesiumGltf_1_1PropertyAttributePropertyView_3_01ElementType_00_01false_01_4.html + typename ElementType + CesiumGltf::PropertyView< ElementType, false > + + + PropertyAttributePropertyView + classCesiumGltf_1_1PropertyAttributePropertyView_3_01ElementType_00_01false_01_4.html + aa4b9efd37a2a0b8194209a710e4e9f35 + () noexcept + + + + PropertyAttributePropertyView + classCesiumGltf_1_1PropertyAttributePropertyView_3_01ElementType_00_01false_01_4.html + a3be96879968c79ed23d9d7d61f3ba134 + (PropertyViewStatusType status) noexcept + + + + PropertyAttributePropertyView + classCesiumGltf_1_1PropertyAttributePropertyView_3_01ElementType_00_01false_01_4.html + ace751873dc9e707b2cdc92627ca25b77 + (const ClassProperty &classProperty, int64_t size) noexcept + + + + PropertyAttributePropertyView + classCesiumGltf_1_1PropertyAttributePropertyView_3_01ElementType_00_01false_01_4.html + aed4ada14ea6102899b2d4559fd5e904b + (const PropertyAttributeProperty &property, const ClassProperty &classProperty, const AccessorView< ElementType > &accessorView) noexcept + + + std::optional< ElementType > + get + classCesiumGltf_1_1PropertyAttributePropertyView_3_01ElementType_00_01false_01_4.html + a0e6747bcd2f96a88175cff6d78fa9d04 + (int64_t index) const noexcept + + + ElementType + getRaw + classCesiumGltf_1_1PropertyAttributePropertyView_3_01ElementType_00_01false_01_4.html + a7a66f3964a74fc932fff33329b0d4b7b + (int64_t index) const noexcept + + + int64_t + size + classCesiumGltf_1_1PropertyAttributePropertyView_3_01ElementType_00_01false_01_4.html + ae6137cd8df71fefbcb4ce25b8ee35581 + () const noexcept + + + + CesiumGltf::PropertyAttributePropertyView< ElementType, true > + classCesiumGltf_1_1PropertyAttributePropertyView_3_01ElementType_00_01true_01_4.html + typename ElementType + CesiumGltf::PropertyView< ElementType, true > + + + PropertyAttributePropertyView + classCesiumGltf_1_1PropertyAttributePropertyView_3_01ElementType_00_01true_01_4.html + acf2ffda4e34ef5d606e564e7989cf873 + () noexcept + + + + PropertyAttributePropertyView + classCesiumGltf_1_1PropertyAttributePropertyView_3_01ElementType_00_01true_01_4.html + a906cb5f33c7ad93608ebe385fa151514 + (PropertyViewStatusType status) noexcept + + + + PropertyAttributePropertyView + classCesiumGltf_1_1PropertyAttributePropertyView_3_01ElementType_00_01true_01_4.html + ae583f7a819092fb9fad194547fc1b84a + (const ClassProperty &classProperty, int64_t size) noexcept + + + + PropertyAttributePropertyView + classCesiumGltf_1_1PropertyAttributePropertyView_3_01ElementType_00_01true_01_4.html + a514def39bfc0be22bccd07d22963f5c5 + (const PropertyAttributeProperty &property, const ClassProperty &classProperty, const AccessorView< ElementType > &accessorView) noexcept + + + std::optional< NormalizedType > + get + classCesiumGltf_1_1PropertyAttributePropertyView_3_01ElementType_00_01true_01_4.html + a77856c3e634fb90c266d62ea2b6f2615 + (int64_t index) const noexcept + + + ElementType + getRaw + classCesiumGltf_1_1PropertyAttributePropertyView_3_01ElementType_00_01true_01_4.html + a0fe87b74a20819d7d2c459b7de4b8b55 + (int64_t index) const noexcept + + + int64_t + size + classCesiumGltf_1_1PropertyAttributePropertyView_3_01ElementType_00_01true_01_4.html + a5fec27745bbbe9b5029af47483dd35d1 + () const noexcept + + + + CesiumGltf::PropertyAttributePropertyViewStatus + classCesiumGltf_1_1PropertyAttributePropertyViewStatus.html + CesiumGltf::PropertyViewStatus + + static const int + ErrorInvalidPropertyAttribute + classCesiumGltf_1_1PropertyAttributePropertyViewStatus.html + ad5c60759dab5fdffa589ee0884e8bbb4 + + + + static const int + ErrorUnsupportedProperty + classCesiumGltf_1_1PropertyAttributePropertyViewStatus.html + ac7414004046a62405aba9b8fa41765af + + + + static const int + ErrorMissingAttribute + classCesiumGltf_1_1PropertyAttributePropertyViewStatus.html + a5cf8e359f22296604defe5ddde97bbd3 + + + + static const int + ErrorInvalidAccessor + classCesiumGltf_1_1PropertyAttributePropertyViewStatus.html + a55340c8df2d6355b2b52f143489761b6 + + + + static const int + ErrorAccessorTypeMismatch + classCesiumGltf_1_1PropertyAttributePropertyViewStatus.html + acbab79e9ac305bd6a83b8c17eaae2dc5 + + + + static const int + ErrorAccessorComponentTypeMismatch + classCesiumGltf_1_1PropertyAttributePropertyViewStatus.html + aa2d37da1ff29a96b533f1609160b2f0d + + + + static const int + ErrorAccessorNormalizationMismatch + classCesiumGltf_1_1PropertyAttributePropertyViewStatus.html + a3cbe9026bb40dc6a0744ea44ee1f5b7b + + + + static const int + ErrorInvalidBufferView + classCesiumGltf_1_1PropertyAttributePropertyViewStatus.html + a08f2634ca056d8975bcbdc5826b865db + + + + static const int + ErrorInvalidBuffer + classCesiumGltf_1_1PropertyAttributePropertyViewStatus.html + a3509a382d510c7a6fae2a30acb6e0d1e + + + + static const PropertyViewStatusType + ErrorAccessorOutOfBounds + classCesiumGltf_1_1PropertyAttributePropertyViewStatus.html + af14ebceeb4483c4bc594c073832be9b0 + + + + static const PropertyViewStatusType + ErrorBufferViewOutOfBounds + classCesiumGltf_1_1PropertyAttributePropertyViewStatus.html + af68f95f366b38ed2b805ab6b99319943 + + + + + CesiumGltfReader::PropertyAttributeReader + classCesiumGltfReader_1_1PropertyAttributeReader.html + + + PropertyAttributeReader + classCesiumGltfReader_1_1PropertyAttributeReader.html + a06956ab07e688821388c786477ad96ba + () + + + CesiumJsonReader::JsonReaderOptions & + getOptions + classCesiumGltfReader_1_1PropertyAttributeReader.html + ac6d52c1beb595bbdd9996a61b395bd65 + () + + + const CesiumJsonReader::JsonReaderOptions & + getOptions + classCesiumGltfReader_1_1PropertyAttributeReader.html + a649735e8ff1d1b0dbbdfcb7c0a9b0087 + () const + + + CesiumJsonReader::ReadJsonResult< CesiumGltf::PropertyAttribute > + readFromJson + classCesiumGltfReader_1_1PropertyAttributeReader.html + ae43f8d39bf04cf49031be2f748885387 + (const std::span< const std::byte > &data) const + + + CesiumJsonReader::ReadJsonResult< CesiumGltf::PropertyAttribute > + readFromJson + classCesiumGltfReader_1_1PropertyAttributeReader.html + a01e64245a50bf5b45bfaec7c77f4eb49 + (const rapidjson::Value &value) const + + + CesiumJsonReader::ReadJsonResult< std::vector< CesiumGltf::PropertyAttribute > > + readArrayFromJson + classCesiumGltfReader_1_1PropertyAttributeReader.html + a3d8ad4cff47d95816bac5e66e6b5c4ef + (const rapidjson::Value &value) const + + + + CesiumGltf::PropertyAttributeView + classCesiumGltf_1_1PropertyAttributeView.html + + + PropertyAttributeView + classCesiumGltf_1_1PropertyAttributeView.html + a1dfd7bfb849a6c7d6f8ae3f5a1fe3207 + (const Model &model, const PropertyAttribute &propertyAttribute) noexcept + + + PropertyAttributeViewStatus + status + classCesiumGltf_1_1PropertyAttributeView.html + a34d6e5a1ac1446db7f10a9b465d6c64a + () const noexcept + + + const std::optional< std::string > & + name + classCesiumGltf_1_1PropertyAttributeView.html + aa714a28b5dc6b481cfaca51e85ebf927 + () const noexcept + + + const Class * + getClass + classCesiumGltf_1_1PropertyAttributeView.html + af81b340a90a7e8a383a1d0f68feb8f75 + () const noexcept + + + const ClassProperty * + getClassProperty + classCesiumGltf_1_1PropertyAttributeView.html + a23b774cf456c463ca2133e37c1eca043 + (const std::string &propertyId) const + + + PropertyAttributePropertyView< T, Normalized > + getPropertyView + classCesiumGltf_1_1PropertyAttributeView.html + a8f4b19fda2443cfb5447b2a08552500d + (const MeshPrimitive &primitive, const std::string &propertyId) const + + + void + getPropertyView + classCesiumGltf_1_1PropertyAttributeView.html + adb01db1dbfb3c9fea72e5d50efed37ad + (const MeshPrimitive &primitive, const std::string &propertyId, Callback &&callback) const + + + void + forEachProperty + classCesiumGltf_1_1PropertyAttributeView.html + addc4a48246e68246372af4129202b0c8 + (const MeshPrimitive &primitive, Callback &&callback) const + + + + Cesium3DTiles::PropertyStatistics + structCesium3DTiles_1_1PropertyStatistics.html + CesiumUtility::ExtensibleObject + + int64_t + getSizeBytes + structCesium3DTiles_1_1PropertyStatistics.html + ae61f5ee4800b6b88c9957b53dec20667 + () const + + + std::optional< CesiumUtility::JsonValue > + min + structCesium3DTiles_1_1PropertyStatistics.html + ade47d2b29eeeb3583958015f5ede7215 + + + + std::optional< CesiumUtility::JsonValue > + max + structCesium3DTiles_1_1PropertyStatistics.html + a19a8baa683ae9c344230abe681d17cee + + + + std::optional< CesiumUtility::JsonValue > + mean + structCesium3DTiles_1_1PropertyStatistics.html + a398ec6d77dcfa0a156e56fac1bd8ce6b + + + + std::optional< CesiumUtility::JsonValue > + median + structCesium3DTiles_1_1PropertyStatistics.html + a823e3d9422bbbeac920edcc44786cfba + + + + std::optional< CesiumUtility::JsonValue > + standardDeviation + structCesium3DTiles_1_1PropertyStatistics.html + a75dc404193923123147106981d52a32e + + + + std::optional< CesiumUtility::JsonValue > + variance + structCesium3DTiles_1_1PropertyStatistics.html + abe77eb650c8bab16584a9e25b5626466 + + + + std::optional< CesiumUtility::JsonValue > + sum + structCesium3DTiles_1_1PropertyStatistics.html + aef9968eca8b61043e7a70899548de8ef + + + + std::unordered_map< std::string, CesiumUtility::JsonValue > + occurrences + structCesium3DTiles_1_1PropertyStatistics.html + ac12e2d2d6a64de76cd5362fd51805382 + + + + static constexpr const char * + TypeName + structCesium3DTiles_1_1PropertyStatistics.html + a987bd1bebaa5f28904f883dbb4427aed + + + + + Cesium3DTilesReader::PropertyStatisticsReader + classCesium3DTilesReader_1_1PropertyStatisticsReader.html + + + PropertyStatisticsReader + classCesium3DTilesReader_1_1PropertyStatisticsReader.html + a491a0ea96422a3ae11ff0aaaf3a69fda + () + + + CesiumJsonReader::JsonReaderOptions & + getOptions + classCesium3DTilesReader_1_1PropertyStatisticsReader.html + a374750297c4ceaae7f9166404799ff4b + () + + + const CesiumJsonReader::JsonReaderOptions & + getOptions + classCesium3DTilesReader_1_1PropertyStatisticsReader.html + a07ad82a4f04d3eb3b414fdb4bb638d69 + () const + + + CesiumJsonReader::ReadJsonResult< Cesium3DTiles::PropertyStatistics > + readFromJson + classCesium3DTilesReader_1_1PropertyStatisticsReader.html + a0d08df50f9b9c09b77b37c4c7c1d3089 + (const std::span< const std::byte > &data) const + + + CesiumJsonReader::ReadJsonResult< Cesium3DTiles::PropertyStatistics > + readFromJson + classCesium3DTilesReader_1_1PropertyStatisticsReader.html + a10e998bf8d2fe0f213102cb8529d5bc1 + (const rapidjson::Value &value) const + + + CesiumJsonReader::ReadJsonResult< std::vector< Cesium3DTiles::PropertyStatistics > > + readArrayFromJson + classCesium3DTilesReader_1_1PropertyStatisticsReader.html + ac0cc7484efe2fe0be3e5621d6a4e89bc + (const rapidjson::Value &value) const + + + + Cesium3DTiles::PropertyTable + structCesium3DTiles_1_1PropertyTable.html + CesiumUtility::ExtensibleObject + + int64_t + getSizeBytes + structCesium3DTiles_1_1PropertyTable.html + aca4d8c2eb07980b98a5447b1cf02c0f1 + () const + + + std::optional< std::string > + name + structCesium3DTiles_1_1PropertyTable.html + af7b7ddef42e7ecbb4e3fab74c34b58b1 + + + + std::string + classProperty + structCesium3DTiles_1_1PropertyTable.html + a12e23004b552e92a069a8d46ab6f60de + + + + int64_t + count + structCesium3DTiles_1_1PropertyTable.html + aa42ab32dc064697ba64fe54df63e96ea + + + + std::unordered_map< std::string, Cesium3DTiles::PropertyTableProperty > + properties + structCesium3DTiles_1_1PropertyTable.html + a317fece040763b4c4ced67fa9a0424c9 + + + + static constexpr const char * + TypeName + structCesium3DTiles_1_1PropertyTable.html + a8f25edd2f183eaff7a3418a24a0d46a5 + + + + + CesiumGltf::PropertyTable + structCesiumGltf_1_1PropertyTable.html + CesiumUtility::ExtensibleObject + + int64_t + getSizeBytes + structCesiumGltf_1_1PropertyTable.html + a7ee06d50aa4acce3be4a7c408ac0506c + () const + + + std::optional< std::string > + name + structCesiumGltf_1_1PropertyTable.html + ab0c7aea08eb44846d1958ffa19aabe2c + + + + std::string + classProperty + structCesiumGltf_1_1PropertyTable.html + a97ea760d253d8a0aaaa6cc5b4037c79a + + + + int64_t + count + structCesiumGltf_1_1PropertyTable.html + ab580cda74db867cdfa5710d917c96a16 + + + + std::unordered_map< std::string, CesiumGltf::PropertyTableProperty > + properties + structCesiumGltf_1_1PropertyTable.html + a14724643bb2f7ba8a6abcd70c35ddff8 + + + + static constexpr const char * + TypeName + structCesiumGltf_1_1PropertyTable.html + a52ad9fca0a86ac0f7dd30ecae787c871 + + + + + Cesium3DTiles::PropertyTableProperty + structCesium3DTiles_1_1PropertyTableProperty.html + CesiumUtility::ExtensibleObject + Cesium3DTiles::PropertyTableProperty::ArrayOffsetType + Cesium3DTiles::PropertyTableProperty::StringOffsetType + + int64_t + getSizeBytes + structCesium3DTiles_1_1PropertyTableProperty.html + a1e7b06f660698c2375bfc1e575264c36 + () const + + + int64_t + values + structCesium3DTiles_1_1PropertyTableProperty.html + adc9862455ea6483d3c21ca5442fba78f + + + + std::optional< int64_t > + arrayOffsets + structCesium3DTiles_1_1PropertyTableProperty.html + acaede2b0c30e53681cd43e2b558d2b67 + + + + std::optional< int64_t > + stringOffsets + structCesium3DTiles_1_1PropertyTableProperty.html + a1e9e2380b0899057a72e7b18b20ee9b6 + + + + std::string + arrayOffsetType + structCesium3DTiles_1_1PropertyTableProperty.html + aac3f23b8761a3124f0ee59c7ca80f65d + + + + std::string + stringOffsetType + structCesium3DTiles_1_1PropertyTableProperty.html + afbb05d11e3001008028c24339ce65490 + + + + std::optional< CesiumUtility::JsonValue > + offset + structCesium3DTiles_1_1PropertyTableProperty.html + a7bb52e3635ff6c40b2c515489ca4da29 + + + + std::optional< CesiumUtility::JsonValue > + scale + structCesium3DTiles_1_1PropertyTableProperty.html + a0dff5d7a2fa68e6b16e246ca91d958af + + + + std::optional< CesiumUtility::JsonValue > + max + structCesium3DTiles_1_1PropertyTableProperty.html + a6bb38bd974bccf35552219e7439fd02a + + + + std::optional< CesiumUtility::JsonValue > + min + structCesium3DTiles_1_1PropertyTableProperty.html + a1fcd6f18331210b9754c27c6fab011df + + + + static constexpr const char * + TypeName + structCesium3DTiles_1_1PropertyTableProperty.html + a0ede49c9606dff99639d55855c12f97e + + + + + CesiumGltf::PropertyTableProperty + structCesiumGltf_1_1PropertyTableProperty.html + CesiumUtility::ExtensibleObject + CesiumGltf::PropertyTableProperty::ArrayOffsetType + CesiumGltf::PropertyTableProperty::StringOffsetType + + int64_t + getSizeBytes + structCesiumGltf_1_1PropertyTableProperty.html + a6b94928b65c74f8603baac7d44cdec6a + () const + + + int32_t + values + structCesiumGltf_1_1PropertyTableProperty.html + a852488fa6ded99a83370cd913a719fbb + + + + int32_t + arrayOffsets + structCesiumGltf_1_1PropertyTableProperty.html + a786441062c4285e8b6a994d4262a653c + + + + int32_t + stringOffsets + structCesiumGltf_1_1PropertyTableProperty.html + a77849790c93f1ea422a40824c382a120 + + + + std::string + arrayOffsetType + structCesiumGltf_1_1PropertyTableProperty.html + a8d968214fba80eefe2eac91fa95bf885 + + + + std::string + stringOffsetType + structCesiumGltf_1_1PropertyTableProperty.html + a91700be2bb3f92374402e336c8db69a7 + + + + std::optional< CesiumUtility::JsonValue > + offset + structCesiumGltf_1_1PropertyTableProperty.html + a2fb9b96003d47401096e3aaa55b7eb5a + + + + std::optional< CesiumUtility::JsonValue > + scale + structCesiumGltf_1_1PropertyTableProperty.html + a2edbae3a040742fb56e71f2612329609 + + + + std::optional< CesiumUtility::JsonValue > + max + structCesiumGltf_1_1PropertyTableProperty.html + a148ae2453746f124cc51fdec27204260 + + + + std::optional< CesiumUtility::JsonValue > + min + structCesiumGltf_1_1PropertyTableProperty.html + a8ade0eb8226d485c8acaed79a2ddef4c + + + + static constexpr const char * + TypeName + structCesiumGltf_1_1PropertyTableProperty.html + a02cadbbaa5c99754300f9bb3e7402731 + + + + + Cesium3DTilesReader::PropertyTablePropertyReader + classCesium3DTilesReader_1_1PropertyTablePropertyReader.html + + + PropertyTablePropertyReader + classCesium3DTilesReader_1_1PropertyTablePropertyReader.html + abff5c9aa974519abff9b24fd6a027228 + () + + + CesiumJsonReader::JsonReaderOptions & + getOptions + classCesium3DTilesReader_1_1PropertyTablePropertyReader.html + afd47da7f28567f9a2a972e8ae81b36cb + () + + + const CesiumJsonReader::JsonReaderOptions & + getOptions + classCesium3DTilesReader_1_1PropertyTablePropertyReader.html + a91a21c53d6e7b5b4ae0d6247685ff1ad + () const + + + CesiumJsonReader::ReadJsonResult< Cesium3DTiles::PropertyTableProperty > + readFromJson + classCesium3DTilesReader_1_1PropertyTablePropertyReader.html + ada218e2af153cfc08dcd915586d444b3 + (const std::span< const std::byte > &data) const + + + CesiumJsonReader::ReadJsonResult< Cesium3DTiles::PropertyTableProperty > + readFromJson + classCesium3DTilesReader_1_1PropertyTablePropertyReader.html + a8678c5bd494d73b08b0e0c0c5962ab3d + (const rapidjson::Value &value) const + + + CesiumJsonReader::ReadJsonResult< std::vector< Cesium3DTiles::PropertyTableProperty > > + readArrayFromJson + classCesium3DTilesReader_1_1PropertyTablePropertyReader.html + a510985e9ef3ef4bc2fcbdf461cdaeba2 + (const rapidjson::Value &value) const + + + + CesiumGltfReader::PropertyTablePropertyReader + classCesiumGltfReader_1_1PropertyTablePropertyReader.html + + + PropertyTablePropertyReader + classCesiumGltfReader_1_1PropertyTablePropertyReader.html + a544dae03b87b86433fece892385147a1 + () + + + CesiumJsonReader::JsonReaderOptions & + getOptions + classCesiumGltfReader_1_1PropertyTablePropertyReader.html + a125e4377e9be1408eaf290ca760e4145 + () + + + const CesiumJsonReader::JsonReaderOptions & + getOptions + classCesiumGltfReader_1_1PropertyTablePropertyReader.html + af16a6d22cea449bfb4abf5cae202a2bd + () const + + + CesiumJsonReader::ReadJsonResult< CesiumGltf::PropertyTableProperty > + readFromJson + classCesiumGltfReader_1_1PropertyTablePropertyReader.html + a59d874b7acc78e59faf40beb8da77bbb + (const std::span< const std::byte > &data) const + + + CesiumJsonReader::ReadJsonResult< CesiumGltf::PropertyTableProperty > + readFromJson + classCesiumGltfReader_1_1PropertyTablePropertyReader.html + a0c295c60fbb36c7eac1a7b9bbde8f6e6 + (const rapidjson::Value &value) const + + + CesiumJsonReader::ReadJsonResult< std::vector< CesiumGltf::PropertyTableProperty > > + readArrayFromJson + classCesiumGltfReader_1_1PropertyTablePropertyReader.html + afb98336047e622ce71c14dd48ad7235c + (const rapidjson::Value &value) const + + + + CesiumGltf::PropertyTablePropertyView + classCesiumGltf_1_1PropertyTablePropertyView.html + typename ElementType + bool Normalized + + + CesiumGltf::PropertyTablePropertyView< ElementType, false > + classCesiumGltf_1_1PropertyTablePropertyView_3_01ElementType_00_01false_01_4.html + typename ElementType + CesiumGltf::PropertyView< ElementType, false > + + + PropertyTablePropertyView + classCesiumGltf_1_1PropertyTablePropertyView_3_01ElementType_00_01false_01_4.html + a2e575a56da75553c31d4073d0527c026 + () + + + + PropertyTablePropertyView + classCesiumGltf_1_1PropertyTablePropertyView_3_01ElementType_00_01false_01_4.html + a7ac88562716a922487101b55a316bb67 + (PropertyViewStatusType status) + + + + PropertyTablePropertyView + classCesiumGltf_1_1PropertyTablePropertyView_3_01ElementType_00_01false_01_4.html + a2650545d009a04de79584d3f25c4d185 + (const ClassProperty &classProperty, int64_t size) + + + + PropertyTablePropertyView + classCesiumGltf_1_1PropertyTablePropertyView_3_01ElementType_00_01false_01_4.html + ac2ae5ebca09eed5734bcdb89bfa2f187 + (const PropertyTableProperty &property, const ClassProperty &classProperty, int64_t size, std::span< const std::byte > values) noexcept + + + + PropertyTablePropertyView + classCesiumGltf_1_1PropertyTablePropertyView_3_01ElementType_00_01false_01_4.html + a2ba86597b88428003d91b50f07e8be96 + (const PropertyTableProperty &property, const ClassProperty &classProperty, int64_t size, std::span< const std::byte > values, std::span< const std::byte > arrayOffsets, std::span< const std::byte > stringOffsets, PropertyComponentType arrayOffsetType, PropertyComponentType stringOffsetType) noexcept + + + std::optional< PropertyValueViewToCopy< ElementType > > + get + classCesiumGltf_1_1PropertyTablePropertyView_3_01ElementType_00_01false_01_4.html + a466f04f2684e27fb25345eba2b08bdcd + (int64_t index) const noexcept + + + ElementType + getRaw + classCesiumGltf_1_1PropertyTablePropertyView_3_01ElementType_00_01false_01_4.html + a6dd341d95c9e4bd79912bda723d04e38 + (int64_t index) const noexcept + + + int64_t + size + classCesiumGltf_1_1PropertyTablePropertyView_3_01ElementType_00_01false_01_4.html + a958717cf3661056db4da7a39ce5818df + () const noexcept + + + + CesiumGltf::PropertyTablePropertyView< ElementType, true > + classCesiumGltf_1_1PropertyTablePropertyView_3_01ElementType_00_01true_01_4.html + typename ElementType + CesiumGltf::PropertyView< ElementType, true > + + + PropertyTablePropertyView + classCesiumGltf_1_1PropertyTablePropertyView_3_01ElementType_00_01true_01_4.html + a15eea7d168a24e8ffa3d05560567b59e + () + + + + PropertyTablePropertyView + classCesiumGltf_1_1PropertyTablePropertyView_3_01ElementType_00_01true_01_4.html + ae770c948e0cf24ee22d5fac4606a4726 + (PropertyViewStatusType status) + + + + PropertyTablePropertyView + classCesiumGltf_1_1PropertyTablePropertyView_3_01ElementType_00_01true_01_4.html + af7c717f36da07351c0c243d4d40187de + (const ClassProperty &classProperty, int64_t size) + + + + PropertyTablePropertyView + classCesiumGltf_1_1PropertyTablePropertyView_3_01ElementType_00_01true_01_4.html + ac2765728a1b47723655087dbc3d3c616 + (const PropertyTableProperty &property, const ClassProperty &classProperty, int64_t size, std::span< const std::byte > values) noexcept + + + + PropertyTablePropertyView + classCesiumGltf_1_1PropertyTablePropertyView_3_01ElementType_00_01true_01_4.html + aeb8a20d06dceab278db2513710480737 + (const PropertyTableProperty &property, const ClassProperty &classProperty, int64_t size, std::span< const std::byte > values, std::span< const std::byte > arrayOffsets, PropertyComponentType arrayOffsetType) noexcept + + + std::optional< PropertyValueViewToCopy< NormalizedType > > + get + classCesiumGltf_1_1PropertyTablePropertyView_3_01ElementType_00_01true_01_4.html + a21a5886307ba483217b9642f300e47f7 + (int64_t index) const noexcept + + + ElementType + getRaw + classCesiumGltf_1_1PropertyTablePropertyView_3_01ElementType_00_01true_01_4.html + a816084cf877dd035a964e73e176d0cc3 + (int64_t index) const noexcept + + + int64_t + size + classCesiumGltf_1_1PropertyTablePropertyView_3_01ElementType_00_01true_01_4.html + af7af4ada16fbb94e5646b9972f3d66fc + () const noexcept + + + + CesiumGltf::PropertyTablePropertyViewStatus + classCesiumGltf_1_1PropertyTablePropertyViewStatus.html + CesiumGltf::PropertyViewStatus + + static const PropertyViewStatusType + ErrorInvalidPropertyTable + classCesiumGltf_1_1PropertyTablePropertyViewStatus.html + a6c4cdd0f90acb4ce927ebe32a8a65cf2 + + + + static const PropertyViewStatusType + ErrorInvalidValueBufferView + classCesiumGltf_1_1PropertyTablePropertyViewStatus.html + a28c49bb579cad77ba48cf4a9f537aab1 + + + + static const PropertyViewStatusType + ErrorInvalidArrayOffsetBufferView + classCesiumGltf_1_1PropertyTablePropertyViewStatus.html + a1446421b456999809ba66272a0facfa9 + + + + static const PropertyViewStatusType + ErrorInvalidStringOffsetBufferView + classCesiumGltf_1_1PropertyTablePropertyViewStatus.html + a75a8f4380485a7d66a1e907100d6caa5 + + + + static const PropertyViewStatusType + ErrorInvalidValueBuffer + classCesiumGltf_1_1PropertyTablePropertyViewStatus.html + a71c19a0a3db1c71a86e1a19bca2050f6 + + + + static const PropertyViewStatusType + ErrorInvalidArrayOffsetBuffer + classCesiumGltf_1_1PropertyTablePropertyViewStatus.html + a3898ad9c930f46fbc5e085a8da275e9d + + + + static const PropertyViewStatusType + ErrorInvalidStringOffsetBuffer + classCesiumGltf_1_1PropertyTablePropertyViewStatus.html + a2a5db862ef74e78ce9e7c67e648db885 + + + + static const PropertyViewStatusType + ErrorBufferViewOutOfBounds + classCesiumGltf_1_1PropertyTablePropertyViewStatus.html + a1ace2a07bb61100c2876ea6aa7917440 + + + + static const PropertyViewStatusType + ErrorBufferViewSizeNotDivisibleByTypeSize + classCesiumGltf_1_1PropertyTablePropertyViewStatus.html + af0718578899fe4a231e4b8b020e84779 + + + + static const PropertyViewStatusType + ErrorBufferViewSizeDoesNotMatchPropertyTableCount + classCesiumGltf_1_1PropertyTablePropertyViewStatus.html + a033e77fdb7be5a57af48033256fa408e + + + + static const PropertyViewStatusType + ErrorArrayCountAndOffsetBufferCoexist + classCesiumGltf_1_1PropertyTablePropertyViewStatus.html + a1b71ce7135d6b3ea2c6c552c0d29288d + + + + static const PropertyViewStatusType + ErrorArrayCountAndOffsetBufferDontExist + classCesiumGltf_1_1PropertyTablePropertyViewStatus.html + a314658d1a15cc10317343437d69f7ed3 + + + + static const PropertyViewStatusType + ErrorInvalidArrayOffsetType + classCesiumGltf_1_1PropertyTablePropertyViewStatus.html + a95be771adf87aa3bf9054c023c8683b3 + + + + static const PropertyViewStatusType + ErrorInvalidStringOffsetType + classCesiumGltf_1_1PropertyTablePropertyViewStatus.html + a2cb0d6ff70f38a0e5ce8f26696edbd8c + + + + static const PropertyViewStatusType + ErrorArrayOffsetsNotSorted + classCesiumGltf_1_1PropertyTablePropertyViewStatus.html + a351e1a96a4c7f7f8988cb08c73d02b74 + + + + static const PropertyViewStatusType + ErrorStringOffsetsNotSorted + classCesiumGltf_1_1PropertyTablePropertyViewStatus.html + ac01064150e51c3a09d5e31a80198c4c0 + + + + static const PropertyViewStatusType + ErrorArrayOffsetOutOfBounds + classCesiumGltf_1_1PropertyTablePropertyViewStatus.html + a528b7fe0b2f588cd0fbfadf470aed7f4 + + + + static const PropertyViewStatusType + ErrorStringOffsetOutOfBounds + classCesiumGltf_1_1PropertyTablePropertyViewStatus.html + aebb257274c495fbda8ff4ae7d5bbff73 + + + + + Cesium3DTilesReader::PropertyTableReader + classCesium3DTilesReader_1_1PropertyTableReader.html + + + PropertyTableReader + classCesium3DTilesReader_1_1PropertyTableReader.html + a88f599387e0a6ebd444c73e074b8dc14 + () + + + CesiumJsonReader::JsonReaderOptions & + getOptions + classCesium3DTilesReader_1_1PropertyTableReader.html + a77951cc468c5478984cc1b08a708eb5f + () + + + const CesiumJsonReader::JsonReaderOptions & + getOptions + classCesium3DTilesReader_1_1PropertyTableReader.html + a23b179a535bf6af533ae270e7a99ba97 + () const + + + CesiumJsonReader::ReadJsonResult< Cesium3DTiles::PropertyTable > + readFromJson + classCesium3DTilesReader_1_1PropertyTableReader.html + a652c782c4a1db33e0bbd2ff8fb47e21e + (const std::span< const std::byte > &data) const + + + CesiumJsonReader::ReadJsonResult< Cesium3DTiles::PropertyTable > + readFromJson + classCesium3DTilesReader_1_1PropertyTableReader.html + a16414fadd538bbfa90c8a97666f719c3 + (const rapidjson::Value &value) const + + + CesiumJsonReader::ReadJsonResult< std::vector< Cesium3DTiles::PropertyTable > > + readArrayFromJson + classCesium3DTilesReader_1_1PropertyTableReader.html + af154f64fc3d19da1e344cbeb9260641e + (const rapidjson::Value &value) const + + + + CesiumGltfReader::PropertyTableReader + classCesiumGltfReader_1_1PropertyTableReader.html + + + PropertyTableReader + classCesiumGltfReader_1_1PropertyTableReader.html + adfe8cf7c4206c7a3d1ec70e1a2b8f4f5 + () + + + CesiumJsonReader::JsonReaderOptions & + getOptions + classCesiumGltfReader_1_1PropertyTableReader.html + a8d539e34e3d8cc3fae4e4cdd5b28ac1e + () + + + const CesiumJsonReader::JsonReaderOptions & + getOptions + classCesiumGltfReader_1_1PropertyTableReader.html + a436de274780c11226f795b132eab37ac + () const + + + CesiumJsonReader::ReadJsonResult< CesiumGltf::PropertyTable > + readFromJson + classCesiumGltfReader_1_1PropertyTableReader.html + a893f1fe3d22ce5a38a09c1349508be96 + (const std::span< const std::byte > &data) const + + + CesiumJsonReader::ReadJsonResult< CesiumGltf::PropertyTable > + readFromJson + classCesiumGltfReader_1_1PropertyTableReader.html + a82c49e474496ffff26c04c36033874f2 + (const rapidjson::Value &value) const + + + CesiumJsonReader::ReadJsonResult< std::vector< CesiumGltf::PropertyTable > > + readArrayFromJson + classCesiumGltfReader_1_1PropertyTableReader.html + a3ffd2a49b0edce1226444fba3772ee3a + (const rapidjson::Value &value) const + + + + CesiumGltf::PropertyTableView + classCesiumGltf_1_1PropertyTableView.html + + + PropertyTableView + classCesiumGltf_1_1PropertyTableView.html + ac69f594d0754380936a1d38e69f341ab + (const Model &model, const PropertyTable &propertyTable) + + + PropertyTableViewStatus + status + classCesiumGltf_1_1PropertyTableView.html + a0c6a7ac03724236a49da90efd353c409 + () const noexcept + + + const std::optional< std::string > & + name + classCesiumGltf_1_1PropertyTableView.html + aa09c9b0d865bcaa9ca1358ba71f52ebf + () const noexcept + + + int64_t + size + classCesiumGltf_1_1PropertyTableView.html + a7cdff10e112d7b7f4f0f046fe0f93a2a + () const noexcept + + + const Class * + getClass + classCesiumGltf_1_1PropertyTableView.html + a65d434044f0c78de9c18bd4e0bc4054b + () const noexcept + + + const ClassProperty * + getClassProperty + classCesiumGltf_1_1PropertyTableView.html + ab4e1300a210c75ee9673b54189881b63 + (const std::string &propertyId) const + + + PropertyTablePropertyView< T, Normalized > + getPropertyView + classCesiumGltf_1_1PropertyTableView.html + a7cc05649b28658efe348a438d730b724 + (const std::string &propertyId) const + + + void + getPropertyView + classCesiumGltf_1_1PropertyTableView.html + a20c9ebb3208ee69e3b83b5eae9b1f43b + (const std::string &propertyId, Callback &&callback) const + + + void + forEachProperty + classCesiumGltf_1_1PropertyTableView.html + aa5b2b9bacc38f2d361b60247dd074b71 + (Callback &&callback) const + + + + CesiumGltf::PropertyTexture + structCesiumGltf_1_1PropertyTexture.html + CesiumUtility::ExtensibleObject + + int64_t + getSizeBytes + structCesiumGltf_1_1PropertyTexture.html + ad66b7eed6e8fcfba931c2201e0a375a8 + () const + + + std::optional< std::string > + name + structCesiumGltf_1_1PropertyTexture.html + a1e58dda2d4cab1a8e9b6ba999ded833d + + + + std::string + classProperty + structCesiumGltf_1_1PropertyTexture.html + a390b23ebed5bbdcb985db6a745ff0021 + + + + std::unordered_map< std::string, CesiumGltf::PropertyTextureProperty > + properties + structCesiumGltf_1_1PropertyTexture.html + a4859fdf3539cc92b03f1cf33ed39dedc + + + + static constexpr const char * + TypeName + structCesiumGltf_1_1PropertyTexture.html + a56f9162690552b7579a512c7ebc51323 + + + + + CesiumGltf::PropertyTextureProperty + structCesiumGltf_1_1PropertyTextureProperty.html + CesiumGltf::TextureInfo + + int64_t + getSizeBytes + structCesiumGltf_1_1PropertyTextureProperty.html + a7a6c14686cd72186f139526c734f45e5 + () const + + + std::vector< int64_t > + channels + structCesiumGltf_1_1PropertyTextureProperty.html + ab8a3f4e7a224df4eeac0dd014567b4be + + + + std::optional< CesiumUtility::JsonValue > + offset + structCesiumGltf_1_1PropertyTextureProperty.html + a5a6bd36f116fd13b7a959dd705788514 + + + + std::optional< CesiumUtility::JsonValue > + scale + structCesiumGltf_1_1PropertyTextureProperty.html + aebafe2e7756320998d5ff482aa5acce2 + + + + std::optional< CesiumUtility::JsonValue > + max + structCesiumGltf_1_1PropertyTextureProperty.html + af9cda48ceb05ccf686c3a26f5cb2ded8 + + + + std::optional< CesiumUtility::JsonValue > + min + structCesiumGltf_1_1PropertyTextureProperty.html + a2c75dc9ef2a3abb42eeedf2a96e49a48 + + + + static constexpr const char * + TypeName + structCesiumGltf_1_1PropertyTextureProperty.html + a9db442da5904c889cd870e8e0610ff60 + + + + + CesiumGltfReader::PropertyTexturePropertyReader + classCesiumGltfReader_1_1PropertyTexturePropertyReader.html + + + PropertyTexturePropertyReader + classCesiumGltfReader_1_1PropertyTexturePropertyReader.html + a5634d8ccb1be18667cbc84f64cd2069b + () + + + CesiumJsonReader::JsonReaderOptions & + getOptions + classCesiumGltfReader_1_1PropertyTexturePropertyReader.html + a2623c3f914ba92c43a1779b3f11f2f16 + () + + + const CesiumJsonReader::JsonReaderOptions & + getOptions + classCesiumGltfReader_1_1PropertyTexturePropertyReader.html + a304e14107851f521b17bf048c20386f8 + () const + + + CesiumJsonReader::ReadJsonResult< CesiumGltf::PropertyTextureProperty > + readFromJson + classCesiumGltfReader_1_1PropertyTexturePropertyReader.html + ae82654fa7b27a438d1bab5fcf9c1986f + (const std::span< const std::byte > &data) const + + + CesiumJsonReader::ReadJsonResult< CesiumGltf::PropertyTextureProperty > + readFromJson + classCesiumGltfReader_1_1PropertyTexturePropertyReader.html + aa13b959a36ac4afd30afb535b477457c + (const rapidjson::Value &value) const + + + CesiumJsonReader::ReadJsonResult< std::vector< CesiumGltf::PropertyTextureProperty > > + readArrayFromJson + classCesiumGltfReader_1_1PropertyTexturePropertyReader.html + add1880b76f0a21f4c6ff13bed43da72c + (const rapidjson::Value &value) const + + + + CesiumGltf::PropertyTexturePropertyView + classCesiumGltf_1_1PropertyTexturePropertyView.html + typename ElementType + bool Normalized + + + CesiumGltf::PropertyTexturePropertyView< ElementType, false > + classCesiumGltf_1_1PropertyTexturePropertyView_3_01ElementType_00_01false_01_4.html + typename ElementType + CesiumGltf::PropertyView< ElementType, false > + CesiumGltf::TextureView + + + PropertyTexturePropertyView + classCesiumGltf_1_1PropertyTexturePropertyView_3_01ElementType_00_01false_01_4.html + a9ac7be367803143a05d579ea24fba431 + () noexcept + + + + PropertyTexturePropertyView + classCesiumGltf_1_1PropertyTexturePropertyView_3_01ElementType_00_01false_01_4.html + a42340053ad6675a31045aedff58d2f98 + (PropertyViewStatusType status) noexcept + + + + PropertyTexturePropertyView + classCesiumGltf_1_1PropertyTexturePropertyView_3_01ElementType_00_01false_01_4.html + a5d138e4824e198f400ea8f313d249f12 + (const ClassProperty &classProperty) noexcept + + + + PropertyTexturePropertyView + classCesiumGltf_1_1PropertyTexturePropertyView_3_01ElementType_00_01false_01_4.html + aee4465256e8a395539382417ef977446 + (const PropertyTextureProperty &property, const ClassProperty &classProperty, const Sampler &sampler, const ImageAsset &image, const TextureViewOptions &options=TextureViewOptions()) noexcept + + + std::optional< PropertyValueViewToCopy< ElementType > > + get + classCesiumGltf_1_1PropertyTexturePropertyView_3_01ElementType_00_01false_01_4.html + a3ddc711b664e1c2fbd8df5d6663b9bee + (double u, double v) const noexcept + + + PropertyValueViewToCopy< ElementType > + getRaw + classCesiumGltf_1_1PropertyTexturePropertyView_3_01ElementType_00_01false_01_4.html + a4ca2ff4f9943b6802669ad0de96ca690 + (double u, double v) const noexcept + + + const std::vector< int64_t > & + getChannels + classCesiumGltf_1_1PropertyTexturePropertyView_3_01ElementType_00_01false_01_4.html + aee6c307c23b34e23e70df8b94aa8e81c + () const noexcept + + + const std::string & + getSwizzle + classCesiumGltf_1_1PropertyTexturePropertyView_3_01ElementType_00_01false_01_4.html + a3225fd59b7cd9c26652ee9efb7781000 + () const noexcept + + + + CesiumGltf::PropertyTexturePropertyView< ElementType, true > + classCesiumGltf_1_1PropertyTexturePropertyView_3_01ElementType_00_01true_01_4.html + typename ElementType + CesiumGltf::PropertyView< ElementType, true > + CesiumGltf::TextureView + + + PropertyTexturePropertyView + classCesiumGltf_1_1PropertyTexturePropertyView_3_01ElementType_00_01true_01_4.html + a4ca49f2a0defc6f6c9f436bda7b25741 + () noexcept + + + + PropertyTexturePropertyView + classCesiumGltf_1_1PropertyTexturePropertyView_3_01ElementType_00_01true_01_4.html + aa5e2c0bb4195193a7eb104700277cc47 + (PropertyViewStatusType status) noexcept + + + + PropertyTexturePropertyView + classCesiumGltf_1_1PropertyTexturePropertyView_3_01ElementType_00_01true_01_4.html + a3d7dda90bd6d044ae1c27abfc29c82c5 + (const ClassProperty &classProperty) noexcept + + + + PropertyTexturePropertyView + classCesiumGltf_1_1PropertyTexturePropertyView_3_01ElementType_00_01true_01_4.html + aecce40dd8007069f3db1d28562b1c821 + (const PropertyTextureProperty &property, const ClassProperty &classProperty, const Sampler &sampler, const ImageAsset &image, const TextureViewOptions &options=TextureViewOptions()) noexcept + + + std::optional< PropertyValueViewToCopy< NormalizedType > > + get + classCesiumGltf_1_1PropertyTexturePropertyView_3_01ElementType_00_01true_01_4.html + ad69ce617a9027ee8090acbead7e184f8 + (double u, double v) const noexcept + + + PropertyValueViewToCopy< ElementType > + getRaw + classCesiumGltf_1_1PropertyTexturePropertyView_3_01ElementType_00_01true_01_4.html + a0c4a1f39fc6cc71904f8129ffef740f0 + (double u, double v) const noexcept + + + const std::vector< int64_t > & + getChannels + classCesiumGltf_1_1PropertyTexturePropertyView_3_01ElementType_00_01true_01_4.html + afb2a946d7d4e21a8ca0dc9d416d4f70f + () const noexcept + + + const std::string & + getSwizzle + classCesiumGltf_1_1PropertyTexturePropertyView_3_01ElementType_00_01true_01_4.html + a44cb076ceba39efba94404ea73515776 + () const noexcept + + + + CesiumGltf::PropertyTexturePropertyViewStatus + classCesiumGltf_1_1PropertyTexturePropertyViewStatus.html + CesiumGltf::PropertyViewStatus + + static const int + ErrorInvalidPropertyTexture + classCesiumGltf_1_1PropertyTexturePropertyViewStatus.html + aab10a7fc7d52ce7e58b2248111a6a745 + + + + static const int + ErrorUnsupportedProperty + classCesiumGltf_1_1PropertyTexturePropertyViewStatus.html + a0f89fa36a6821fbfc3848d11c53b365e + + + + static const int + ErrorInvalidTexture + classCesiumGltf_1_1PropertyTexturePropertyViewStatus.html + ac59db5c8b91007f24c99e4f58efe4790 + + + + static const int + ErrorInvalidSampler + classCesiumGltf_1_1PropertyTexturePropertyViewStatus.html + aa33acc1904ec6880873640e4dbe401ca + + + + static const int + ErrorInvalidImage + classCesiumGltf_1_1PropertyTexturePropertyViewStatus.html + a3b54e4d69e7378b1e33f75a778851ea6 + + + + static const int + ErrorEmptyImage + classCesiumGltf_1_1PropertyTexturePropertyViewStatus.html + afef832dec9c89ebbfeb8c6380d56a793 + + + + static const int + ErrorInvalidBytesPerChannel + classCesiumGltf_1_1PropertyTexturePropertyViewStatus.html + aa1f81b99174c6fed635cae28dc69589f + + + + static const int + ErrorInvalidChannels + classCesiumGltf_1_1PropertyTexturePropertyViewStatus.html + a519ac445eb84b43e8d20ad58b5c19da9 + + + + static const int + ErrorChannelsAndTypeMismatch + classCesiumGltf_1_1PropertyTexturePropertyViewStatus.html + a2649c953dd56ded899c8c527cd5bea3b + + + + + CesiumGltfReader::PropertyTextureReader + classCesiumGltfReader_1_1PropertyTextureReader.html + + + PropertyTextureReader + classCesiumGltfReader_1_1PropertyTextureReader.html + ac6532e7368c91d8012694433f58c125f + () + + + CesiumJsonReader::JsonReaderOptions & + getOptions + classCesiumGltfReader_1_1PropertyTextureReader.html + ae73e940ed72c8cf4d4418cecc404aa80 + () + + + const CesiumJsonReader::JsonReaderOptions & + getOptions + classCesiumGltfReader_1_1PropertyTextureReader.html + ac4826370ea8047dc2d3ede23ee49aa3a + () const + + + CesiumJsonReader::ReadJsonResult< CesiumGltf::PropertyTexture > + readFromJson + classCesiumGltfReader_1_1PropertyTextureReader.html + a81778197f806504fed8219402205f276 + (const std::span< const std::byte > &data) const + + + CesiumJsonReader::ReadJsonResult< CesiumGltf::PropertyTexture > + readFromJson + classCesiumGltfReader_1_1PropertyTextureReader.html + aa294aacd0c3bce13f6f1433bfa64431d + (const rapidjson::Value &value) const + + + CesiumJsonReader::ReadJsonResult< std::vector< CesiumGltf::PropertyTexture > > + readArrayFromJson + classCesiumGltfReader_1_1PropertyTextureReader.html + a948748d5f624009be6c16a968852c608 + (const rapidjson::Value &value) const + + + + CesiumGltf::PropertyTextureView + classCesiumGltf_1_1PropertyTextureView.html + + + PropertyTextureView + classCesiumGltf_1_1PropertyTextureView.html + a0d5e0dd3f9116ce841d1ddea3c726462 + (const Model &model, const PropertyTexture &propertyTexture) noexcept + + + PropertyTextureViewStatus + status + classCesiumGltf_1_1PropertyTextureView.html + a1c891b2397f5fc1ac3755a2cd6f94efe + () const noexcept + + + const std::optional< std::string > & + name + classCesiumGltf_1_1PropertyTextureView.html + acb57aa7165a643548df0b7275ab1461a + () const noexcept + + + const Class * + getClass + classCesiumGltf_1_1PropertyTextureView.html + ae3d0b67f223308b3024b81f82d5ceeff + () const noexcept + + + const ClassProperty * + getClassProperty + classCesiumGltf_1_1PropertyTextureView.html + a57a5006fe0a4bc45eb1f72c72b4cc5e1 + (const std::string &propertyId) const + + + PropertyTexturePropertyView< T, Normalized > + getPropertyView + classCesiumGltf_1_1PropertyTextureView.html + a194b2fb955e9bf1321c55e1cc58f2aaa + (const std::string &propertyId, const TextureViewOptions &propertyOptions=TextureViewOptions()) const + + + void + getPropertyView + classCesiumGltf_1_1PropertyTextureView.html + a2a056eaa0e6717a17f607fa8b924757f + (const std::string &propertyId, Callback &&callback, const TextureViewOptions &propertyOptions=TextureViewOptions()) const + + + void + forEachProperty + classCesiumGltf_1_1PropertyTextureView.html + a2763ebe386e453b78724e5c21c9753ef + (Callback &&callback, const TextureViewOptions &propertyOptions=TextureViewOptions()) const + + + + CesiumGltf::PropertyView + classCesiumGltf_1_1PropertyView.html + typename ElementType + bool Normalized + + + CesiumGltf::PropertyView< bool > + classCesiumGltf_1_1PropertyView_3_01bool_01_4.html + + + PropertyView + classCesiumGltf_1_1PropertyView_3_01bool_01_4.html + a9a75d3b6053490456a589bd8b183d0e7 + () + + + + PropertyView + classCesiumGltf_1_1PropertyView_3_01bool_01_4.html + a76bea77fea2726c54d2dd1a1dc7f98c4 + (const ClassProperty &classProperty) + + + PropertyViewStatusType + status + classCesiumGltf_1_1PropertyView_3_01bool_01_4.html + a03d8cb07e8d86705cb1ce0acf29daf85 + () const noexcept + + + const std::optional< std::string > & + name + classCesiumGltf_1_1PropertyView_3_01bool_01_4.html + a1c09658e8d73e3d1eb3ed2bb953097cd + () const noexcept + + + const std::optional< std::string > & + semantic + classCesiumGltf_1_1PropertyView_3_01bool_01_4.html + a5d9930ddda2e1cda8b57a14c553d6948 + () const noexcept + + + const std::optional< std::string > & + description + classCesiumGltf_1_1PropertyView_3_01bool_01_4.html + a323d57fc1e19d883ccb4c9222108d253 + () const noexcept + + + int64_t + arrayCount + classCesiumGltf_1_1PropertyView_3_01bool_01_4.html + a2e30f99a46bcfa810f79534e402354dc + () const noexcept + + + bool + normalized + classCesiumGltf_1_1PropertyView_3_01bool_01_4.html + a7e82dbdf30ecc7b6c8030a647028d89e + () const noexcept + + + std::optional< bool > + offset + classCesiumGltf_1_1PropertyView_3_01bool_01_4.html + aad68acbd72d6b89a72e22b14dbdc98ca + () const noexcept + + + std::optional< bool > + scale + classCesiumGltf_1_1PropertyView_3_01bool_01_4.html + a4d75cd398963cf454f702cfb9da0aaae + () const noexcept + + + std::optional< bool > + max + classCesiumGltf_1_1PropertyView_3_01bool_01_4.html + ae4eba887c49f7e9d015ad8f9b8f52dd1 + () const noexcept + + + std::optional< bool > + min + classCesiumGltf_1_1PropertyView_3_01bool_01_4.html + a0aa705c84291a2adb24ccde51338bbdc + () const noexcept + + + bool + required + classCesiumGltf_1_1PropertyView_3_01bool_01_4.html + a2ad834d8c916ae0b41ddfc8ca9464c22 + () const noexcept + + + std::optional< bool > + noData + classCesiumGltf_1_1PropertyView_3_01bool_01_4.html + a0e33db4a0e517cdb121f72402a4d7045 + () const noexcept + + + std::optional< bool > + defaultValue + classCesiumGltf_1_1PropertyView_3_01bool_01_4.html + aa3e0f9b77ccdfaa7aa471f4bd3bff817 + () const noexcept + + + + PropertyView + classCesiumGltf_1_1PropertyView_3_01bool_01_4.html + abb0383068c516d045ee93a866bd6c59d + (PropertyViewStatusType status) + + + + PropertyView + classCesiumGltf_1_1PropertyView_3_01bool_01_4.html + a71a32a889e531dee29026913ce8490b2 + (const ClassProperty &classProperty, const PropertyTableProperty &) + + + PropertyViewStatusType + _status + classCesiumGltf_1_1PropertyView_3_01bool_01_4.html + a953eed9bbea6f14a997c6dd0e4899413 + + + + + CesiumGltf::PropertyView< ElementType, false > + classCesiumGltf_1_1PropertyView_3_01ElementType_00_01false_01_4.html + typename ElementType + + + PropertyView + classCesiumGltf_1_1PropertyView_3_01ElementType_00_01false_01_4.html + af96d60c97027b59429445c16bd8e2636 + () + + + + PropertyView + classCesiumGltf_1_1PropertyView_3_01ElementType_00_01false_01_4.html + a989db0e9c738e35650e1d12ad2005b70 + (const ClassProperty &classProperty) + + + PropertyViewStatusType + status + classCesiumGltf_1_1PropertyView_3_01ElementType_00_01false_01_4.html + aa95ecf4cb23b580ad923ce9303cf8d85 + () const noexcept + + + const std::optional< std::string > & + name + classCesiumGltf_1_1PropertyView_3_01ElementType_00_01false_01_4.html + a5aa493e106b4daadb6b1da73c0432d8e + () const noexcept + + + const std::optional< std::string > & + semantic + classCesiumGltf_1_1PropertyView_3_01ElementType_00_01false_01_4.html + a67f93b5095944a2ad781dc7fe6ab2110 + () const noexcept + + + const std::optional< std::string > & + description + classCesiumGltf_1_1PropertyView_3_01ElementType_00_01false_01_4.html + af3152317b8e63fcae43d69fdec062fdc + () const noexcept + + + int64_t + arrayCount + classCesiumGltf_1_1PropertyView_3_01ElementType_00_01false_01_4.html + a9e215186e64e785948dec4a77c789ae3 + () const noexcept + + + bool + normalized + classCesiumGltf_1_1PropertyView_3_01ElementType_00_01false_01_4.html + a78ca3ee9267abbbb085b5e825d827029 + () const noexcept + + + std::optional< ElementType > + offset + classCesiumGltf_1_1PropertyView_3_01ElementType_00_01false_01_4.html + a022da441b03465475e236d3dddb22b96 + () const noexcept + + + std::optional< ElementType > + scale + classCesiumGltf_1_1PropertyView_3_01ElementType_00_01false_01_4.html + a05d0f43db02f20d022c19c381ff0f46e + () const noexcept + + + std::optional< ElementType > + max + classCesiumGltf_1_1PropertyView_3_01ElementType_00_01false_01_4.html + abedc80236e66120a802adab9c09d8ad3 + () const noexcept + + + std::optional< ElementType > + min + classCesiumGltf_1_1PropertyView_3_01ElementType_00_01false_01_4.html + ab20c0ce6689471358500f5f4a28a6eca + () const noexcept + + + bool + required + classCesiumGltf_1_1PropertyView_3_01ElementType_00_01false_01_4.html + a116158d2256ff2014d9f329259dfcf49 + () const noexcept + + + std::optional< ElementType > + noData + classCesiumGltf_1_1PropertyView_3_01ElementType_00_01false_01_4.html + aad1499f5cadd9110ee5250559db1d024 + () const noexcept + + + std::optional< ElementType > + defaultValue + classCesiumGltf_1_1PropertyView_3_01ElementType_00_01false_01_4.html + a19ed03bf334716bf429cf6a242161c33 + () const noexcept + + + + PropertyView + classCesiumGltf_1_1PropertyView_3_01ElementType_00_01false_01_4.html + ac15ef6993ff36e6a1ef37bb8065036f8 + (PropertyViewStatusType status) + + + + PropertyView + classCesiumGltf_1_1PropertyView_3_01ElementType_00_01false_01_4.html + a68efbf8b39922d095874470d58695786 + (const ClassProperty &classProperty, const PropertyTableProperty &property) + + + + PropertyView + classCesiumGltf_1_1PropertyView_3_01ElementType_00_01false_01_4.html + a9b9ab188c59184d143a822bea93e0bd2 + (const ClassProperty &classProperty, const PropertyTextureProperty &property) + + + + PropertyView + classCesiumGltf_1_1PropertyView_3_01ElementType_00_01false_01_4.html + abeb461ce97b247648f7a70ef96243975 + (const ClassProperty &classProperty, const PropertyAttributeProperty &property) + + + PropertyViewStatusType + _status + classCesiumGltf_1_1PropertyView_3_01ElementType_00_01false_01_4.html + a62e58493efac7ad4dd2f138adba20b49 + + + + + CesiumGltf::PropertyView< ElementType, true > + classCesiumGltf_1_1PropertyView_3_01ElementType_00_01true_01_4.html + typename ElementType + + + PropertyView + classCesiumGltf_1_1PropertyView_3_01ElementType_00_01true_01_4.html + a7a9e0f4c35417e15594b2f0b34240527 + () + + + + PropertyView + classCesiumGltf_1_1PropertyView_3_01ElementType_00_01true_01_4.html + ac4ac5e1b9d2e9b14d72f09729061afe6 + (const ClassProperty &classProperty) + + + PropertyViewStatusType + status + classCesiumGltf_1_1PropertyView_3_01ElementType_00_01true_01_4.html + ab4792ff951d847dcb6db4a86cf7986af + () const noexcept + + + const std::optional< std::string > & + name + classCesiumGltf_1_1PropertyView_3_01ElementType_00_01true_01_4.html + ae98c7494ae10439d40129ff712ddc8d2 + () const noexcept + + + const std::optional< std::string > & + semantic + classCesiumGltf_1_1PropertyView_3_01ElementType_00_01true_01_4.html + a2181d87b85fddb9668c69093dfb324ed + () const noexcept + + + const std::optional< std::string > & + description + classCesiumGltf_1_1PropertyView_3_01ElementType_00_01true_01_4.html + a36da1b16785a60b4c594967362a59c32 + () const noexcept + + + int64_t + arrayCount + classCesiumGltf_1_1PropertyView_3_01ElementType_00_01true_01_4.html + adc9d8e007194adf936699d88b91b1db6 + () const noexcept + + + bool + normalized + classCesiumGltf_1_1PropertyView_3_01ElementType_00_01true_01_4.html + a7641b5a9f0d3a21023e16512a692ce74 + () const noexcept + + + std::optional< NormalizedType > + offset + classCesiumGltf_1_1PropertyView_3_01ElementType_00_01true_01_4.html + ac68ed0b0b9265929a0781694881ee9cd + () const noexcept + + + std::optional< NormalizedType > + scale + classCesiumGltf_1_1PropertyView_3_01ElementType_00_01true_01_4.html + a6e12c248880ca11244644a35339f1661 + () const noexcept + + + std::optional< NormalizedType > + max + classCesiumGltf_1_1PropertyView_3_01ElementType_00_01true_01_4.html + a27ea764dd3c20f311e7193a66f092815 + () const noexcept + + + std::optional< NormalizedType > + min + classCesiumGltf_1_1PropertyView_3_01ElementType_00_01true_01_4.html + adf9539330065ac8ad7779fcec5fb2c22 + () const noexcept + + + bool + required + classCesiumGltf_1_1PropertyView_3_01ElementType_00_01true_01_4.html + ac3d7413284988d6ec72450417a5c8f74 + () const noexcept + + + std::optional< ElementType > + noData + classCesiumGltf_1_1PropertyView_3_01ElementType_00_01true_01_4.html + a1f67d8c8c3d3a04f308aecdab1e50437 + () const noexcept + + + std::optional< NormalizedType > + defaultValue + classCesiumGltf_1_1PropertyView_3_01ElementType_00_01true_01_4.html + a85a58e71beb1a6225dcd08318b9c87a8 + () const noexcept + + + + PropertyView + classCesiumGltf_1_1PropertyView_3_01ElementType_00_01true_01_4.html + a2c69b5999deec822bcbd9873ca61487f + (PropertyViewStatusType status) + + + + PropertyView + classCesiumGltf_1_1PropertyView_3_01ElementType_00_01true_01_4.html + a0a788f334a9310bba97b6f4acba2c1fb + (const ClassProperty &classProperty, const PropertyTableProperty &property) + + + + PropertyView + classCesiumGltf_1_1PropertyView_3_01ElementType_00_01true_01_4.html + a4c288607f9e5b6be620a3eabd2b0529b + (const ClassProperty &classProperty, const PropertyTextureProperty &property) + + + + PropertyView + classCesiumGltf_1_1PropertyView_3_01ElementType_00_01true_01_4.html + a4ee8e2214f57f2e0a6ea7070cdd4defe + (const ClassProperty &classProperty, const PropertyAttributeProperty &property) + + + PropertyViewStatusType + _status + classCesiumGltf_1_1PropertyView_3_01ElementType_00_01true_01_4.html + a58e0d3aab8ce2396636e284e0d6e0bb9 + + + + + CesiumGltf::PropertyView< PropertyArrayView< bool > > + classCesiumGltf_1_1PropertyView_3_01PropertyArrayView_3_01bool_01_4_01_4.html + + + PropertyView + classCesiumGltf_1_1PropertyView_3_01PropertyArrayView_3_01bool_01_4_01_4.html + a6459adb51ef870803551db50f0c5f667 + () + + + + PropertyView + classCesiumGltf_1_1PropertyView_3_01PropertyArrayView_3_01bool_01_4_01_4.html + aa5a8be0bacd693cc8902190ae96307b3 + (const ClassProperty &classProperty) + + + PropertyViewStatusType + status + classCesiumGltf_1_1PropertyView_3_01PropertyArrayView_3_01bool_01_4_01_4.html + ad43b9ea4f86506892ccaf9fac8f89c91 + () const noexcept + + + const std::optional< std::string > & + name + classCesiumGltf_1_1PropertyView_3_01PropertyArrayView_3_01bool_01_4_01_4.html + ae9cd713cbccfe625f086a79da62b7f5d + () const noexcept + + + const std::optional< std::string > & + semantic + classCesiumGltf_1_1PropertyView_3_01PropertyArrayView_3_01bool_01_4_01_4.html + a3ba378eedafe908040d992c58ad99f9f + () const noexcept + + + const std::optional< std::string > & + description + classCesiumGltf_1_1PropertyView_3_01PropertyArrayView_3_01bool_01_4_01_4.html + a2f4fb94b1270cf57cbdccd971ed564a6 + () const noexcept + + + int64_t + arrayCount + classCesiumGltf_1_1PropertyView_3_01PropertyArrayView_3_01bool_01_4_01_4.html + a187bbba4036505226b5f607f6e99f15c + () const noexcept + + + bool + normalized + classCesiumGltf_1_1PropertyView_3_01PropertyArrayView_3_01bool_01_4_01_4.html + aed3553a00bf9a2acbb88b3fac6b444dd + () const noexcept + + + std::optional< PropertyArrayView< bool > > + offset + classCesiumGltf_1_1PropertyView_3_01PropertyArrayView_3_01bool_01_4_01_4.html + a934709fd0c3d2bc018fcdff771ae0889 + () const noexcept + + + std::optional< PropertyArrayView< bool > > + scale + classCesiumGltf_1_1PropertyView_3_01PropertyArrayView_3_01bool_01_4_01_4.html + aa8f4c89ccb9062f9621d832b9bbc467f + () const noexcept + + + std::optional< PropertyArrayView< bool > > + max + classCesiumGltf_1_1PropertyView_3_01PropertyArrayView_3_01bool_01_4_01_4.html + a4d0c4e548885daa4484a77adc1072a62 + () const noexcept + + + std::optional< PropertyArrayView< bool > > + min + classCesiumGltf_1_1PropertyView_3_01PropertyArrayView_3_01bool_01_4_01_4.html + a08bcd2cd6a1fce518f5e7329343d3115 + () const noexcept + + + bool + required + classCesiumGltf_1_1PropertyView_3_01PropertyArrayView_3_01bool_01_4_01_4.html + a752e453dc90050eaeea698706c8c857e + () const noexcept + + + std::optional< PropertyArrayView< bool > > + noData + classCesiumGltf_1_1PropertyView_3_01PropertyArrayView_3_01bool_01_4_01_4.html + aaacb933b8dfac1bbd7ee982c79fc3c9d + () const noexcept + + + std::optional< PropertyArrayView< bool > > + defaultValue + classCesiumGltf_1_1PropertyView_3_01PropertyArrayView_3_01bool_01_4_01_4.html + a639ae6ab59647dc46bfcd737784c2534 + () const noexcept + + + + PropertyView + classCesiumGltf_1_1PropertyView_3_01PropertyArrayView_3_01bool_01_4_01_4.html + aa5c528ef11442465e3360c8ad2b1875d + (PropertyViewStatusType status) + + + + PropertyView + classCesiumGltf_1_1PropertyView_3_01PropertyArrayView_3_01bool_01_4_01_4.html + aa9496d2468564d60b9cc3460549f36ef + (const ClassProperty &classProperty, const PropertyTableProperty &) + + + PropertyViewStatusType + _status + classCesiumGltf_1_1PropertyView_3_01PropertyArrayView_3_01bool_01_4_01_4.html + a69a94cf7dddc3a450870ab952c8405a1 + + + + + CesiumGltf::PropertyView< PropertyArrayView< ElementType >, false > + classCesiumGltf_1_1PropertyView_3_01PropertyArrayView_3_01ElementType_01_4_00_01false_01_4.html + typename ElementType + + + PropertyView + classCesiumGltf_1_1PropertyView_3_01PropertyArrayView_3_01ElementType_01_4_00_01false_01_4.html + ac321f1d5a6753d67d30a264b27920226 + () + + + + PropertyView + classCesiumGltf_1_1PropertyView_3_01PropertyArrayView_3_01ElementType_01_4_00_01false_01_4.html + a379f2b0e7c64a3c94005a22c7183e25f + (const ClassProperty &classProperty) + + + PropertyViewStatusType + status + classCesiumGltf_1_1PropertyView_3_01PropertyArrayView_3_01ElementType_01_4_00_01false_01_4.html + a24ad6bdf7e543598c292f7ddb27b0ede + () const noexcept + + + const std::optional< std::string > & + name + classCesiumGltf_1_1PropertyView_3_01PropertyArrayView_3_01ElementType_01_4_00_01false_01_4.html + ad95037f7ad5d136bcf094f3b0bd0539a + () const noexcept + + + const std::optional< std::string > & + semantic + classCesiumGltf_1_1PropertyView_3_01PropertyArrayView_3_01ElementType_01_4_00_01false_01_4.html + af45d081cca39fbc4ceb8c17d95bd8f1f + () const noexcept + + + const std::optional< std::string > & + description + classCesiumGltf_1_1PropertyView_3_01PropertyArrayView_3_01ElementType_01_4_00_01false_01_4.html + ac240cf60d99a4a1151aea514140d077f + () const noexcept + + + int64_t + arrayCount + classCesiumGltf_1_1PropertyView_3_01PropertyArrayView_3_01ElementType_01_4_00_01false_01_4.html + a5c22df5ffbbaba7d490c2bdb785ae640 + () const noexcept + + + bool + normalized + classCesiumGltf_1_1PropertyView_3_01PropertyArrayView_3_01ElementType_01_4_00_01false_01_4.html + aa3e684952b40c435b7509a58e700062c + () const noexcept + + + std::optional< PropertyArrayView< ElementType > > + offset + classCesiumGltf_1_1PropertyView_3_01PropertyArrayView_3_01ElementType_01_4_00_01false_01_4.html + a5fc9d5024e393d4b78fd42dfd9c5e219 + () const noexcept + + + std::optional< PropertyArrayView< ElementType > > + scale + classCesiumGltf_1_1PropertyView_3_01PropertyArrayView_3_01ElementType_01_4_00_01false_01_4.html + af87b752a099df9f2e08324f5a323782e + () const noexcept + + + std::optional< PropertyArrayView< ElementType > > + max + classCesiumGltf_1_1PropertyView_3_01PropertyArrayView_3_01ElementType_01_4_00_01false_01_4.html + a61d64f72bf82ccc2ac3464699d23886d + () const noexcept + + + std::optional< PropertyArrayView< ElementType > > + min + classCesiumGltf_1_1PropertyView_3_01PropertyArrayView_3_01ElementType_01_4_00_01false_01_4.html + aa2458a4398b93881838ca5d6e2f1ecdc + () const noexcept + + + bool + required + classCesiumGltf_1_1PropertyView_3_01PropertyArrayView_3_01ElementType_01_4_00_01false_01_4.html + adbca22f63762af4a1ca94823aefce76b + () const noexcept + + + std::optional< PropertyArrayView< ElementType > > + noData + classCesiumGltf_1_1PropertyView_3_01PropertyArrayView_3_01ElementType_01_4_00_01false_01_4.html + a2ce85df00d00897db9244900646e3c67 + () const noexcept + + + std::optional< PropertyArrayView< ElementType > > + defaultValue + classCesiumGltf_1_1PropertyView_3_01PropertyArrayView_3_01ElementType_01_4_00_01false_01_4.html + a727bcc5293fd7b7a4b6b9983faf04b26 + () const noexcept + + + + PropertyView + classCesiumGltf_1_1PropertyView_3_01PropertyArrayView_3_01ElementType_01_4_00_01false_01_4.html + aa73e2f900792b28ce86f5b6d4c7d5d41 + (PropertyViewStatusType status) + + + + PropertyView + classCesiumGltf_1_1PropertyView_3_01PropertyArrayView_3_01ElementType_01_4_00_01false_01_4.html + adfd65433534a613044a90ce71e730a02 + (const ClassProperty &classProperty, const PropertyTableProperty &property) + + + + PropertyView + classCesiumGltf_1_1PropertyView_3_01PropertyArrayView_3_01ElementType_01_4_00_01false_01_4.html + ad4b3b33eeefd7c69e7766ca489ad5216 + (const ClassProperty &classProperty, const PropertyTextureProperty &property) + + + PropertyViewStatusType + _status + classCesiumGltf_1_1PropertyView_3_01PropertyArrayView_3_01ElementType_01_4_00_01false_01_4.html + afde186e0d713dc69dbbaeacc75f2337a + + + + + CesiumGltf::PropertyView< PropertyArrayView< ElementType >, true > + classCesiumGltf_1_1PropertyView_3_01PropertyArrayView_3_01ElementType_01_4_00_01true_01_4.html + typename ElementType + + + PropertyView + classCesiumGltf_1_1PropertyView_3_01PropertyArrayView_3_01ElementType_01_4_00_01true_01_4.html + a3cef49ef08c9e9b20e4089f3ab64578f + () + + + + PropertyView + classCesiumGltf_1_1PropertyView_3_01PropertyArrayView_3_01ElementType_01_4_00_01true_01_4.html + aa8e1c39483cdb4cfdadc1177445043d6 + (const ClassProperty &classProperty) + + + PropertyViewStatusType + status + classCesiumGltf_1_1PropertyView_3_01PropertyArrayView_3_01ElementType_01_4_00_01true_01_4.html + a0df03e6d3401858c37b6b0374b1894bf + () const noexcept + + + const std::optional< std::string > & + name + classCesiumGltf_1_1PropertyView_3_01PropertyArrayView_3_01ElementType_01_4_00_01true_01_4.html + ad6a9b8b74527f54876240df33dd05bb9 + () const noexcept + + + const std::optional< std::string > & + semantic + classCesiumGltf_1_1PropertyView_3_01PropertyArrayView_3_01ElementType_01_4_00_01true_01_4.html + ab24c076ce8ff77e1ce1d2052c2869a07 + () const noexcept + + + const std::optional< std::string > & + description + classCesiumGltf_1_1PropertyView_3_01PropertyArrayView_3_01ElementType_01_4_00_01true_01_4.html + aa7b9d2c1677de5499ec817e42eab2dae + () const noexcept + + + int64_t + arrayCount + classCesiumGltf_1_1PropertyView_3_01PropertyArrayView_3_01ElementType_01_4_00_01true_01_4.html + ad2ece8f2c05ab086bb24cf4f100284d6 + () const noexcept + + + bool + normalized + classCesiumGltf_1_1PropertyView_3_01PropertyArrayView_3_01ElementType_01_4_00_01true_01_4.html + af048cc04e570584af2dea592447452ba + () const noexcept + + + std::optional< PropertyArrayView< NormalizedType > > + offset + classCesiumGltf_1_1PropertyView_3_01PropertyArrayView_3_01ElementType_01_4_00_01true_01_4.html + a55633536fe5a7410701295613db7266d + () const noexcept + + + std::optional< PropertyArrayView< NormalizedType > > + scale + classCesiumGltf_1_1PropertyView_3_01PropertyArrayView_3_01ElementType_01_4_00_01true_01_4.html + a33aade489ae97f4b267c4a57acf9b5f7 + () const noexcept + + + std::optional< PropertyArrayView< NormalizedType > > + max + classCesiumGltf_1_1PropertyView_3_01PropertyArrayView_3_01ElementType_01_4_00_01true_01_4.html + a12a249f0c1068d1c4dbf8b43b4b4e0cc + () const noexcept + + + std::optional< PropertyArrayView< NormalizedType > > + min + classCesiumGltf_1_1PropertyView_3_01PropertyArrayView_3_01ElementType_01_4_00_01true_01_4.html + a3df82c7aaecc7d2739ff2bebec775979 + () const noexcept + + + bool + required + classCesiumGltf_1_1PropertyView_3_01PropertyArrayView_3_01ElementType_01_4_00_01true_01_4.html + ae61533ec67dc7efd253eed25ff1fa4a3 + () const noexcept + + + std::optional< PropertyArrayView< ElementType > > + noData + classCesiumGltf_1_1PropertyView_3_01PropertyArrayView_3_01ElementType_01_4_00_01true_01_4.html + a34aa585426494f886deebf0684e8d516 + () const noexcept + + + std::optional< PropertyArrayView< NormalizedType > > + defaultValue + classCesiumGltf_1_1PropertyView_3_01PropertyArrayView_3_01ElementType_01_4_00_01true_01_4.html + ab237d34e40499510fe3c5411c6ebb1ad + () const noexcept + + + + PropertyView + classCesiumGltf_1_1PropertyView_3_01PropertyArrayView_3_01ElementType_01_4_00_01true_01_4.html + a6cc518fcdf0e11e27b903d3abecd43d1 + (PropertyViewStatusType status) + + + + PropertyView + classCesiumGltf_1_1PropertyView_3_01PropertyArrayView_3_01ElementType_01_4_00_01true_01_4.html + a5940c391977ef9cca8e0d8b2e902a1cc + (const ClassProperty &classProperty, const PropertyTableProperty &property) + + + + PropertyView + classCesiumGltf_1_1PropertyView_3_01PropertyArrayView_3_01ElementType_01_4_00_01true_01_4.html + a4726f72ed4309054e5df3b5734c2bd31 + (const ClassProperty &classProperty, const PropertyTextureProperty &property) + + + PropertyViewStatusType + _status + classCesiumGltf_1_1PropertyView_3_01PropertyArrayView_3_01ElementType_01_4_00_01true_01_4.html + a1333d9dd414c8ffb6a651381a939c887 + + + + + CesiumGltf::PropertyView< PropertyArrayView< std::string_view > > + classCesiumGltf_1_1PropertyView_3_01PropertyArrayView_3_01std_1_1string__view_01_4_01_4.html + + + PropertyView + classCesiumGltf_1_1PropertyView_3_01PropertyArrayView_3_01std_1_1string__view_01_4_01_4.html + a51509b9572e217a3fe6665098ff7e894 + () + + + + PropertyView + classCesiumGltf_1_1PropertyView_3_01PropertyArrayView_3_01std_1_1string__view_01_4_01_4.html + a198a192d6802c3246810115753275d70 + (const ClassProperty &classProperty) + + + PropertyViewStatusType + status + classCesiumGltf_1_1PropertyView_3_01PropertyArrayView_3_01std_1_1string__view_01_4_01_4.html + a48fdaac38448f4c27fb8707be31307db + () const noexcept + + + const std::optional< std::string > & + name + classCesiumGltf_1_1PropertyView_3_01PropertyArrayView_3_01std_1_1string__view_01_4_01_4.html + a59ee82d51f18738c6298d5a11ec7a5b7 + () const noexcept + + + const std::optional< std::string > & + semantic + classCesiumGltf_1_1PropertyView_3_01PropertyArrayView_3_01std_1_1string__view_01_4_01_4.html + a357795ecb70dc8cd4435da85e96a224b + () const noexcept + + + const std::optional< std::string > & + description + classCesiumGltf_1_1PropertyView_3_01PropertyArrayView_3_01std_1_1string__view_01_4_01_4.html + a8e93e0b9fb4552b6d3effd511f5cbfb3 + () const noexcept + + + int64_t + arrayCount + classCesiumGltf_1_1PropertyView_3_01PropertyArrayView_3_01std_1_1string__view_01_4_01_4.html + a88f53258fa6838ab50cf4c1ce5503ea7 + () const noexcept + + + bool + normalized + classCesiumGltf_1_1PropertyView_3_01PropertyArrayView_3_01std_1_1string__view_01_4_01_4.html + ade7bafe114727f3905873b2b753033e5 + () const noexcept + + + std::optional< PropertyArrayView< std::string_view > > + offset + classCesiumGltf_1_1PropertyView_3_01PropertyArrayView_3_01std_1_1string__view_01_4_01_4.html + a60adfe69ef970456aaa5dc3fc7d76e18 + () const noexcept + + + std::optional< PropertyArrayView< std::string_view > > + scale + classCesiumGltf_1_1PropertyView_3_01PropertyArrayView_3_01std_1_1string__view_01_4_01_4.html + aeb316bcbc103f4e41db14e7e53b2f02d + () const noexcept + + + std::optional< PropertyArrayView< std::string_view > > + max + classCesiumGltf_1_1PropertyView_3_01PropertyArrayView_3_01std_1_1string__view_01_4_01_4.html + a0fd0260f479e7c8a3b7babc1fb9d892f + () const noexcept + + + std::optional< PropertyArrayView< std::string_view > > + min + classCesiumGltf_1_1PropertyView_3_01PropertyArrayView_3_01std_1_1string__view_01_4_01_4.html + a8e726236b8335376b60c5b28f368a7a2 + () const noexcept + + + bool + required + classCesiumGltf_1_1PropertyView_3_01PropertyArrayView_3_01std_1_1string__view_01_4_01_4.html + a9a042c4540b4f946be672c93c51bf8ce + () const noexcept + + + std::optional< PropertyArrayView< std::string_view > > + noData + classCesiumGltf_1_1PropertyView_3_01PropertyArrayView_3_01std_1_1string__view_01_4_01_4.html + a90958e3666a6a130150ce63b579f41d9 + () const noexcept + + + std::optional< PropertyArrayView< std::string_view > > + defaultValue + classCesiumGltf_1_1PropertyView_3_01PropertyArrayView_3_01std_1_1string__view_01_4_01_4.html + aeac481096b16ec3cdbece52c75b52e83 + () const noexcept + + + + PropertyView + classCesiumGltf_1_1PropertyView_3_01PropertyArrayView_3_01std_1_1string__view_01_4_01_4.html + ae1043f7e002d4e14b45f76cdf954e0b8 + (PropertyViewStatusType status) + + + + PropertyView + classCesiumGltf_1_1PropertyView_3_01PropertyArrayView_3_01std_1_1string__view_01_4_01_4.html + a133b2163c6c75399e1c4b33de4af52a0 + (const ClassProperty &classProperty, const PropertyTableProperty &) + + + PropertyViewStatusType + _status + classCesiumGltf_1_1PropertyView_3_01PropertyArrayView_3_01std_1_1string__view_01_4_01_4.html + a65869a86b902a3f29a1f2172517d455e + + + + + CesiumGltf::PropertyView< std::string_view > + classCesiumGltf_1_1PropertyView_3_01std_1_1string__view_01_4.html + + + PropertyView + classCesiumGltf_1_1PropertyView_3_01std_1_1string__view_01_4.html + a375131da8afdbd1d62df5a0afb386f0b + () + + + + PropertyView + classCesiumGltf_1_1PropertyView_3_01std_1_1string__view_01_4.html + a637968c3b8931e306d74ee57398254fc + (const ClassProperty &classProperty) + + + PropertyViewStatusType + status + classCesiumGltf_1_1PropertyView_3_01std_1_1string__view_01_4.html + ae7f350b9d3ca62e51474e748c3f9a725 + () const noexcept + + + const std::optional< std::string > & + name + classCesiumGltf_1_1PropertyView_3_01std_1_1string__view_01_4.html + a1fa52c83dc9dd52df6d40f33a8b8df14 + () const noexcept + + + const std::optional< std::string > & + semantic + classCesiumGltf_1_1PropertyView_3_01std_1_1string__view_01_4.html + ad810d1edcb5e0acdd5e62552d96acd8f + () const noexcept + + + const std::optional< std::string > & + description + classCesiumGltf_1_1PropertyView_3_01std_1_1string__view_01_4.html + a7abd1f78f8d310f44d02bb9a56b55a85 + () const noexcept + + + int64_t + arrayCount + classCesiumGltf_1_1PropertyView_3_01std_1_1string__view_01_4.html + acfe735952deba0a74162bc0ce417f096 + () const noexcept + + + bool + normalized + classCesiumGltf_1_1PropertyView_3_01std_1_1string__view_01_4.html + ade3eb2b28d68a4380b0731e28588552c + () const noexcept + + + std::optional< std::string_view > + offset + classCesiumGltf_1_1PropertyView_3_01std_1_1string__view_01_4.html + a4be1780f0442875a44a57192db8a67df + () const noexcept + + + std::optional< std::string_view > + scale + classCesiumGltf_1_1PropertyView_3_01std_1_1string__view_01_4.html + a726dba60be3c539aedd9190f39e7727f + () const noexcept + + + std::optional< std::string_view > + max + classCesiumGltf_1_1PropertyView_3_01std_1_1string__view_01_4.html + ad70abe7818f3d945880ac6e702da605b + () const noexcept + + + std::optional< std::string_view > + min + classCesiumGltf_1_1PropertyView_3_01std_1_1string__view_01_4.html + a4545cbb8aefa4ab090f3902e6d46b9ef + () const noexcept + + + bool + required + classCesiumGltf_1_1PropertyView_3_01std_1_1string__view_01_4.html + a1f02f9d18267db76b20806bee9231803 + () const noexcept + + + std::optional< std::string_view > + noData + classCesiumGltf_1_1PropertyView_3_01std_1_1string__view_01_4.html + ad2d862ca69cc149be59e8ffa009321b5 + () const noexcept + + + std::optional< std::string_view > + defaultValue + classCesiumGltf_1_1PropertyView_3_01std_1_1string__view_01_4.html + aac2f489fb54bcd44539ec7ec151e789c + () const noexcept + + + + PropertyView + classCesiumGltf_1_1PropertyView_3_01std_1_1string__view_01_4.html + ad12298cef5b9e4c7022c312040e3e8a0 + (PropertyViewStatusType status) + + + + PropertyView + classCesiumGltf_1_1PropertyView_3_01std_1_1string__view_01_4.html + a0f3d3540af1afe56ec2d04cf0f0dc617 + (const ClassProperty &classProperty, const PropertyTableProperty &) + + + PropertyViewStatusType + _status + classCesiumGltf_1_1PropertyView_3_01std_1_1string__view_01_4.html + a5f1fb409d9cf3eddbdd23bc441ed3e5a + + + + + CesiumGltf::PropertyViewStatus + classCesiumGltf_1_1PropertyViewStatus.html + + static const PropertyViewStatusType + Valid + classCesiumGltf_1_1PropertyViewStatus.html + a908efdc3d160a64207442eba70ea7e7d + + + + static const PropertyViewStatusType + EmptyPropertyWithDefault + classCesiumGltf_1_1PropertyViewStatus.html + ab34b3bc659b8447f4d76901d37eb1c8f + + + + static const PropertyViewStatusType + ErrorNonexistentProperty + classCesiumGltf_1_1PropertyViewStatus.html + a947b8de3eb361476359c19141f7fc8b1 + + + + static const PropertyViewStatusType + ErrorTypeMismatch + classCesiumGltf_1_1PropertyViewStatus.html + a21ea206933df49514bd4e3169c65182d + + + + static const PropertyViewStatusType + ErrorComponentTypeMismatch + classCesiumGltf_1_1PropertyViewStatus.html + aeefb03f2af921b229ce37101cc725f02 + + + + static const PropertyViewStatusType + ErrorArrayTypeMismatch + classCesiumGltf_1_1PropertyViewStatus.html + a9c541f443f0178abb91ab7ef5e7354a2 + + + + static const PropertyViewStatusType + ErrorInvalidNormalization + classCesiumGltf_1_1PropertyViewStatus.html + a9ac78f70355d796be0d9f2c222fd9384 + + + + static const PropertyViewStatusType + ErrorNormalizationMismatch + classCesiumGltf_1_1PropertyViewStatus.html + ab25042ceab042a7daa4092cbfe24e59a + + + + static const PropertyViewStatusType + ErrorInvalidOffset + classCesiumGltf_1_1PropertyViewStatus.html + a7735af3d80c90a118c5780b49e1d81bf + + + + static const PropertyViewStatusType + ErrorInvalidScale + classCesiumGltf_1_1PropertyViewStatus.html + ae11b2f10da9e5df96a3905857300b50b + + + + static const PropertyViewStatusType + ErrorInvalidMax + classCesiumGltf_1_1PropertyViewStatus.html + a685d008a37b4c5332cc2f62e3173364f + + + + static const PropertyViewStatusType + ErrorInvalidMin + classCesiumGltf_1_1PropertyViewStatus.html + a54992fc7b5b981cf272397beb34f9a07 + + + + static const PropertyViewStatusType + ErrorInvalidNoDataValue + classCesiumGltf_1_1PropertyViewStatus.html + aac9d9c6c0d9e3c2e68bb8973665b34b0 + + + + static const PropertyViewStatusType + ErrorInvalidDefaultValue + classCesiumGltf_1_1PropertyViewStatus.html + a37a314b0e12dfb9a0415958e0a897192 + + + + + CesiumGeometry::QuadtreeAvailability + classCesiumGeometry_1_1QuadtreeAvailability.html + + + QuadtreeAvailability + classCesiumGeometry_1_1QuadtreeAvailability.html + a4599ba6f7dfd47d023d32ec734bc024d + (uint32_t subtreeLevels, uint32_t maximumLevel) noexcept + + + uint8_t + computeAvailability + classCesiumGeometry_1_1QuadtreeAvailability.html + a4640328e0b10d9abac723702f4185b27 + (const QuadtreeTileID &tileID) const noexcept + + + bool + addSubtree + classCesiumGeometry_1_1QuadtreeAvailability.html + a96a4580e16e1b9e6f4a530f18869b87a + (const QuadtreeTileID &tileID, AvailabilitySubtree &&newSubtree) noexcept + + + uint8_t + computeAvailability + classCesiumGeometry_1_1QuadtreeAvailability.html + a45ba9c60391a17e2db5b6a56651183dc + (const QuadtreeTileID &tileID, const AvailabilityNode *pNode) const noexcept + + + AvailabilityNode * + addNode + classCesiumGeometry_1_1QuadtreeAvailability.html + a0cc0fc6c30bb6173905665f9ce2919f8 + (const QuadtreeTileID &tileID, AvailabilityNode *pParentNode) noexcept + + + bool + addLoadedSubtree + classCesiumGeometry_1_1QuadtreeAvailability.html + a1fa1608441ace9f919ed6190c96d92e7 + (AvailabilityNode *pNode, AvailabilitySubtree &&newSubtree) noexcept + + + std::optional< uint32_t > + findChildNodeIndex + classCesiumGeometry_1_1QuadtreeAvailability.html + a53b33c86fbdeabe19ddbc7a69a5598cd + (const QuadtreeTileID &tileID, const AvailabilityNode *pParentNode) const + + + AvailabilityNode * + findChildNode + classCesiumGeometry_1_1QuadtreeAvailability.html + aa409a3f16776c53cc9d0a3f804b8b8d0 + (const QuadtreeTileID &tileID, AvailabilityNode *pParentNode) const + + + constexpr uint32_t + getSubtreeLevels + classCesiumGeometry_1_1QuadtreeAvailability.html + a05e1534403b6448af111dadcbea57b2b + () const noexcept + + + constexpr uint32_t + getMaximumLevel + classCesiumGeometry_1_1QuadtreeAvailability.html + a77ca1b7677d212a6f775a860a10772eb + () const noexcept + + + AvailabilityNode * + getRootNode + classCesiumGeometry_1_1QuadtreeAvailability.html + a0f030761d0c9e0491164a1a11c26690f + () noexcept + + + + Cesium3DTilesContent::QuadtreeChildren + classCesium3DTilesContent_1_1QuadtreeChildren.html + Cesium3DTilesContent::QuadtreeChildren::iterator + + iterator + const_iterator + classCesium3DTilesContent_1_1QuadtreeChildren.html + afc92cd8d079663303fbd42edf9389a7c + + + + + QuadtreeChildren + classCesium3DTilesContent_1_1QuadtreeChildren.html + a68a8dc3adfbdb585b5207f1cdb5815c6 + (const CesiumGeometry::QuadtreeTileID &tileID) noexcept + + + iterator + begin + classCesium3DTilesContent_1_1QuadtreeChildren.html + ac5b76340a8efd9591932cbd8a655af30 + () const noexcept + + + iterator + end + classCesium3DTilesContent_1_1QuadtreeChildren.html + aff9ff0c906b390bd790536129b3039e3 + () const noexcept + + + constexpr int64_t + size + classCesium3DTilesContent_1_1QuadtreeChildren.html + a5db1b6658f1027648fe26e78a1ecb01f + () const noexcept + + + + CesiumRasterOverlays::QuadtreeRasterOverlayTileProvider + classCesiumRasterOverlays_1_1QuadtreeRasterOverlayTileProvider.html + CesiumRasterOverlays::RasterOverlayTileProvider + + + QuadtreeRasterOverlayTileProvider + classCesiumRasterOverlays_1_1QuadtreeRasterOverlayTileProvider.html + a82bcbb70f64fb1b9e93c1d3dcaded65f + (const CesiumUtility::IntrusivePointer< const RasterOverlay > &pOwner, const CesiumAsync::AsyncSystem &asyncSystem, const std::shared_ptr< CesiumAsync::IAssetAccessor > &pAssetAccessor, std::optional< CesiumUtility::Credit > credit, const std::shared_ptr< IPrepareRasterOverlayRendererResources > &pPrepareRendererResources, const std::shared_ptr< spdlog::logger > &pLogger, const CesiumGeospatial::Projection &projection, const CesiumGeometry::QuadtreeTilingScheme &tilingScheme, const CesiumGeometry::Rectangle &coverageRectangle, uint32_t minimumLevel, uint32_t maximumLevel, uint32_t imageWidth, uint32_t imageHeight) noexcept + + + uint32_t + getMinimumLevel + classCesiumRasterOverlays_1_1QuadtreeRasterOverlayTileProvider.html + a735c6f6b70bd97da5e92177e925851e5 + () const noexcept + + + uint32_t + getMaximumLevel + classCesiumRasterOverlays_1_1QuadtreeRasterOverlayTileProvider.html + aa70cbd66bd82c703e986939bb0388add + () const noexcept + + + uint32_t + getWidth + classCesiumRasterOverlays_1_1QuadtreeRasterOverlayTileProvider.html + a9acc2c76776c57f64aee27c6d0745d6a + () const noexcept + + + uint32_t + getHeight + classCesiumRasterOverlays_1_1QuadtreeRasterOverlayTileProvider.html + a2796aef9382ce97afe7cb3045508fc8d + () const noexcept + + + const CesiumGeometry::QuadtreeTilingScheme & + getTilingScheme + classCesiumRasterOverlays_1_1QuadtreeRasterOverlayTileProvider.html + ac6b9d802e5ac84ad8ec0a6cb345a5360 + () const noexcept + + + uint32_t + computeLevelFromTargetScreenPixels + classCesiumRasterOverlays_1_1QuadtreeRasterOverlayTileProvider.html + a6f55cef91be4c1ba0003c259ba1b2f16 + (const CesiumGeometry::Rectangle &rectangle, const glm::dvec2 &screenPixels) + + + virtual CesiumAsync::Future< LoadedRasterOverlayImage > + loadQuadtreeTileImage + classCesiumRasterOverlays_1_1QuadtreeRasterOverlayTileProvider.html + aa65868580a8264365ae380f7ddcaf581 + (const CesiumGeometry::QuadtreeTileID &tileID) const =0 + + + + CesiumGeometry::QuadtreeRectangleAvailability + classCesiumGeometry_1_1QuadtreeRectangleAvailability.html + + + QuadtreeRectangleAvailability + classCesiumGeometry_1_1QuadtreeRectangleAvailability.html + a6106a00a605b515803657f560c4bda76 + (const QuadtreeTilingScheme &tilingScheme, uint32_t maximumLevel) noexcept + + + void + addAvailableTileRange + classCesiumGeometry_1_1QuadtreeRectangleAvailability.html + a33749635b1a1ede029b4cb8b578c9407 + (const QuadtreeTileRectangularRange &range) noexcept + + + uint32_t + computeMaximumLevelAtPosition + classCesiumGeometry_1_1QuadtreeRectangleAvailability.html + a40037e268641f1090981351914d5e55f + (const glm::dvec2 &position) const noexcept + + + uint8_t + isTileAvailable + classCesiumGeometry_1_1QuadtreeRectangleAvailability.html + a61f1241257dbbbc88e3aa4d3dcc18d35 + (const QuadtreeTileID &id) const noexcept + + + + CesiumGeometry::QuadtreeTileID + structCesiumGeometry_1_1QuadtreeTileID.html + + constexpr + QuadtreeTileID + structCesiumGeometry_1_1QuadtreeTileID.html + ab1d44c3938fc9b9e5c5fc0f2b2098b2a + (uint32_t level_, uint32_t x_, uint32_t y_) noexcept + + + constexpr bool + operator== + structCesiumGeometry_1_1QuadtreeTileID.html + a38f3c0bd95ba7dcb617c406fc74a302c + (const QuadtreeTileID &other) const noexcept + + + constexpr bool + operator!= + structCesiumGeometry_1_1QuadtreeTileID.html + aa2a02d6adc2d421442c763c9cd40be86 + (const QuadtreeTileID &other) const noexcept + + + uint32_t + computeInvertedY + structCesiumGeometry_1_1QuadtreeTileID.html + a142c4549ec1a2c4d74eb96409f8f6c21 + (const QuadtreeTilingScheme &tilingScheme) const noexcept + + + constexpr QuadtreeTileID + getParent + structCesiumGeometry_1_1QuadtreeTileID.html + aa3183c646da8de1c87fc05bca2134c96 + () const noexcept + + + uint32_t + level + structCesiumGeometry_1_1QuadtreeTileID.html + a6e57ce596c92c94cb09bf78918f83bb4 + + + + uint32_t + x + structCesiumGeometry_1_1QuadtreeTileID.html + a5afc59db03cbc8381fa926a3a741b8a5 + + + + uint32_t + y + structCesiumGeometry_1_1QuadtreeTileID.html + a2eab4402496d22dd54e50ed338223ae0 + + + + + CesiumGeometry::QuadtreeTileRectangularRange + structCesiumGeometry_1_1QuadtreeTileRectangularRange.html + + uint32_t + level + structCesiumGeometry_1_1QuadtreeTileRectangularRange.html + a81aa9f6d4838528ff8fba338bd21f00c + + + + uint32_t + minimumX + structCesiumGeometry_1_1QuadtreeTileRectangularRange.html + a7b7b7c08f052c1dbf30470f585268fa4 + + + + uint32_t + minimumY + structCesiumGeometry_1_1QuadtreeTileRectangularRange.html + ad3ab39d1cd79a2accbef7f5bc5250020 + + + + uint32_t + maximumX + structCesiumGeometry_1_1QuadtreeTileRectangularRange.html + a6c5927708ae3d4d1a7b23be440e2c66a + + + + uint32_t + maximumY + structCesiumGeometry_1_1QuadtreeTileRectangularRange.html + a4f64cb98df39ba61bd8148d622c6f86b + + + + + CesiumGeometry::QuadtreeTilingScheme + classCesiumGeometry_1_1QuadtreeTilingScheme.html + + + QuadtreeTilingScheme + classCesiumGeometry_1_1QuadtreeTilingScheme.html + a1767626d53bc2fb64824cabec29bf631 + (const CesiumGeometry::Rectangle &rectangle, uint32_t rootTilesX, uint32_t rootTilesY) noexcept + + + const CesiumGeometry::Rectangle & + getRectangle + classCesiumGeometry_1_1QuadtreeTilingScheme.html + a8a9afe7c3d8893af7a4b4d4bb6a2e79c + () const noexcept + + + uint32_t + getRootTilesX + classCesiumGeometry_1_1QuadtreeTilingScheme.html + a81e5172f9f602c988d4f49848926b6bc + () const noexcept + + + uint32_t + getRootTilesY + classCesiumGeometry_1_1QuadtreeTilingScheme.html + a0cec726804d9a0728dee32ae42307656 + () const noexcept + + + uint32_t + getNumberOfXTilesAtLevel + classCesiumGeometry_1_1QuadtreeTilingScheme.html + ac4e7c4d171960190a7ee560433f58c88 + (uint32_t level) const noexcept + + + uint32_t + getNumberOfYTilesAtLevel + classCesiumGeometry_1_1QuadtreeTilingScheme.html + a0be499680601a95cc3a205d088b38335 + (uint32_t level) const noexcept + + + std::optional< CesiumGeometry::QuadtreeTileID > + positionToTile + classCesiumGeometry_1_1QuadtreeTilingScheme.html + a5d18ba77b7e29ebfa74b3678ee4807bb + (const glm::dvec2 &position, uint32_t level) const noexcept + + + CesiumGeometry::Rectangle + tileToRectangle + classCesiumGeometry_1_1QuadtreeTilingScheme.html + ae04aea281a18d400ea32bd1390964057 + (const CesiumGeometry::QuadtreeTileID &tileID) const noexcept + + + + CesiumQuantizedMeshTerrain::QuantizedMeshLoader + classCesiumQuantizedMeshTerrain_1_1QuantizedMeshLoader.html + + static QuantizedMeshLoadResult + load + classCesiumQuantizedMeshTerrain_1_1QuantizedMeshLoader.html + a264aa425994bed9fd86057c504dd80f3 + (const CesiumGeometry::QuadtreeTileID &tileID, const CesiumGeospatial::BoundingRegion &tileBoundingVolume, const std::string &url, const std::span< const std::byte > &data, bool enableWaterMask, const CesiumGeospatial::Ellipsoid &ellipsoid=CesiumGeospatial::Ellipsoid::WGS84) + + + static QuantizedMeshMetadataResult + loadMetadata + classCesiumQuantizedMeshTerrain_1_1QuantizedMeshLoader.html + a26776105a66cde0973c64b2c9e413415 + (const std::span< const std::byte > &data, const CesiumGeometry::QuadtreeTileID &tileID) + + + static QuantizedMeshMetadataResult + loadAvailabilityRectangles + classCesiumQuantizedMeshTerrain_1_1QuantizedMeshLoader.html + a239bb93fc802cc7897d39ec5e68cf521 + (const rapidjson::Document &layerJson, uint32_t startingLevel) + + + + CesiumQuantizedMeshTerrain::QuantizedMeshLoadResult + structCesiumQuantizedMeshTerrain_1_1QuantizedMeshLoadResult.html + + std::optional< CesiumGltf::Model > + model + structCesiumQuantizedMeshTerrain_1_1QuantizedMeshLoadResult.html + a09a1d2ccfc0059d33872967695614aa0 + + + + std::optional< CesiumGeospatial::BoundingRegion > + updatedBoundingVolume + structCesiumQuantizedMeshTerrain_1_1QuantizedMeshLoadResult.html + a33236fe290a4ec322273a6c50160accd + + + + std::vector< CesiumGeometry::QuadtreeTileRectangularRange > + availableTileRectangles + structCesiumQuantizedMeshTerrain_1_1QuantizedMeshLoadResult.html + a194635ec5dc98f27d6505600b54179a8 + + + + std::shared_ptr< CesiumAsync::IAssetRequest > + pRequest + structCesiumQuantizedMeshTerrain_1_1QuantizedMeshLoadResult.html + a60ab69c01f381d14bb95e57e7805d9f3 + + + + CesiumUtility::ErrorList + errors + structCesiumQuantizedMeshTerrain_1_1QuantizedMeshLoadResult.html + a1aefec9876a9c4c3622703574d1b3e3e + + + + + CesiumQuantizedMeshTerrain::QuantizedMeshMetadataResult + structCesiumQuantizedMeshTerrain_1_1QuantizedMeshMetadataResult.html + + std::vector< CesiumGeometry::QuadtreeTileRectangularRange > + availability + structCesiumQuantizedMeshTerrain_1_1QuantizedMeshMetadataResult.html + a46f6da1942b429e37dd1d5c60a1b8935 + + + + CesiumUtility::ErrorList + errors + structCesiumQuantizedMeshTerrain_1_1QuantizedMeshMetadataResult.html + a766d2ed6b7df6a76aab66edad839e90b + + + + + CesiumIonClient::QuickAddAsset + structCesiumIonClient_1_1QuickAddAsset.html + + std::string + name + structCesiumIonClient_1_1QuickAddAsset.html + acfd22aaa43c3a3aa402a98beb2507bcd + + + + std::string + objectName + structCesiumIonClient_1_1QuickAddAsset.html + a77d5555febf206dd4e0b9dd8b2a16a76 + + + + std::string + description + structCesiumIonClient_1_1QuickAddAsset.html + a917f39d2e5add487216b6a16bc292a0a + + + + int64_t + assetId + structCesiumIonClient_1_1QuickAddAsset.html + a53a8901f57d995d5a5b7fba04180b41c + + + + std::string + type + structCesiumIonClient_1_1QuickAddAsset.html + a1b4ffb6b9143c1201961d358180985b4 + + + + bool + subscribed + structCesiumIonClient_1_1QuickAddAsset.html + a237bc79ae3deb82d1f12342d65da8686 + + + + std::vector< QuickAddRasterOverlay > + rasterOverlays + structCesiumIonClient_1_1QuickAddAsset.html + a133e6bc9a2f04b849cdd360fd47bcc8a + + + + + CesiumIonClient::QuickAddRasterOverlay + structCesiumIonClient_1_1QuickAddRasterOverlay.html + + std::string + name + structCesiumIonClient_1_1QuickAddRasterOverlay.html + a07fc9909aef574ed64842ccf7ed23364 + + + + int64_t + assetId + structCesiumIonClient_1_1QuickAddRasterOverlay.html + a464e251c387c810c2289a9db66e9448e + + + + bool + subscribed + structCesiumIonClient_1_1QuickAddRasterOverlay.html + ae6adeda09d6b03c1e52dfc52d480d634 + + + + + CesiumRasterOverlays::RasterizedPolygonsOverlay + classCesiumRasterOverlays_1_1RasterizedPolygonsOverlay.html + CesiumRasterOverlays::RasterOverlay + + + RasterizedPolygonsOverlay + classCesiumRasterOverlays_1_1RasterizedPolygonsOverlay.html + aaae794c566b93886232f5f45552db6a1 + (const std::string &name, const std::vector< CesiumGeospatial::CartographicPolygon > &polygons, bool invertSelection, const CesiumGeospatial::Ellipsoid &ellipsoid, const CesiumGeospatial::Projection &projection, const RasterOverlayOptions &overlayOptions={}) + + + virtual CesiumAsync::Future< CreateTileProviderResult > + createTileProvider + classCesiumRasterOverlays_1_1RasterizedPolygonsOverlay.html + a22745c96b10d6799cc9ac728d64b18f8 + (const CesiumAsync::AsyncSystem &asyncSystem, const std::shared_ptr< CesiumAsync::IAssetAccessor > &pAssetAccessor, const std::shared_ptr< CesiumUtility::CreditSystem > &pCreditSystem, const std::shared_ptr< IPrepareRasterOverlayRendererResources > &pPrepareRendererResources, const std::shared_ptr< spdlog::logger > &pLogger, CesiumUtility::IntrusivePointer< const RasterOverlay > pOwner) const override + + + const std::vector< CesiumGeospatial::CartographicPolygon > & + getPolygons + classCesiumRasterOverlays_1_1RasterizedPolygonsOverlay.html + a205b5d3cfbe88ae6e71b0ba376cc21b4 + () const noexcept + + + bool + getInvertSelection + classCesiumRasterOverlays_1_1RasterizedPolygonsOverlay.html + a249bfa2dbf3e77f56d6a1d3ef660acaf + () const noexcept + + + const CesiumGeospatial::Ellipsoid & + getEllipsoid + classCesiumRasterOverlays_1_1RasterizedPolygonsOverlay.html + a9b5262c5d68d74a6e1bbaa4aec6f84ab + () const noexcept + + + + Cesium3DTilesSelection::RasterizedPolygonsTileExcluder + classCesium3DTilesSelection_1_1RasterizedPolygonsTileExcluder.html + Cesium3DTilesSelection::ITileExcluder + + + RasterizedPolygonsTileExcluder + classCesium3DTilesSelection_1_1RasterizedPolygonsTileExcluder.html + a2ee7297d7931929a0129ce81ac964768 + (const CesiumUtility::IntrusivePointer< const CesiumRasterOverlays::RasterizedPolygonsOverlay > &pOverlay) noexcept + + + virtual bool + shouldExclude + classCesium3DTilesSelection_1_1RasterizedPolygonsTileExcluder.html + a276d58c976e207ab6d72c6e858ef9fbc + (const Tile &tile) const noexcept override + + + const CesiumRasterOverlays::RasterizedPolygonsOverlay & + getOverlay + classCesium3DTilesSelection_1_1RasterizedPolygonsTileExcluder.html + a1af6d57c79fc6538afbd685c2563634f + () const + + + + Cesium3DTilesSelection::RasterMappedTo3DTile + classCesium3DTilesSelection_1_1RasterMappedTo3DTile.html + + + AttachmentState + classCesium3DTilesSelection_1_1RasterMappedTo3DTile.html + a4312fcdabd3849417316f0167bb48b6f + + Unattached + TemporarilyAttached + Attached + + + + RasterMappedTo3DTile + classCesium3DTilesSelection_1_1RasterMappedTo3DTile.html + aa4549d20224335aacda2c8ebb40fe98f + (const CesiumUtility::IntrusivePointer< CesiumRasterOverlays::RasterOverlayTile > &pRasterTile, int32_t textureCoordinateIndex) + + + CesiumRasterOverlays::RasterOverlayTile * + getLoadingTile + classCesium3DTilesSelection_1_1RasterMappedTo3DTile.html + a3e7373cf1589c5a4151163700d685a99 + () noexcept + + + const CesiumRasterOverlays::RasterOverlayTile * + getLoadingTile + classCesium3DTilesSelection_1_1RasterMappedTo3DTile.html + af304f44d388f2d5cc94c0610e4570dff + () const noexcept + + + CesiumRasterOverlays::RasterOverlayTile * + getReadyTile + classCesium3DTilesSelection_1_1RasterMappedTo3DTile.html + acf197b8ad45aaa7663f273aba0b005f6 + () noexcept + + + const CesiumRasterOverlays::RasterOverlayTile * + getReadyTile + classCesium3DTilesSelection_1_1RasterMappedTo3DTile.html + a24ca91adca0de8413406826b77f45c1b + () const noexcept + + + int32_t + getTextureCoordinateID + classCesium3DTilesSelection_1_1RasterMappedTo3DTile.html + a7bdd4228e47f8dc01155b41c80ff9ce6 + () const noexcept + + + void + setTextureCoordinateID + classCesium3DTilesSelection_1_1RasterMappedTo3DTile.html + aa78876580f55d8d96b9b512be623cd5c + (int32_t textureCoordinateID) noexcept + + + const glm::dvec2 & + getTranslation + classCesium3DTilesSelection_1_1RasterMappedTo3DTile.html + a9c14701c31fb05af75dbc9c13a7f2a20 + () const noexcept + + + const glm::dvec2 & + getScale + classCesium3DTilesSelection_1_1RasterMappedTo3DTile.html + a7a3e3f80e48f2e0e182be4d280182347 + () const noexcept + + + AttachmentState + getState + classCesium3DTilesSelection_1_1RasterMappedTo3DTile.html + a52cf9690917f7a6afa976f0b0ee07451 + () const noexcept + + + CesiumRasterOverlays::RasterOverlayTile::MoreDetailAvailable + update + classCesium3DTilesSelection_1_1RasterMappedTo3DTile.html + abc6a12d419555bf855fadace779faefc + (IPrepareRendererResources &prepareRendererResources, Tile &tile) + + + bool + isMoreDetailAvailable + classCesium3DTilesSelection_1_1RasterMappedTo3DTile.html + ab66c52b59a926acba2434aeb222ca2b2 + () const noexcept + + + void + detachFromTile + classCesium3DTilesSelection_1_1RasterMappedTo3DTile.html + ae395b6e574521b73bb6e636b7a412c56 + (IPrepareRendererResources &prepareRendererResources, Tile &tile) noexcept + + + bool + loadThrottled + classCesium3DTilesSelection_1_1RasterMappedTo3DTile.html + aa9968300f95eecf31289b02da8c946a0 + () noexcept + + + static RasterMappedTo3DTile * + mapOverlayToTile + classCesium3DTilesSelection_1_1RasterMappedTo3DTile.html + a785ecce1d92d8e5f1da5f3cb84d91972 + (double maximumScreenSpaceError, CesiumRasterOverlays::RasterOverlayTileProvider &tileProvider, CesiumRasterOverlays::RasterOverlayTileProvider &placeholder, Tile &tile, std::vector< CesiumGeospatial::Projection > &missingProjections, const CesiumGeospatial::Ellipsoid &ellipsoid=CesiumGeospatial::Ellipsoid::WGS84) + + + + CesiumRasterOverlays::RasterOverlay + classCesiumRasterOverlays_1_1RasterOverlay.html + CesiumUtility::ReferenceCounted< T, isThreadSafe > + + nonstd::expected< CesiumUtility::IntrusivePointer< RasterOverlayTileProvider >, RasterOverlayLoadFailureDetails > + CreateTileProviderResult + classCesiumRasterOverlays_1_1RasterOverlay.html + ad72c4a75298ae8a50032b3bd88601beb + + + + + RasterOverlay + classCesiumRasterOverlays_1_1RasterOverlay.html + a5528c6ec1e346e585c6beaa35e19d077 + (const std::string &name, const RasterOverlayOptions &overlayOptions=RasterOverlayOptions()) + + + CesiumAsync::SharedFuture< void > & + getAsyncDestructionCompleteEvent + classCesiumRasterOverlays_1_1RasterOverlay.html + a364011d4ce8aa5fd4af06fa703194007 + (const CesiumAsync::AsyncSystem &asyncSystem) + + + const std::string & + getName + classCesiumRasterOverlays_1_1RasterOverlay.html + affcf1e47f815eabcc5e0d74fc8ad6510 + () const noexcept + + + RasterOverlayOptions & + getOptions + classCesiumRasterOverlays_1_1RasterOverlay.html + ad4cdb21df461931b7100ede99cf0a53c + () noexcept + + + const RasterOverlayOptions & + getOptions + classCesiumRasterOverlays_1_1RasterOverlay.html + a1bf42c817262cd637a120e5157eb46c7 + () const noexcept + + + const std::vector< CesiumUtility::Credit > & + getCredits + classCesiumRasterOverlays_1_1RasterOverlay.html + a056868ebdf818a879e6bd4dbd80e3485 + () const noexcept + + + std::vector< CesiumUtility::Credit > & + getCredits + classCesiumRasterOverlays_1_1RasterOverlay.html + a27f0c1fcbba20ffdf47f65ae051c8872 + () noexcept + + + CesiumUtility::IntrusivePointer< RasterOverlayTileProvider > + createPlaceholder + classCesiumRasterOverlays_1_1RasterOverlay.html + a13fad0b12c13467469771db9728cd7d1 + (const CesiumAsync::AsyncSystem &asyncSystem, const std::shared_ptr< CesiumAsync::IAssetAccessor > &pAssetAccessor, const CesiumGeospatial::Ellipsoid &ellipsoid=CesiumGeospatial::Ellipsoid::WGS84) const + + + virtual CesiumAsync::Future< CreateTileProviderResult > + createTileProvider + classCesiumRasterOverlays_1_1RasterOverlay.html + a529a81d9953ff98329a704158e4ea92e + (const CesiumAsync::AsyncSystem &asyncSystem, const std::shared_ptr< CesiumAsync::IAssetAccessor > &pAssetAccessor, const std::shared_ptr< CesiumUtility::CreditSystem > &pCreditSystem, const std::shared_ptr< IPrepareRasterOverlayRendererResources > &pPrepareRendererResources, const std::shared_ptr< spdlog::logger > &pLogger, CesiumUtility::IntrusivePointer< const RasterOverlay > pOwner) const =0 + + + + Cesium3DTilesSelection::RasterOverlayCollection + classCesium3DTilesSelection_1_1RasterOverlayCollection.html + + std::vector< CesiumUtility::IntrusivePointer< CesiumRasterOverlays::RasterOverlay > >::const_iterator + const_iterator + classCesium3DTilesSelection_1_1RasterOverlayCollection.html + a54cb8250d865fafac084d854aac4e77c + + + + + RasterOverlayCollection + classCesium3DTilesSelection_1_1RasterOverlayCollection.html + a1b90177bddd39e58ac922c857b11cac8 + (Tile::LoadedLinkedList &loadedTiles, const TilesetExternals &externals, const CesiumGeospatial::Ellipsoid &ellipsoid=CesiumGeospatial::Ellipsoid::WGS84) noexcept + + + + RasterOverlayCollection + classCesium3DTilesSelection_1_1RasterOverlayCollection.html + a1da499936109adfad68fe5541f6b419a + (const RasterOverlayCollection &rhs)=delete + + + + RasterOverlayCollection + classCesium3DTilesSelection_1_1RasterOverlayCollection.html + aec2d53f6c9abbdf1bade8db21c2ff323 + (RasterOverlayCollection &&rhs) noexcept=default + + + RasterOverlayCollection & + operator= + classCesium3DTilesSelection_1_1RasterOverlayCollection.html + a7632118634cdaadd751492b3eefa0dd3 + (const RasterOverlayCollection &rhs)=delete + + + RasterOverlayCollection & + operator= + classCesium3DTilesSelection_1_1RasterOverlayCollection.html + a083498bb62ef6b9b6f811950f37fca00 + (RasterOverlayCollection &&rhs) noexcept=default + + + void + add + classCesium3DTilesSelection_1_1RasterOverlayCollection.html + a79564273f3c54141211ec401a0458be0 + (const CesiumUtility::IntrusivePointer< CesiumRasterOverlays::RasterOverlay > &pOverlay) + + + void + remove + classCesium3DTilesSelection_1_1RasterOverlayCollection.html + a5688fd621a008be014e8f6c676c8ff91 + (const CesiumUtility::IntrusivePointer< CesiumRasterOverlays::RasterOverlay > &pOverlay) noexcept + + + const std::vector< CesiumUtility::IntrusivePointer< CesiumRasterOverlays::RasterOverlay > > & + getOverlays + classCesium3DTilesSelection_1_1RasterOverlayCollection.html + a1641f3ff24e3922af3fea285c4177211 + () const + + + const std::vector< CesiumUtility::IntrusivePointer< CesiumRasterOverlays::RasterOverlayTileProvider > > & + getTileProviders + classCesium3DTilesSelection_1_1RasterOverlayCollection.html + a822ae0d616095be787ba8d19ada5dc1a + () const + + + const std::vector< CesiumUtility::IntrusivePointer< CesiumRasterOverlays::RasterOverlayTileProvider > > & + getPlaceholderTileProviders + classCesium3DTilesSelection_1_1RasterOverlayCollection.html + ab0c5c562ab995e82df77da84f8b013c8 + () const + + + CesiumRasterOverlays::RasterOverlayTileProvider * + findTileProviderForOverlay + classCesium3DTilesSelection_1_1RasterOverlayCollection.html + a0a6fea19bce467a07805846e9fc590d4 + (CesiumRasterOverlays::RasterOverlay &overlay) noexcept + + + const CesiumRasterOverlays::RasterOverlayTileProvider * + findTileProviderForOverlay + classCesium3DTilesSelection_1_1RasterOverlayCollection.html + a1ddd09e4aca35eb1022a91e61ed00bb6 + (const CesiumRasterOverlays::RasterOverlay &overlay) const noexcept + + + CesiumRasterOverlays::RasterOverlayTileProvider * + findPlaceholderTileProviderForOverlay + classCesium3DTilesSelection_1_1RasterOverlayCollection.html + a55ad0566e92f404cfc57cfdd17370abc + (CesiumRasterOverlays::RasterOverlay &overlay) noexcept + + + const CesiumRasterOverlays::RasterOverlayTileProvider * + findPlaceholderTileProviderForOverlay + classCesium3DTilesSelection_1_1RasterOverlayCollection.html + a22fbef54e0d79845b9b2c6856a4f3ac1 + (const CesiumRasterOverlays::RasterOverlay &overlay) const noexcept + + + const_iterator + begin + classCesium3DTilesSelection_1_1RasterOverlayCollection.html + ae66661385e956c0c068b1fd7505a234d + () const noexcept + + + const_iterator + end + classCesium3DTilesSelection_1_1RasterOverlayCollection.html + a47ec6a8d2f387ae2986a5bfff49dc779 + () const noexcept + + + size_t + size + classCesium3DTilesSelection_1_1RasterOverlayCollection.html + a279a0d54aa95911406f147a518c3a2b6 + () const noexcept + + + + CesiumRasterOverlays::RasterOverlayDetails + structCesiumRasterOverlays_1_1RasterOverlayDetails.html + + + RasterOverlayDetails + structCesiumRasterOverlays_1_1RasterOverlayDetails.html + a23058763d49b564726d5b9c08fe64815 + () + + + + RasterOverlayDetails + structCesiumRasterOverlays_1_1RasterOverlayDetails.html + a1bab63845b0da963bc8f390f82f1c957 + (std::vector< CesiumGeospatial::Projection > &&rasterOverlayProjections, std::vector< CesiumGeometry::Rectangle > &&rasterOverlayRectangles, const CesiumGeospatial::BoundingRegion &boundingRegion) + + + const CesiumGeometry::Rectangle * + findRectangleForOverlayProjection + structCesiumRasterOverlays_1_1RasterOverlayDetails.html + a5c0ae71d9e21fcc3adc94f0853e9fa77 + (const CesiumGeospatial::Projection &projection) const + + + void + merge + structCesiumRasterOverlays_1_1RasterOverlayDetails.html + a6dc51a1f2470ede0c3d12bf80163f8b2 + (const RasterOverlayDetails &other, const CesiumGeospatial::Ellipsoid &ellipsoid=CesiumGeospatial::Ellipsoid::WGS84) + + + std::vector< CesiumGeospatial::Projection > + rasterOverlayProjections + structCesiumRasterOverlays_1_1RasterOverlayDetails.html + a1ce1435fd79394a91c16ec96217a8592 + + + + std::vector< CesiumGeometry::Rectangle > + rasterOverlayRectangles + structCesiumRasterOverlays_1_1RasterOverlayDetails.html + a5216330ba2904d28c65363a67f74d997 + + + + CesiumGeospatial::BoundingRegion + boundingRegion + structCesiumRasterOverlays_1_1RasterOverlayDetails.html + a355afef584a0904c56d332cf3b2921dd + + + + + CesiumRasterOverlays::RasterOverlayLoadFailureDetails + classCesiumRasterOverlays_1_1RasterOverlayLoadFailureDetails.html + + RasterOverlayLoadType + type + classCesiumRasterOverlays_1_1RasterOverlayLoadFailureDetails.html + a7d913a6914827de10601b0714f696306 + + + + std::shared_ptr< CesiumAsync::IAssetRequest > + pRequest + classCesiumRasterOverlays_1_1RasterOverlayLoadFailureDetails.html + a22c384baabf0199c9957b2f4a60c5d00 + + + + std::string + message + classCesiumRasterOverlays_1_1RasterOverlayLoadFailureDetails.html + ac1a5d2943eed405c07d5dea855b6e8f9 + + + + + CesiumRasterOverlays::RasterOverlayOptions + structCesiumRasterOverlays_1_1RasterOverlayOptions.html + + int32_t + maximumSimultaneousTileLoads + structCesiumRasterOverlays_1_1RasterOverlayOptions.html + a846fce4c1e3de7d655250320e77cd745 + + + + int64_t + subTileCacheBytes + structCesiumRasterOverlays_1_1RasterOverlayOptions.html + ae8bee6fb6866b5110998d0e5b8e2aa8c + + + + int32_t + maximumTextureSize + structCesiumRasterOverlays_1_1RasterOverlayOptions.html + ac43d6564345558c6f913bdf00ec51017 + + + + double + maximumScreenSpaceError + structCesiumRasterOverlays_1_1RasterOverlayOptions.html + a617e8dd5e92f58a998c5dbcf95c5b0b2 + + + + CesiumGltf::Ktx2TranscodeTargets + ktx2TranscodeTargets + structCesiumRasterOverlays_1_1RasterOverlayOptions.html + ab729f5d2b7774392608716a49ce47b66 + + + + std::function< void(const RasterOverlayLoadFailureDetails &)> + loadErrorCallback + structCesiumRasterOverlays_1_1RasterOverlayOptions.html + a86a477c078f60dd3a950d4286d6b5398 + + + + bool + showCreditsOnScreen + structCesiumRasterOverlays_1_1RasterOverlayOptions.html + a6668aa7e0e6f59bdd1fcb44d7eec25ee + + + + std::any + rendererOptions + structCesiumRasterOverlays_1_1RasterOverlayOptions.html + a40401bc474402a251fa9aa5c329d1812 + + + + CesiumGeospatial::Ellipsoid + ellipsoid + structCesiumRasterOverlays_1_1RasterOverlayOptions.html + a9cd3289593df2ec6f75bfeb0af17836c + + + + + CesiumRasterOverlays::RasterOverlayTile + classCesiumRasterOverlays_1_1RasterOverlayTile.html + CesiumUtility::ReferenceCounted< T, isThreadSafe > + + + LoadState + classCesiumRasterOverlays_1_1RasterOverlayTile.html + aec0a8514130b49d5fc26993eafd5ec08 + + Placeholder + Failed + Unloaded + Loading + Loaded + Done + + + + MoreDetailAvailable + classCesiumRasterOverlays_1_1RasterOverlayTile.html + afe614a98df142636f000db7545ef9714 + + No + Yes + Unknown + + + + RasterOverlayTile + classCesiumRasterOverlays_1_1RasterOverlayTile.html + a062d413f745c41f3e46b77b6e6758bd0 + (RasterOverlayTileProvider &tileProvider) noexcept + + + + RasterOverlayTile + classCesiumRasterOverlays_1_1RasterOverlayTile.html + a6198a8c17248f313e2bb8b7e5eec3eb7 + (RasterOverlayTileProvider &tileProvider, const glm::dvec2 &targetScreenPixels, const CesiumGeometry::Rectangle &imageryRectangle) noexcept + + + + ~RasterOverlayTile + classCesiumRasterOverlays_1_1RasterOverlayTile.html + a4eda9217945a0f04c9b4e76fcd8b60ec + () + + + RasterOverlayTileProvider & + getTileProvider + classCesiumRasterOverlays_1_1RasterOverlayTile.html + a5b5a38d5fdb30e69e83442288ca671fd + () noexcept + + + const RasterOverlayTileProvider & + getTileProvider + classCesiumRasterOverlays_1_1RasterOverlayTile.html + a28346871c3ee635270be50db6e3e1f54 + () const noexcept + + + RasterOverlay & + getOverlay + classCesiumRasterOverlays_1_1RasterOverlayTile.html + a95a992dbc20759ba4fafceadfe73d024 + () noexcept + + + const RasterOverlay & + getOverlay + classCesiumRasterOverlays_1_1RasterOverlayTile.html + a0fbe86f221c5cc0b4f28423d9e56dc63 + () const noexcept + + + const CesiumGeometry::Rectangle & + getRectangle + classCesiumRasterOverlays_1_1RasterOverlayTile.html + a86700dced01d139a99d8bf4d507c6687 + () const noexcept + + + glm::dvec2 + getTargetScreenPixels + classCesiumRasterOverlays_1_1RasterOverlayTile.html + a2a4cd6a4d22b6ba0409a73e9117b94aa + () const noexcept + + + LoadState + getState + classCesiumRasterOverlays_1_1RasterOverlayTile.html + aea1cf0206cc39924664d8497afffc14c + () const noexcept + + + const std::vector< CesiumUtility::Credit > & + getCredits + classCesiumRasterOverlays_1_1RasterOverlayTile.html + a1a6b737447f179a0eeb2d42f1b6d09b5 + () const noexcept + + + CesiumUtility::IntrusivePointer< const CesiumGltf::ImageAsset > + getImage + classCesiumRasterOverlays_1_1RasterOverlayTile.html + a1c40a8f7a8ac82528465c2cd763e9c27 + () const noexcept + + + CesiumUtility::IntrusivePointer< CesiumGltf::ImageAsset > + getImage + classCesiumRasterOverlays_1_1RasterOverlayTile.html + a3dba12ef37f158afcb5883e638dbc8f3 + () noexcept + + + void + loadInMainThread + classCesiumRasterOverlays_1_1RasterOverlayTile.html + ab8d906239f43ffd0b725148453433dce + () + + + void * + getRendererResources + classCesiumRasterOverlays_1_1RasterOverlayTile.html + a2357169eb34db94b552d7c86240b7926 + () const noexcept + + + void + setRendererResources + classCesiumRasterOverlays_1_1RasterOverlayTile.html + a0d8666beb4f48cb01193200f3a924ea3 + (void *pValue) noexcept + + + MoreDetailAvailable + isMoreDetailAvailable + classCesiumRasterOverlays_1_1RasterOverlayTile.html + a54b9aafe5a6b3c9296a9d4989a0814bd + () const noexcept + + + + CesiumRasterOverlays::RasterOverlayTileProvider + classCesiumRasterOverlays_1_1RasterOverlayTileProvider.html + CesiumUtility::ReferenceCounted< T, isThreadSafe > + + + RasterOverlayTileProvider + classCesiumRasterOverlays_1_1RasterOverlayTileProvider.html + af45f0605bb80719adb2ed3163d15c3a1 + (const CesiumUtility::IntrusivePointer< const RasterOverlay > &pOwner, const CesiumAsync::AsyncSystem &asyncSystem, const std::shared_ptr< CesiumAsync::IAssetAccessor > &pAssetAccessor, const CesiumGeospatial::Ellipsoid &ellipsoid=CesiumGeospatial::Ellipsoid::WGS84) noexcept + + + + RasterOverlayTileProvider + classCesiumRasterOverlays_1_1RasterOverlayTileProvider.html + ae1e0d9e4893200e379dbf36fcad6446d + (const CesiumUtility::IntrusivePointer< const RasterOverlay > &pOwner, const CesiumAsync::AsyncSystem &asyncSystem, const std::shared_ptr< CesiumAsync::IAssetAccessor > &pAssetAccessor, std::optional< CesiumUtility::Credit > credit, const std::shared_ptr< IPrepareRasterOverlayRendererResources > &pPrepareRendererResources, const std::shared_ptr< spdlog::logger > &pLogger, const CesiumGeospatial::Projection &projection, const CesiumGeometry::Rectangle &coverageRectangle) noexcept + + + virtual + ~RasterOverlayTileProvider + classCesiumRasterOverlays_1_1RasterOverlayTileProvider.html + a6d2b717272f03a3d9fb0fbfecdf2063d + () noexcept + + + bool + isPlaceholder + classCesiumRasterOverlays_1_1RasterOverlayTileProvider.html + ac7620b6e913a15b87c36deab545ec4dd + () const noexcept + + + RasterOverlay & + getOwner + classCesiumRasterOverlays_1_1RasterOverlayTileProvider.html + a431cc5bc8cb36b581a90bb1230d1aff8 + () noexcept + + + const RasterOverlay & + getOwner + classCesiumRasterOverlays_1_1RasterOverlayTileProvider.html + a3e73fd8e1fc2fe2b406c2404508f266e + () const noexcept + + + const std::shared_ptr< CesiumAsync::IAssetAccessor > & + getAssetAccessor + classCesiumRasterOverlays_1_1RasterOverlayTileProvider.html + afd2a4455f3760ae8ca7a676cd73c9d4f + () const noexcept + + + const CesiumAsync::AsyncSystem & + getAsyncSystem + classCesiumRasterOverlays_1_1RasterOverlayTileProvider.html + ab585c4a93fd1bae4a83e6659f3dc79d9 + () const noexcept + + + const std::shared_ptr< IPrepareRasterOverlayRendererResources > & + getPrepareRendererResources + classCesiumRasterOverlays_1_1RasterOverlayTileProvider.html + a65c1bb82c26d02bd741845ae4031c796 + () const noexcept + + + const std::shared_ptr< spdlog::logger > & + getLogger + classCesiumRasterOverlays_1_1RasterOverlayTileProvider.html + aa284cb20b42b492d0fb74638f2b1447a + () const noexcept + + + const CesiumGeospatial::Projection & + getProjection + classCesiumRasterOverlays_1_1RasterOverlayTileProvider.html + ab5703752df84c4ac6e70f295af5fbded + () const noexcept + + + const CesiumGeometry::Rectangle & + getCoverageRectangle + classCesiumRasterOverlays_1_1RasterOverlayTileProvider.html + a9b91e48983e0da1f0115ed2e0f74a94e + () const noexcept + + + CesiumUtility::IntrusivePointer< RasterOverlayTile > + getTile + classCesiumRasterOverlays_1_1RasterOverlayTileProvider.html + a11e1ee89e7dc79e293e81a1c54a57d62 + (const CesiumGeometry::Rectangle &rectangle, const glm::dvec2 &targetScreenPixels) + + + int64_t + getTileDataBytes + classCesiumRasterOverlays_1_1RasterOverlayTileProvider.html + abec7ee6d134c472ace0de474ce3477af + () const noexcept + + + uint32_t + getNumberOfTilesLoading + classCesiumRasterOverlays_1_1RasterOverlayTileProvider.html + a98cf1bc9003b11888d68dc75e6708d41 + () const noexcept + + + void + removeTile + classCesiumRasterOverlays_1_1RasterOverlayTileProvider.html + a0204b05213692d8f3edd482163ad2335 + (RasterOverlayTile *pTile) noexcept + + + const std::optional< CesiumUtility::Credit > & + getCredit + classCesiumRasterOverlays_1_1RasterOverlayTileProvider.html + a07d5be134de4deee95eb25784dcc0a11 + () const noexcept + + + CesiumAsync::Future< TileProviderAndTile > + loadTile + classCesiumRasterOverlays_1_1RasterOverlayTileProvider.html + a4cf9003189020a3b4c119635065c8aa5 + (RasterOverlayTile &tile) + + + bool + loadTileThrottled + classCesiumRasterOverlays_1_1RasterOverlayTileProvider.html + a2990a2d40ea85237b6ad97753c1d96a9 + (RasterOverlayTile &tile) + + + virtual CesiumAsync::Future< LoadedRasterOverlayImage > + loadTileImage + classCesiumRasterOverlays_1_1RasterOverlayTileProvider.html + a5bfe846313b0e71a32714a3b516df419 + (RasterOverlayTile &overlayTile)=0 + + + CesiumAsync::Future< LoadedRasterOverlayImage > + loadTileImageFromUrl + classCesiumRasterOverlays_1_1RasterOverlayTileProvider.html + a7868fdf11208fdebe3abc86a783fe471 + (const std::string &url, const std::vector< CesiumAsync::IAssetAccessor::THeader > &headers={}, LoadTileImageFromUrlOptions &&options={}) const + + + + CesiumRasterOverlays::RasterOverlayUtilities + structCesiumRasterOverlays_1_1RasterOverlayUtilities.html + + static std::optional< RasterOverlayDetails > + createRasterOverlayTextureCoordinates + structCesiumRasterOverlays_1_1RasterOverlayUtilities.html + ab2252ea24698558a1a9a10b1f4962d75 + (CesiumGltf::Model &gltf, const glm::dmat4 &modelToEcefTransform, const std::optional< CesiumGeospatial::GlobeRectangle > &globeRectangle, std::vector< CesiumGeospatial::Projection > &&projections, bool invertVCoordinate=false, const std::string_view &textureCoordinateAttributeBaseName=DEFAULT_TEXTURE_COORDINATE_BASE_NAME, int32_t firstTextureCoordinateID=0) + + + static std::optional< CesiumGltf::Model > + upsampleGltfForRasterOverlays + structCesiumRasterOverlays_1_1RasterOverlayUtilities.html + a1fd281b14966000de37d080c10ebdad1 + (const CesiumGltf::Model &parentModel, CesiumGeometry::UpsampledQuadtreeNode childID, bool hasInvertedVCoordinate=false, const std::string_view &textureCoordinateAttributeBaseName=DEFAULT_TEXTURE_COORDINATE_BASE_NAME, int32_t textureCoordinateIndex=0, const CesiumGeospatial::Ellipsoid &ellipsoid=CesiumGeospatial::Ellipsoid::WGS84) + + + static glm::dvec2 + computeDesiredScreenPixels + structCesiumRasterOverlays_1_1RasterOverlayUtilities.html + af46af6a356dba5f55d7caf4f03c6a244 + (double geometricError, double maximumScreenSpaceError, const CesiumGeospatial::Projection &projection, const CesiumGeometry::Rectangle &rectangle, const CesiumGeospatial::Ellipsoid &ellipsoid=CesiumGeospatial::Ellipsoid::WGS84) + + + static glm::dvec4 + computeTranslationAndScale + structCesiumRasterOverlays_1_1RasterOverlayUtilities.html + a9d7a7ba3186d931fc0031072671fa80e + (const CesiumGeometry::Rectangle &geometryRectangle, const CesiumGeometry::Rectangle &overlayRectangle) + + + static constexpr std::string_view + DEFAULT_TEXTURE_COORDINATE_BASE_NAME + structCesiumRasterOverlays_1_1RasterOverlayUtilities.html + a39803c90ec7da0d0b2574725bede9450 + + + + + CesiumGeometry::Ray + classCesiumGeometry_1_1Ray.html + + + Ray + classCesiumGeometry_1_1Ray.html + ab66d17c4f41b2ca56e933617f84bb969 + (const glm::dvec3 &origin, const glm::dvec3 &direction) + + + const glm::dvec3 & + getOrigin + classCesiumGeometry_1_1Ray.html + a46bd95cf3fdea1339b0149ba8ff3c24b + () const noexcept + + + const glm::dvec3 & + getDirection + classCesiumGeometry_1_1Ray.html + a7ff1489e6569d32e98a4a57d41a4d187 + () const noexcept + + + glm::dvec3 + pointFromDistance + classCesiumGeometry_1_1Ray.html + a39610cabeb31291c57b3f6f21be299e1 + (double distance) const noexcept + + + Ray + transform + classCesiumGeometry_1_1Ray.html + aaf41ca456d02519a2cdb18ac79f46ed4 + (const glm::dmat4x4 &transformation) const noexcept + + + Ray + operator- + classCesiumGeometry_1_1Ray.html + aa15fb4fedde96028a34546bd5df7757c + () const noexcept + + + + CesiumGltfContent::GltfUtilities::RayGltfHit + structCesiumGltfContent_1_1GltfUtilities_1_1RayGltfHit.html + + glm::dvec3 + primitivePoint + structCesiumGltfContent_1_1GltfUtilities_1_1RayGltfHit.html + a954134ca80bca43339dc63afbccf6728 + + + + glm::dmat4x4 + primitiveToWorld + structCesiumGltfContent_1_1GltfUtilities_1_1RayGltfHit.html + a3c39e24639dbe537f0efa047a41ed8e9 + + + + glm::dvec3 + worldPoint + structCesiumGltfContent_1_1GltfUtilities_1_1RayGltfHit.html + ac61a10a7705da35397b89708eb70da02 + + + + double + rayToWorldPointDistanceSq + structCesiumGltfContent_1_1GltfUtilities_1_1RayGltfHit.html + aa8a5b24023d9e9db8a3e7364992c3704 + + + + int32_t + meshId + structCesiumGltfContent_1_1GltfUtilities_1_1RayGltfHit.html + a430f4d777c29880330a8a05f653835ba + + + + int32_t + primitiveId + structCesiumGltfContent_1_1GltfUtilities_1_1RayGltfHit.html + af0bdf9b5530146351f9f2ad068a5ed74 + + + + + CesiumJsonReader::ReadJsonResult + structCesiumJsonReader_1_1ReadJsonResult.html + typename T + + std::optional< T > + value + structCesiumJsonReader_1_1ReadJsonResult.html + a3eba52f2011ee9ea93feeb0b98f86ebf + + + + std::vector< std::string > + errors + structCesiumJsonReader_1_1ReadJsonResult.html + aa55bca0fa0452c7235e6f4978f90f182 + + + + std::vector< std::string > + warnings + structCesiumJsonReader_1_1ReadJsonResult.html + a7bd40c4abc675d1c8deb6fc40e03f1a5 + + + + + CesiumGeometry::Rectangle + structCesiumGeometry_1_1Rectangle.html + + constexpr + Rectangle + structCesiumGeometry_1_1Rectangle.html + a3bc4bbcd21f3db197b35537d5463f821 + () noexcept + + + constexpr + Rectangle + structCesiumGeometry_1_1Rectangle.html + ae7522d89948c2679bdfee4e51b3396fe + (double minimumX_, double minimumY_, double maximumX_, double maximumY_) noexcept + + + bool + contains + structCesiumGeometry_1_1Rectangle.html + a6927eb98410e526eb41472b3ca569b58 + (const glm::dvec2 &position) const noexcept + + + bool + overlaps + structCesiumGeometry_1_1Rectangle.html + a1f7e430f093fb22897d25e04cb2379bb + (const Rectangle &other) const noexcept + + + bool + fullyContains + structCesiumGeometry_1_1Rectangle.html + aa618c049449d9359d33a823b2e51feea + (const Rectangle &other) const noexcept + + + double + computeSignedDistance + structCesiumGeometry_1_1Rectangle.html + aea71430209dd7f8ed3923577df290cca + (const glm::dvec2 &position) const noexcept + + + constexpr glm::dvec2 + getLowerLeft + structCesiumGeometry_1_1Rectangle.html + a48ab01e1a1aba2ce84a3882b3544310a + () const noexcept + + + constexpr glm::dvec2 + getLowerRight + structCesiumGeometry_1_1Rectangle.html + acb17e81232c970d102ec961dfa47a3f8 + () const noexcept + + + constexpr glm::dvec2 + getUpperLeft + structCesiumGeometry_1_1Rectangle.html + afe0bade9d0a52df34a6fa2e318f51dc7 + () const noexcept + + + constexpr glm::dvec2 + getUpperRight + structCesiumGeometry_1_1Rectangle.html + aee7b65c466007bfa2d226058cf2b64ce + () const noexcept + + + constexpr glm::dvec2 + getCenter + structCesiumGeometry_1_1Rectangle.html + aba8697d38edc8e835792fed5836127a5 + () const noexcept + + + constexpr double + computeWidth + structCesiumGeometry_1_1Rectangle.html + aafbd20eea02cb0157bf0d53baa634ee8 + () const noexcept + + + constexpr double + computeHeight + structCesiumGeometry_1_1Rectangle.html + a99e0e10e2b92f3a65e78ca443f4d1595 + () const noexcept + + + std::optional< Rectangle > + computeIntersection + structCesiumGeometry_1_1Rectangle.html + acba0b05e4ef65a8711d701bc3e9fea36 + (const Rectangle &other) const noexcept + + + Rectangle + computeUnion + structCesiumGeometry_1_1Rectangle.html + a72ac71e3b428705b682f9067d478b3d7 + (const Rectangle &other) const noexcept + + + double + minimumX + structCesiumGeometry_1_1Rectangle.html + a494c2d54131f215bcd8dbe875613e4db + + + + double + minimumY + structCesiumGeometry_1_1Rectangle.html + a8a8f9ec46b0fe8c2c74c7dae7e3792cb + + + + double + maximumX + structCesiumGeometry_1_1Rectangle.html + a82066d9cd4610005e2961e968a16996a + + + + double + maximumY + structCesiumGeometry_1_1Rectangle.html + a78360915407afd44feaa4e7f4a6276b5 + + + + + CesiumUtility::ReferenceCounted + classCesiumUtility_1_1ReferenceCounted.html + typename T + bool isThreadSafe + + void + addReference + classCesiumUtility_1_1ReferenceCounted.html + a955625dc54f776fab3e9d45c848ef857 + () const + + + void + releaseReference + classCesiumUtility_1_1ReferenceCounted.html + a7436f0e57d27519bc78b9b959e856f23 + () const + + + std::int32_t + getReferenceCount + classCesiumUtility_1_1ReferenceCounted.html + a035eb60ffe7896943b5b11b153820b0f + () const noexcept + + + + Cesium3DTiles::Tile::Refine + structCesium3DTiles_1_1Tile_1_1Refine.html + + static const std::string + ADD + structCesium3DTiles_1_1Tile_1_1Refine.html + aed2283b99f5a26f9944ed07f781d8162 + + + + static const std::string + REPLACE + structCesium3DTiles_1_1Tile_1_1Refine.html + ac8a25bde40728d331cd488e701b245bf + + + + + CesiumIonClient::Response + structCesiumIonClient_1_1Response.html + typename T + + + Response + structCesiumIonClient_1_1Response.html + ae9c97526f77c80b5abdf265d251a209c + () + + + + Response + structCesiumIonClient_1_1Response.html + a6d637acc5f04d424e62e8374f42dda8c + (const std::shared_ptr< CesiumAsync::IAssetRequest > &pRequest, T &&value) + + + + Response + structCesiumIonClient_1_1Response.html + a425851c322ec6139ae7ad48dfea0d345 + (T &&value, uint16_t httpStatusCode, const std::string &errorCode, const std::string &errorMessage) + + + + Response + structCesiumIonClient_1_1Response.html + a9e27898b42670e9dfd59fd3338067180 + (uint16_t httpStatusCode, const std::string &errorCode, const std::string &errorMessage) + + + std::optional< T > + value + structCesiumIonClient_1_1Response.html + a289ce723863cca540af86b2e7c7b57bf + + + + uint16_t + httpStatusCode + structCesiumIonClient_1_1Response.html + a7834dc073b37d8898b76b0d3e06c3af3 + + + + std::string + errorCode + structCesiumIonClient_1_1Response.html + a45697a5eafdea79506923fb3cc6eea3e + + + + std::string + errorMessage + structCesiumIonClient_1_1Response.html + acd83982b5a97b041807f8edd009b2ae3 + + + + std::optional< std::string > + nextPageUrl + structCesiumIonClient_1_1Response.html + ae4a1b4a14fa508931b59170533eeb623 + + + + std::optional< std::string > + previousPageUrl + structCesiumIonClient_1_1Response.html + ac7a2442a1f888c89711d4cdf887edb1c + + + + + CesiumUtility::Result + structCesiumUtility_1_1Result.html + typename T + + + Result + structCesiumUtility_1_1Result.html + acae1ec189646a371b39d837690757ea4 + (T value_) noexcept + + + + Result + structCesiumUtility_1_1Result.html + a40fede80c4f1f12b3a61effd3147a1e6 + (T value_, ErrorList errors_) noexcept + + + + Result + structCesiumUtility_1_1Result.html + a17d5b1bbefd026b78beb3d653ce07109 + (ErrorList errors_) noexcept + + + std::optional< T > + value + structCesiumUtility_1_1Result.html + a9f155d7839d04f332236b062566f87ff + + + + ErrorList + errors + structCesiumUtility_1_1Result.html + a338e8a5b6f104af2b4632e722bfa1d35 + + + + + CesiumUtility::Result< CesiumUtility::IntrusivePointer< T > > + structCesiumUtility_1_1Result_3_01CesiumUtility_1_1IntrusivePointer_3_01T_01_4_01_4.html + typename T + + + Result + structCesiumUtility_1_1Result_3_01CesiumUtility_1_1IntrusivePointer_3_01T_01_4_01_4.html + a173b37f7cf54969ee8b05714b67ce5a7 + (CesiumUtility::IntrusivePointer< T > pValue_) noexcept + + + + Result + structCesiumUtility_1_1Result_3_01CesiumUtility_1_1IntrusivePointer_3_01T_01_4_01_4.html + a8d5443e64e4cd088e1b4fce17bf25c91 + (CesiumUtility::IntrusivePointer< T > pValue_, ErrorList errors_) noexcept + + + + Result + structCesiumUtility_1_1Result_3_01CesiumUtility_1_1IntrusivePointer_3_01T_01_4_01_4.html + acc541d5dd2676d6a4001083d191bef67 + (ErrorList errors_) noexcept + + + CesiumUtility::IntrusivePointer< T > + pValue + structCesiumUtility_1_1Result_3_01CesiumUtility_1_1IntrusivePointer_3_01T_01_4_01_4.html + a172734e61b95a527fe5ece5e1ac47912 + + + + ErrorList + errors + structCesiumUtility_1_1Result_3_01CesiumUtility_1_1IntrusivePointer_3_01T_01_4_01_4.html + a608465d96c7a99de8d385bba4d4277c9 + + + + + CesiumGeospatial::S2CellBoundingVolume + classCesiumGeospatial_1_1S2CellBoundingVolume.html + + + S2CellBoundingVolume + classCesiumGeospatial_1_1S2CellBoundingVolume.html + aa7b7f04b83e1730ea0f5eb5af7021ee9 + (const S2CellID &cellID, double minimumHeight, double maximumHeight, const CesiumGeospatial::Ellipsoid &ellipsoid=CesiumGeospatial::Ellipsoid::WGS84) + + + const S2CellID & + getCellID + classCesiumGeospatial_1_1S2CellBoundingVolume.html + a677d21132cf789948d836f32dd09b48f + () const + + + double + getMinimumHeight + classCesiumGeospatial_1_1S2CellBoundingVolume.html + ae1803669fedc87d6149c1dfe099ae2bb + () const noexcept + + + double + getMaximumHeight + classCesiumGeospatial_1_1S2CellBoundingVolume.html + a7cc1ffc2839231864cde9bbed3c3578b + () const noexcept + + + glm::dvec3 + getCenter + classCesiumGeospatial_1_1S2CellBoundingVolume.html + a64ed57b43e1b59ba7b86afd3e4d779e7 + () const noexcept + + + std::span< const glm::dvec3 > + getVertices + classCesiumGeospatial_1_1S2CellBoundingVolume.html + a2d45d7c8a1ba21b80a703a4405f32c28 + () const noexcept + + + CesiumGeometry::CullingResult + intersectPlane + classCesiumGeospatial_1_1S2CellBoundingVolume.html + aa77f80b13402a06433bf82a33ed14a4e + (const CesiumGeometry::Plane &plane) const noexcept + + + double + computeDistanceSquaredToPosition + classCesiumGeospatial_1_1S2CellBoundingVolume.html + a3c22a29ed4cd034a4c329b22acffb524 + (const glm::dvec3 &position) const noexcept + + + std::span< const CesiumGeometry::Plane > + getBoundingPlanes + classCesiumGeospatial_1_1S2CellBoundingVolume.html + a4eeb8891561a56e564805a2d98ad84c6 + () const noexcept + + + BoundingRegion + computeBoundingRegion + classCesiumGeospatial_1_1S2CellBoundingVolume.html + a31d656a823d2c5d1f22940283717089d + (const CesiumGeospatial::Ellipsoid &ellipsoid=CesiumGeospatial::Ellipsoid::WGS84) const noexcept + + + + CesiumGeospatial::S2CellID + classCesiumGeospatial_1_1S2CellID.html + + + S2CellID + classCesiumGeospatial_1_1S2CellID.html + ad327fbc072888f8fb603a7e0f05baa26 + (uint64_t id) + + + bool + isValid + classCesiumGeospatial_1_1S2CellID.html + aad4c3af8b0c895b4bfdc48d0334eb179 + () const + + + uint64_t + getID + classCesiumGeospatial_1_1S2CellID.html + aab2e12e860e66ca6941baabb7ed9d3fb + () const + + + std::string + toToken + classCesiumGeospatial_1_1S2CellID.html + a39259750b0f78badab43a7199e5f8371 + () const + + + int32_t + getLevel + classCesiumGeospatial_1_1S2CellID.html + a140348e8861ed4418f22e3c2d9aa17ef + () const + + + uint8_t + getFace + classCesiumGeospatial_1_1S2CellID.html + ad4d6815652ed8a0124afa574f9753046 + () const + + + Cartographic + getCenter + classCesiumGeospatial_1_1S2CellID.html + a11b5a96e419df4be2e6b71b24c09dd7e + () const + + + std::array< Cartographic, 4 > + getVertices + classCesiumGeospatial_1_1S2CellID.html + abd1d1d147e1f4b09bd97892f8d3ad8c3 + () const + + + S2CellID + getParent + classCesiumGeospatial_1_1S2CellID.html + abb976e3b1951a723100395ac91b44909 + () const + + + S2CellID + getChild + classCesiumGeospatial_1_1S2CellID.html + a3bc9be76dd28e0f6b8e445daaa96732f + (size_t index) const + + + GlobeRectangle + computeBoundingRectangle + classCesiumGeospatial_1_1S2CellID.html + a4120f289177bb8cc56c10b83a9617416 + () const + + + static S2CellID + fromToken + classCesiumGeospatial_1_1S2CellID.html + a1832656037a1ea908347c675fe13ccfb + (const std::string_view &token) + + + static S2CellID + fromFaceLevelPosition + classCesiumGeospatial_1_1S2CellID.html + a2583cbd4ef030ee1d221e641f5ee7bac + (uint8_t face, uint32_t level, uint64_t position) + + + static S2CellID + fromQuadtreeTileID + classCesiumGeospatial_1_1S2CellID.html + af0e38a47f20eeda06fedabac4a639e96 + (uint8_t face, const CesiumGeometry::QuadtreeTileID &quadtreeTileID) + + + + Cesium3DTilesSelection::SampleHeightResult + structCesium3DTilesSelection_1_1SampleHeightResult.html + + std::vector< CesiumGeospatial::Cartographic > + positions + structCesium3DTilesSelection_1_1SampleHeightResult.html + a78877d5047b9de9938fc6c672380f829 + + + + std::vector< bool > + sampleSuccess + structCesium3DTilesSelection_1_1SampleHeightResult.html + aa4ff6449e43ee1c234b5ea7707be1a01 + + + + std::vector< std::string > + warnings + structCesium3DTilesSelection_1_1SampleHeightResult.html + a0543b75882077a019ac0e604d2b77128 + + + + + CesiumGltf::Sampler + structCesiumGltf_1_1Sampler.html + CesiumGltf::NamedObject + CesiumGltf::Sampler::MagFilter + CesiumGltf::Sampler::MinFilter + CesiumGltf::Sampler::WrapS + CesiumGltf::Sampler::WrapT + + int64_t + getSizeBytes + structCesiumGltf_1_1Sampler.html + a24f0e0a6d946ba4c56bb3b81b0ddf4ca + () const + + + std::optional< int32_t > + magFilter + structCesiumGltf_1_1Sampler.html + a3a5c1185e2d6fd4f88e7218ff0450e74 + + + + std::optional< int32_t > + minFilter + structCesiumGltf_1_1Sampler.html + aea0fd5ea486dc282bfcd2578527802a5 + + + + int32_t + wrapS + structCesiumGltf_1_1Sampler.html + a226a91d0a95deef933bc7f82e62690a8 + + + + int32_t + wrapT + structCesiumGltf_1_1Sampler.html + a8d9210f9c3a440daffd469061c64b1e9 + + + + static constexpr const char * + TypeName + structCesiumGltf_1_1Sampler.html + ad4fa47e4b712d2393aeac6adbebc08c0 + + + + + CesiumGltfReader::SamplerReader + classCesiumGltfReader_1_1SamplerReader.html + + + SamplerReader + classCesiumGltfReader_1_1SamplerReader.html + adb654f0d20d2ab79b2552d9addbe0d60 + () + + + CesiumJsonReader::JsonReaderOptions & + getOptions + classCesiumGltfReader_1_1SamplerReader.html + a3f30b16b48645b15ac91a5ee79c8860a + () + + + const CesiumJsonReader::JsonReaderOptions & + getOptions + classCesiumGltfReader_1_1SamplerReader.html + a299e8b9c0e7742ecd09cb73b9920c823 + () const + + + CesiumJsonReader::ReadJsonResult< CesiumGltf::Sampler > + readFromJson + classCesiumGltfReader_1_1SamplerReader.html + a08c0f4cf6f932386389c8684b6bd48b8 + (const std::span< const std::byte > &data) const + + + CesiumJsonReader::ReadJsonResult< CesiumGltf::Sampler > + readFromJson + classCesiumGltfReader_1_1SamplerReader.html + af878ff9e9c509669196961daf3e5da95 + (const rapidjson::Value &value) const + + + CesiumJsonReader::ReadJsonResult< std::vector< CesiumGltf::Sampler > > + readArrayFromJson + classCesiumGltfReader_1_1SamplerReader.html + abc482c51a1a38443887feb458f95ee48 + (const rapidjson::Value &value) const + + + + CesiumGltf::AccessorTypes::SCALAR + structCesiumGltf_1_1AccessorTypes_1_1SCALAR.html + typename T + + T + value + structCesiumGltf_1_1AccessorTypes_1_1SCALAR.html + aaa45ef9893bb4edef5f17dc6d033a269 + [1] + + + + CesiumGltf::Scene + structCesiumGltf_1_1Scene.html + CesiumGltf::NamedObject + + int64_t + getSizeBytes + structCesiumGltf_1_1Scene.html + aed7c4aa48c82498dc60415ca0d7d0afe + () const + + + std::vector< int32_t > + nodes + structCesiumGltf_1_1Scene.html + a373fc6ad0803d0e0b6210acc2b1fbacf + + + + static constexpr const char * + TypeName + structCesiumGltf_1_1Scene.html + adee07796891bc44abb8d653c56bc52f0 + + + + + CesiumGltfReader::SceneReader + classCesiumGltfReader_1_1SceneReader.html + + + SceneReader + classCesiumGltfReader_1_1SceneReader.html + ae88c96f7bfecc119592f9a2f9cfb483f + () + + + CesiumJsonReader::JsonReaderOptions & + getOptions + classCesiumGltfReader_1_1SceneReader.html + abf0e9979e6ebe91458ef71b50bea874f + () + + + const CesiumJsonReader::JsonReaderOptions & + getOptions + classCesiumGltfReader_1_1SceneReader.html + a6e88f1b24d79648bdd323cb3493903ab + () const + + + CesiumJsonReader::ReadJsonResult< CesiumGltf::Scene > + readFromJson + classCesiumGltfReader_1_1SceneReader.html + a61f08d911c5f6b8be9ebd0663c289be6 + (const std::span< const std::byte > &data) const + + + CesiumJsonReader::ReadJsonResult< CesiumGltf::Scene > + readFromJson + classCesiumGltfReader_1_1SceneReader.html + a019ef84f8b3287ddfbe844cceabd7d2a + (const rapidjson::Value &value) const + + + CesiumJsonReader::ReadJsonResult< std::vector< CesiumGltf::Scene > > + readArrayFromJson + classCesiumGltfReader_1_1SceneReader.html + a5f6e08cc6b3379badbf40d34acf1e939 + (const rapidjson::Value &value) const + + + + Cesium3DTiles::Schema + structCesium3DTiles_1_1Schema.html + CesiumUtility::ExtensibleObject + + int64_t + getSizeBytes + structCesium3DTiles_1_1Schema.html + a3d3ad58fb5e7d1e27bf5470dbde36cf1 + () const + + + std::string + id + structCesium3DTiles_1_1Schema.html + a40f99de395f77a49594e98dff926db18 + + + + std::optional< std::string > + name + structCesium3DTiles_1_1Schema.html + afe6f06df09a4e5715301570065591e55 + + + + std::optional< std::string > + description + structCesium3DTiles_1_1Schema.html + a3c7a3096df0eaf23a052b2641c32743b + + + + std::optional< std::string > + version + structCesium3DTiles_1_1Schema.html + ae783daf55df5b5b11926e6ced4eb63ea + + + + std::unordered_map< std::string, Cesium3DTiles::Class > + classes + structCesium3DTiles_1_1Schema.html + af83cb1443fda0705d73f8540b2969746 + + + + std::unordered_map< std::string, Cesium3DTiles::Enum > + enums + structCesium3DTiles_1_1Schema.html + a909e0dc59963d4e77db7d30177f9a8f7 + + + + static constexpr const char * + TypeName + structCesium3DTiles_1_1Schema.html + a41e4cadb9fc1e6a33cd7551a4c4c27c7 + + + + + CesiumGltf::Schema + structCesiumGltf_1_1Schema.html + CesiumUtility::SharedAsset< Schema > + + int64_t + getSizeBytes + structCesiumGltf_1_1Schema.html + a4484eb5fc436b884206cbaa581a1cd1f + () const + + + std::string + id + structCesiumGltf_1_1Schema.html + a53939a008ca3fd11c1c77361eaa5f9d2 + + + + std::optional< std::string > + name + structCesiumGltf_1_1Schema.html + afa571d7ee5e21c17e2c32e934157c4ac + + + + std::optional< std::string > + description + structCesiumGltf_1_1Schema.html + a6d1539722eb552753ae48c5dc6b431c0 + + + + std::optional< std::string > + version + structCesiumGltf_1_1Schema.html + abbc96305da9f2dcd8911c1504824d36c + + + + std::unordered_map< std::string, CesiumGltf::Class > + classes + structCesiumGltf_1_1Schema.html + a9bbd6665a50da252283976a60a971738 + + + + std::unordered_map< std::string, CesiumGltf::Enum > + enums + structCesiumGltf_1_1Schema.html + a977a5958d938c64fabc68b852dc7b0a9 + + + + static constexpr const char * + TypeName + structCesiumGltf_1_1Schema.html + a95e1db2df895ef5106fd2e2124c81f04 + + + + + Cesium3DTilesReader::SchemaReader + classCesium3DTilesReader_1_1SchemaReader.html + + + SchemaReader + classCesium3DTilesReader_1_1SchemaReader.html + a7d8c4ea929a0e0f42e90290f5c5b1ab0 + () + + + CesiumJsonReader::JsonReaderOptions & + getOptions + classCesium3DTilesReader_1_1SchemaReader.html + ae602d1a077be556b73db2c89ae19e270 + () + + + const CesiumJsonReader::JsonReaderOptions & + getOptions + classCesium3DTilesReader_1_1SchemaReader.html + aed8544e40a2c6e533179a020a241cbdf + () const + + + CesiumJsonReader::ReadJsonResult< Cesium3DTiles::Schema > + readFromJson + classCesium3DTilesReader_1_1SchemaReader.html + a35ef26629d85f38365af93a4ced1c480 + (const std::span< const std::byte > &data) const + + + CesiumJsonReader::ReadJsonResult< Cesium3DTiles::Schema > + readFromJson + classCesium3DTilesReader_1_1SchemaReader.html + a2077ef85c4ff727821be8b95a204eb8b + (const rapidjson::Value &value) const + + + CesiumJsonReader::ReadJsonResult< std::vector< Cesium3DTiles::Schema > > + readArrayFromJson + classCesium3DTilesReader_1_1SchemaReader.html + a375f606de9f7fd1267e79ead5fd6e396 + (const rapidjson::Value &value) const + + + + CesiumGltfReader::SchemaReader + classCesiumGltfReader_1_1SchemaReader.html + + + SchemaReader + classCesiumGltfReader_1_1SchemaReader.html + abe894e9ff23b54f384ec30ea0e436a78 + () + + + CesiumJsonReader::JsonReaderOptions & + getOptions + classCesiumGltfReader_1_1SchemaReader.html + a23b6db2424708db0ef146739520095d1 + () + + + const CesiumJsonReader::JsonReaderOptions & + getOptions + classCesiumGltfReader_1_1SchemaReader.html + a89644e617d5debba3d71743aa3f20acd + () const + + + CesiumJsonReader::ReadJsonResult< CesiumGltf::Schema > + readFromJson + classCesiumGltfReader_1_1SchemaReader.html + ad3aecc9535e7aba187adad53ceaacdba + (const std::span< const std::byte > &data) const + + + CesiumJsonReader::ReadJsonResult< CesiumGltf::Schema > + readFromJson + classCesiumGltfReader_1_1SchemaReader.html + a8fa2b11caf98c58dcbd355aa95d54e9e + (const rapidjson::Value &value) const + + + CesiumJsonReader::ReadJsonResult< std::vector< CesiumGltf::Schema > > + readArrayFromJson + classCesiumGltfReader_1_1SchemaReader.html + ac4a6db5e08216715e11a9246ec42b663 + (const rapidjson::Value &value) const + + + + Cesium3DTilesWriter::SchemaWriter + classCesium3DTilesWriter_1_1SchemaWriter.html + + + SchemaWriter + classCesium3DTilesWriter_1_1SchemaWriter.html + a4c5cf28711ba9450bda24d95ef5558f8 + () + + + CesiumJsonWriter::ExtensionWriterContext & + getExtensions + classCesium3DTilesWriter_1_1SchemaWriter.html + ad7afc33ccb8b95db14be959be80e5e54 + () + + + const CesiumJsonWriter::ExtensionWriterContext & + getExtensions + classCesium3DTilesWriter_1_1SchemaWriter.html + a3060a09a5f3f570308efc20be3f7c51c + () const + + + SchemaWriterResult + writeSchema + classCesium3DTilesWriter_1_1SchemaWriter.html + a51c325ddcfb06cb97554533cf319d175 + (const Cesium3DTiles::Schema &schema, const SchemaWriterOptions &options=SchemaWriterOptions()) const + + + + CesiumGltfWriter::SchemaWriter + classCesiumGltfWriter_1_1SchemaWriter.html + + + SchemaWriter + classCesiumGltfWriter_1_1SchemaWriter.html + aac54a64a3ff6b174e01ff208e6de636e + () + + + CesiumJsonWriter::ExtensionWriterContext & + getExtensions + classCesiumGltfWriter_1_1SchemaWriter.html + a20626253ea826cdab50fbc5f9bf84cc8 + () + + + const CesiumJsonWriter::ExtensionWriterContext & + getExtensions + classCesiumGltfWriter_1_1SchemaWriter.html + afe15a622d0cea9f36aa89f5d28478018 + () const + + + SchemaWriterResult + writeSchema + classCesiumGltfWriter_1_1SchemaWriter.html + a49c76f70dfda56da23ae074d7f92a3e6 + (const CesiumGltf::Schema &schema, const SchemaWriterOptions &options=SchemaWriterOptions()) const + + + + Cesium3DTilesWriter::SchemaWriterOptions + structCesium3DTilesWriter_1_1SchemaWriterOptions.html + + bool + prettyPrint + structCesium3DTilesWriter_1_1SchemaWriterOptions.html + ad979d486df8ed8e04e68c2ddc8430d3d + + + + + CesiumGltfWriter::SchemaWriterOptions + structCesiumGltfWriter_1_1SchemaWriterOptions.html + + bool + prettyPrint + structCesiumGltfWriter_1_1SchemaWriterOptions.html + a8a64500d899d661ff13b5ec3bbf6166b + + + + + Cesium3DTilesWriter::SchemaWriterResult + structCesium3DTilesWriter_1_1SchemaWriterResult.html + + std::vector< std::byte > + schemaBytes + structCesium3DTilesWriter_1_1SchemaWriterResult.html + a5666322804b3eba6cc22e7f12929f8ff + + + + std::vector< std::string > + errors + structCesium3DTilesWriter_1_1SchemaWriterResult.html + af9a5c99607ed22c54556b3bd41b3212c + + + + std::vector< std::string > + warnings + structCesium3DTilesWriter_1_1SchemaWriterResult.html + ad3acef5445064ec69658254731c1b49d + + + + + CesiumGltfWriter::SchemaWriterResult + structCesiumGltfWriter_1_1SchemaWriterResult.html + + std::vector< std::byte > + schemaBytes + structCesiumGltfWriter_1_1SchemaWriterResult.html + aab39a4b7c921ebd644eb238f539cd60b + + + + std::vector< std::string > + errors + structCesiumGltfWriter_1_1SchemaWriterResult.html + af416afeb489552f47e749686870a88e0 + + + + std::vector< std::string > + warnings + structCesiumGltfWriter_1_1SchemaWriterResult.html + a7ee81098fd794f97b66a78cf73e1a2bd + + + + + CesiumUtility::ScopeGuard + classCesiumUtility_1_1ScopeGuard.html + typename ExitFunction + + + ScopeGuard + classCesiumUtility_1_1ScopeGuard.html + a3624559b6182768cac2301b6ee665593 + (ExitFunctionArg &&exitFunc) + + + + ScopeGuard + classCesiumUtility_1_1ScopeGuard.html + a5ecdd9048c09245628d47861130d51f4 + (ScopeGuard &&rhs) noexcept + + + ScopeGuard & + operator= + classCesiumUtility_1_1ScopeGuard.html + aec3942939f8395a59ce096a691db5998 + (ScopeGuard &&rhs) noexcept + + + + ~ScopeGuard + classCesiumUtility_1_1ScopeGuard.html + a25d0fd4eb4dbe885556ed0a656e26351 + () noexcept + + + void + release + classCesiumUtility_1_1ScopeGuard.html + a30c4c0c0fa269fe7b926bd8e093687f9 + () noexcept + + + + CesiumUtility::SharedAsset + classCesiumUtility_1_1SharedAsset.html + typename T + CesiumUtility::ExtensibleObject + + void + addReference + classCesiumUtility_1_1SharedAsset.html + abd68a83cfd8c6cc9b0a6b58df5c8b34e + () const noexcept + + + void + releaseReference + classCesiumUtility_1_1SharedAsset.html + a7bc83a9cb7d5a8ea47234677e0b2d20f + () const noexcept + + + const IDepotOwningAsset< T > * + getDepot + classCesiumUtility_1_1SharedAsset.html + aaa0896006292e8ae93ab746687621b15 + () const + + + IDepotOwningAsset< T > * + getDepot + classCesiumUtility_1_1SharedAsset.html + a73de94c723ea6998db1a61f801a10a63 + () + + + + SharedAsset + classCesiumUtility_1_1SharedAsset.html + a5dd0e706dda2c340d9b1bdb3898b85a2 + (const SharedAsset &rhs) + + + + SharedAsset + classCesiumUtility_1_1SharedAsset.html + acfd4aad1556eda49805e4d95d39c95d4 + (SharedAsset &&rhs) + + + SharedAsset & + operator= + classCesiumUtility_1_1SharedAsset.html + a7cdaf78bea2af3afcfab3bf3c5e487a4 + (const SharedAsset &rhs) + + + SharedAsset & + operator= + classCesiumUtility_1_1SharedAsset.html + a1b3ac872c0563ba379742167857d4e4b + (SharedAsset &&rhs) + + + + CesiumAsync::SharedAssetDepot + classCesiumAsync_1_1SharedAssetDepot.html + typename TAssetType + typename TAssetKey + CesiumUtility::ReferenceCounted< T, isThreadSafe > + CesiumUtility::IDepotOwningAsset< TAssetType > + + CesiumAsync::Future< CesiumUtility::ResultPointer< TAssetType > >( const AsyncSystem &asyncSystem, const std::shared_ptr< IAssetAccessor > &pAssetAccessor, const TAssetKey &key) + FactorySignature + classCesiumAsync_1_1SharedAssetDepot.html + a8a5e4a9a4e6781d14879a5e4cfa2fe40 + + + + + SharedAssetDepot + classCesiumAsync_1_1SharedAssetDepot.html + a919507c6c6f75d9cf9585848d83b79e2 + (std::function< FactorySignature > factory) + + + SharedFuture< CesiumUtility::ResultPointer< TAssetType > > + getOrCreate + classCesiumAsync_1_1SharedAssetDepot.html + aee26acd15bfdfd57e61d53c85e449606 + (const AsyncSystem &asyncSystem, const std::shared_ptr< IAssetAccessor > &pAssetAccessor, const TAssetKey &assetKey) + + + size_t + getAssetCount + classCesiumAsync_1_1SharedAssetDepot.html + a8216f9b70deefca979292b27f7cbbc81 + () const + + + size_t + getActiveAssetCount + classCesiumAsync_1_1SharedAssetDepot.html + a31c76425b3279586ad7b1d9ee8480af4 + () const + + + size_t + getInactiveAssetCount + classCesiumAsync_1_1SharedAssetDepot.html + a7382df787322033eca550a7fae0917f4 + () const + + + int64_t + getInactiveAssetTotalSizeBytes + classCesiumAsync_1_1SharedAssetDepot.html + abc1539817cb5586837e9a709bbf863be + () const + + + int64_t + inactiveAssetSizeLimitBytes + classCesiumAsync_1_1SharedAssetDepot.html + ad8fc35520a923fad6b4576fc412d6282 + + + + + CesiumJsonReader::SharedAssetJsonHandler + classCesiumJsonReader_1_1SharedAssetJsonHandler.html + CesiumJsonReader::ExtensibleObjectJsonHandler + + + SharedAssetJsonHandler + classCesiumJsonReader_1_1SharedAssetJsonHandler.html + af2a29edc32db45004f2b97a7b2432617 + (const CesiumJsonReader::JsonReaderOptions &context) noexcept + + + void + reset + classCesiumJsonReader_1_1SharedAssetJsonHandler.html + afc4f8346f0f124576c20a1bee6a50696 + (IJsonHandler *pParent, CesiumUtility::ExtensibleObject *pObject) + + + IJsonHandler * + readObjectKeySharedAsset + classCesiumJsonReader_1_1SharedAssetJsonHandler.html + af80dcbd5c43eb3c1a24fc943ce29c76c + (const std::string &objectType, const std::string_view &str, CesiumUtility::ExtensibleObject &o) + + + + CesiumAsync::SharedFuture + classCesiumAsync_1_1SharedFuture.html + typename T + + CesiumImpl::ContinuationFutureType_t< Func, T > + thenInWorkerThread + classCesiumAsync_1_1SharedFuture.html + aedf0a9fdae314a2428e7022bd4efafe6 + (Func &&f) + + + CesiumImpl::ContinuationFutureType_t< Func, T > + thenInMainThread + classCesiumAsync_1_1SharedFuture.html + af0967ffb6aaca95bdad0819de9c0e815 + (Func &&f) + + + CesiumImpl::ContinuationFutureType_t< Func, T > + thenImmediately + classCesiumAsync_1_1SharedFuture.html + a1814ab5d4a5617a6a3cd425568fe1ac9 + (Func &&f) + + + CesiumImpl::ContinuationFutureType_t< Func, T > + thenInThreadPool + classCesiumAsync_1_1SharedFuture.html + a2f211b1de7600f2b53ee7976bac8a29b + (const ThreadPool &threadPool, Func &&f) + + + Future< T > + catchInMainThread + classCesiumAsync_1_1SharedFuture.html + a5fcd8c9ff524f0d9c1633f74628939b1 + (Func &&f) + + + Future< T > + catchImmediately + classCesiumAsync_1_1SharedFuture.html + af7b83c4f71f56185ae426ce71565ddfb + (Func &&f) + + + Future< std::tuple< TPassThrough..., T > > + thenPassThrough + classCesiumAsync_1_1SharedFuture.html + a87f58db57fabb4e29202055c2612375e + (TPassThrough &&... values) + + + const U & + wait + classCesiumAsync_1_1SharedFuture.html + a4955db02ccf67aa54865b9d50af7174c + () const + + + void + wait + classCesiumAsync_1_1SharedFuture.html + affc139ba3525c40cb8b0aae275737504 + () const + + + T + waitInMainThread + classCesiumAsync_1_1SharedFuture.html + a21d845a0aeb389cd635c9abd547cdf94 + () + + + bool + isReady + classCesiumAsync_1_1SharedFuture.html + a1d28c5bc83cb4a7f261d71c220215e28 + () const + + + + CesiumGeospatial::SimplePlanarEllipsoidCurve + classCesiumGeospatial_1_1SimplePlanarEllipsoidCurve.html + + glm::dvec3 + getPosition + classCesiumGeospatial_1_1SimplePlanarEllipsoidCurve.html + a0b8d22d019c4b16f568af2e04bd6ce5d + (double percentage, double additionalHeight=0.0) const + + + static std::optional< SimplePlanarEllipsoidCurve > + fromEarthCenteredEarthFixedCoordinates + classCesiumGeospatial_1_1SimplePlanarEllipsoidCurve.html + ab617cbab017e49a232c62dfa62693e67 + (const Ellipsoid &ellipsoid, const glm::dvec3 &sourceEcef, const glm::dvec3 &destinationEcef) + + + static std::optional< SimplePlanarEllipsoidCurve > + fromLongitudeLatitudeHeight + classCesiumGeospatial_1_1SimplePlanarEllipsoidCurve.html + a7ea1ccda4a0f04032d76afc865b5baa6 + (const Ellipsoid &ellipsoid, const Cartographic &source, const Cartographic &destination) + + + + CesiumGltf::Skin + structCesiumGltf_1_1Skin.html + CesiumGltf::NamedObject + + int64_t + getSizeBytes + structCesiumGltf_1_1Skin.html + aa78fca7f9e9c2151f41126eaeefce762 + () const + + + int32_t + inverseBindMatrices + structCesiumGltf_1_1Skin.html + abe472d8f00bfdcf5b35c303652ad2108 + + + + int32_t + skeleton + structCesiumGltf_1_1Skin.html + a61fca6d8e6b842d1f64525a06164b9cc + + + + std::vector< int32_t > + joints + structCesiumGltf_1_1Skin.html + a2b73e650f244d2f34475ba5b1f773bbf + + + + static constexpr const char * + TypeName + structCesiumGltf_1_1Skin.html + adde3975c79af1e4738c3ace0ac495fc3 + + + + + CesiumGltfReader::SkinReader + classCesiumGltfReader_1_1SkinReader.html + + + SkinReader + classCesiumGltfReader_1_1SkinReader.html + a55522e7814aa9ceb9700e65011709011 + () + + + CesiumJsonReader::JsonReaderOptions & + getOptions + classCesiumGltfReader_1_1SkinReader.html + a4daefce5d1d8b22489a396358fda9928 + () + + + const CesiumJsonReader::JsonReaderOptions & + getOptions + classCesiumGltfReader_1_1SkinReader.html + a100ed66c1c0b7853d8c4f537fa3aa0db + () const + + + CesiumJsonReader::ReadJsonResult< CesiumGltf::Skin > + readFromJson + classCesiumGltfReader_1_1SkinReader.html + a29a24ee032dce6d685bd2a4da1ff0137 + (const std::span< const std::byte > &data) const + + + CesiumJsonReader::ReadJsonResult< CesiumGltf::Skin > + readFromJson + classCesiumGltfReader_1_1SkinReader.html + a6ed449110bd31b857342976eecdc0395 + (const rapidjson::Value &value) const + + + CesiumJsonReader::ReadJsonResult< std::vector< CesiumGltf::Skin > > + readArrayFromJson + classCesiumGltfReader_1_1SkinReader.html + a147e7fd1bda459b9abb52d10462ec200 + (const rapidjson::Value &value) const + + + + CesiumGltfContent::SkirtMeshMetadata + structCesiumGltfContent_1_1SkirtMeshMetadata.html + + + SkirtMeshMetadata + structCesiumGltfContent_1_1SkirtMeshMetadata.html + aad0897e6320b02b13b6e95fc568b240a + () noexcept + + + static std::optional< SkirtMeshMetadata > + parseFromGltfExtras + structCesiumGltfContent_1_1SkirtMeshMetadata.html + a3b5bec557a78f66b4ef25c6a4ae823da + (const CesiumUtility::JsonValue::Object &extras) + + + static CesiumUtility::JsonValue::Object + createGltfExtras + structCesiumGltfContent_1_1SkirtMeshMetadata.html + acc987a9b182996a8f80dba0ced58c101 + (const SkirtMeshMetadata &skirt) + + + uint32_t + noSkirtIndicesBegin + structCesiumGltfContent_1_1SkirtMeshMetadata.html + abe9728fc2bab8f5596fd46bb357c97d4 + + + + uint32_t + noSkirtIndicesCount + structCesiumGltfContent_1_1SkirtMeshMetadata.html + a3be7d7d62e7704ac2f81c354e60f96a4 + + + + uint32_t + noSkirtVerticesBegin + structCesiumGltfContent_1_1SkirtMeshMetadata.html + ac700d548b53515862d72dd00d538fa35 + + + + uint32_t + noSkirtVerticesCount + structCesiumGltfContent_1_1SkirtMeshMetadata.html + adfc298d617cd213eff8c2c14b3434fe5 + + + + glm::dvec3 + meshCenter + structCesiumGltfContent_1_1SkirtMeshMetadata.html + af71557b005ca76ec7c1523e7f4b851e7 + + + + double + skirtWestHeight + structCesiumGltfContent_1_1SkirtMeshMetadata.html + a646572fe082c26644f31f805b5418723 + + + + double + skirtSouthHeight + structCesiumGltfContent_1_1SkirtMeshMetadata.html + a28180ec33f13c9fa6c8dd8734f2d261f + + + + double + skirtEastHeight + structCesiumGltfContent_1_1SkirtMeshMetadata.html + a927c9e24729feaf4d620dee1ffedc44e + + + + double + skirtNorthHeight + structCesiumGltfContent_1_1SkirtMeshMetadata.html + ae755b07c07fff5c13234f2e645c10add + + + + + CesiumAsync::SqliteCache + classCesiumAsync_1_1SqliteCache.html + CesiumAsync::ICacheDatabase + + + SqliteCache + classCesiumAsync_1_1SqliteCache.html + aabe77a8aba72c1af23c472554574b76e + (const std::shared_ptr< spdlog::logger > &pLogger, const std::string &databaseName, uint64_t maxItems=4096) + + + virtual std::optional< CacheItem > + getEntry + classCesiumAsync_1_1SqliteCache.html + a07a113ed14d2b6bf1e077eaed2278692 + (const std::string &key) const override + + + virtual bool + storeEntry + classCesiumAsync_1_1SqliteCache.html + a8d9d83d361b09e318171c2a61b9d1963 + (const std::string &key, std::time_t expiryTime, const std::string &url, const std::string &requestMethod, const HttpHeaders &requestHeaders, uint16_t statusCode, const HttpHeaders &responseHeaders, const std::span< const std::byte > &responseData) override + + + virtual bool + prune + classCesiumAsync_1_1SqliteCache.html + a5dbe831ece488bd2f2dedaa7e7ed057f + () override + + + virtual bool + clearAll + classCesiumAsync_1_1SqliteCache.html + aedba0351b6037a61ece3a5c65839b072 + () override + + + + CesiumAsync::SqliteHelper + structCesiumAsync_1_1SqliteHelper.html + + static SqliteStatementPtr + prepareStatement + structCesiumAsync_1_1SqliteHelper.html + a374991eb6cd2b2e8615e7d9ea8bb875b + (const SqliteConnectionPtr &pConnection, const std::string &sql) + + + + Cesium3DTiles::Statistics + structCesium3DTiles_1_1Statistics.html + CesiumUtility::ExtensibleObject + + int64_t + getSizeBytes + structCesium3DTiles_1_1Statistics.html + ad170ba5e18c1e52ba7355961761033e4 + () const + + + std::unordered_map< std::string, Cesium3DTiles::ClassStatistics > + classes + structCesium3DTiles_1_1Statistics.html + aacda90546960b4e42972191713bb40c3 + + + + static constexpr const char * + TypeName + structCesium3DTiles_1_1Statistics.html + acdc25c43aec798c3b0c3647df308c134 + + + + + Cesium3DTilesReader::StatisticsReader + classCesium3DTilesReader_1_1StatisticsReader.html + + + StatisticsReader + classCesium3DTilesReader_1_1StatisticsReader.html + afdc3c89a41ac64415e6452c148b6f9da + () + + + CesiumJsonReader::JsonReaderOptions & + getOptions + classCesium3DTilesReader_1_1StatisticsReader.html + aaa475b1fe3dee2e789de4874e27bb8df + () + + + const CesiumJsonReader::JsonReaderOptions & + getOptions + classCesium3DTilesReader_1_1StatisticsReader.html + afdbf96ff521197e6c8ecf5d6b236291d + () const + + + CesiumJsonReader::ReadJsonResult< Cesium3DTiles::Statistics > + readFromJson + classCesium3DTilesReader_1_1StatisticsReader.html + abedf69ad3a445aaaae5ce19fcf498ced + (const std::span< const std::byte > &data) const + + + CesiumJsonReader::ReadJsonResult< Cesium3DTiles::Statistics > + readFromJson + classCesium3DTilesReader_1_1StatisticsReader.html + a99848c4c31a72b0172bfe7b1d58781f1 + (const rapidjson::Value &value) const + + + CesiumJsonReader::ReadJsonResult< std::vector< Cesium3DTiles::Statistics > > + readArrayFromJson + classCesium3DTilesReader_1_1StatisticsReader.html + a40f5029d1f4917d70b08613789180686 + (const rapidjson::Value &value) const + + + + CesiumGltf::StatusFromAccessor + structCesiumGltf_1_1StatusFromAccessor.html + + AccessorViewStatus + operator() + structCesiumGltf_1_1StatusFromAccessor.html + a3127948676ed468e1ccbc22cb83979eb + (std::monostate) + + + AccessorViewStatus + operator() + structCesiumGltf_1_1StatusFromAccessor.html + ae4b5edea4859f4466996f32a4c7da871 + (const AccessorView< T > &value) + + + + CesiumUtility::StringHelpers + classCesiumUtility_1_1StringHelpers.html + + static std::string + toStringUtf8 + classCesiumUtility_1_1StringHelpers.html + a4020ce12cbf9a519f15b676922f49c2d + (const std::u8string &s) + + + + CesiumJsonReader::StringJsonHandler + classCesiumJsonReader_1_1StringJsonHandler.html + CesiumJsonReader::JsonHandler + + void + reset + classCesiumJsonReader_1_1StringJsonHandler.html + a4cf2f300be9461b0b846eed2cf7d4092 + (IJsonHandler *pParent, std::string *pString) + + + std::string * + getObject + classCesiumJsonReader_1_1StringJsonHandler.html + a5349c2c8443f246da76b707244c3494d + () noexcept + + + virtual IJsonHandler * + readString + classCesiumJsonReader_1_1StringJsonHandler.html + a8a8157d4c138c98c5bb3441af5bad0f7 + (const std::string_view &str) override + + + + Cesium3DTiles::PropertyTableProperty::StringOffsetType + structCesium3DTiles_1_1PropertyTableProperty_1_1StringOffsetType.html + + static const std::string + UINT8 + structCesium3DTiles_1_1PropertyTableProperty_1_1StringOffsetType.html + a568bcc78a4bd26a75834dda03d1239d0 + + + + static const std::string + UINT16 + structCesium3DTiles_1_1PropertyTableProperty_1_1StringOffsetType.html + a98606e7b85c7759553bfcb6f35ab5d73 + + + + static const std::string + UINT32 + structCesium3DTiles_1_1PropertyTableProperty_1_1StringOffsetType.html + aee77f606ca3736a429ed5f28d0519dfc + + + + static const std::string + UINT64 + structCesium3DTiles_1_1PropertyTableProperty_1_1StringOffsetType.html + a6a9e178b1c20527950d7b4bf8b04d51b + + + + + CesiumGltf::PropertyTableProperty::StringOffsetType + structCesiumGltf_1_1PropertyTableProperty_1_1StringOffsetType.html + + static const std::string + UINT8 + structCesiumGltf_1_1PropertyTableProperty_1_1StringOffsetType.html + ac63aed39efc73664b027aa0013903a6d + + + + static const std::string + UINT16 + structCesiumGltf_1_1PropertyTableProperty_1_1StringOffsetType.html + a050ae6ded11028f0a09337ae2ba6924b + + + + static const std::string + UINT32 + structCesiumGltf_1_1PropertyTableProperty_1_1StringOffsetType.html + a6f49e48eedc07003503382e5583dcb29 + + + + static const std::string + UINT64 + structCesiumGltf_1_1PropertyTableProperty_1_1StringOffsetType.html + afcbe745649a1376e67b2447f40bcbd7d + + + + + Cesium3DTiles::ImplicitTiling::SubdivisionScheme + structCesium3DTiles_1_1ImplicitTiling_1_1SubdivisionScheme.html + + static const std::string + QUADTREE + structCesium3DTiles_1_1ImplicitTiling_1_1SubdivisionScheme.html + a7459c9e59a647bf2333214cb5e4173ec + + + + static const std::string + OCTREE + structCesium3DTiles_1_1ImplicitTiling_1_1SubdivisionScheme.html + a9aebef1220de0f6c82f80ac0ee3b7e83 + + + + + Cesium3DTiles::Subtree + structCesium3DTiles_1_1Subtree.html + CesiumUtility::ExtensibleObject + + int64_t + getSizeBytes + structCesium3DTiles_1_1Subtree.html + a57f70c7f326c288e82a471d3ca804448 + () const + + + std::vector< Cesium3DTiles::Buffer > + buffers + structCesium3DTiles_1_1Subtree.html + a871e44f563d6d5f14ccb5c64bdc3cebf + + + + std::vector< Cesium3DTiles::BufferView > + bufferViews + structCesium3DTiles_1_1Subtree.html + a4d412304f345e3443a4fa80ff42c72fb + + + + std::vector< Cesium3DTiles::PropertyTable > + propertyTables + structCesium3DTiles_1_1Subtree.html + a2c601ae53a81df53c74c3c6a6f3497f0 + + + + Cesium3DTiles::Availability + tileAvailability + structCesium3DTiles_1_1Subtree.html + aa3e40622b0e555d9d8346d180dc35cbe + + + + std::vector< Cesium3DTiles::Availability > + contentAvailability + structCesium3DTiles_1_1Subtree.html + ab64c445b72488f309e71440e28e8940f + + + + Cesium3DTiles::Availability + childSubtreeAvailability + structCesium3DTiles_1_1Subtree.html + ab19915528414dc7be9400439e630066c + + + + std::optional< int64_t > + tileMetadata + structCesium3DTiles_1_1Subtree.html + a3a626ea633e11809f268cad4870857fa + + + + std::vector< int64_t > + contentMetadata + structCesium3DTiles_1_1Subtree.html + ae9fb2973718fdd44f1ea59531feaf310 + + + + std::optional< Cesium3DTiles::MetadataEntity > + subtreeMetadata + structCesium3DTiles_1_1Subtree.html + a007d9f6b53fbf01f10d61d4a9febb958 + + + + static constexpr const char * + TypeName + structCesium3DTiles_1_1Subtree.html + a8470a9c082d67a51833d660a12479a9e + + + + + Cesium3DTilesContent::SubtreeAvailability + classCesium3DTilesContent_1_1SubtreeAvailability.html + Cesium3DTilesContent::SubtreeAvailability::SubtreeBufferViewAvailability + Cesium3DTilesContent::SubtreeAvailability::SubtreeConstantAvailability + + std::variant< SubtreeConstantAvailability, SubtreeBufferViewAvailability > + AvailabilityView + classCesium3DTilesContent_1_1SubtreeAvailability.html + a2c438142883ee14d7a161a8b059ac787 + + + + + SubtreeAvailability + classCesium3DTilesContent_1_1SubtreeAvailability.html + a0c52aeb8b1615b6b4799c4f6d8dde31f + (ImplicitTileSubdivisionScheme subdivisionScheme, uint32_t levelsInSubtree, AvailabilityView tileAvailability, AvailabilityView subtreeAvailability, std::vector< AvailabilityView > &&contentAvailability, Cesium3DTiles::Subtree &&subtree) + + + bool + isTileAvailable + classCesium3DTilesContent_1_1SubtreeAvailability.html + a890986456248baef213c7eccf628fe78 + (const CesiumGeometry::QuadtreeTileID &subtreeId, const CesiumGeometry::QuadtreeTileID &tileId) const noexcept + + + bool + isTileAvailable + classCesium3DTilesContent_1_1SubtreeAvailability.html + a5813a75ac9d21cc1543fc811cb45c8d0 + (const CesiumGeometry::OctreeTileID &subtreeId, const CesiumGeometry::OctreeTileID &tileId) const noexcept + + + bool + isTileAvailable + classCesium3DTilesContent_1_1SubtreeAvailability.html + a1f0b4e430a9894de6bf22a7d98e4d586 + (uint32_t relativeTileLevel, uint64_t relativeTileMortonId) const noexcept + + + void + setTileAvailable + classCesium3DTilesContent_1_1SubtreeAvailability.html + a9b7f9600e41b0460736588c4bb6b8a08 + (const CesiumGeometry::QuadtreeTileID &subtreeId, const CesiumGeometry::QuadtreeTileID &tileId, bool isAvailable) noexcept + + + void + setTileAvailable + classCesium3DTilesContent_1_1SubtreeAvailability.html + a2f63bd3316eb6529c0335452dcd3f168 + (const CesiumGeometry::OctreeTileID &subtreeId, const CesiumGeometry::OctreeTileID &tileId, bool isAvailable) noexcept + + + void + setTileAvailable + classCesium3DTilesContent_1_1SubtreeAvailability.html + af817ee1bde21e206e5cef2ebfaa08b60 + (uint32_t relativeTileLevel, uint64_t relativeTileMortonId, bool isAvailable) noexcept + + + bool + isContentAvailable + classCesium3DTilesContent_1_1SubtreeAvailability.html + a61678705e371c3f0133703a56a01c971 + (const CesiumGeometry::QuadtreeTileID &subtreeId, const CesiumGeometry::QuadtreeTileID &tileId, uint64_t contentId) const noexcept + + + bool + isContentAvailable + classCesium3DTilesContent_1_1SubtreeAvailability.html + a2c9567d7c7884fa74b65871a20a1ba62 + (const CesiumGeometry::OctreeTileID &subtreeId, const CesiumGeometry::OctreeTileID &tileId, uint64_t contentId) const noexcept + + + bool + isContentAvailable + classCesium3DTilesContent_1_1SubtreeAvailability.html + a77412a1f88ee17b895d005ef9bd30941 + (uint32_t relativeTileLevel, uint64_t relativeTileMortonId, uint64_t contentId) const noexcept + + + void + setContentAvailable + classCesium3DTilesContent_1_1SubtreeAvailability.html + aa40c55a944ee00f55aa7b469ef627ff8 + (const CesiumGeometry::QuadtreeTileID &subtreeId, const CesiumGeometry::QuadtreeTileID &tileId, uint64_t contentId, bool isAvailable) noexcept + + + void + setContentAvailable + classCesium3DTilesContent_1_1SubtreeAvailability.html + a5fc9a30ec20fd5b7f0af496479f9f88e + (const CesiumGeometry::OctreeTileID &subtreeId, const CesiumGeometry::OctreeTileID &tileId, uint64_t contentId, bool isAvailable) noexcept + + + void + setContentAvailable + classCesium3DTilesContent_1_1SubtreeAvailability.html + a85b20399fbeb5aa3b346475f9fb0d677 + (uint32_t relativeTileLevel, uint64_t relativeTileMortonId, uint64_t contentId, bool isAvailable) noexcept + + + bool + isSubtreeAvailable + classCesium3DTilesContent_1_1SubtreeAvailability.html + ab3c96069b6de2adf550a0147d9229170 + (const CesiumGeometry::QuadtreeTileID &thisSubtreeID, const CesiumGeometry::QuadtreeTileID &checkSubtreeID) const noexcept + + + bool + isSubtreeAvailable + classCesium3DTilesContent_1_1SubtreeAvailability.html + abce4323bab84d2769a3fe44af1276dba + (const CesiumGeometry::OctreeTileID &thisSubtreeID, const CesiumGeometry::OctreeTileID &checkSubtreeID) const noexcept + + + bool + isSubtreeAvailable + classCesium3DTilesContent_1_1SubtreeAvailability.html + a504bf5ae543d5bec8714b352eaaa29f2 + (uint64_t relativeSubtreeMortonId) const noexcept + + + void + setSubtreeAvailable + classCesium3DTilesContent_1_1SubtreeAvailability.html + aae90665c29e3c911a0ed0374afca9b25 + (const CesiumGeometry::QuadtreeTileID &thisSubtreeID, const CesiumGeometry::QuadtreeTileID &setSubtreeID, bool isAvailable) noexcept + + + void + setSubtreeAvailable + classCesium3DTilesContent_1_1SubtreeAvailability.html + a070013051595f5e276fd711ef8be96e5 + (const CesiumGeometry::OctreeTileID &thisSubtreeID, const CesiumGeometry::OctreeTileID &setSubtreeID, bool isAvailable) noexcept + + + void + setSubtreeAvailable + classCesium3DTilesContent_1_1SubtreeAvailability.html + af0d0d1af9ed47a1ed77bee0be1f7d231 + (uint64_t relativeSubtreeMortonId, bool isAvailable) noexcept + + + const Cesium3DTiles::Subtree & + getSubtree + classCesium3DTilesContent_1_1SubtreeAvailability.html + aba21750ab87dcb82737c02702dd17d73 + () const noexcept + + + static std::optional< SubtreeAvailability > + fromSubtree + classCesium3DTilesContent_1_1SubtreeAvailability.html + a61dd11f0034858ed191dc03f4adc9ed6 + (ImplicitTileSubdivisionScheme subdivisionScheme, uint32_t levelsInSubtree, Cesium3DTiles::Subtree &&subtree) noexcept + + + static std::optional< SubtreeAvailability > + createEmpty + classCesium3DTilesContent_1_1SubtreeAvailability.html + a646f2c8066a7afc6cb7b8addefb79763 + (ImplicitTileSubdivisionScheme subdivisionScheme, uint32_t levelsInSubtree) noexcept + + + static CesiumAsync::Future< std::optional< SubtreeAvailability > > + loadSubtree + classCesium3DTilesContent_1_1SubtreeAvailability.html + a09b2419d02903825f41b0cd53bc56bc9 + (ImplicitTileSubdivisionScheme subdivisionScheme, uint32_t levelsInSubtree, const CesiumAsync::AsyncSystem &asyncSystem, const std::shared_ptr< CesiumAsync::IAssetAccessor > &pAssetAccessor, const std::shared_ptr< spdlog::logger > &pLogger, const std::string &subtreeUrl, const std::vector< CesiumAsync::IAssetAccessor::THeader > &requestHeaders) + + + + CesiumGeometry::SubtreeBufferView + structCesiumGeometry_1_1SubtreeBufferView.html + + uint32_t + byteOffset + structCesiumGeometry_1_1SubtreeBufferView.html + ab6c94ac86770b0eef855b31f82383992 + + + + uint32_t + byteLength + structCesiumGeometry_1_1SubtreeBufferView.html + a108b110f39c6a620c18516f8f7971e6d + + + + uint8_t + buffer + structCesiumGeometry_1_1SubtreeBufferView.html + a99f2b514af781cc2b1ed68b2a40bac96 + + + + + Cesium3DTilesContent::SubtreeAvailability::SubtreeBufferViewAvailability + structCesium3DTilesContent_1_1SubtreeAvailability_1_1SubtreeBufferViewAvailability.html + + std::span< std::byte > + view + structCesium3DTilesContent_1_1SubtreeAvailability_1_1SubtreeBufferViewAvailability.html + ab2ba1f3ac466a2af9b0746c5839d4c17 + + + + + Cesium3DTilesContent::SubtreeAvailability::SubtreeConstantAvailability + structCesium3DTilesContent_1_1SubtreeAvailability_1_1SubtreeConstantAvailability.html + + bool + constant + structCesium3DTilesContent_1_1SubtreeAvailability_1_1SubtreeConstantAvailability.html + a1604e0594badd88c2200e022d02f0909 + + + + + Cesium3DTilesReader::SubtreeFileReader + classCesium3DTilesReader_1_1SubtreeFileReader.html + + + SubtreeFileReader + classCesium3DTilesReader_1_1SubtreeFileReader.html + a33f722b174e960e2c19f9694f0ad0825 + () + + + CesiumJsonReader::JsonReaderOptions & + getOptions + classCesium3DTilesReader_1_1SubtreeFileReader.html + a95d4aa8fc9d9dd0582e4d8e4b5161020 + () + + + const CesiumJsonReader::JsonReaderOptions & + getOptions + classCesium3DTilesReader_1_1SubtreeFileReader.html + a4e09dee48916838f78cff2d2baea96ce + () const + + + CesiumAsync::Future< CesiumJsonReader::ReadJsonResult< Cesium3DTiles::Subtree > > + load + classCesium3DTilesReader_1_1SubtreeFileReader.html + a88d10f346dc3bff981c7bf1de5108a9c + (const CesiumAsync::AsyncSystem &asyncSystem, const std::shared_ptr< CesiumAsync::IAssetAccessor > &pAssetAccessor, const std::string &url, const std::vector< CesiumAsync::IAssetAccessor::THeader > &headers={}) const noexcept + + + CesiumAsync::Future< CesiumJsonReader::ReadJsonResult< Cesium3DTiles::Subtree > > + load + classCesium3DTilesReader_1_1SubtreeFileReader.html + a2a513abb8e2a4faa8a953a42ca5f18b7 + (const CesiumAsync::AsyncSystem &asyncSystem, const std::shared_ptr< CesiumAsync::IAssetAccessor > &pAssetAccessor, const std::shared_ptr< CesiumAsync::IAssetRequest > &pRequest) const noexcept + + + CesiumAsync::Future< CesiumJsonReader::ReadJsonResult< Cesium3DTiles::Subtree > > + load + classCesium3DTilesReader_1_1SubtreeFileReader.html + ab4b891863e0c40910384069b34c83e5c + (const CesiumAsync::AsyncSystem &asyncSystem, const std::shared_ptr< CesiumAsync::IAssetAccessor > &pAssetAccessor, const std::string &url, const std::vector< CesiumAsync::IAssetAccessor::THeader > &requestHeaders, const std::span< const std::byte > &data) const noexcept + + + + Cesium3DTilesReader::SubtreeReader + classCesium3DTilesReader_1_1SubtreeReader.html + + + SubtreeReader + classCesium3DTilesReader_1_1SubtreeReader.html + a2e662c3730b7e6b92809238a2dd66732 + () + + + CesiumJsonReader::JsonReaderOptions & + getOptions + classCesium3DTilesReader_1_1SubtreeReader.html + a056679e6f93a3921d157481bf03ee8dc + () + + + const CesiumJsonReader::JsonReaderOptions & + getOptions + classCesium3DTilesReader_1_1SubtreeReader.html + a7e8379a93d857d5e0fdb31d5f1e6e6aa + () const + + + CesiumJsonReader::ReadJsonResult< Cesium3DTiles::Subtree > + readFromJson + classCesium3DTilesReader_1_1SubtreeReader.html + a70b21ec9181785869b94e8f58cd35d5f + (const std::span< const std::byte > &data) const + + + CesiumJsonReader::ReadJsonResult< Cesium3DTiles::Subtree > + readFromJson + classCesium3DTilesReader_1_1SubtreeReader.html + a95dfb27119a7123f2f6daba7959d1074 + (const rapidjson::Value &value) const + + + CesiumJsonReader::ReadJsonResult< std::vector< Cesium3DTiles::Subtree > > + readArrayFromJson + classCesium3DTilesReader_1_1SubtreeReader.html + a4e1e201276acd36f34383a21d0dab684 + (const rapidjson::Value &value) const + + + + Cesium3DTiles::Subtrees + structCesium3DTiles_1_1Subtrees.html + CesiumUtility::ExtensibleObject + + int64_t + getSizeBytes + structCesium3DTiles_1_1Subtrees.html + a2be2feba4479e79fc141ed440c0e507d + () const + + + std::string + uri + structCesium3DTiles_1_1Subtrees.html + a6d1482adb8506bd54d97de683c56ddeb + + + + static constexpr const char * + TypeName + structCesium3DTiles_1_1Subtrees.html + a2362952c56e6e2136c60696851c88869 + + + + + Cesium3DTilesReader::SubtreesReader + classCesium3DTilesReader_1_1SubtreesReader.html + + + SubtreesReader + classCesium3DTilesReader_1_1SubtreesReader.html + a2c1d0ffc1c8a5344772b56721298cd2f + () + + + CesiumJsonReader::JsonReaderOptions & + getOptions + classCesium3DTilesReader_1_1SubtreesReader.html + aeb4a6d099d2cc0045ad6718f493e4a45 + () + + + const CesiumJsonReader::JsonReaderOptions & + getOptions + classCesium3DTilesReader_1_1SubtreesReader.html + a3795e56634cd0d6a9dd5403012390570 + () const + + + CesiumJsonReader::ReadJsonResult< Cesium3DTiles::Subtrees > + readFromJson + classCesium3DTilesReader_1_1SubtreesReader.html + aa9d455004f7007857ec09bc7de89cd37 + (const std::span< const std::byte > &data) const + + + CesiumJsonReader::ReadJsonResult< Cesium3DTiles::Subtrees > + readFromJson + classCesium3DTilesReader_1_1SubtreesReader.html + a2e11adbfffdca5dc3a5263e22645b3ce + (const rapidjson::Value &value) const + + + CesiumJsonReader::ReadJsonResult< std::vector< Cesium3DTiles::Subtrees > > + readArrayFromJson + classCesium3DTilesReader_1_1SubtreesReader.html + a5d900e36f4f7ef160b1c115a36ea542f + (const rapidjson::Value &value) const + + + + Cesium3DTilesWriter::SubtreeWriter + classCesium3DTilesWriter_1_1SubtreeWriter.html + + + SubtreeWriter + classCesium3DTilesWriter_1_1SubtreeWriter.html + a73a1697223b9f2a8e84172545018907a + () + + + CesiumJsonWriter::ExtensionWriterContext & + getExtensions + classCesium3DTilesWriter_1_1SubtreeWriter.html + a63328acbbe3504f6ec256522c5ee5951 + () + + + const CesiumJsonWriter::ExtensionWriterContext & + getExtensions + classCesium3DTilesWriter_1_1SubtreeWriter.html + aa7dcff1ff6fa4ea0fab6bee5e9ea06b2 + () const + + + SubtreeWriterResult + writeSubtree + classCesium3DTilesWriter_1_1SubtreeWriter.html + a4e1110dec3ee98a168240e35bd560b96 + (const Cesium3DTiles::Subtree &subtree, const SubtreeWriterOptions &options=SubtreeWriterOptions()) const + + + + Cesium3DTilesWriter::SubtreeWriterOptions + structCesium3DTilesWriter_1_1SubtreeWriterOptions.html + + bool + prettyPrint + structCesium3DTilesWriter_1_1SubtreeWriterOptions.html + a4be8e154ad4fcfc3b537df38e1f29133 + + + + + Cesium3DTilesWriter::SubtreeWriterResult + structCesium3DTilesWriter_1_1SubtreeWriterResult.html + + std::vector< std::byte > + subtreeBytes + structCesium3DTilesWriter_1_1SubtreeWriterResult.html + a78580073002011c4ca561eb0362a9f33 + + + + std::vector< std::string > + errors + structCesium3DTilesWriter_1_1SubtreeWriterResult.html + aff4b457f5dfd6625352a107e465c5a75 + + + + std::vector< std::string > + warnings + structCesium3DTilesWriter_1_1SubtreeWriterResult.html + af2f3e41de50599c8046aa4a69d282553 + + + + + CesiumGltf::SupportedGpuCompressedPixelFormats + structCesiumGltf_1_1SupportedGpuCompressedPixelFormats.html + + bool + ETC1_RGB + structCesiumGltf_1_1SupportedGpuCompressedPixelFormats.html + acd45cbaabf24bc230e8bcb6e6a7df06c + + + + bool + ETC2_RGBA + structCesiumGltf_1_1SupportedGpuCompressedPixelFormats.html + a9985b954000512e07a624ffacd0d1b0c + + + + bool + BC1_RGB + structCesiumGltf_1_1SupportedGpuCompressedPixelFormats.html + a65ee69a466ae58b93165d724b126cac5 + + + + bool + BC3_RGBA + structCesiumGltf_1_1SupportedGpuCompressedPixelFormats.html + a4b15deee20188ef408de8b45b77c79ee + + + + bool + BC4_R + structCesiumGltf_1_1SupportedGpuCompressedPixelFormats.html + a6005ca0901bafce248ee3b345e8a534e + + + + bool + BC5_RG + structCesiumGltf_1_1SupportedGpuCompressedPixelFormats.html + a539a26d12a5480c5c5f603a780f6c1b3 + + + + bool + BC7_RGBA + structCesiumGltf_1_1SupportedGpuCompressedPixelFormats.html + a6d676fac5a0c408fa125c17527151e82 + + + + bool + PVRTC1_4_RGB + structCesiumGltf_1_1SupportedGpuCompressedPixelFormats.html + a207fed043d4243435f76b07c32a218bf + + + + bool + PVRTC1_4_RGBA + structCesiumGltf_1_1SupportedGpuCompressedPixelFormats.html + ad2498eb33d4d2411db66201ef4d3200a + + + + bool + ASTC_4x4_RGBA + structCesiumGltf_1_1SupportedGpuCompressedPixelFormats.html + a4df6e93f1de67002c533fb1fddf4a9c2 + + + + bool + PVRTC2_4_RGB + structCesiumGltf_1_1SupportedGpuCompressedPixelFormats.html + a72b581b71aceee99fdc95ba7bc48d13a + + + + bool + PVRTC2_4_RGBA + structCesiumGltf_1_1SupportedGpuCompressedPixelFormats.html + a6e709a63321fb6c90d1b98526622c27d + + + + bool + ETC2_EAC_R11 + structCesiumGltf_1_1SupportedGpuCompressedPixelFormats.html + a99902f59d7d50aff69dee5169d7f5e9a + + + + bool + ETC2_EAC_RG11 + structCesiumGltf_1_1SupportedGpuCompressedPixelFormats.html + a6edf6f598eca69db741ce9ed284b9ee8 + + + + + CesiumGltf::BufferView::Target + structCesiumGltf_1_1BufferView_1_1Target.html + + static constexpr int32_t + ARRAY_BUFFER + structCesiumGltf_1_1BufferView_1_1Target.html + a6583a31f6100e4e051d447a00c01ac1a + + + + static constexpr int32_t + ELEMENT_ARRAY_BUFFER + structCesiumGltf_1_1BufferView_1_1Target.html + a27b3c689778787d037f0e1562ef286de + + + + + CesiumGltf::TexCoordFromAccessor + structCesiumGltf_1_1TexCoordFromAccessor.html + + std::optional< glm::dvec2 > + operator() + structCesiumGltf_1_1TexCoordFromAccessor.html + a9d332a76e2c9936b45ae446562e6f2dc + (const AccessorView< AccessorTypes::VEC2< float > > &value) + + + std::optional< glm::dvec2 > + operator() + structCesiumGltf_1_1TexCoordFromAccessor.html + a9c0ff7377ded4f919b34fbe5e5853246 + (const AccessorView< AccessorTypes::VEC2< T > > &value) + + + int64_t + index + structCesiumGltf_1_1TexCoordFromAccessor.html + a3d473af10bf67d90e1d0d79e54023493 + + + + + CesiumGltf::Texture + structCesiumGltf_1_1Texture.html + CesiumGltf::NamedObject + + int64_t + getSizeBytes + structCesiumGltf_1_1Texture.html + ad58689b21a56afa33436b87920e0d7a7 + () const + + + int32_t + sampler + structCesiumGltf_1_1Texture.html + a742a98f298b28d3b8a624cc960430559 + + + + int32_t + source + structCesiumGltf_1_1Texture.html + ac83fa50e963f39d8592cd1e68b90ba06 + + + + static constexpr const char * + TypeName + structCesiumGltf_1_1Texture.html + ab413f7c1bc73d3c22221cb34e524aa56 + + + + + CesiumGltf::TextureInfo + structCesiumGltf_1_1TextureInfo.html + CesiumUtility::ExtensibleObject + + int64_t + getSizeBytes + structCesiumGltf_1_1TextureInfo.html + a048bb30340fd7ef3bb8fb7310dbecad6 + () const + + + int32_t + index + structCesiumGltf_1_1TextureInfo.html + a0f26fdc9e092c62db9e7ed9e9a79ce79 + + + + int64_t + texCoord + structCesiumGltf_1_1TextureInfo.html + a98eb603dc5b8dcea81f20f07fbaaeb3b + + + + static constexpr const char * + TypeName + structCesiumGltf_1_1TextureInfo.html + acc651483dacef0697ed29d8d3d89bacd + + + + + CesiumGltfReader::TextureInfoReader + classCesiumGltfReader_1_1TextureInfoReader.html + + + TextureInfoReader + classCesiumGltfReader_1_1TextureInfoReader.html + a24978111095030e79386bc1a2bf6ebd0 + () + + + CesiumJsonReader::JsonReaderOptions & + getOptions + classCesiumGltfReader_1_1TextureInfoReader.html + a1483f2bfe42aaea83b01e9cfd5d79764 + () + + + const CesiumJsonReader::JsonReaderOptions & + getOptions + classCesiumGltfReader_1_1TextureInfoReader.html + a98b61210deb007826d4518f12c53b602 + () const + + + CesiumJsonReader::ReadJsonResult< CesiumGltf::TextureInfo > + readFromJson + classCesiumGltfReader_1_1TextureInfoReader.html + abf03323e2da90b4b4d466665b087ca60 + (const std::span< const std::byte > &data) const + + + CesiumJsonReader::ReadJsonResult< CesiumGltf::TextureInfo > + readFromJson + classCesiumGltfReader_1_1TextureInfoReader.html + a7b88bdd89823279ceb549f8fa5ba6214 + (const rapidjson::Value &value) const + + + CesiumJsonReader::ReadJsonResult< std::vector< CesiumGltf::TextureInfo > > + readArrayFromJson + classCesiumGltfReader_1_1TextureInfoReader.html + a2e39d693dce6318caf1d5b3c01c62da5 + (const rapidjson::Value &value) const + + + + CesiumGltfReader::TextureReader + classCesiumGltfReader_1_1TextureReader.html + + + TextureReader + classCesiumGltfReader_1_1TextureReader.html + a9a7410646cf80d771e88bf564ed9e03e + () + + + CesiumJsonReader::JsonReaderOptions & + getOptions + classCesiumGltfReader_1_1TextureReader.html + adc4c33db2af0e28d5663ce68eec34e12 + () + + + const CesiumJsonReader::JsonReaderOptions & + getOptions + classCesiumGltfReader_1_1TextureReader.html + a2b6b14faf5c2ae2add66a2af037ea72d + () const + + + CesiumJsonReader::ReadJsonResult< CesiumGltf::Texture > + readFromJson + classCesiumGltfReader_1_1TextureReader.html + af8e5bbeeefd2f2dfe9c24c38eb1b4e13 + (const std::span< const std::byte > &data) const + + + CesiumJsonReader::ReadJsonResult< CesiumGltf::Texture > + readFromJson + classCesiumGltfReader_1_1TextureReader.html + a974fa648478c28737dd44415d9cedf24 + (const rapidjson::Value &value) const + + + CesiumJsonReader::ReadJsonResult< std::vector< CesiumGltf::Texture > > + readArrayFromJson + classCesiumGltfReader_1_1TextureReader.html + adc670cf53ca2bcdb861c1d78c3204bfc + (const rapidjson::Value &value) const + + + + CesiumGltf::TextureView + classCesiumGltf_1_1TextureView.html + + + TextureView + classCesiumGltf_1_1TextureView.html + a983ad5b7ad68e2827289acfae001f1d3 + () noexcept + + + + TextureView + classCesiumGltf_1_1TextureView.html + ae2ab3a78964c0ff538de7822750fb953 + (const Model &model, const TextureInfo &textureInfo, const TextureViewOptions &options=TextureViewOptions()) noexcept + + + + TextureView + classCesiumGltf_1_1TextureView.html + a8f31340b4b83227421eba2e933dbe6c6 + (const Sampler &sampler, const ImageAsset &image, int64_t textureCoordinateSetIndex, const ExtensionKhrTextureTransform *pKhrTextureTransformExtension=nullptr, const TextureViewOptions &options=TextureViewOptions()) noexcept + + + TextureViewStatus + getTextureViewStatus + classCesiumGltf_1_1TextureView.html + a6ea64eea0a7f515a91f0be09855dcaf7 + () const noexcept + + + int64_t + getTexCoordSetIndex + classCesiumGltf_1_1TextureView.html + ae2298714aae18383ae8b0fb36f71e09e + () const noexcept + + + const Sampler * + getSampler + classCesiumGltf_1_1TextureView.html + a21bb3da2bac6f8a7a72de9c5665f03db + () const noexcept + + + const ImageAsset * + getImage + classCesiumGltf_1_1TextureView.html + ad581f6badc8e7e8e7044fb25c80ac7ed + () const noexcept + + + std::optional< KhrTextureTransform > + getTextureTransform + classCesiumGltf_1_1TextureView.html + a6c84dd05c4e3c169b13ad403b9fb904a + () const noexcept + + + std::vector< uint8_t > + sampleNearestPixel + classCesiumGltf_1_1TextureView.html + aeca9af5ff61fca925daa31e7f4a04977 + (double u, double v, const std::vector< int64_t > &channels) const noexcept + + + + CesiumGltf::TextureViewOptions + structCesiumGltf_1_1TextureViewOptions.html + + bool + applyKhrTextureTransformExtension + structCesiumGltf_1_1TextureViewOptions.html + a44242e5f0fbb66e24ad7203263cc24f8 + + + + bool + makeImageCopy + structCesiumGltf_1_1TextureViewOptions.html + a24ea1a162cc19e7b590bddbd4c487aa9 + + + + + CesiumAsync::ThreadPool + classCesiumAsync_1_1ThreadPool.html + + + ThreadPool + classCesiumAsync_1_1ThreadPool.html + a522ad4fcf35fc33a78a4a1e97f990db8 + (int32_t numberOfThreads) + + + + Cesium3DTiles::Tile + structCesium3DTiles_1_1Tile.html + CesiumUtility::ExtensibleObject + Cesium3DTiles::Tile::Refine + + int64_t + getSizeBytes + structCesium3DTiles_1_1Tile.html + af661d84a2c87cd813841d1c5038cfaa9 + () const + + + Cesium3DTiles::BoundingVolume + boundingVolume + structCesium3DTiles_1_1Tile.html + adb07b53385ecba52c6e0f88a9e1e891b + + + + std::optional< Cesium3DTiles::BoundingVolume > + viewerRequestVolume + structCesium3DTiles_1_1Tile.html + a82a37a99b1b32b148e4e55aaa215f078 + + + + double + geometricError + structCesium3DTiles_1_1Tile.html + aba9fd7a5ab23cfa901e92d655b3811f1 + + + + std::optional< std::string > + refine + structCesium3DTiles_1_1Tile.html + a6201f250b093512ba74422eedbefdcf2 + + + + std::vector< double > + transform + structCesium3DTiles_1_1Tile.html + adb10ceeb5564f57e6e85e272646115b6 + + + + std::optional< Cesium3DTiles::Content > + content + structCesium3DTiles_1_1Tile.html + afc8d5ee66e24222e41188993d36c1b08 + + + + std::vector< Cesium3DTiles::Content > + contents + structCesium3DTiles_1_1Tile.html + a4e85e6631b0e87df20886a5bc4784a36 + + + + std::optional< Cesium3DTiles::MetadataEntity > + metadata + structCesium3DTiles_1_1Tile.html + a490aa10faffce5d2d5bf70f11dc4e4cf + + + + std::optional< Cesium3DTiles::ImplicitTiling > + implicitTiling + structCesium3DTiles_1_1Tile.html + a5ce069a26ead9026723a388019b9ffd6 + + + + std::vector< Cesium3DTiles::Tile > + children + structCesium3DTiles_1_1Tile.html + ac1a290a93664fec69d013383c04a78db + + + + static constexpr const char * + TypeName + structCesium3DTiles_1_1Tile.html + afed171e9752aa0e7567270075d32c8ae + + + + + Cesium3DTilesSelection::Tile + classCesium3DTilesSelection_1_1Tile.html + + CesiumUtility::DoublyLinkedList< Tile, &Tile::_loadedTilesLinks > + LoadedLinkedList + classCesium3DTilesSelection_1_1Tile.html + a4cddeb0ed5ba30054374f4b1d7018ce5 + + + + + Tile + classCesium3DTilesSelection_1_1Tile.html + a2051f7df78a0588b7726502a4750e707 + (TilesetContentLoader *pLoader) noexcept + + + + Tile + classCesium3DTilesSelection_1_1Tile.html + adb0c583515af4549fc3be142e058d312 + (TilesetContentLoader *pLoader, std::unique_ptr< TileExternalContent > &&externalContent) noexcept + + + + Tile + classCesium3DTilesSelection_1_1Tile.html + ac5c69bc1da8072c8ccba5e435388b769 + (TilesetContentLoader *pLoader, TileEmptyContent emptyContent) noexcept + + + + ~Tile + classCesium3DTilesSelection_1_1Tile.html + aeda88ebf6c58cca73ab91f46b1230850 + () noexcept=default + + + + Tile + classCesium3DTilesSelection_1_1Tile.html + acac31aa306dcb3c820e6cca3ecbc3cfa + (const Tile &rhs)=delete + + + + Tile + classCesium3DTilesSelection_1_1Tile.html + ac7b6a16c55a5032aa5a4afde498b7721 + (Tile &&rhs) noexcept + + + Tile & + operator= + classCesium3DTilesSelection_1_1Tile.html + acd9ccded576dad03bde8071d52b2587a + (const Tile &rhs)=delete + + + Tile & + operator= + classCesium3DTilesSelection_1_1Tile.html + a58a16b05c0ccb5c7e8daa4136cd4ce9c + (Tile &&rhs) noexcept + + + Tile * + getParent + classCesium3DTilesSelection_1_1Tile.html + a588244dbb1446ab3e37e47847abb4c58 + () noexcept + + + const Tile * + getParent + classCesium3DTilesSelection_1_1Tile.html + af65680fe62e1f08efbf3d3448a750f2c + () const noexcept + + + std::span< Tile > + getChildren + classCesium3DTilesSelection_1_1Tile.html + aa3fd304314976ae1d31a10ab96ebf99f + () noexcept + + + std::span< const Tile > + getChildren + classCesium3DTilesSelection_1_1Tile.html + a8e2d4a6d23d825bf3e0aa2aec93f2f57 + () const noexcept + + + void + createChildTiles + classCesium3DTilesSelection_1_1Tile.html + a4fea54585e2232392063e2d97e2c2409 + (std::vector< Tile > &&children) + + + const BoundingVolume & + getBoundingVolume + classCesium3DTilesSelection_1_1Tile.html + adb57ed2095d2ccc7d92a5d0bd608ad86 + () const noexcept + + + void + setBoundingVolume + classCesium3DTilesSelection_1_1Tile.html + ade6ddbc6ab282443392ad6e57971f6be + (const BoundingVolume &value) noexcept + + + const std::optional< BoundingVolume > & + getViewerRequestVolume + classCesium3DTilesSelection_1_1Tile.html + a05f86dec6b126027705e6b2624368462 + () const noexcept + + + void + setViewerRequestVolume + classCesium3DTilesSelection_1_1Tile.html + ab1738c4fb79855629cc6331492a93a30 + (const std::optional< BoundingVolume > &value) noexcept + + + double + getGeometricError + classCesium3DTilesSelection_1_1Tile.html + af53e9133f96d6a6ac21bd4d97fc447dd + () const noexcept + + + void + setGeometricError + classCesium3DTilesSelection_1_1Tile.html + a3d902f0df8c6736605667cb6f0b5878b + (double value) noexcept + + + double + getNonZeroGeometricError + classCesium3DTilesSelection_1_1Tile.html + a1f632e363bb1bc6489dbe0b6ff875cd9 + () const noexcept + + + bool + getUnconditionallyRefine + classCesium3DTilesSelection_1_1Tile.html + ae98638bcdaca5a0e5b4cd7e63eababc6 + () const noexcept + + + void + setUnconditionallyRefine + classCesium3DTilesSelection_1_1Tile.html + adff39188c07e006b7d009632057b160c + () noexcept + + + TileRefine + getRefine + classCesium3DTilesSelection_1_1Tile.html + ab6085f41c705ce20fffd8ea76d9b9d01 + () const noexcept + + + void + setRefine + classCesium3DTilesSelection_1_1Tile.html + a9a160d7a4246711d686cc899621872f0 + (TileRefine value) noexcept + + + const glm::dmat4x4 & + getTransform + classCesium3DTilesSelection_1_1Tile.html + aa2fef4ee7fe8b33740b76da0e4ddb91f + () const noexcept + + + void + setTransform + classCesium3DTilesSelection_1_1Tile.html + aab123419093e7c78b0568973332625ad + (const glm::dmat4x4 &value) noexcept + + + const TileID & + getTileID + classCesium3DTilesSelection_1_1Tile.html + a16579286b94e046337e16aabd7f02e6c + () const noexcept + + + void + setTileID + classCesium3DTilesSelection_1_1Tile.html + a47ee9f3f8bd0d6ed6dd9cdf2e805d0bc + (const TileID &id) noexcept + + + const std::optional< BoundingVolume > & + getContentBoundingVolume + classCesium3DTilesSelection_1_1Tile.html + a0c1ffeb8cc314ced200130cc4bc748c6 + () const noexcept + + + void + setContentBoundingVolume + classCesium3DTilesSelection_1_1Tile.html + ad8600bd32f6a5466ce7eb7345378dcc4 + (const std::optional< BoundingVolume > &value) noexcept + + + TileSelectionState & + getLastSelectionState + classCesium3DTilesSelection_1_1Tile.html + a298872a63dd6337b529e53e2708f3bee + () noexcept + + + const TileSelectionState & + getLastSelectionState + classCesium3DTilesSelection_1_1Tile.html + a67f8aef8ce2c894a0bb774effa309d84 + () const noexcept + + + void + setLastSelectionState + classCesium3DTilesSelection_1_1Tile.html + a45a93b9d8f91ea0d69d27b1a60a6b789 + (const TileSelectionState &newState) noexcept + + + int64_t + computeByteSize + classCesium3DTilesSelection_1_1Tile.html + a4b03a02d726d270f70d3719b3bc92864 + () const noexcept + + + std::vector< RasterMappedTo3DTile > & + getMappedRasterTiles + classCesium3DTilesSelection_1_1Tile.html + ab9c63a5a0ed21923e1aa5b55978ea7e7 + () noexcept + + + const std::vector< RasterMappedTo3DTile > & + getMappedRasterTiles + classCesium3DTilesSelection_1_1Tile.html + a338cff84ddf2e891b071637842d370df + () const noexcept + + + const TileContent & + getContent + classCesium3DTilesSelection_1_1Tile.html + af474daa36924d1cffee923c1518d8fde + () const noexcept + + + TileContent & + getContent + classCesium3DTilesSelection_1_1Tile.html + aefeec24a0430166dfb64d0ac8d3e7021 + () noexcept + + + bool + isRenderable + classCesium3DTilesSelection_1_1Tile.html + a59e6e015f5d33a7c5d43578bafb8cfbc + () const noexcept + + + bool + isRenderContent + classCesium3DTilesSelection_1_1Tile.html + a519a34546235dcf166a4f2f5be428fc7 + () const noexcept + + + bool + isExternalContent + classCesium3DTilesSelection_1_1Tile.html + a3f8c7bfd393df3efba0819ac59d82663 + () const noexcept + + + bool + isEmptyContent + classCesium3DTilesSelection_1_1Tile.html + af3cc4eaa0bfd062224d1ba82380c2c76 + () const noexcept + + + TilesetContentLoader * + getLoader + classCesium3DTilesSelection_1_1Tile.html + aa6094bb31b69314b351eef97e0146230 + () const noexcept + + + TileLoadState + getState + classCesium3DTilesSelection_1_1Tile.html + a46c3db4194fe81d0f3869ac44b5408f5 + () const noexcept + + + + Cesium3DTilesContent::TileBoundingVolumes + classCesium3DTilesContent_1_1TileBoundingVolumes.html + + static std::optional< CesiumGeometry::OrientedBoundingBox > + getOrientedBoundingBox + classCesium3DTilesContent_1_1TileBoundingVolumes.html + a89f3abaaf87b7f93d8e76afc5e976f60 + (const Cesium3DTiles::BoundingVolume &boundingVolume) + + + static void + setOrientedBoundingBox + classCesium3DTilesContent_1_1TileBoundingVolumes.html + a69a9096ba36de11b31e2ec968162b6a2 + (Cesium3DTiles::BoundingVolume &boundingVolume, const CesiumGeometry::OrientedBoundingBox &boundingBox) + + + static std::optional< CesiumGeospatial::BoundingRegion > + getBoundingRegion + classCesium3DTilesContent_1_1TileBoundingVolumes.html + ab3a13c8efeae4a584968b3303b550383 + (const Cesium3DTiles::BoundingVolume &boundingVolume, const CesiumGeospatial::Ellipsoid &ellipsoid=CesiumGeospatial::Ellipsoid::WGS84) + + + static void + setBoundingRegion + classCesium3DTilesContent_1_1TileBoundingVolumes.html + a005b343ef81b9ea909e3cdc55f5e7e1d + (Cesium3DTiles::BoundingVolume &boundingVolume, const CesiumGeospatial::BoundingRegion &boundingRegion) + + + static std::optional< CesiumGeometry::BoundingSphere > + getBoundingSphere + classCesium3DTilesContent_1_1TileBoundingVolumes.html + afdbe089b041164c757f64629d899c5dd + (const Cesium3DTiles::BoundingVolume &boundingVolume) + + + static void + setBoundingSphere + classCesium3DTilesContent_1_1TileBoundingVolumes.html + a3250ca7536faf3c71cd03b11c0171ba9 + (Cesium3DTiles::BoundingVolume &boundingVolume, const CesiumGeometry::BoundingSphere &boundingSphere) + + + static std::optional< CesiumGeospatial::S2CellBoundingVolume > + getS2CellBoundingVolume + classCesium3DTilesContent_1_1TileBoundingVolumes.html + a47bf858a66d7d03b0d554d56b1dd7679 + (const Cesium3DTiles::BoundingVolume &boundingVolume, const CesiumGeospatial::Ellipsoid &ellipsoid=CesiumGeospatial::Ellipsoid::WGS84) + + + static void + setS2CellBoundingVolume + classCesium3DTilesContent_1_1TileBoundingVolumes.html + a90e5d88e82f07132e88770132acef7c0 + (Cesium3DTiles::BoundingVolume &boundingVolume, const CesiumGeospatial::S2CellBoundingVolume &s2BoundingVolume) + + + + Cesium3DTilesSelection::TileChildrenResult + structCesium3DTilesSelection_1_1TileChildrenResult.html + + std::vector< Tile > + children + structCesium3DTilesSelection_1_1TileChildrenResult.html + a2babebf9cf0041d04813f6c5ddfa4e60 + + + + TileLoadResultState + state + structCesium3DTilesSelection_1_1TileChildrenResult.html + abc9bfa44bfe8e96c8a2bc004ab708a93 + + + + + Cesium3DTilesSelection::TileContent + classCesium3DTilesSelection_1_1TileContent.html + + + TileContent + classCesium3DTilesSelection_1_1TileContent.html + a17363c5f4e482031fbff31daf8429004 + () + + + + TileContent + classCesium3DTilesSelection_1_1TileContent.html + a0adca955675615f0c342979df8644c95 + (TileEmptyContent content) + + + + TileContent + classCesium3DTilesSelection_1_1TileContent.html + a08e0954f967663aba0c84bb88d3fbebe + (std::unique_ptr< TileExternalContent > &&content) + + + void + setContentKind + classCesium3DTilesSelection_1_1TileContent.html + af907419154f9492ad3d8ede8f32e2be9 + (TileUnknownContent content) + + + void + setContentKind + classCesium3DTilesSelection_1_1TileContent.html + a4a8bcd6584239cefb1002dd8cfbe0fa2 + (TileEmptyContent content) + + + void + setContentKind + classCesium3DTilesSelection_1_1TileContent.html + ac7905dea46c3a5f6ae4cb530a922d8c4 + (std::unique_ptr< TileExternalContent > &&content) + + + void + setContentKind + classCesium3DTilesSelection_1_1TileContent.html + a709167b3eeaf3d295c8ea75b48157cec + (std::unique_ptr< TileRenderContent > &&content) + + + bool + isUnknownContent + classCesium3DTilesSelection_1_1TileContent.html + af2175a5b916a7937caaecaf0432d760d + () const noexcept + + + bool + isEmptyContent + classCesium3DTilesSelection_1_1TileContent.html + a8cef3dfca2cd46093711ffcc9c226cb6 + () const noexcept + + + bool + isExternalContent + classCesium3DTilesSelection_1_1TileContent.html + a70879dbf7327fa07f1a25353eb351635 + () const noexcept + + + bool + isRenderContent + classCesium3DTilesSelection_1_1TileContent.html + aa2c7853a4033b23ef772f6ba2f5a7113 + () const noexcept + + + const TileRenderContent * + getRenderContent + classCesium3DTilesSelection_1_1TileContent.html + a52d70856f6966a03a32ce6f68f8343bd + () const noexcept + + + TileRenderContent * + getRenderContent + classCesium3DTilesSelection_1_1TileContent.html + a61212622a5314f449f8a0b373ed792f8 + () noexcept + + + const TileExternalContent * + getExternalContent + classCesium3DTilesSelection_1_1TileContent.html + a3d01988817a2d5bbcbb494ee4f385635 + () const noexcept + + + TileExternalContent * + getExternalContent + classCesium3DTilesSelection_1_1TileContent.html + a09d854f6e207a7fbe7eb52d1efc73d55 + () noexcept + + + + Cesium3DTilesSelection::TileEmptyContent + structCesium3DTilesSelection_1_1TileEmptyContent.html + + + Cesium3DTilesSelection::TileExternalContent + structCesium3DTilesSelection_1_1TileExternalContent.html + + TilesetMetadata + metadata + structCesium3DTilesSelection_1_1TileExternalContent.html + aef7e19dd3b8896eb818579bd79be74ac + + + + + Cesium3DTilesSelection::TileIdUtilities + structCesium3DTilesSelection_1_1TileIdUtilities.html + + static std::string + createTileIdString + structCesium3DTilesSelection_1_1TileIdUtilities.html + a45ff9513ec725c3b2420be09be19083d + (const TileID &tileId) + + + + Cesium3DTilesSelection::TileLoadInput + structCesium3DTilesSelection_1_1TileLoadInput.html + + + TileLoadInput + structCesium3DTilesSelection_1_1TileLoadInput.html + a96ed3c139d6de57d236c5bea6f2cd70f + (const Tile &tile, const TilesetContentOptions &contentOptions, const CesiumAsync::AsyncSystem &asyncSystem, const std::shared_ptr< CesiumAsync::IAssetAccessor > &pAssetAccessor, const std::shared_ptr< spdlog::logger > &pLogger, const std::vector< CesiumAsync::IAssetAccessor::THeader > &requestHeaders, const CesiumGeospatial::Ellipsoid &ellipsoid=CesiumGeospatial::Ellipsoid::WGS84) + + + const Tile & + tile + structCesium3DTilesSelection_1_1TileLoadInput.html + a20df597eafcb5cb1b46e0bbf0c9c6e50 + + + + const TilesetContentOptions & + contentOptions + structCesium3DTilesSelection_1_1TileLoadInput.html + ad5268b52777c4eedf7c12ea0e1acd29e + + + + const CesiumAsync::AsyncSystem & + asyncSystem + structCesium3DTilesSelection_1_1TileLoadInput.html + a757961e78b8f03e7aae0e8260c6cc3cc + + + + const std::shared_ptr< CesiumAsync::IAssetAccessor > & + pAssetAccessor + structCesium3DTilesSelection_1_1TileLoadInput.html + afb5bafba93e288b8ea9f212475d573e6 + + + + const std::shared_ptr< spdlog::logger > & + pLogger + structCesium3DTilesSelection_1_1TileLoadInput.html + a265117b07118a57f19a6415b4e9fbb23 + + + + const std::vector< CesiumAsync::IAssetAccessor::THeader > & + requestHeaders + structCesium3DTilesSelection_1_1TileLoadInput.html + a47be45965e3a92ea3770a3ff21b7ae5e + + + + const CesiumGeospatial::Ellipsoid & + ellipsoid + structCesium3DTilesSelection_1_1TileLoadInput.html + aaaaafcc2198496e6ddef8cc04a7dd341 + + + + + Cesium3DTilesSelection::TileLoadResult + structCesium3DTilesSelection_1_1TileLoadResult.html + + static TileLoadResult + createFailedResult + structCesium3DTilesSelection_1_1TileLoadResult.html + a8aa7327e76c50fefe3d5a6611ff150db + (std::shared_ptr< CesiumAsync::IAssetAccessor > pAssetAccessor, std::shared_ptr< CesiumAsync::IAssetRequest > pCompletedRequest) + + + static TileLoadResult + createRetryLaterResult + structCesium3DTilesSelection_1_1TileLoadResult.html + aee94701fab70172195fc791aac244d9d + (std::shared_ptr< CesiumAsync::IAssetAccessor > pAssetAccessor, std::shared_ptr< CesiumAsync::IAssetRequest > pCompletedRequest) + + + TileContentKind + contentKind + structCesium3DTilesSelection_1_1TileLoadResult.html + a317d87d77564bca5f4648d0d4ca77d9a + + + + CesiumGeometry::Axis + glTFUpAxis + structCesium3DTilesSelection_1_1TileLoadResult.html + afbd5e7f3f0bdcc9b90f1a8c6cb5480ba + + + + std::optional< BoundingVolume > + updatedBoundingVolume + structCesium3DTilesSelection_1_1TileLoadResult.html + a7e3f8683702f73f1c1e0292538d19cc8 + + + + std::optional< BoundingVolume > + updatedContentBoundingVolume + structCesium3DTilesSelection_1_1TileLoadResult.html + a6ae7ac523dae01bcb51537898f6e12e7 + + + + std::optional< CesiumRasterOverlays::RasterOverlayDetails > + rasterOverlayDetails + structCesium3DTilesSelection_1_1TileLoadResult.html + a71e62690dc085f0d1abbe1a280b77db0 + + + + std::shared_ptr< CesiumAsync::IAssetAccessor > + pAssetAccessor + structCesium3DTilesSelection_1_1TileLoadResult.html + ac87016ac26157ccca19ca127e68c99db + + + + std::shared_ptr< CesiumAsync::IAssetRequest > + pCompletedRequest + structCesium3DTilesSelection_1_1TileLoadResult.html + a04be19a4237e2effaf81ce26ee96ea1e + + + + std::function< void(Tile &)> + tileInitializer + structCesium3DTilesSelection_1_1TileLoadResult.html + a36814d27dab75780c91d8ed2393a688d + + + + TileLoadResultState + state + structCesium3DTilesSelection_1_1TileLoadResult.html + a10d181af0b800715027e79ca2553a220 + + + + CesiumGeospatial::Ellipsoid + ellipsoid + structCesium3DTilesSelection_1_1TileLoadResult.html + a3ab58fee73ace2afaa23041780673d2a + + + + + Cesium3DTilesSelection::TileLoadResultAndRenderResources + structCesium3DTilesSelection_1_1TileLoadResultAndRenderResources.html + + TileLoadResult + result + structCesium3DTilesSelection_1_1TileLoadResultAndRenderResources.html + a5ec68441bed5199cc6c9be1bf0528052 + + + + void * + pRenderResources + structCesium3DTilesSelection_1_1TileLoadResultAndRenderResources.html + ab450e3411c4e57cfd94841164e7cd0d9 + + + + + CesiumRasterOverlays::TileMapServiceRasterOverlay + classCesiumRasterOverlays_1_1TileMapServiceRasterOverlay.html + CesiumRasterOverlays::RasterOverlay + + + TileMapServiceRasterOverlay + classCesiumRasterOverlays_1_1TileMapServiceRasterOverlay.html + a492e15fcc81d443c804a977ae4fc9d74 + (const std::string &name, const std::string &url, const std::vector< CesiumAsync::IAssetAccessor::THeader > &headers={}, const TileMapServiceRasterOverlayOptions &tmsOptions={}, const RasterOverlayOptions &overlayOptions={}) + + + virtual CesiumAsync::Future< CreateTileProviderResult > + createTileProvider + classCesiumRasterOverlays_1_1TileMapServiceRasterOverlay.html + ae55bdc0c574e3b6a7a18e4f23f35adfd + (const CesiumAsync::AsyncSystem &asyncSystem, const std::shared_ptr< CesiumAsync::IAssetAccessor > &pAssetAccessor, const std::shared_ptr< CesiumUtility::CreditSystem > &pCreditSystem, const std::shared_ptr< IPrepareRasterOverlayRendererResources > &pPrepareRendererResources, const std::shared_ptr< spdlog::logger > &pLogger, CesiumUtility::IntrusivePointer< const RasterOverlay > pOwner) const override + + + + CesiumRasterOverlays::TileMapServiceRasterOverlayOptions + structCesiumRasterOverlays_1_1TileMapServiceRasterOverlayOptions.html + + std::optional< std::string > + fileExtension + structCesiumRasterOverlays_1_1TileMapServiceRasterOverlayOptions.html + a40d7d3dc96a6fe6ac8f683eb28d1e064 + + + + std::optional< std::string > + credit + structCesiumRasterOverlays_1_1TileMapServiceRasterOverlayOptions.html + a712b9157270e16918a11b08bd325f155 + + + + std::optional< uint32_t > + minimumLevel + structCesiumRasterOverlays_1_1TileMapServiceRasterOverlayOptions.html + acfbcdd7cb31b5bb7ed4247251f492936 + + + + std::optional< uint32_t > + maximumLevel + structCesiumRasterOverlays_1_1TileMapServiceRasterOverlayOptions.html + aa7c96fcd2fba8c55347fa5c6ce7aac1e + + + + std::optional< CesiumGeometry::Rectangle > + coverageRectangle + structCesiumRasterOverlays_1_1TileMapServiceRasterOverlayOptions.html + a24ae8f5c83122cc4820115ad79f39925 + + + + std::optional< CesiumGeospatial::Projection > + projection + structCesiumRasterOverlays_1_1TileMapServiceRasterOverlayOptions.html + ab81d09ab8ff7d8783dd49f33bf5b9acc + + + + std::optional< CesiumGeometry::QuadtreeTilingScheme > + tilingScheme + structCesiumRasterOverlays_1_1TileMapServiceRasterOverlayOptions.html + a3a8fab404b1db078715dfd01c1aad4da + + + + std::optional< uint32_t > + tileWidth + structCesiumRasterOverlays_1_1TileMapServiceRasterOverlayOptions.html + a3bf60d0faf9ae6f24649a1b0e3492ea1 + + + + std::optional< uint32_t > + tileHeight + structCesiumRasterOverlays_1_1TileMapServiceRasterOverlayOptions.html + ada9fde2f7e1fecf44a8032129b3a3d1d + + + + std::optional< bool > + flipXY + structCesiumRasterOverlays_1_1TileMapServiceRasterOverlayOptions.html + a6e5790d752ff42c59a4d28d7b7cd2944 + + + + + Cesium3DTilesSelection::TileOcclusionRendererProxy + classCesium3DTilesSelection_1_1TileOcclusionRendererProxy.html + + virtual TileOcclusionState + getOcclusionState + classCesium3DTilesSelection_1_1TileOcclusionRendererProxy.html + a2c85c656415adc2b3a83a72258d70bb7 + () const =0 + + + virtual void + reset + classCesium3DTilesSelection_1_1TileOcclusionRendererProxy.html + a334ab7c58f06f9ad36743f88576b098b + (const Tile *pTile)=0 + + + + Cesium3DTilesSelection::TileOcclusionRendererProxyPool + classCesium3DTilesSelection_1_1TileOcclusionRendererProxyPool.html + + + TileOcclusionRendererProxyPool + classCesium3DTilesSelection_1_1TileOcclusionRendererProxyPool.html + a51f8a9de3f0d626599001f6e4d7367a7 + (int32_t maximumPoolSize) + + + virtual + ~TileOcclusionRendererProxyPool + classCesium3DTilesSelection_1_1TileOcclusionRendererProxyPool.html + a65b7855ece7a405359c4d945e94fcfa0 + () + + + void + destroyPool + classCesium3DTilesSelection_1_1TileOcclusionRendererProxyPool.html + a14c6fb7cb818f63617e17766067afe3d + () + + + const TileOcclusionRendererProxy * + fetchOcclusionProxyForTile + classCesium3DTilesSelection_1_1TileOcclusionRendererProxyPool.html + a9960bf67367483b742775f8d837090cf + (const Tile &tile, int32_t currentFrame) + + + void + pruneOcclusionProxyMappings + classCesium3DTilesSelection_1_1TileOcclusionRendererProxyPool.html + a9403659c604a3748ba2896d4f6d42ba0 + () + + + virtual TileOcclusionRendererProxy * + createProxy + classCesium3DTilesSelection_1_1TileOcclusionRendererProxyPool.html + a986b4951d11a31014c167690ae0972da + ()=0 + + + virtual void + destroyProxy + classCesium3DTilesSelection_1_1TileOcclusionRendererProxyPool.html + adad09136b36a396dba711b0dd38af9a1 + (TileOcclusionRendererProxy *pProxy)=0 + + + + CesiumRasterOverlays::TileProviderAndTile + structCesiumRasterOverlays_1_1TileProviderAndTile.html + + CesiumUtility::IntrusivePointer< RasterOverlayTileProvider > + pTileProvider + structCesiumRasterOverlays_1_1TileProviderAndTile.html + aaa0a23f06bd1d1ae7f396a2335e9b99e + + + + CesiumUtility::IntrusivePointer< RasterOverlayTile > + pTile + structCesiumRasterOverlays_1_1TileProviderAndTile.html + a531020e50bc05e2409b72934aed8b6da + + + + + Cesium3DTilesReader::TileReader + classCesium3DTilesReader_1_1TileReader.html + + + TileReader + classCesium3DTilesReader_1_1TileReader.html + a1643be9c7a10ffe1a913c26258696256 + () + + + CesiumJsonReader::JsonReaderOptions & + getOptions + classCesium3DTilesReader_1_1TileReader.html + af1cb1d958c7f8a377ed116c2adfc4686 + () + + + const CesiumJsonReader::JsonReaderOptions & + getOptions + classCesium3DTilesReader_1_1TileReader.html + ae41458f70cef12db7840c3c877dd722b + () const + + + CesiumJsonReader::ReadJsonResult< Cesium3DTiles::Tile > + readFromJson + classCesium3DTilesReader_1_1TileReader.html + aec78a5fe532fd2f60ec429aa5d3c07f7 + (const std::span< const std::byte > &data) const + + + CesiumJsonReader::ReadJsonResult< Cesium3DTiles::Tile > + readFromJson + classCesium3DTilesReader_1_1TileReader.html + a88ce326b371d2e9209d51f3b2ab74bab + (const rapidjson::Value &value) const + + + CesiumJsonReader::ReadJsonResult< std::vector< Cesium3DTiles::Tile > > + readArrayFromJson + classCesium3DTilesReader_1_1TileReader.html + aa51f5c26ba42ef6b0e8cdac17f1a335c + (const rapidjson::Value &value) const + + + + Cesium3DTilesSelection::TileRenderContent + classCesium3DTilesSelection_1_1TileRenderContent.html + + + TileRenderContent + classCesium3DTilesSelection_1_1TileRenderContent.html + a540ac12cbfbf45797196abb7be9fa4ed + (CesiumGltf::Model &&model) + + + const CesiumGltf::Model & + getModel + classCesium3DTilesSelection_1_1TileRenderContent.html + afcbf6032f5b24ac20e23b7985d9417f1 + () const noexcept + + + CesiumGltf::Model & + getModel + classCesium3DTilesSelection_1_1TileRenderContent.html + a43c46a29dd29de74f5ab3bf3d43d21e5 + () noexcept + + + void + setModel + classCesium3DTilesSelection_1_1TileRenderContent.html + a13457bf5368d023f162cc3e2ecaa1094 + (const CesiumGltf::Model &model) + + + void + setModel + classCesium3DTilesSelection_1_1TileRenderContent.html + a25f278373863b391f22040c91ec02e77 + (CesiumGltf::Model &&model) + + + const CesiumRasterOverlays::RasterOverlayDetails & + getRasterOverlayDetails + classCesium3DTilesSelection_1_1TileRenderContent.html + af1a7e9146d22c02e1b1fee3340c33615 + () const noexcept + + + CesiumRasterOverlays::RasterOverlayDetails & + getRasterOverlayDetails + classCesium3DTilesSelection_1_1TileRenderContent.html + acc644a49c37c2810d5cf81dd92252e93 + () noexcept + + + void + setRasterOverlayDetails + classCesium3DTilesSelection_1_1TileRenderContent.html + aec6c947ff4626431aed84b21318fbf03 + (const CesiumRasterOverlays::RasterOverlayDetails &rasterOverlayDetails) + + + void + setRasterOverlayDetails + classCesium3DTilesSelection_1_1TileRenderContent.html + ac717744312d9f961643ccddb9923d9b4 + (CesiumRasterOverlays::RasterOverlayDetails &&rasterOverlayDetails) + + + const std::vector< CesiumUtility::Credit > & + getCredits + classCesium3DTilesSelection_1_1TileRenderContent.html + a58f0c2824afe29a8f3a6fded724c892c + () const noexcept + + + std::vector< CesiumUtility::Credit > & + getCredits + classCesium3DTilesSelection_1_1TileRenderContent.html + a5737251b18e7e994b82aa867aa819d34 + () noexcept + + + void + setCredits + classCesium3DTilesSelection_1_1TileRenderContent.html + a1d48aea42a5949cd7ffa3b9befcd8ba7 + (std::vector< CesiumUtility::Credit > &&credits) + + + void + setCredits + classCesium3DTilesSelection_1_1TileRenderContent.html + a8435f63b4a57ff758dcabdd967cb7eec + (const std::vector< CesiumUtility::Credit > &credits) + + + void * + getRenderResources + classCesium3DTilesSelection_1_1TileRenderContent.html + a30991774d77b11f01e4d226bd8da4398 + () const noexcept + + + void + setRenderResources + classCesium3DTilesSelection_1_1TileRenderContent.html + aa2a06297c29fddae36331e572b19de3d + (void *pRenderResources) noexcept + + + float + getLodTransitionFadePercentage + classCesium3DTilesSelection_1_1TileRenderContent.html + aab626d803d34f3e213ec8f5f70ae4a39 + () const noexcept + + + void + setLodTransitionFadePercentage + classCesium3DTilesSelection_1_1TileRenderContent.html + a4f2f46b6135caba66e8a336a9f78057f + (float percentage) noexcept + + + + Cesium3DTilesSelection::TileSelectionState + classCesium3DTilesSelection_1_1TileSelectionState.html + + + Result + classCesium3DTilesSelection_1_1TileSelectionState.html + a38acee649c08e4d7f04dc26d146c0151 + + None + Culled + Rendered + Refined + RenderedAndKicked + RefinedAndKicked + + + constexpr + TileSelectionState + classCesium3DTilesSelection_1_1TileSelectionState.html + a9e37cb333af6b1b84bc60092beb87330 + () noexcept + + + constexpr + TileSelectionState + classCesium3DTilesSelection_1_1TileSelectionState.html + a079bb18c4f937330a07d95f5722985f0 + (int32_t frameNumber, Result result) noexcept + + + constexpr int32_t + getFrameNumber + classCesium3DTilesSelection_1_1TileSelectionState.html + a425b01324c83cad3478e98d7da19cbed + () const noexcept + + + constexpr Result + getResult + classCesium3DTilesSelection_1_1TileSelectionState.html + ace894cb8253a3f241db039e36ba0d4e4 + (int32_t frameNumber) const noexcept + + + constexpr bool + wasKicked + classCesium3DTilesSelection_1_1TileSelectionState.html + aeefab6310829bfeaf4ed7eb8a16e07c6 + (int32_t frameNumber) const noexcept + + + constexpr Result + getOriginalResult + classCesium3DTilesSelection_1_1TileSelectionState.html + a990eab25eb806bd4834ba24fb78c32dc + (int32_t frameNumber) const noexcept + + + constexpr void + kick + classCesium3DTilesSelection_1_1TileSelectionState.html + a9a3d2510ed5af812e807b2c7ea4f80fe + () noexcept + + + + Cesium3DTiles::Tileset + structCesium3DTiles_1_1Tileset.html + CesiumUtility::ExtensibleObject + + int64_t + getSizeBytes + structCesium3DTiles_1_1Tileset.html + a525f20724907683f0f0bfb6ccb580cfd + () const + + + Cesium3DTiles::Asset + asset + structCesium3DTiles_1_1Tileset.html + ac03c4e80711f9cb5a8240523889f3921 + + + + std::unordered_map< std::string, Cesium3DTiles::Properties > + properties + structCesium3DTiles_1_1Tileset.html + a941c596e24aa097264a6c0494501acdf + + + + std::optional< Cesium3DTiles::Schema > + schema + structCesium3DTiles_1_1Tileset.html + afe447e00e86accc32e23e236948bbc68 + + + + std::optional< std::string > + schemaUri + structCesium3DTiles_1_1Tileset.html + ac07b08cc318b663109205086a7cc0b4c + + + + std::optional< Cesium3DTiles::Statistics > + statistics + structCesium3DTiles_1_1Tileset.html + a7e3895944c46f8e8e395b10dd6836165 + + + + std::vector< Cesium3DTiles::GroupMetadata > + groups + structCesium3DTiles_1_1Tileset.html + ab51607c582acfeefcc510999bc1ebb34 + + + + std::optional< Cesium3DTiles::MetadataEntity > + metadata + structCesium3DTiles_1_1Tileset.html + a4605473730a43f55826bc9c7db2a8df2 + + + + double + geometricError + structCesium3DTiles_1_1Tileset.html + ab1f6d8867c71a532b4d47267fce67b4d + + + + Cesium3DTiles::Tile + root + structCesium3DTiles_1_1Tileset.html + a3c4f4050847d47dc9fd8bd1fac2a0d51 + + + + std::vector< std::string > + extensionsUsed + structCesium3DTiles_1_1Tileset.html + a8da9a54cd8fd1ed254a3a6a9d3d4e0fd + + + + std::vector< std::string > + extensionsRequired + structCesium3DTiles_1_1Tileset.html + a6f12612068bc1c81144e688b2601a163 + + + + static constexpr const char * + TypeName + structCesium3DTiles_1_1Tileset.html + a95cecf2a1ce2165675eaadad4ef153e8 + + + + + Cesium3DTilesSelection::Tileset + classCesium3DTilesSelection_1_1Tileset.html + + + Tileset + classCesium3DTilesSelection_1_1Tileset.html + ab9082fe9a32449decc465a6d555c4d6a + (const TilesetExternals &externals, std::unique_ptr< TilesetContentLoader > &&pCustomLoader, std::unique_ptr< Tile > &&pRootTile, const TilesetOptions &options=TilesetOptions()) + + + + Tileset + classCesium3DTilesSelection_1_1Tileset.html + a28eebeab0e2b88935ab77d70310004e3 + (const TilesetExternals &externals, const std::string &url, const TilesetOptions &options=TilesetOptions()) + + + + Tileset + classCesium3DTilesSelection_1_1Tileset.html + a15df53f73dac5a22a4de5ccee304f2b3 + (const TilesetExternals &externals, int64_t ionAssetID, const std::string &ionAccessToken, const TilesetOptions &options=TilesetOptions(), const std::string &ionAssetEndpointUrl="https://api.cesium.com/") + + + + ~Tileset + classCesium3DTilesSelection_1_1Tileset.html + ab727e24defe56d3b73befaca3cc6c459 + () noexcept + + + CesiumAsync::SharedFuture< void > & + getAsyncDestructionCompleteEvent + classCesium3DTilesSelection_1_1Tileset.html + a5af55043ebe6f574daf9ae13b38c8e49 + () + + + CesiumAsync::SharedFuture< void > & + getRootTileAvailableEvent + classCesium3DTilesSelection_1_1Tileset.html + a682d16f9db409910b81e995da3e33391 + () + + + const std::vector< CesiumUtility::Credit > & + getTilesetCredits + classCesium3DTilesSelection_1_1Tileset.html + ae6fb4db130c6c0fbe815d789595ce60b + () const noexcept + + + void + setShowCreditsOnScreen + classCesium3DTilesSelection_1_1Tileset.html + a086a445ec52e18fdede4cded053a8f3b + (bool showCreditsOnScreen) noexcept + + + TilesetExternals & + getExternals + classCesium3DTilesSelection_1_1Tileset.html + af61f56b640bce10ef5c42fe2eac936f9 + () noexcept + + + const TilesetExternals & + getExternals + classCesium3DTilesSelection_1_1Tileset.html + a370780314cd2ae279d8b27787562e0f4 + () const noexcept + + + CesiumAsync::AsyncSystem & + getAsyncSystem + classCesium3DTilesSelection_1_1Tileset.html + a294512097fc8db9428af22c78d891358 + () noexcept + + + const CesiumAsync::AsyncSystem & + getAsyncSystem + classCesium3DTilesSelection_1_1Tileset.html + a437ce565459f408db56b1106fe7ed12d + () const noexcept + + + const TilesetOptions & + getOptions + classCesium3DTilesSelection_1_1Tileset.html + a36ee0ccfa4ae46a0d0e0851c02406998 + () const noexcept + + + TilesetOptions & + getOptions + classCesium3DTilesSelection_1_1Tileset.html + a88fff146ea1b4c51281f718de6660c79 + () noexcept + + + const CesiumGeospatial::Ellipsoid & + getEllipsoid + classCesium3DTilesSelection_1_1Tileset.html + aab1d2c2bcd7186759a49e7ab761cbd19 + () const + + + CesiumGeospatial::Ellipsoid & + getEllipsoid + classCesium3DTilesSelection_1_1Tileset.html + a0d3d79744417cc1081674bbdd6b04791 + () noexcept + + + Tile * + getRootTile + classCesium3DTilesSelection_1_1Tileset.html + a2cb504f1e983a8777634851671b7fa8d + () noexcept + + + const Tile * + getRootTile + classCesium3DTilesSelection_1_1Tileset.html + ae33d3d6f64fa7b11856fe0e74caaf405 + () const noexcept + + + RasterOverlayCollection & + getOverlays + classCesium3DTilesSelection_1_1Tileset.html + aee41d8d795491155969fde3694854953 + () noexcept + + + const RasterOverlayCollection & + getOverlays + classCesium3DTilesSelection_1_1Tileset.html + a7dbe02c98ac0e05d0e03b05e01de4e76 + () const noexcept + + + TilesetSharedAssetSystem & + getSharedAssetSystem + classCesium3DTilesSelection_1_1Tileset.html + afe7eacce0ddeda9f84ef35676c00357b + () noexcept + + + const TilesetSharedAssetSystem & + getSharedAssetSystem + classCesium3DTilesSelection_1_1Tileset.html + a7401188671af57c6ccfbbd805b63518c + () const noexcept + + + const ViewUpdateResult & + updateViewOffline + classCesium3DTilesSelection_1_1Tileset.html + a7bb9a06e4d64eb0411f47893f3321698 + (const std::vector< ViewState > &frustums) + + + const ViewUpdateResult & + updateView + classCesium3DTilesSelection_1_1Tileset.html + aa7de838ae886987412d659a022111da6 + (const std::vector< ViewState > &frustums, float deltaTime=0.0f) + + + int32_t + getNumberOfTilesLoaded + classCesium3DTilesSelection_1_1Tileset.html + a5562528a19c4930a0fce57f0a48b96e7 + () const + + + float + computeLoadProgress + classCesium3DTilesSelection_1_1Tileset.html + a72b6bb16a16092eb807c3cdb093fbfe2 + () noexcept + + + void + forEachLoadedTile + classCesium3DTilesSelection_1_1Tileset.html + a3dfc253ba0fa0e456882f2aeb766f14d + (const std::function< void(Tile &tile)> &callback) + + + void + forEachLoadedTile + classCesium3DTilesSelection_1_1Tileset.html + a9006bff94c653a4a3b9535e6371d192a + (const std::function< void(const Tile &tile)> &callback) const + + + int64_t + getTotalDataBytes + classCesium3DTilesSelection_1_1Tileset.html + a813e7072e4e1efe34458f44d35d4bf26 + () const noexcept + + + const TilesetMetadata * + getMetadata + classCesium3DTilesSelection_1_1Tileset.html + aa4c967e0abde1e9417e401dd4a136938 + (const Tile *pTile=nullptr) const + + + CesiumAsync::Future< const TilesetMetadata * > + loadMetadata + classCesium3DTilesSelection_1_1Tileset.html + aef567f53a621fb0a4a1c46cfb24ea4bf + () + + + CesiumAsync::Future< SampleHeightResult > + sampleHeightMostDetailed + classCesium3DTilesSelection_1_1Tileset.html + a2d199ba92faa5debdd948faced605a89 + (const std::vector< CesiumGeospatial::Cartographic > &positions) + + + + Cesium3DTilesSelection::TilesetContentLoader + classCesium3DTilesSelection_1_1TilesetContentLoader.html + + virtual + ~TilesetContentLoader + classCesium3DTilesSelection_1_1TilesetContentLoader.html + a659d8d6910309e5daea9f54f6823e90f + ()=default + + + virtual CesiumAsync::Future< TileLoadResult > + loadTileContent + classCesium3DTilesSelection_1_1TilesetContentLoader.html + adffd25fa2db92fae6d88c758de95fff0 + (const TileLoadInput &input)=0 + + + virtual TileChildrenResult + createTileChildren + classCesium3DTilesSelection_1_1TilesetContentLoader.html + a63e66904c671a04b27ab09a250f66ff6 + (const Tile &tile, const CesiumGeospatial::Ellipsoid &ellipsoid=CesiumGeospatial::Ellipsoid::WGS84)=0 + + + virtual ITilesetHeightSampler * + getHeightSampler + classCesium3DTilesSelection_1_1TilesetContentLoader.html + af51fd6825bd1a20fef800b66733e6bf3 + () + + + + Cesium3DTilesSelection::TilesetContentOptions + structCesium3DTilesSelection_1_1TilesetContentOptions.html + + bool + enableWaterMask + structCesium3DTilesSelection_1_1TilesetContentOptions.html + aed6462f71d4275486cab2cae5448f6fb + + + + bool + generateMissingNormalsSmooth + structCesium3DTilesSelection_1_1TilesetContentOptions.html + a126abfa2db154341f85b90b156334932 + + + + CesiumGltf::Ktx2TranscodeTargets + ktx2TranscodeTargets + structCesium3DTilesSelection_1_1TilesetContentOptions.html + a4519b0f2719ecccaf91a52d45a63b247 + + + + bool + applyTextureTransform + structCesium3DTilesSelection_1_1TilesetContentOptions.html + a7f7b3a2febdd2a34c97f6e9adb5cbbf6 + + + + + Cesium3DTilesSelection::TilesetExternals + classCesium3DTilesSelection_1_1TilesetExternals.html + + std::shared_ptr< CesiumAsync::IAssetAccessor > + pAssetAccessor + classCesium3DTilesSelection_1_1TilesetExternals.html + a2e46215de527b84ea1dd15151a6fa77a + + + + std::shared_ptr< IPrepareRendererResources > + pPrepareRendererResources + classCesium3DTilesSelection_1_1TilesetExternals.html + a768c18bc6fe3c8f9f7d9797fe1576f76 + + + + CesiumAsync::AsyncSystem + asyncSystem + classCesium3DTilesSelection_1_1TilesetExternals.html + a2aa56506fd06d700dea17907fda881f5 + + + + std::shared_ptr< CesiumUtility::CreditSystem > + pCreditSystem + classCesium3DTilesSelection_1_1TilesetExternals.html + a4c755562644c04165990f3a822b34598 + + + + std::shared_ptr< spdlog::logger > + pLogger + classCesium3DTilesSelection_1_1TilesetExternals.html + abd9600c9ca530d19d029a9054ff902b0 + + + + std::shared_ptr< TileOcclusionRendererProxyPool > + pTileOcclusionProxyPool + classCesium3DTilesSelection_1_1TilesetExternals.html + ab315bb2865ec4ac4551b7ac705988121 + + + + CesiumUtility::IntrusivePointer< TilesetSharedAssetSystem > + pSharedAssetSystem + classCesium3DTilesSelection_1_1TilesetExternals.html + a388ffc370e2b4d28e689f95ee6fc3e56 + + + + + Cesium3DTilesSelection::TilesetLoadFailureDetails + classCesium3DTilesSelection_1_1TilesetLoadFailureDetails.html + + const Tileset * + pTileset + classCesium3DTilesSelection_1_1TilesetLoadFailureDetails.html + afaf4aa9ea6b41f08cf9b55971454baac + + + + TilesetLoadType + type + classCesium3DTilesSelection_1_1TilesetLoadFailureDetails.html + a12b605fb4f7bd1476ef8feb4196f8806 + + + + uint16_t + statusCode + classCesium3DTilesSelection_1_1TilesetLoadFailureDetails.html + a9ea4dedbffccd70e5cc7173ec91f04ed + + + + std::string + message + classCesium3DTilesSelection_1_1TilesetLoadFailureDetails.html + a09329a31ddb8a502e645f245a7f94ccf + + + + + Cesium3DTilesSelection::TilesetMetadata + classCesium3DTilesSelection_1_1TilesetMetadata.html + + CesiumAsync::SharedFuture< void > & + loadSchemaUri + classCesium3DTilesSelection_1_1TilesetMetadata.html + a372908f47b271fdd53b12aa4cadd2ba4 + (const CesiumAsync::AsyncSystem &asyncSystem, const std::shared_ptr< CesiumAsync::IAssetAccessor > &pAssetAccessor) + + + std::optional< Cesium3DTiles::Schema > + schema + classCesium3DTilesSelection_1_1TilesetMetadata.html + a548a64bce243edf3a45c1357c871bf36 + + + + std::optional< std::string > + schemaUri + classCesium3DTilesSelection_1_1TilesetMetadata.html + affe303f6890ea43e560e74e2d41a85ed + + + + std::vector< Cesium3DTiles::GroupMetadata > + groups + classCesium3DTilesSelection_1_1TilesetMetadata.html + a4ee0a541db81f03324ea6776e6ad75a6 + + + + std::optional< Cesium3DTiles::MetadataEntity > + metadata + classCesium3DTilesSelection_1_1TilesetMetadata.html + abf2401411871234f70d3fda5daf88883 + + + + + Cesium3DTilesSelection::TilesetOptions + structCesium3DTilesSelection_1_1TilesetOptions.html + + std::optional< std::string > + credit + structCesium3DTilesSelection_1_1TilesetOptions.html + a698a68c712411e6fbcd992be86cbc6ff + + + + bool + showCreditsOnScreen + structCesium3DTilesSelection_1_1TilesetOptions.html + aade191b65ed3f9455f8fbcba9f20b9e8 + + + + double + maximumScreenSpaceError + structCesium3DTilesSelection_1_1TilesetOptions.html + a9c4d93e8066ddba71f3a65d40d1c0a15 + + + + uint32_t + maximumSimultaneousTileLoads + structCesium3DTilesSelection_1_1TilesetOptions.html + a1b8a66e848efb0c9cf59c63b467aa4dd + + + + uint32_t + maximumSimultaneousSubtreeLoads + structCesium3DTilesSelection_1_1TilesetOptions.html + a42c7735e78cb88dcc8c81dfdc9fddc54 + + + + bool + preloadAncestors + structCesium3DTilesSelection_1_1TilesetOptions.html + a1270c22bca8eb691af2f067602a4accc + + + + bool + preloadSiblings + structCesium3DTilesSelection_1_1TilesetOptions.html + a91947e1db19ede600add6a097e116d21 + + + + uint32_t + loadingDescendantLimit + structCesium3DTilesSelection_1_1TilesetOptions.html + a04eaf7a4f9e3d3d6364c07773eaa70d4 + + + + bool + forbidHoles + structCesium3DTilesSelection_1_1TilesetOptions.html + af664551930c47fc37f5b9e8a33b2a9ae + + + + bool + enableFrustumCulling + structCesium3DTilesSelection_1_1TilesetOptions.html + a9d602c5fa0217af33f80654e1909dfca + + + + bool + enableOcclusionCulling + structCesium3DTilesSelection_1_1TilesetOptions.html + a3819f45a4676614da5011c2e6a3294fb + + + + bool + delayRefinementForOcclusion + structCesium3DTilesSelection_1_1TilesetOptions.html + a5ce3a024e88e0e12e3637263cd6aaec8 + + + + bool + enableFogCulling + structCesium3DTilesSelection_1_1TilesetOptions.html + ae5deb7ca97ed31ead8181e688f4c0805 + + + + bool + enforceCulledScreenSpaceError + structCesium3DTilesSelection_1_1TilesetOptions.html + af6c864290975b59fcda135171039978e + + + + double + culledScreenSpaceError + structCesium3DTilesSelection_1_1TilesetOptions.html + a58267374d5b4a6061c04061081388abc + + + + int64_t + maximumCachedBytes + structCesium3DTilesSelection_1_1TilesetOptions.html + a6ea47ef2b6ba2e864cd939937607f9ab + + + + std::vector< FogDensityAtHeight > + fogDensityTable + structCesium3DTilesSelection_1_1TilesetOptions.html + a4ba7655cc2a581bb14b89a6cd46ccdb5 + + + + bool + renderTilesUnderCamera + structCesium3DTilesSelection_1_1TilesetOptions.html + aab05de47231f8bcafd7c0af6a4cd83bb + + + + std::vector< std::shared_ptr< ITileExcluder > > + excluders + structCesium3DTilesSelection_1_1TilesetOptions.html + a0c16b3075dcf8b0e4314141c04ca6619 + + + + std::function< void(const TilesetLoadFailureDetails &)> + loadErrorCallback + structCesium3DTilesSelection_1_1TilesetOptions.html + a05082c5b9f18f80876cd96e27f094fc1 + + + + bool + enableLodTransitionPeriod + structCesium3DTilesSelection_1_1TilesetOptions.html + af1c4e34fd3438dadcf598a82a72f48a0 + + + + float + lodTransitionLength + structCesium3DTilesSelection_1_1TilesetOptions.html + a4fe46f108b50956ca87315c47a840a9b + + + + bool + kickDescendantsWhileFadingIn + structCesium3DTilesSelection_1_1TilesetOptions.html + a584e0691809d7f67f2df6b014054f3e2 + + + + double + mainThreadLoadingTimeLimit + structCesium3DTilesSelection_1_1TilesetOptions.html + a39aae501a473a50892f8be223c404f98 + + + + double + tileCacheUnloadTimeLimit + structCesium3DTilesSelection_1_1TilesetOptions.html + a424e9ca0c4bb30e62daae404c64e0c80 + + + + TilesetContentOptions + contentOptions + structCesium3DTilesSelection_1_1TilesetOptions.html + ab9a6eb88f09f96599e3f2c536731d54c + + + + std::any + rendererOptions + structCesium3DTilesSelection_1_1TilesetOptions.html + acebd4b65afcfabb5fc0f53681a082933 + + + + CesiumGeospatial::Ellipsoid + ellipsoid + structCesium3DTilesSelection_1_1TilesetOptions.html + aec6bf27cef9c4ecf0175591ca86d72e7 + + + + + Cesium3DTilesReader::TilesetReader + classCesium3DTilesReader_1_1TilesetReader.html + + + TilesetReader + classCesium3DTilesReader_1_1TilesetReader.html + a324dbda11ccd4dfabfa6e9006dcb83eb + () + + + CesiumJsonReader::JsonReaderOptions & + getOptions + classCesium3DTilesReader_1_1TilesetReader.html + a8f936e3e2f49f6a102b46804d7b320db + () + + + const CesiumJsonReader::JsonReaderOptions & + getOptions + classCesium3DTilesReader_1_1TilesetReader.html + a4c8397edf259911b73d8381be7da8e13 + () const + + + CesiumJsonReader::ReadJsonResult< Cesium3DTiles::Tileset > + readFromJson + classCesium3DTilesReader_1_1TilesetReader.html + ac874f639a4c37558e47e5f81a1c543fc + (const std::span< const std::byte > &data) const + + + CesiumJsonReader::ReadJsonResult< Cesium3DTiles::Tileset > + readFromJson + classCesium3DTilesReader_1_1TilesetReader.html + a8b33d76c6a80a226f0a754dac6a46fce + (const rapidjson::Value &value) const + + + CesiumJsonReader::ReadJsonResult< std::vector< Cesium3DTiles::Tileset > > + readArrayFromJson + classCesium3DTilesReader_1_1TilesetReader.html + aa553809ca1fc80fb098b58bded871441 + (const rapidjson::Value &value) const + + + + Cesium3DTilesSelection::TilesetSharedAssetSystem + classCesium3DTilesSelection_1_1TilesetSharedAssetSystem.html + CesiumGltfReader::GltfSharedAssetSystem + + static CesiumUtility::IntrusivePointer< TilesetSharedAssetSystem > + getDefault + classCesium3DTilesSelection_1_1TilesetSharedAssetSystem.html + a7807eec563eeae249b79ec5b8bf3c6ee + () + + + + Cesium3DTilesWriter::TilesetWriter + classCesium3DTilesWriter_1_1TilesetWriter.html + + + TilesetWriter + classCesium3DTilesWriter_1_1TilesetWriter.html + aacc8b856c63ffc908420fbe3bdf1007c + () + + + CesiumJsonWriter::ExtensionWriterContext & + getExtensions + classCesium3DTilesWriter_1_1TilesetWriter.html + a0d9ba5038f8315bc5d7afe8ab1e82aa7 + () + + + const CesiumJsonWriter::ExtensionWriterContext & + getExtensions + classCesium3DTilesWriter_1_1TilesetWriter.html + a9b4a5c48037d6c14cd2d02c53f297f02 + () const + + + TilesetWriterResult + writeTileset + classCesium3DTilesWriter_1_1TilesetWriter.html + a01c5be9dbd03e9cd7f9ade4199f7acdd + (const Cesium3DTiles::Tileset &tileset, const TilesetWriterOptions &options=TilesetWriterOptions()) const + + + + Cesium3DTilesWriter::TilesetWriterOptions + structCesium3DTilesWriter_1_1TilesetWriterOptions.html + + bool + prettyPrint + structCesium3DTilesWriter_1_1TilesetWriterOptions.html + a4ddd239583a592b3748930bac09a2ec7 + + + + + Cesium3DTilesWriter::TilesetWriterResult + structCesium3DTilesWriter_1_1TilesetWriterResult.html + + std::vector< std::byte > + tilesetBytes + structCesium3DTilesWriter_1_1TilesetWriterResult.html + a646d50b654c754caa26a4498e75e8ddc + + + + std::vector< std::string > + errors + structCesium3DTilesWriter_1_1TilesetWriterResult.html + a78fcb538e8197012011615480f1877de + + + + std::vector< std::string > + warnings + structCesium3DTilesWriter_1_1TilesetWriterResult.html + a873cce2fc55bf78f7a89c0b148dd313f + + + + + Cesium3DTilesContent::TileTransform + classCesium3DTilesContent_1_1TileTransform.html + + static std::optional< glm::dmat4 > + getTransform + classCesium3DTilesContent_1_1TileTransform.html + a7c7d8fdacb125da33d7054e449bab92c + (const Cesium3DTiles::Tile &tile) + + + static void + setTransform + classCesium3DTilesContent_1_1TileTransform.html + aa5c13450a1a3c432f3ae1f319c0ccffa + (Cesium3DTiles::Tile &tile, const glm::dmat4 &newTransform) + + + + Cesium3DTilesSelection::TileUnknownContent + structCesium3DTilesSelection_1_1TileUnknownContent.html + + + CesiumIonClient::Token + structCesiumIonClient_1_1Token.html + + std::string + id + structCesiumIonClient_1_1Token.html + aaa61b0319faf555af4bae19a5d539ea3 + + + + std::string + name + structCesiumIonClient_1_1Token.html + ab81b423e6aedfde88162bbee728e44bf + + + + std::string + token + structCesiumIonClient_1_1Token.html + a008acd1f2acaa3fb8854720784e8d0dd + + + + std::string + dateAdded + structCesiumIonClient_1_1Token.html + acd87a35b7af72bb60245f381572a387f + + + + std::string + dateModified + structCesiumIonClient_1_1Token.html + a12342e2faf148c10193cb701bc564505 + + + + std::string + dateLastUsed + structCesiumIonClient_1_1Token.html + ae42d1ffddf66d65f542c3f20e089ed86 + + + + std::optional< std::vector< int64_t > > + assetIds + structCesiumIonClient_1_1Token.html + a1439ba783c74083aec1f1962060175f5 + + + + bool + isDefault + structCesiumIonClient_1_1Token.html + ac51e8d6f65028e2fa5afd58226d69b4c + + + + std::optional< std::vector< std::string > > + allowedUrls + structCesiumIonClient_1_1Token.html + a0d20fbb602912d3ed4d5b311a0eaa189 + + + + std::vector< std::string > + scopes + structCesiumIonClient_1_1Token.html + aba2cf5271b27092663d070c2decac72a + + + + + CesiumIonClient::TokenList + structCesiumIonClient_1_1TokenList.html + + std::vector< Token > + items + structCesiumIonClient_1_1TokenList.html + aa142251338901562de5a314c1a47e324 + + + + + CesiumGeometry::Transforms + structCesiumGeometry_1_1Transforms.html + + static glm::dmat4 + createTranslationRotationScaleMatrix + structCesiumGeometry_1_1Transforms.html + a170b9193599bbf38d041da7f1275e4bc + (const glm::dvec3 &translation, const glm::dquat &rotation, const glm::dvec3 &scale) + + + static void + computeTranslationRotationScaleFromMatrix + structCesiumGeometry_1_1Transforms.html + a5a03d21ba6ed760a4c5eea63e54227fb + (const glm::dmat4 &matrix, glm::dvec3 *pTranslation, glm::dquat *pRotation, glm::dvec3 *pScale) + + + static const glm::dmat4 & + getUpAxisTransform + structCesiumGeometry_1_1Transforms.html + aa78b8fe1aab86e4b900a6f1ec6427eb7 + (CesiumGeometry::Axis from, CesiumGeometry::Axis to) + + + static const glm::dmat4 + Y_UP_TO_Z_UP + structCesiumGeometry_1_1Transforms.html + ae513f1171098802da91763025cfc4063 + + + + static const glm::dmat4 + Z_UP_TO_Y_UP + structCesiumGeometry_1_1Transforms.html + a90db62f28a32619edeead9b21ec96f8c + + + + static const glm::dmat4 + X_UP_TO_Z_UP + structCesiumGeometry_1_1Transforms.html + aae1483cf3d26b703537064606b995da2 + + + + static const glm::dmat4 + Z_UP_TO_X_UP + structCesiumGeometry_1_1Transforms.html + a0517f8cb238f54c3b6f9e1f2809f4c71 + + + + static const glm::dmat4 + X_UP_TO_Y_UP + structCesiumGeometry_1_1Transforms.html + a644d864b82d464ab7b90f8479550044a + + + + static const glm::dmat4 + Y_UP_TO_X_UP + structCesiumGeometry_1_1Transforms.html + a21b4a834cc570b7899401ac4c4d73ef7 + + + + + Cesium3DTiles::ClassProperty::Type + structCesium3DTiles_1_1ClassProperty_1_1Type.html + + static const std::string + SCALAR + structCesium3DTiles_1_1ClassProperty_1_1Type.html + aee93cd4ed41461178aea0cbd1fd149f0 + + + + static const std::string + VEC2 + structCesium3DTiles_1_1ClassProperty_1_1Type.html + af264ebcf68cc203b963fb677c4f0a872 + + + + static const std::string + VEC3 + structCesium3DTiles_1_1ClassProperty_1_1Type.html + a0e1ce7057d359aad8ce28ff155e39b61 + + + + static const std::string + VEC4 + structCesium3DTiles_1_1ClassProperty_1_1Type.html + a663abc440cb45bb9b2b9146134871e4d + + + + static const std::string + MAT2 + structCesium3DTiles_1_1ClassProperty_1_1Type.html + a6ea3c57614c5acb863b68bd15d5d2e79 + + + + static const std::string + MAT3 + structCesium3DTiles_1_1ClassProperty_1_1Type.html + a9a194a609470d8d2aadbc81f5039bba1 + + + + static const std::string + MAT4 + structCesium3DTiles_1_1ClassProperty_1_1Type.html + a6ae49e1dc1025d2f0f6c224470be063f + + + + static const std::string + STRING + structCesium3DTiles_1_1ClassProperty_1_1Type.html + a802ea911c7f0f868bc59310dece7a45c + + + + static const std::string + BOOLEAN + structCesium3DTiles_1_1ClassProperty_1_1Type.html + a6d5dd38e9ff31bfee5c68582bfc58783 + + + + static const std::string + ENUM + structCesium3DTiles_1_1ClassProperty_1_1Type.html + a4cd8bf2798ab21d33648593d0867fad8 + + + + + CesiumGltf::AccessorSpec::Type + structCesiumGltf_1_1AccessorSpec_1_1Type.html + + static const std::string + SCALAR + structCesiumGltf_1_1AccessorSpec_1_1Type.html + a06e5627f920ba26595d6237738ea76da + + + + static const std::string + VEC2 + structCesiumGltf_1_1AccessorSpec_1_1Type.html + a73bc18dfd483632304f907ba2abdb74a + + + + static const std::string + VEC3 + structCesiumGltf_1_1AccessorSpec_1_1Type.html + a5bd3bad399a3c74696a7fb744d9e0701 + + + + static const std::string + VEC4 + structCesiumGltf_1_1AccessorSpec_1_1Type.html + a2039b5fc89e00a846b00fccf13bf35d7 + + + + static const std::string + MAT2 + structCesiumGltf_1_1AccessorSpec_1_1Type.html + ae855a621f01d5bba4d939300752034e9 + + + + static const std::string + MAT3 + structCesiumGltf_1_1AccessorSpec_1_1Type.html + a6d431ccfb8b8cafb068c9766dab1ca42 + + + + static const std::string + MAT4 + structCesiumGltf_1_1AccessorSpec_1_1Type.html + a3c4a6b9fb052a329abcac248e93df8c1 + + + + + CesiumGltf::Camera::Type + structCesiumGltf_1_1Camera_1_1Type.html + + static const std::string + perspective + structCesiumGltf_1_1Camera_1_1Type.html + ac14a978d376e97c0777303b0d02fb6de + + + + static const std::string + orthographic + structCesiumGltf_1_1Camera_1_1Type.html + a2b7f4ec63c57aaefaf5f99a3676035cc + + + + + CesiumGltf::ClassProperty::Type + structCesiumGltf_1_1ClassProperty_1_1Type.html + + static const std::string + SCALAR + structCesiumGltf_1_1ClassProperty_1_1Type.html + ade88157fcf7689b3e121b539b411279b + + + + static const std::string + VEC2 + structCesiumGltf_1_1ClassProperty_1_1Type.html + ad088749b70bd4bcde1012dd6dec19cba + + + + static const std::string + VEC3 + structCesiumGltf_1_1ClassProperty_1_1Type.html + a63abd6ed2fb16e929d24d051019c1578 + + + + static const std::string + VEC4 + structCesiumGltf_1_1ClassProperty_1_1Type.html + a6236c4e57b0e21309d44037d1943526c + + + + static const std::string + MAT2 + structCesiumGltf_1_1ClassProperty_1_1Type.html + ab836b768105f3472b3937a76aa2c87ab + + + + static const std::string + MAT3 + structCesiumGltf_1_1ClassProperty_1_1Type.html + ab4c1d0b3f2a6844071a6e39a3c46e594 + + + + static const std::string + MAT4 + structCesiumGltf_1_1ClassProperty_1_1Type.html + a5ebd3966decdfda1ac63f0dd62773a6b + + + + static const std::string + STRING + structCesiumGltf_1_1ClassProperty_1_1Type.html + a0ae05755b1f348b8b23ce112f30a9141 + + + + static const std::string + BOOLEAN + structCesiumGltf_1_1ClassProperty_1_1Type.html + aebbe8723e0a872e49c0eed2ca13d110b + + + + static const std::string + ENUM + structCesiumGltf_1_1ClassProperty_1_1Type.html + aadbee7ec8bc88d5a8d69c4081541d346 + + + + + CesiumGltf::TypeToNormalizedType + structCesiumGltf_1_1TypeToNormalizedType.html + typename T + + + CesiumGltf::TypeToNormalizedType< glm::mat< N, N, T, Q > > + structCesiumGltf_1_1TypeToNormalizedType_3_01glm_1_1mat_3_01N_00_01N_00_01T_00_01Q_01_4_01_4.html + glm::length_t N + typename T + glm::qualifier Q + + glm::mat< N, N, double, Q > + type + structCesiumGltf_1_1TypeToNormalizedType_3_01glm_1_1mat_3_01N_00_01N_00_01T_00_01Q_01_4_01_4.html + a4f6b2d815937c551447fc355a14ccfe5 + + + + + CesiumGltf::TypeToNormalizedType< glm::vec< N, T, Q > > + structCesiumGltf_1_1TypeToNormalizedType_3_01glm_1_1vec_3_01N_00_01T_00_01Q_01_4_01_4.html + glm::length_t N + typename T + glm::qualifier Q + + glm::vec< N, double, Q > + type + structCesiumGltf_1_1TypeToNormalizedType_3_01glm_1_1vec_3_01N_00_01T_00_01Q_01_4_01_4.html + a428dc372be3e70a762ba4860dee38e2a + + + + + CesiumGltf::TypeToNormalizedType< int16_t > + structCesiumGltf_1_1TypeToNormalizedType_3_01int16__t_01_4.html + + double + type + structCesiumGltf_1_1TypeToNormalizedType_3_01int16__t_01_4.html + ae885fef66718b4aea4807925d381170d + + + + + CesiumGltf::TypeToNormalizedType< int32_t > + structCesiumGltf_1_1TypeToNormalizedType_3_01int32__t_01_4.html + + double + type + structCesiumGltf_1_1TypeToNormalizedType_3_01int32__t_01_4.html + a868499959af803d380bb9f7612fabc6d + + + + + CesiumGltf::TypeToNormalizedType< int64_t > + structCesiumGltf_1_1TypeToNormalizedType_3_01int64__t_01_4.html + + double + type + structCesiumGltf_1_1TypeToNormalizedType_3_01int64__t_01_4.html + ac1202f56858aee4be65cb9e1d8847496 + + + + + CesiumGltf::TypeToNormalizedType< int8_t > + structCesiumGltf_1_1TypeToNormalizedType_3_01int8__t_01_4.html + + double + type + structCesiumGltf_1_1TypeToNormalizedType_3_01int8__t_01_4.html + a576af3e50a9f26e87831744793d07d28 + + + + + CesiumGltf::TypeToNormalizedType< PropertyArrayView< glm::mat< N, N, T, Q > > > + structCesiumGltf_1_1TypeToNormalizedType_3_01PropertyArrayView_3_01glm_1_1mat_3_01N_00_01N_00_01T_00_01Q_01_4_01_4_01_4.html + glm::length_t N + typename T + glm::qualifier Q + + PropertyArrayView< glm::mat< N, N, double, Q > > + type + structCesiumGltf_1_1TypeToNormalizedType_3_01PropertyArrayView_3_01glm_1_1mat_3_01N_00_01N_00_01T_00_01Q_01_4_01_4_01_4.html + a1ab604a6d36af4a1883a3547326bc270 + + + + + CesiumGltf::TypeToNormalizedType< PropertyArrayView< glm::vec< N, T, Q > > > + structCesiumGltf_1_1TypeToNormalizedType_3_01PropertyArrayView_3_01glm_1_1vec_3_01N_00_01T_00_01Q_01_4_01_4_01_4.html + glm::length_t N + typename T + glm::qualifier Q + + PropertyArrayView< glm::vec< N, double, Q > > + type + structCesiumGltf_1_1TypeToNormalizedType_3_01PropertyArrayView_3_01glm_1_1vec_3_01N_00_01T_00_01Q_01_4_01_4_01_4.html + afea62c95d0ddde024ee7ff22b83690b3 + + + + + CesiumGltf::TypeToNormalizedType< PropertyArrayView< int16_t > > + structCesiumGltf_1_1TypeToNormalizedType_3_01PropertyArrayView_3_01int16__t_01_4_01_4.html + + PropertyArrayView< double > + type + structCesiumGltf_1_1TypeToNormalizedType_3_01PropertyArrayView_3_01int16__t_01_4_01_4.html + aa7e81247840fba8c73e1428e379cf50d + + + + + CesiumGltf::TypeToNormalizedType< PropertyArrayView< int32_t > > + structCesiumGltf_1_1TypeToNormalizedType_3_01PropertyArrayView_3_01int32__t_01_4_01_4.html + + PropertyArrayView< double > + type + structCesiumGltf_1_1TypeToNormalizedType_3_01PropertyArrayView_3_01int32__t_01_4_01_4.html + a978d442ee89edf90e5fb1a1679802931 + + + + + CesiumGltf::TypeToNormalizedType< PropertyArrayView< int64_t > > + structCesiumGltf_1_1TypeToNormalizedType_3_01PropertyArrayView_3_01int64__t_01_4_01_4.html + + PropertyArrayView< double > + type + structCesiumGltf_1_1TypeToNormalizedType_3_01PropertyArrayView_3_01int64__t_01_4_01_4.html + a39abc201789497c3a74128f2d8b79b1d + + + + + CesiumGltf::TypeToNormalizedType< PropertyArrayView< int8_t > > + structCesiumGltf_1_1TypeToNormalizedType_3_01PropertyArrayView_3_01int8__t_01_4_01_4.html + + PropertyArrayView< double > + type + structCesiumGltf_1_1TypeToNormalizedType_3_01PropertyArrayView_3_01int8__t_01_4_01_4.html + a82e67ba82fefc544f18f3dfda72a4f42 + + + + + CesiumGltf::TypeToNormalizedType< PropertyArrayView< uint16_t > > + structCesiumGltf_1_1TypeToNormalizedType_3_01PropertyArrayView_3_01uint16__t_01_4_01_4.html + + PropertyArrayView< double > + type + structCesiumGltf_1_1TypeToNormalizedType_3_01PropertyArrayView_3_01uint16__t_01_4_01_4.html + a29eb87acc15761dfc566e6b7cc2d2643 + + + + + CesiumGltf::TypeToNormalizedType< PropertyArrayView< uint32_t > > + structCesiumGltf_1_1TypeToNormalizedType_3_01PropertyArrayView_3_01uint32__t_01_4_01_4.html + + PropertyArrayView< double > + type + structCesiumGltf_1_1TypeToNormalizedType_3_01PropertyArrayView_3_01uint32__t_01_4_01_4.html + a4a00fd8cc527d781d2926459f62d79d8 + + + + + CesiumGltf::TypeToNormalizedType< PropertyArrayView< uint64_t > > + structCesiumGltf_1_1TypeToNormalizedType_3_01PropertyArrayView_3_01uint64__t_01_4_01_4.html + + PropertyArrayView< double > + type + structCesiumGltf_1_1TypeToNormalizedType_3_01PropertyArrayView_3_01uint64__t_01_4_01_4.html + ac2367499abb3d81a4e7cfb1ee7f68957 + + + + + CesiumGltf::TypeToNormalizedType< PropertyArrayView< uint8_t > > + structCesiumGltf_1_1TypeToNormalizedType_3_01PropertyArrayView_3_01uint8__t_01_4_01_4.html + + PropertyArrayView< double > + type + structCesiumGltf_1_1TypeToNormalizedType_3_01PropertyArrayView_3_01uint8__t_01_4_01_4.html + a88f2e6ae6080d98d57e5b5ef7e7a45dd + + + + + CesiumGltf::TypeToNormalizedType< uint16_t > + structCesiumGltf_1_1TypeToNormalizedType_3_01uint16__t_01_4.html + + double + type + structCesiumGltf_1_1TypeToNormalizedType_3_01uint16__t_01_4.html + a60bf750cb20a871b5a84a91736e2987d + + + + + CesiumGltf::TypeToNormalizedType< uint32_t > + structCesiumGltf_1_1TypeToNormalizedType_3_01uint32__t_01_4.html + + double + type + structCesiumGltf_1_1TypeToNormalizedType_3_01uint32__t_01_4.html + a6026a99611d212405fed4a86105a383f + + + + + CesiumGltf::TypeToNormalizedType< uint64_t > + structCesiumGltf_1_1TypeToNormalizedType_3_01uint64__t_01_4.html + + double + type + structCesiumGltf_1_1TypeToNormalizedType_3_01uint64__t_01_4.html + ab54b5bd6c4df6394f1f829d4f26b575a + + + + + CesiumGltf::TypeToNormalizedType< uint8_t > + structCesiumGltf_1_1TypeToNormalizedType_3_01uint8__t_01_4.html + + double + type + structCesiumGltf_1_1TypeToNormalizedType_3_01uint8__t_01_4.html + a175edc6dfc1a15590bde0328d8b4f750 + + + + + CesiumGltf::TypeToPropertyType + structCesiumGltf_1_1TypeToPropertyType.html + typename T + + + CesiumGltf::TypeToPropertyType< bool > + structCesiumGltf_1_1TypeToPropertyType_3_01bool_01_4.html + + static constexpr PropertyComponentType + component + structCesiumGltf_1_1TypeToPropertyType_3_01bool_01_4.html + a29b3db14f327e8fed501555e8b5cc7e4 + + + + static constexpr PropertyType + value + structCesiumGltf_1_1TypeToPropertyType_3_01bool_01_4.html + a86cb33fa81e2979344517deeff771c19 + + + + + CesiumGltf::TypeToPropertyType< double > + structCesiumGltf_1_1TypeToPropertyType_3_01double_01_4.html + + static constexpr PropertyComponentType + component + structCesiumGltf_1_1TypeToPropertyType_3_01double_01_4.html + a31d83d4691d0ac3e8c7c80e5dd1be393 + + + + static constexpr PropertyType + value + structCesiumGltf_1_1TypeToPropertyType_3_01double_01_4.html + a755b9e009da689a457cbf87cc60ead14 + + + + + CesiumGltf::TypeToPropertyType< float > + structCesiumGltf_1_1TypeToPropertyType_3_01float_01_4.html + + static constexpr PropertyComponentType + component + structCesiumGltf_1_1TypeToPropertyType_3_01float_01_4.html + a22af05fea3e250ae315b25e198b2b588 + + + + static constexpr PropertyType + value + structCesiumGltf_1_1TypeToPropertyType_3_01float_01_4.html + a83cf1c54f2dbce9d38f5511fcba89727 + + + + + CesiumGltf::TypeToPropertyType< glm::mat< 2, 2, T, P > > + structCesiumGltf_1_1TypeToPropertyType_3_01glm_1_1mat_3_012_00_012_00_01T_00_01P_01_4_01_4.html + typename T + glm::qualifier P + + static constexpr PropertyComponentType + component + structCesiumGltf_1_1TypeToPropertyType_3_01glm_1_1mat_3_012_00_012_00_01T_00_01P_01_4_01_4.html + adfdbfeb3b7f210e87c0b1d56ac6671a6 + + + + static constexpr PropertyType + value + structCesiumGltf_1_1TypeToPropertyType_3_01glm_1_1mat_3_012_00_012_00_01T_00_01P_01_4_01_4.html + a266bca4229df5f55ca9d861748be9858 + + + + + CesiumGltf::TypeToPropertyType< glm::mat< 3, 3, T, P > > + structCesiumGltf_1_1TypeToPropertyType_3_01glm_1_1mat_3_013_00_013_00_01T_00_01P_01_4_01_4.html + typename T + glm::qualifier P + + static constexpr PropertyComponentType + component + structCesiumGltf_1_1TypeToPropertyType_3_01glm_1_1mat_3_013_00_013_00_01T_00_01P_01_4_01_4.html + a76e64df6767d67603ef1818519111729 + + + + static constexpr PropertyType + value + structCesiumGltf_1_1TypeToPropertyType_3_01glm_1_1mat_3_013_00_013_00_01T_00_01P_01_4_01_4.html + ae0e79bfabfd7dae61c889de036adbb96 + + + + + CesiumGltf::TypeToPropertyType< glm::mat< 4, 4, T, P > > + structCesiumGltf_1_1TypeToPropertyType_3_01glm_1_1mat_3_014_00_014_00_01T_00_01P_01_4_01_4.html + typename T + glm::qualifier P + + static constexpr PropertyComponentType + component + structCesiumGltf_1_1TypeToPropertyType_3_01glm_1_1mat_3_014_00_014_00_01T_00_01P_01_4_01_4.html + a33506d88b65bdf7c3e8f48430db2b854 + + + + static constexpr PropertyType + value + structCesiumGltf_1_1TypeToPropertyType_3_01glm_1_1mat_3_014_00_014_00_01T_00_01P_01_4_01_4.html + abdcf3a968902b39a7404c29245498051 + + + + + CesiumGltf::TypeToPropertyType< glm::vec< 2, T, P > > + structCesiumGltf_1_1TypeToPropertyType_3_01glm_1_1vec_3_012_00_01T_00_01P_01_4_01_4.html + typename T + glm::qualifier P + + static constexpr PropertyComponentType + component + structCesiumGltf_1_1TypeToPropertyType_3_01glm_1_1vec_3_012_00_01T_00_01P_01_4_01_4.html + a6c343228758efc469f909715cc0fc2ed + + + + static constexpr PropertyType + value + structCesiumGltf_1_1TypeToPropertyType_3_01glm_1_1vec_3_012_00_01T_00_01P_01_4_01_4.html + adc8c75731720165377b29f81d75c3d33 + + + + + CesiumGltf::TypeToPropertyType< glm::vec< 3, T, P > > + structCesiumGltf_1_1TypeToPropertyType_3_01glm_1_1vec_3_013_00_01T_00_01P_01_4_01_4.html + typename T + glm::qualifier P + + static constexpr PropertyComponentType + component + structCesiumGltf_1_1TypeToPropertyType_3_01glm_1_1vec_3_013_00_01T_00_01P_01_4_01_4.html + a2ce43567254e80e140e6947c9c7d01ed + + + + static constexpr PropertyType + value + structCesiumGltf_1_1TypeToPropertyType_3_01glm_1_1vec_3_013_00_01T_00_01P_01_4_01_4.html + a7ce5cd3f9365d9d9f32a21ba9bd7b85c + + + + + CesiumGltf::TypeToPropertyType< glm::vec< 4, T, P > > + structCesiumGltf_1_1TypeToPropertyType_3_01glm_1_1vec_3_014_00_01T_00_01P_01_4_01_4.html + typename T + glm::qualifier P + + static constexpr PropertyComponentType + component + structCesiumGltf_1_1TypeToPropertyType_3_01glm_1_1vec_3_014_00_01T_00_01P_01_4_01_4.html + ad15b2c137e4bafbc54561e4eaa8a8dfe + + + + static constexpr PropertyType + value + structCesiumGltf_1_1TypeToPropertyType_3_01glm_1_1vec_3_014_00_01T_00_01P_01_4_01_4.html + a3c7f07b9f3bb6a701454d05ffedf8f65 + + + + + CesiumGltf::TypeToPropertyType< int16_t > + structCesiumGltf_1_1TypeToPropertyType_3_01int16__t_01_4.html + + static constexpr PropertyComponentType + component + structCesiumGltf_1_1TypeToPropertyType_3_01int16__t_01_4.html + a547b3df2abdaa0ebf54208ee9b39574e + + + + static constexpr PropertyType + value + structCesiumGltf_1_1TypeToPropertyType_3_01int16__t_01_4.html + a266c2989b1f039e3b9f8671239746fd5 + + + + + CesiumGltf::TypeToPropertyType< int32_t > + structCesiumGltf_1_1TypeToPropertyType_3_01int32__t_01_4.html + + static constexpr PropertyComponentType + component + structCesiumGltf_1_1TypeToPropertyType_3_01int32__t_01_4.html + ad9e403a2f0cc013e60640c4b6d3674b4 + + + + static constexpr PropertyType + value + structCesiumGltf_1_1TypeToPropertyType_3_01int32__t_01_4.html + a48e8e54f0b659f30e7b8d4f08a53c832 + + + + + CesiumGltf::TypeToPropertyType< int64_t > + structCesiumGltf_1_1TypeToPropertyType_3_01int64__t_01_4.html + + static constexpr PropertyComponentType + component + structCesiumGltf_1_1TypeToPropertyType_3_01int64__t_01_4.html + a177bca428a41785a4c80ad24b3d3fbc6 + + + + static constexpr PropertyType + value + structCesiumGltf_1_1TypeToPropertyType_3_01int64__t_01_4.html + ae6d4c89b5fe427b16b99782ef9f5d6c8 + + + + + CesiumGltf::TypeToPropertyType< int8_t > + structCesiumGltf_1_1TypeToPropertyType_3_01int8__t_01_4.html + + static constexpr PropertyComponentType + component + structCesiumGltf_1_1TypeToPropertyType_3_01int8__t_01_4.html + afa55d4163eb019f0b9bc72635c7ee9f6 + + + + static constexpr PropertyType + value + structCesiumGltf_1_1TypeToPropertyType_3_01int8__t_01_4.html + a4213bd6c9ad4fa683039122a52eaf0fb + + + + + CesiumGltf::TypeToPropertyType< std::string_view > + structCesiumGltf_1_1TypeToPropertyType_3_01std_1_1string__view_01_4.html + + static constexpr PropertyComponentType + component + structCesiumGltf_1_1TypeToPropertyType_3_01std_1_1string__view_01_4.html + a02268e4df84f721eb67e54f4a91198ef + + + + static constexpr PropertyType + value + structCesiumGltf_1_1TypeToPropertyType_3_01std_1_1string__view_01_4.html + adc2c3bf88ab8fe82b47bcb021ad23d09 + + + + + CesiumGltf::TypeToPropertyType< uint16_t > + structCesiumGltf_1_1TypeToPropertyType_3_01uint16__t_01_4.html + + static constexpr PropertyComponentType + component + structCesiumGltf_1_1TypeToPropertyType_3_01uint16__t_01_4.html + a9471656bf4bba4b0c0e981f189d90585 + + + + static constexpr PropertyType + value + structCesiumGltf_1_1TypeToPropertyType_3_01uint16__t_01_4.html + ae73c986a29e92afa62dbbfcce3afe8f7 + + + + + CesiumGltf::TypeToPropertyType< uint32_t > + structCesiumGltf_1_1TypeToPropertyType_3_01uint32__t_01_4.html + + static constexpr PropertyComponentType + component + structCesiumGltf_1_1TypeToPropertyType_3_01uint32__t_01_4.html + acc19640fc48644bdbbf4ad7e447a1a2d + + + + static constexpr PropertyType + value + structCesiumGltf_1_1TypeToPropertyType_3_01uint32__t_01_4.html + af72b5e166dfacfacbd1882e17960134d + + + + + CesiumGltf::TypeToPropertyType< uint64_t > + structCesiumGltf_1_1TypeToPropertyType_3_01uint64__t_01_4.html + + static constexpr PropertyComponentType + component + structCesiumGltf_1_1TypeToPropertyType_3_01uint64__t_01_4.html + abdc2bc2800b34f39667ad8b4049549f6 + + + + static constexpr PropertyType + value + structCesiumGltf_1_1TypeToPropertyType_3_01uint64__t_01_4.html + a73ce8f46f7469ed3ab9c3035bd72821b + + + + + CesiumGltf::TypeToPropertyType< uint8_t > + structCesiumGltf_1_1TypeToPropertyType_3_01uint8__t_01_4.html + + static constexpr PropertyComponentType + component + structCesiumGltf_1_1TypeToPropertyType_3_01uint8__t_01_4.html + a0aca261bab8612fccbc4654ed93fa9aa + + + + static constexpr PropertyType + value + structCesiumGltf_1_1TypeToPropertyType_3_01uint8__t_01_4.html + a5da1b7802f7f838ee69bd616eac36954 + + + + + CesiumGeometry::UpsampledQuadtreeNode + structCesiumGeometry_1_1UpsampledQuadtreeNode.html + + QuadtreeTileID + tileID + structCesiumGeometry_1_1UpsampledQuadtreeNode.html + a4e2ae0e5a4018936a8cd5da20bc5ec00 + + + + + CesiumUtility::Uri + classCesiumUtility_1_1Uri.html + + std::string + SubstitutionCallbackSignature + classCesiumUtility_1_1Uri.html + a911e2286b19bc86869ecc681623bbf11 + (const std::string &placeholder) + + + static std::string + resolve + classCesiumUtility_1_1Uri.html + a08426cea0e2efad90b28e47792453a2c + (const std::string &base, const std::string &relative, bool useBaseQuery=false, bool assumeHttpsDefault=true) + + + static std::string + addQuery + classCesiumUtility_1_1Uri.html + a08a8e6559b0fb2fa7f05e99beb71dad9 + (const std::string &uri, const std::string &key, const std::string &value) + + + static std::string + getQueryValue + classCesiumUtility_1_1Uri.html + a369c8bde4cc7f68e7e3a10dfda53878f + (const std::string &uri, const std::string &key) + + + static std::string + substituteTemplateParameters + classCesiumUtility_1_1Uri.html + a4cecfe22e6313d57bb9177543516e2cc + (const std::string &templateUri, const std::function< SubstitutionCallbackSignature > &substitutionCallback) + + + static std::string + escape + classCesiumUtility_1_1Uri.html + a86440c2f11519728bf5e2a14529888ad + (const std::string &s) + + + static std::string + unescape + classCesiumUtility_1_1Uri.html + aacc8134dc340ef17b5a7f92aca004cc7 + (const std::string &s) + + + static std::string + unixPathToUriPath + classCesiumUtility_1_1Uri.html + adfea5ef6fc9bb504131c57d4df6d3736 + (const std::string &unixPath) + + + static std::string + windowsPathToUriPath + classCesiumUtility_1_1Uri.html + a3f5bae3cc2f4a44d00e57429250739e2 + (const std::string &windowsPath) + + + static std::string + nativePathToUriPath + classCesiumUtility_1_1Uri.html + a2230a53da76fb7bc6be0330592151b66 + (const std::string &nativePath) + + + static std::string + uriPathToUnixPath + classCesiumUtility_1_1Uri.html + a75dcb6c495f354e9ee9b8cc9631b8636 + (const std::string &uriPath) + + + static std::string + uriPathToWindowsPath + classCesiumUtility_1_1Uri.html + a04f37e6ee1e3646242cc2607a478313d + (const std::string &uriPath) + + + static std::string + uriPathToNativePath + classCesiumUtility_1_1Uri.html + ada719d82ee58634fc2e64c53e7aaeb53 + (const std::string &uriPath) + + + static std::string + getPath + classCesiumUtility_1_1Uri.html + a036c0f97f8aa187a51b398f04b8cc3ff + (const std::string &uri) + + + static std::string + setPath + classCesiumUtility_1_1Uri.html + a1a9ca761226f0cd7c28cde05e51b6795 + (const std::string &uri, const std::string &newPath) + + + + Cesium3DTiles::Enum::ValueType + structCesium3DTiles_1_1Enum_1_1ValueType.html + + static const std::string + INT8 + structCesium3DTiles_1_1Enum_1_1ValueType.html + a151c42d2dfa6f1f79cdbed81cb2587db + + + + static const std::string + UINT8 + structCesium3DTiles_1_1Enum_1_1ValueType.html + a2102985e85b02e65f97f2ea6f4918058 + + + + static const std::string + INT16 + structCesium3DTiles_1_1Enum_1_1ValueType.html + a88212efedd2843b9dd356d0e891994ed + + + + static const std::string + UINT16 + structCesium3DTiles_1_1Enum_1_1ValueType.html + a622e3996533e3fa9b6fdc1e9dde495a2 + + + + static const std::string + INT32 + structCesium3DTiles_1_1Enum_1_1ValueType.html + a342f46112d2e9e487d6f224e431d302c + + + + static const std::string + UINT32 + structCesium3DTiles_1_1Enum_1_1ValueType.html + ae7aca4bc096db8107ea42416cbcfce2c + + + + static const std::string + INT64 + structCesium3DTiles_1_1Enum_1_1ValueType.html + ac6153787c0c181a14b156b6dddc85e1b + + + + static const std::string + UINT64 + structCesium3DTiles_1_1Enum_1_1ValueType.html + a4480b9bfcdebc74a4fd760e160b82b76 + + + + + CesiumGltf::Enum::ValueType + structCesiumGltf_1_1Enum_1_1ValueType.html + + static const std::string + INT8 + structCesiumGltf_1_1Enum_1_1ValueType.html + a00ef73d749483d723103ded22c61c118 + + + + static const std::string + UINT8 + structCesiumGltf_1_1Enum_1_1ValueType.html + ab17baa839763d0d2965e3016c5fc32df + + + + static const std::string + INT16 + structCesiumGltf_1_1Enum_1_1ValueType.html + a7d51fcf9bb1580cff697b84acea06e1f + + + + static const std::string + UINT16 + structCesiumGltf_1_1Enum_1_1ValueType.html + affbce85a77a0885f7a0813e2a1ad22b9 + + + + static const std::string + INT32 + structCesiumGltf_1_1Enum_1_1ValueType.html + a279f4167cebc1f1ca203fe2ca322d0bf + + + + static const std::string + UINT32 + structCesiumGltf_1_1Enum_1_1ValueType.html + ae38b5ed3806464cd100d6eee303011c2 + + + + static const std::string + INT64 + structCesiumGltf_1_1Enum_1_1ValueType.html + a04e896e1203fbe038aef8d7f37120099 + + + + static const std::string + UINT64 + structCesiumGltf_1_1Enum_1_1ValueType.html + abeb6536c52068d575defbecb204ce5f9 + + + + + CesiumGltf::AccessorTypes::VEC2 + structCesiumGltf_1_1AccessorTypes_1_1VEC2.html + typename T + + T + value + structCesiumGltf_1_1AccessorTypes_1_1VEC2.html + a5cee673c9de6b4ba9fede8df175457dd + [2] + + + + CesiumGltf::AccessorTypes::VEC3 + structCesiumGltf_1_1AccessorTypes_1_1VEC3.html + typename T + + T + value + structCesiumGltf_1_1AccessorTypes_1_1VEC3.html + af34da0344fde50358266b5f4acb68d98 + [3] + + + + CesiumGltf::AccessorTypes::VEC4 + structCesiumGltf_1_1AccessorTypes_1_1VEC4.html + typename T + + T + value + structCesiumGltf_1_1AccessorTypes_1_1VEC4.html + a183813eed7f501fa2dc88a4d84192111 + [4] + + + + CesiumGltf::VertexAttributeSemantics + structCesiumGltf_1_1VertexAttributeSemantics.html + + static const std::string + POSITION + structCesiumGltf_1_1VertexAttributeSemantics.html + a3c3062ffabdc21a8f90a6d069b1b7349 + + + + static const std::string + NORMAL + structCesiumGltf_1_1VertexAttributeSemantics.html + add2936a6fb3a173391b4c92f04d7cb89 + + + + static const std::string + TANGENT + structCesiumGltf_1_1VertexAttributeSemantics.html + a131ab3642c017439d2967e7e72cbb414 + + + + static const std::array< std::string, 8 > + TEXCOORD_n + structCesiumGltf_1_1VertexAttributeSemantics.html + ac0c413f5dfc0b090d3eaeba9df161f38 + + + + static const std::array< std::string, 8 > + COLOR_n + structCesiumGltf_1_1VertexAttributeSemantics.html + a04d264068ba8f0bce9a24ac8db07d98b + + + + static const std::array< std::string, 8 > + JOINTS_n + structCesiumGltf_1_1VertexAttributeSemantics.html + a53230dd5449dff7753ddc53168d679b7 + + + + static const std::array< std::string, 8 > + WEIGHTS_n + structCesiumGltf_1_1VertexAttributeSemantics.html + acef95f67cf4ef3bca9d463ecb8a97c9a + + + + static const std::array< std::string, 8 > + FEATURE_ID_n + structCesiumGltf_1_1VertexAttributeSemantics.html + a5fbea0f4065896e7b8788da27a026fff + + + + + Cesium3DTilesSelection::ViewState + classCesium3DTilesSelection_1_1ViewState.html + + const glm::dvec3 & + getPosition + classCesium3DTilesSelection_1_1ViewState.html + afe6efd9097a5b1e7b46904dd37322f5d + () const noexcept + + + const glm::dvec3 & + getDirection + classCesium3DTilesSelection_1_1ViewState.html + a27c7ec08136e5518f012d6ab28d34cb2 + () const noexcept + + + const glm::dvec3 & + getUp + classCesium3DTilesSelection_1_1ViewState.html + a2dd9356b7815ba59e156d47556b1dd26 + () const noexcept + + + const std::optional< CesiumGeospatial::Cartographic > & + getPositionCartographic + classCesium3DTilesSelection_1_1ViewState.html + a8e3463c3d18894609ca8469fca569bff + () const noexcept + + + const glm::dvec2 & + getViewportSize + classCesium3DTilesSelection_1_1ViewState.html + ab8a3fa33a80c2c19582bb5675b5462b4 + () const noexcept + + + double + getHorizontalFieldOfView + classCesium3DTilesSelection_1_1ViewState.html + a573bffef377decad17350bfe17553271 + () const noexcept + + + double + getVerticalFieldOfView + classCesium3DTilesSelection_1_1ViewState.html + af36506551dfad6f28d67285215cc94cc + () const noexcept + + + bool + isBoundingVolumeVisible + classCesium3DTilesSelection_1_1ViewState.html + ae6fb78b24c391a5388a68bb55d0c54b1 + (const BoundingVolume &boundingVolume) const noexcept + + + double + computeDistanceSquaredToBoundingVolume + classCesium3DTilesSelection_1_1ViewState.html + a6001634f416abb399b5d2478121ccc06 + (const BoundingVolume &boundingVolume) const noexcept + + + double + computeScreenSpaceError + classCesium3DTilesSelection_1_1ViewState.html + a8543963a5b764f62faa88fc1ef2eec41 + (double geometricError, double distance) const noexcept + + + static ViewState + create + classCesium3DTilesSelection_1_1ViewState.html + a7d5693a8042bec7f304fc2f986466511 + (const glm::dvec3 &position, const glm::dvec3 &direction, const glm::dvec3 &up, const glm::dvec2 &viewportSize, double horizontalFieldOfView, double verticalFieldOfView, const CesiumGeospatial::Ellipsoid &ellipsoid=CesiumGeospatial::Ellipsoid::WGS84) + + + + Cesium3DTilesSelection::ViewUpdateResult + classCesium3DTilesSelection_1_1ViewUpdateResult.html + + std::vector< Tile * > + tilesToRenderThisFrame + classCesium3DTilesSelection_1_1ViewUpdateResult.html + a559f3cf20932e08a4948017e942520eb + + + + std::unordered_set< Tile * > + tilesFadingOut + classCesium3DTilesSelection_1_1ViewUpdateResult.html + ae002a3c6fced040d439c1e95b0b72893 + + + + int32_t + workerThreadTileLoadQueueLength + classCesium3DTilesSelection_1_1ViewUpdateResult.html + a3e410071b541b39235cdf222ad209e75 + + + + int32_t + mainThreadTileLoadQueueLength + classCesium3DTilesSelection_1_1ViewUpdateResult.html + a19f7f1237160497b197e122c9e13d1ea + + + + uint32_t + tilesVisited + classCesium3DTilesSelection_1_1ViewUpdateResult.html + a17bfe183271ae84700da14366fac1cfe + + + + uint32_t + culledTilesVisited + classCesium3DTilesSelection_1_1ViewUpdateResult.html + aa451fed417afa0b369194f0c015d880f + + + + uint32_t + tilesCulled + classCesium3DTilesSelection_1_1ViewUpdateResult.html + a73943f7181658e30f4a109ad0ea04bfd + + + + uint32_t + tilesOccluded + classCesium3DTilesSelection_1_1ViewUpdateResult.html + a992a3f450230dc7f894f0cb68efd6f07 + + + + uint32_t + tilesWaitingForOcclusionResults + classCesium3DTilesSelection_1_1ViewUpdateResult.html + ac4b73e714da15e5f3b754122b7f5c77f + + + + uint32_t + tilesKicked + classCesium3DTilesSelection_1_1ViewUpdateResult.html + ae2f621a3061628ee45127bef9af5a704 + + + + uint32_t + maxDepthVisited + classCesium3DTilesSelection_1_1ViewUpdateResult.html + a61ef07d65aa09f978d6a095a1a5ea8a9 + + + + int32_t + frameNumber + classCesium3DTilesSelection_1_1ViewUpdateResult.html + ad0fa22d808d62e50da9333bbc355d30b + + + + + CesiumRasterOverlays::WebMapServiceRasterOverlay + classCesiumRasterOverlays_1_1WebMapServiceRasterOverlay.html + CesiumRasterOverlays::RasterOverlay + + + WebMapServiceRasterOverlay + classCesiumRasterOverlays_1_1WebMapServiceRasterOverlay.html + af9fafc85bb55331ad0ac6ff0f7c1cc8d + (const std::string &name, const std::string &url, const std::vector< CesiumAsync::IAssetAccessor::THeader > &headers={}, const WebMapServiceRasterOverlayOptions &wmsOptions={}, const RasterOverlayOptions &overlayOptions={}) + + + virtual CesiumAsync::Future< CreateTileProviderResult > + createTileProvider + classCesiumRasterOverlays_1_1WebMapServiceRasterOverlay.html + a9c532993f4a53d0bcbd18fef9bd69ebc + (const CesiumAsync::AsyncSystem &asyncSystem, const std::shared_ptr< CesiumAsync::IAssetAccessor > &pAssetAccessor, const std::shared_ptr< CesiumUtility::CreditSystem > &pCreditSystem, const std::shared_ptr< IPrepareRasterOverlayRendererResources > &pPrepareRendererResources, const std::shared_ptr< spdlog::logger > &pLogger, CesiumUtility::IntrusivePointer< const RasterOverlay > pOwner) const override + + + + CesiumRasterOverlays::WebMapServiceRasterOverlayOptions + structCesiumRasterOverlays_1_1WebMapServiceRasterOverlayOptions.html + + std::string + version + structCesiumRasterOverlays_1_1WebMapServiceRasterOverlayOptions.html + a013cb2bb02ef42877f27f5e4188cdff1 + + + + std::string + layers + structCesiumRasterOverlays_1_1WebMapServiceRasterOverlayOptions.html + a32c07988db88324bafeb24b1dd9f823d + + + + std::string + format + structCesiumRasterOverlays_1_1WebMapServiceRasterOverlayOptions.html + a0c916e3115a621f149b820c93a12a3fb + + + + std::optional< std::string > + credit + structCesiumRasterOverlays_1_1WebMapServiceRasterOverlayOptions.html + adbd6443bd140399c783b1931eff6a564 + + + + int32_t + minimumLevel + structCesiumRasterOverlays_1_1WebMapServiceRasterOverlayOptions.html + abf7a6893f7788980ba2bcb2b62c9faa4 + + + + int32_t + maximumLevel + structCesiumRasterOverlays_1_1WebMapServiceRasterOverlayOptions.html + a2ed7aa4c311b2e13f7af1e847fcc2090 + + + + int32_t + tileWidth + structCesiumRasterOverlays_1_1WebMapServiceRasterOverlayOptions.html + a95370781970bd2eb904c26aa1df224d0 + + + + int32_t + tileHeight + structCesiumRasterOverlays_1_1WebMapServiceRasterOverlayOptions.html + a27cf1286695190ab488c3ff775c6ba78 + + + + + CesiumRasterOverlays::WebMapTileServiceRasterOverlay + classCesiumRasterOverlays_1_1WebMapTileServiceRasterOverlay.html + CesiumRasterOverlays::RasterOverlay + + + WebMapTileServiceRasterOverlay + classCesiumRasterOverlays_1_1WebMapTileServiceRasterOverlay.html + aac02358abd9c81a7f0ee1eacfebdf766 + (const std::string &name, const std::string &url, const std::vector< CesiumAsync::IAssetAccessor::THeader > &headers={}, const WebMapTileServiceRasterOverlayOptions &tmsOptions={}, const RasterOverlayOptions &overlayOptions={}) + + + virtual CesiumAsync::Future< CreateTileProviderResult > + createTileProvider + classCesiumRasterOverlays_1_1WebMapTileServiceRasterOverlay.html + a640da47236a7b9c7e17ce728187f4980 + (const CesiumAsync::AsyncSystem &asyncSystem, const std::shared_ptr< CesiumAsync::IAssetAccessor > &pAssetAccessor, const std::shared_ptr< CesiumUtility::CreditSystem > &pCreditSystem, const std::shared_ptr< IPrepareRasterOverlayRendererResources > &pPrepareRendererResources, const std::shared_ptr< spdlog::logger > &pLogger, CesiumUtility::IntrusivePointer< const RasterOverlay > pOwner) const override + + + + CesiumRasterOverlays::WebMapTileServiceRasterOverlayOptions + structCesiumRasterOverlays_1_1WebMapTileServiceRasterOverlayOptions.html + + std::optional< std::string > + format + structCesiumRasterOverlays_1_1WebMapTileServiceRasterOverlayOptions.html + a13d2d02a160681432244b32fec64e0fd + + + + std::vector< std::string > + subdomains + structCesiumRasterOverlays_1_1WebMapTileServiceRasterOverlayOptions.html + a447fc9b17b2d7ccee3bab40120996a60 + + + + std::optional< std::string > + credit + structCesiumRasterOverlays_1_1WebMapTileServiceRasterOverlayOptions.html + a4e456a0cb6f4c71eb5a708bc5e59b5dd + + + + std::string + layer + structCesiumRasterOverlays_1_1WebMapTileServiceRasterOverlayOptions.html + ac440c8f4a2a66d87c0f2d68b6ca88ade + + + + std::string + style + structCesiumRasterOverlays_1_1WebMapTileServiceRasterOverlayOptions.html + aef799c9c716bf1bcff000f2244a78944 + + + + std::string + tileMatrixSetID + structCesiumRasterOverlays_1_1WebMapTileServiceRasterOverlayOptions.html + ae4c885fce2d51b6e184e0584b5d96b7f + + + + std::optional< std::vector< std::string > > + tileMatrixLabels + structCesiumRasterOverlays_1_1WebMapTileServiceRasterOverlayOptions.html + a41f37190a24c094e90525fa0502eaa12 + + + + std::optional< uint32_t > + minimumLevel + structCesiumRasterOverlays_1_1WebMapTileServiceRasterOverlayOptions.html + a0ad7d42fae2c9c4bd311670207232e9c + + + + std::optional< uint32_t > + maximumLevel + structCesiumRasterOverlays_1_1WebMapTileServiceRasterOverlayOptions.html + a6fbb7ac99ed8045c6ebd5380113de637 + + + + std::optional< CesiumGeometry::Rectangle > + coverageRectangle + structCesiumRasterOverlays_1_1WebMapTileServiceRasterOverlayOptions.html + a6225100451d6f89435e430b9c8de67c9 + + + + std::optional< CesiumGeospatial::Projection > + projection + structCesiumRasterOverlays_1_1WebMapTileServiceRasterOverlayOptions.html + a39d5a952f7b53f1d0b3b0c4bb97fac7a + + + + std::optional< CesiumGeometry::QuadtreeTilingScheme > + tilingScheme + structCesiumRasterOverlays_1_1WebMapTileServiceRasterOverlayOptions.html + af9e1a00030106784f0e0480ff242897f + + + + std::optional< std::map< std::string, std::string > > + dimensions + structCesiumRasterOverlays_1_1WebMapTileServiceRasterOverlayOptions.html + add3d1b6aa48a4958d4d160fbcdabd3ee + + + + std::optional< uint32_t > + tileWidth + structCesiumRasterOverlays_1_1WebMapTileServiceRasterOverlayOptions.html + a5bcfe9bfa1c0db2242fe3043c0ae7d9e + + + + std::optional< uint32_t > + tileHeight + structCesiumRasterOverlays_1_1WebMapTileServiceRasterOverlayOptions.html + ae4d940fb0613457ec59b597df3ff9c61 + + + + + CesiumGeospatial::WebMercatorProjection + classCesiumGeospatial_1_1WebMercatorProjection.html + + + WebMercatorProjection + classCesiumGeospatial_1_1WebMercatorProjection.html + a4c076c5481aed44377031385c26d2ccb + (const Ellipsoid &ellipsoid=CesiumGeospatial::Ellipsoid::WGS84) noexcept + + + const Ellipsoid & + getEllipsoid + classCesiumGeospatial_1_1WebMercatorProjection.html + a2407d9f7efd8b7671b4ba2be9b81e966 + () const noexcept + + + glm::dvec3 + project + classCesiumGeospatial_1_1WebMercatorProjection.html + af3ea24bd18fd847ef761721974bce2d8 + (const Cartographic &cartographic) const noexcept + + + CesiumGeometry::Rectangle + project + classCesiumGeospatial_1_1WebMercatorProjection.html + a282bb00b33a9c923c6c19aa1f3bb841a + (const CesiumGeospatial::GlobeRectangle &rectangle) const noexcept + + + Cartographic + unproject + classCesiumGeospatial_1_1WebMercatorProjection.html + acc9770459b1e4e71cc81e51552067a46 + (const glm::dvec2 &projectedCoordinates) const noexcept + + + Cartographic + unproject + classCesiumGeospatial_1_1WebMercatorProjection.html + a8af802bd48006984f8aed6840c158d63 + (const glm::dvec3 &projectedCoordinates) const noexcept + + + CesiumGeospatial::GlobeRectangle + unproject + classCesiumGeospatial_1_1WebMercatorProjection.html + a198bd41d27a1b2f24f11783012af88ed + (const CesiumGeometry::Rectangle &rectangle) const noexcept + + + bool + operator== + classCesiumGeospatial_1_1WebMercatorProjection.html + a0734efe6bc106c719e9e99bb68f07ca9 + (const WebMercatorProjection &rhs) const noexcept + + + bool + operator!= + classCesiumGeospatial_1_1WebMercatorProjection.html + ad457f3d4ffe4aa271950c05054ad06c2 + (const WebMercatorProjection &rhs) const noexcept + + + static constexpr CesiumGeometry::Rectangle + computeMaximumProjectedRectangle + classCesiumGeospatial_1_1WebMercatorProjection.html + a900440c9e061edffcad81cd132a24a42 + (const Ellipsoid &ellipsoid=CesiumGeospatial::Ellipsoid::WGS84) noexcept + + + static double + mercatorAngleToGeodeticLatitude + classCesiumGeospatial_1_1WebMercatorProjection.html + ad60a65661b9801b2e1e55743065ea98c + (double mercatorAngle) noexcept + + + static double + geodeticLatitudeToMercatorAngle + classCesiumGeospatial_1_1WebMercatorProjection.html + a74871e015f64665f368b30c26d1c7b01 + (double latitude) noexcept + + + static const double + MAXIMUM_LATITUDE + classCesiumGeospatial_1_1WebMercatorProjection.html + a9eadcd7693233b65a0936203acb1a8c7 + + + + static const GlobeRectangle + MAXIMUM_GLOBE_RECTANGLE + classCesiumGeospatial_1_1WebMercatorProjection.html + a16d2bb34be35dd429557c0ad637e7811 + + + + + CesiumGltf::Sampler::WrapS + structCesiumGltf_1_1Sampler_1_1WrapS.html + + static constexpr int32_t + CLAMP_TO_EDGE + structCesiumGltf_1_1Sampler_1_1WrapS.html + ac5d880e40e8d6dd39ceac40aa4bd2567 + + + + static constexpr int32_t + MIRRORED_REPEAT + structCesiumGltf_1_1Sampler_1_1WrapS.html + a5de01d0d49cfc60a34d75d4393fab95d + + + + static constexpr int32_t + REPEAT + structCesiumGltf_1_1Sampler_1_1WrapS.html + a7d3100087c3031b72db5b2f55aca724f + + + + + CesiumGltf::Sampler::WrapT + structCesiumGltf_1_1Sampler_1_1WrapT.html + + static constexpr int32_t + CLAMP_TO_EDGE + structCesiumGltf_1_1Sampler_1_1WrapT.html + a1b4613cbab164dda359fad685b73e74b + + + + static constexpr int32_t + MIRRORED_REPEAT + structCesiumGltf_1_1Sampler_1_1WrapT.html + a06c08ab220e9cda7512441f8544812b8 + + + + static constexpr int32_t + REPEAT + structCesiumGltf_1_1Sampler_1_1WrapT.html + ad333e38558e0d985e17f40236f966cd5 + + + + + Cesium3DTiles + namespaceCesium3DTiles.html + Cesium3DTiles::Asset + Cesium3DTiles::Availability + Cesium3DTiles::BoundingVolume + Cesium3DTiles::Buffer + Cesium3DTiles::BufferCesium + Cesium3DTiles::BufferSpec + Cesium3DTiles::BufferView + Cesium3DTiles::Class + Cesium3DTiles::ClassProperty + Cesium3DTiles::ClassStatistics + Cesium3DTiles::Content + Cesium3DTiles::Enum + Cesium3DTiles::EnumValue + Cesium3DTiles::Extension3dTilesBoundingVolumeS2 + Cesium3DTiles::FoundMetadataProperty + Cesium3DTiles::GroupMetadata + Cesium3DTiles::ImplicitTiling + Cesium3DTiles::MetadataEntity + Cesium3DTiles::MetadataQuery + Cesium3DTiles::Properties + Cesium3DTiles::PropertyStatistics + Cesium3DTiles::PropertyTable + Cesium3DTiles::PropertyTableProperty + Cesium3DTiles::Schema + Cesium3DTiles::Statistics + Cesium3DTiles::Subtree + Cesium3DTiles::Subtrees + Cesium3DTiles::Tile + Cesium3DTiles::Tileset + + + Cesium3DTilesContent + namespaceCesium3DTilesContent.html + Cesium3DTilesContent::AssetFetcher + Cesium3DTilesContent::AssetFetcherResult + Cesium3DTilesContent::B3dmToGltfConverter + Cesium3DTilesContent::BinaryToGltfConverter + Cesium3DTilesContent::CmptToGltfConverter + Cesium3DTilesContent::GltfConverterResult + Cesium3DTilesContent::GltfConverters + Cesium3DTilesContent::I3dmToGltfConverter + Cesium3DTilesContent::ImplicitTilingUtilities + Cesium3DTilesContent::OctreeChildren + Cesium3DTilesContent::PntsToGltfConverter + Cesium3DTilesContent::QuadtreeChildren + Cesium3DTilesContent::SubtreeAvailability + Cesium3DTilesContent::TileBoundingVolumes + Cesium3DTilesContent::TileTransform + + + ImplicitTileSubdivisionScheme + namespaceCesium3DTilesContent.html + ac1ef2013cd0caf48b1a646f53ebed09f + + Quadtree + Octree + + + void + registerAllTileContentTypes + namespaceCesium3DTilesContent.html + afc6300abbb126f48cd6401d06d5c1142 + () + + + + Cesium3DTilesReader + namespaceCesium3DTilesReader.html + Cesium3DTilesReader::AssetReader + Cesium3DTilesReader::AvailabilityReader + Cesium3DTilesReader::BoundingVolumeReader + Cesium3DTilesReader::BufferReader + Cesium3DTilesReader::BufferViewReader + Cesium3DTilesReader::ClassPropertyReader + Cesium3DTilesReader::ClassReader + Cesium3DTilesReader::ClassStatisticsReader + Cesium3DTilesReader::ContentReader + Cesium3DTilesReader::EnumReader + Cesium3DTilesReader::EnumValueReader + Cesium3DTilesReader::Extension3dTilesBoundingVolumeS2Reader + Cesium3DTilesReader::GroupMetadataReader + Cesium3DTilesReader::ImplicitTilingReader + Cesium3DTilesReader::MetadataEntityReader + Cesium3DTilesReader::PropertiesReader + Cesium3DTilesReader::PropertyStatisticsReader + Cesium3DTilesReader::PropertyTablePropertyReader + Cesium3DTilesReader::PropertyTableReader + Cesium3DTilesReader::SchemaReader + Cesium3DTilesReader::StatisticsReader + Cesium3DTilesReader::SubtreeFileReader + Cesium3DTilesReader::SubtreeReader + Cesium3DTilesReader::SubtreesReader + Cesium3DTilesReader::TileReader + Cesium3DTilesReader::TilesetReader + + + Cesium3DTilesSelection + namespaceCesium3DTilesSelection.html + Cesium3DTilesSelection::CullingVolume + Cesium3DTilesSelection::DebugTileStateDatabase + Cesium3DTilesSelection::EllipsoidTilesetLoader + Cesium3DTilesSelection::FogDensityAtHeight + Cesium3DTilesSelection::IPrepareRendererResources + Cesium3DTilesSelection::ITileExcluder + Cesium3DTilesSelection::ITilesetHeightSampler + Cesium3DTilesSelection::RasterizedPolygonsTileExcluder + Cesium3DTilesSelection::RasterMappedTo3DTile + Cesium3DTilesSelection::RasterOverlayCollection + Cesium3DTilesSelection::SampleHeightResult + Cesium3DTilesSelection::Tile + Cesium3DTilesSelection::TileChildrenResult + Cesium3DTilesSelection::TileContent + Cesium3DTilesSelection::TileEmptyContent + Cesium3DTilesSelection::TileExternalContent + Cesium3DTilesSelection::TileIdUtilities + Cesium3DTilesSelection::TileLoadInput + Cesium3DTilesSelection::TileLoadResult + Cesium3DTilesSelection::TileLoadResultAndRenderResources + Cesium3DTilesSelection::TileOcclusionRendererProxy + Cesium3DTilesSelection::TileOcclusionRendererProxyPool + Cesium3DTilesSelection::TileRenderContent + Cesium3DTilesSelection::TileSelectionState + Cesium3DTilesSelection::Tileset + Cesium3DTilesSelection::TilesetContentLoader + Cesium3DTilesSelection::TilesetContentOptions + Cesium3DTilesSelection::TilesetExternals + Cesium3DTilesSelection::TilesetLoadFailureDetails + Cesium3DTilesSelection::TilesetMetadata + Cesium3DTilesSelection::TilesetOptions + Cesium3DTilesSelection::TilesetSharedAssetSystem + Cesium3DTilesSelection::TileUnknownContent + Cesium3DTilesSelection::ViewState + Cesium3DTilesSelection::ViewUpdateResult + + std::variant< CesiumGeometry::BoundingSphere, CesiumGeometry::OrientedBoundingBox, CesiumGeospatial::BoundingRegion, CesiumGeospatial::BoundingRegionWithLooseFittingHeights, CesiumGeospatial::S2CellBoundingVolume > + BoundingVolume + namespaceCesium3DTilesSelection.html + a228c926562a409d1d479124222072b33 + + + + std::variant< std::string, CesiumGeometry::QuadtreeTileID, CesiumGeometry::OctreeTileID, CesiumGeometry::UpsampledQuadtreeNode > + TileID + namespaceCesium3DTilesSelection.html + a57737ff9757badbddc1cde19325a13ce + + + + std::variant< TileUnknownContent, TileEmptyContent, TileExternalContent, CesiumGltf::Model > + TileContentKind + namespaceCesium3DTilesSelection.html + a4a8e9640480dc97338b6feccd89f5235 + + + + + TileLoadState + namespaceCesium3DTilesSelection.html + a0b6cdb3ba0d37c1791f1dcd7c663fbdc + + Unloading + FailedTemporarily + Unloaded + ContentLoading + ContentLoaded + Done + Failed + + + + TileLoadResultState + namespaceCesium3DTilesSelection.html + ac94b5163d0a68238442e435c718424ba + + Success + Failed + RetryLater + + + + TileOcclusionState + namespaceCesium3DTilesSelection.html + adf3e5b264cf0d9a63c6ce1643f61020e + + OcclusionUnavailable + NotOccluded + Occluded + + + + TileRefine + namespaceCesium3DTilesSelection.html + a3a910fb397852e671fc93bfa8effddf7 + + Add + Replace + + + + TilesetLoadType + namespaceCesium3DTilesSelection.html + a21c213a52e07982820eb79d5c64c7d20 + + Unknown + CesiumIon + TilesetJson + + + BoundingVolume + transformBoundingVolume + namespaceCesium3DTilesSelection.html + aaae53af464874811f17661414e231fb3 + (const glm::dmat4x4 &transform, const BoundingVolume &boundingVolume) + + + glm::dvec3 + getBoundingVolumeCenter + namespaceCesium3DTilesSelection.html + aaa050cf6bc456aab30747202e60d20fe + (const BoundingVolume &boundingVolume) + + + std::optional< CesiumGeospatial::GlobeRectangle > + estimateGlobeRectangle + namespaceCesium3DTilesSelection.html + a35ebceea1428584577281b236b407651 + (const BoundingVolume &boundingVolume, const CesiumGeospatial::Ellipsoid &ellipsoid=CesiumGeospatial::Ellipsoid::WGS84) + + + const CesiumGeospatial::BoundingRegion * + getBoundingRegionFromBoundingVolume + namespaceCesium3DTilesSelection.html + a28184683458f6ba8720bb333a2613ca2 + (const BoundingVolume &boundingVolume) + + + CesiumGeometry::OrientedBoundingBox + getOrientedBoundingBoxFromBoundingVolume + namespaceCesium3DTilesSelection.html + a0dbb28bd96c3f1bd3825bacce56f4ebd + (const BoundingVolume &boundingVolume, const CesiumGeospatial::Ellipsoid &ellipsoid=CesiumGeospatial::Ellipsoid::WGS84) + + + CullingVolume + createCullingVolume + namespaceCesium3DTilesSelection.html + a44dac9dbc570434df6ca0f6084e0339a + (const glm::dvec3 &position, const glm::dvec3 &direction, const glm::dvec3 &up, double fovx, double fovy) noexcept + + + + Cesium3DTilesWriter + namespaceCesium3DTilesWriter.html + Cesium3DTilesWriter::SchemaWriter + Cesium3DTilesWriter::SchemaWriterOptions + Cesium3DTilesWriter::SchemaWriterResult + Cesium3DTilesWriter::SubtreeWriter + Cesium3DTilesWriter::SubtreeWriterOptions + Cesium3DTilesWriter::SubtreeWriterResult + Cesium3DTilesWriter::TilesetWriter + Cesium3DTilesWriter::TilesetWriterOptions + Cesium3DTilesWriter::TilesetWriterResult + + + CesiumAsync + namespaceCesiumAsync.html + CesiumAsync::AsyncSystem + CesiumAsync::CacheItem + CesiumAsync::CacheRequest + CesiumAsync::CacheResponse + CesiumAsync::CachingAssetAccessor + CesiumAsync::CaseInsensitiveCompare + CesiumAsync::DeleteSqliteConnection + CesiumAsync::DeleteSqliteStatement + CesiumAsync::Future + CesiumAsync::GunzipAssetAccessor + CesiumAsync::IAssetAccessor + CesiumAsync::IAssetRequest + CesiumAsync::IAssetResponse + CesiumAsync::ICacheDatabase + CesiumAsync::ITaskProcessor + CesiumAsync::NetworkAssetDescriptor + CesiumAsync::Promise + CesiumAsync::Promise< void > + CesiumAsync::SharedAssetDepot + CesiumAsync::SharedFuture + CesiumAsync::SqliteCache + CesiumAsync::SqliteHelper + CesiumAsync::ThreadPool + + std::map< std::string, std::string, CaseInsensitiveCompare > + HttpHeaders + namespaceCesiumAsync.html + a10e282337243a53a9a90ce490fe1fe36 + + + + std::unique_ptr< CESIUM_SQLITE(sqlite3), DeleteSqliteConnection > + SqliteConnectionPtr + namespaceCesiumAsync.html + a11ad6c192c7e1f2b1d07d2f100520f3a + + + + std::unique_ptr< CESIUM_SQLITE(sqlite3_stmt), DeleteSqliteStatement > + SqliteStatementPtr + namespaceCesiumAsync.html + aedc89f93d7da4714826348471dc2ee59 + + + + + CesiumGeometry + namespaceCesiumGeometry.html + CesiumGeometry::AvailabilityAccessor + CesiumGeometry::AvailabilityNode + CesiumGeometry::AvailabilitySubtree + CesiumGeometry::AvailabilityTree + CesiumGeometry::AxisAlignedBox + CesiumGeometry::BoundingSphere + CesiumGeometry::ConstantAvailability + CesiumGeometry::InterpolatedVertex + CesiumGeometry::IntersectionTests + CesiumGeometry::OctreeAvailability + CesiumGeometry::OctreeTileID + CesiumGeometry::OctreeTilingScheme + CesiumGeometry::OrientedBoundingBox + CesiumGeometry::Plane + CesiumGeometry::QuadtreeAvailability + CesiumGeometry::QuadtreeRectangleAvailability + CesiumGeometry::QuadtreeTileID + CesiumGeometry::QuadtreeTileRectangularRange + CesiumGeometry::QuadtreeTilingScheme + CesiumGeometry::Ray + CesiumGeometry::Rectangle + CesiumGeometry::SubtreeBufferView + CesiumGeometry::Transforms + CesiumGeometry::UpsampledQuadtreeNode + + std::variant< ConstantAvailability, SubtreeBufferView > + AvailabilityView + namespaceCesiumGeometry.html + a727136fd8482603b070477346f9e19b2 + + + + std::variant< int, InterpolatedVertex > + TriangleClipVertex + namespaceCesiumGeometry.html + a56c5709ec89fc58d1ec9fffebaf241ca + + + + + Axis + namespaceCesiumGeometry.html + abf23f5e5d529857b458b3247c9125cf6 + + X + Y + Z + + + + CullingResult + namespaceCesiumGeometry.html + a51997e0ff427351dc58e293fb578eded + + Outside + Intersecting + Inside + + + + TileAvailabilityFlags + namespaceCesiumGeometry.html + a6ddc4173bc67ec1232e0e7bc030e3ff5 + + + + TILE_AVAILABLE + namespaceCesiumGeometry.html + a6ddc4173bc67ec1232e0e7bc030e3ff5a7dcd96925b075d81e9ba95fc1070583a + + + + CONTENT_AVAILABLE + namespaceCesiumGeometry.html + a6ddc4173bc67ec1232e0e7bc030e3ff5ab4af4c754aa70941c7a05042aca7cbc9 + + + + SUBTREE_AVAILABLE + namespaceCesiumGeometry.html + a6ddc4173bc67ec1232e0e7bc030e3ff5a6f915e4e7530aa7dfbda7a23f306024b + + + + SUBTREE_LOADED + namespaceCesiumGeometry.html + a6ddc4173bc67ec1232e0e7bc030e3ff5a10e8b304fc98f2bb9b7a0345b11182a5 + + + + REACHABLE + namespaceCesiumGeometry.html + a6ddc4173bc67ec1232e0e7bc030e3ff5a14900f0a810a5b88da0c1b3bc07b71e9 + + + + void + clipTriangleAtAxisAlignedThreshold + namespaceCesiumGeometry.html + a6c5ef9f18fc66a8f2525d15186a4dd8d + (double threshold, bool keepAbove, int i0, int i1, int i2, double u0, double u1, double u2, std::vector< TriangleClipVertex > &result) noexcept + + + + CesiumGeospatial + namespaceCesiumGeospatial.html + CesiumGeospatial::BoundingRegion + CesiumGeospatial::BoundingRegionBuilder + CesiumGeospatial::BoundingRegionWithLooseFittingHeights + CesiumGeospatial::Cartographic + CesiumGeospatial::CartographicPolygon + CesiumGeospatial::EarthGravitationalModel1996Grid + CesiumGeospatial::Ellipsoid + CesiumGeospatial::EllipsoidTangentPlane + CesiumGeospatial::GeographicProjection + CesiumGeospatial::GlobeAnchor + CesiumGeospatial::GlobeRectangle + CesiumGeospatial::GlobeTransforms + CesiumGeospatial::LocalHorizontalCoordinateSystem + CesiumGeospatial::S2CellBoundingVolume + CesiumGeospatial::S2CellID + CesiumGeospatial::SimplePlanarEllipsoidCurve + CesiumGeospatial::WebMercatorProjection + + std::variant< GeographicProjection, WebMercatorProjection > + Projection + namespaceCesiumGeospatial.html + ac3715aa289c0dcb5cf3f65131b728429 + + + + + LocalDirection + namespaceCesiumGeospatial.html + a06dd7a755ce52387f7c4f4e94cb155f8 + + East + North + West + South + Up + Down + + + double + calcQuadtreeMaxGeometricError + namespaceCesiumGeospatial.html + a34039065743ec9df019f0ccf63867fdf + (const CesiumGeospatial::Ellipsoid &ellipsoid) noexcept + + + glm::dvec3 + projectPosition + namespaceCesiumGeospatial.html + a28fbb725b967c761659828a54af110bd + (const Projection &projection, const Cartographic &position) + + + Cartographic + unprojectPosition + namespaceCesiumGeospatial.html + a4c476b700ea5ce0ac3cee6f65e59d483 + (const Projection &projection, const glm::dvec3 &position) + + + CesiumGeometry::Rectangle + projectRectangleSimple + namespaceCesiumGeospatial.html + a32588d6604b4c9fe27c5694055b89c12 + (const Projection &projection, const GlobeRectangle &rectangle) + + + GlobeRectangle + unprojectRectangleSimple + namespaceCesiumGeospatial.html + accb7f4d4477dbde906b72fb7529bfc59 + (const Projection &projection, const CesiumGeometry::Rectangle &rectangle) + + + CesiumGeometry::AxisAlignedBox + projectRegionSimple + namespaceCesiumGeospatial.html + ab5e86d7d4e359ec284fadd435e1d1d92 + (const Projection &projection, const BoundingRegion &region) + + + BoundingRegion + unprojectRegionSimple + namespaceCesiumGeospatial.html + a1fcbadfc34f71a685d67d0911aa4ce74 + (const Projection &projection, const CesiumGeometry::AxisAlignedBox &box, const CesiumGeospatial::Ellipsoid &ellipsoid=CesiumGeospatial::Ellipsoid::WGS84) + + + glm::dvec2 + computeProjectedRectangleSize + namespaceCesiumGeospatial.html + aacbf9daab2928be0b97aeedac48dc01e + (const Projection &projection, const CesiumGeometry::Rectangle &rectangle, double maxHeight, const Ellipsoid &ellipsoid=CesiumGeospatial::Ellipsoid::WGS84) + + + const Ellipsoid & + getProjectionEllipsoid + namespaceCesiumGeospatial.html + a7e9bd19070bf428c9518aac409318dca + (const Projection &projection) + + + + CesiumGltf + namespaceCesiumGltf.html + CesiumGltf::Accessor + CesiumGltf::AccessorSparse + CesiumGltf::AccessorSparseIndices + CesiumGltf::AccessorSparseValues + CesiumGltf::AccessorSpec + CesiumGltf::AccessorTypes + CesiumGltf::AccessorView + CesiumGltf::AccessorWriter + CesiumGltf::Animation + CesiumGltf::AnimationChannel + CesiumGltf::AnimationChannelTarget + CesiumGltf::AnimationSampler + CesiumGltf::Asset + CesiumGltf::Buffer + CesiumGltf::BufferCesium + CesiumGltf::BufferSpec + CesiumGltf::BufferView + CesiumGltf::Camera + CesiumGltf::CameraOrthographic + CesiumGltf::CameraPerspective + CesiumGltf::CanBeNormalized + CesiumGltf::CanBeNormalized< glm::mat< n, n, T, P > > + CesiumGltf::CanBeNormalized< glm::vec< n, T, P > > + CesiumGltf::CanBeNormalized< int16_t > + CesiumGltf::CanBeNormalized< int32_t > + CesiumGltf::CanBeNormalized< int64_t > + CesiumGltf::CanBeNormalized< int8_t > + CesiumGltf::CanBeNormalized< PropertyArrayView< T > > + CesiumGltf::CanBeNormalized< T > + CesiumGltf::CanBeNormalized< uint16_t > + CesiumGltf::CanBeNormalized< uint32_t > + CesiumGltf::CanBeNormalized< uint64_t > + CesiumGltf::CanBeNormalized< uint8_t > + CesiumGltf::Class + CesiumGltf::ClassProperty + CesiumGltf::CountFromAccessor + CesiumGltf::Enum + CesiumGltf::EnumValue + CesiumGltf::ExtensionBufferExtMeshoptCompression + CesiumGltf::ExtensionBufferViewExtMeshoptCompression + CesiumGltf::ExtensionCesiumPrimitiveOutline + CesiumGltf::ExtensionCesiumRTC + CesiumGltf::ExtensionCesiumTileEdges + CesiumGltf::ExtensionExtInstanceFeatures + CesiumGltf::ExtensionExtInstanceFeaturesFeatureId + CesiumGltf::ExtensionExtMeshFeatures + CesiumGltf::ExtensionExtMeshGpuInstancing + CesiumGltf::ExtensionExtStructuralMetadata + CesiumGltf::ExtensionKhrDracoMeshCompression + CesiumGltf::ExtensionKhrMaterialsUnlit + CesiumGltf::ExtensionKhrTextureBasisu + CesiumGltf::ExtensionKhrTextureTransform + CesiumGltf::ExtensionMeshPrimitiveExtStructuralMetadata + CesiumGltf::ExtensionMeshPrimitiveKhrMaterialsVariants + CesiumGltf::ExtensionMeshPrimitiveKhrMaterialsVariantsMappingsValue + CesiumGltf::ExtensionModelExtStructuralMetadata + CesiumGltf::ExtensionModelKhrMaterialsVariants + CesiumGltf::ExtensionModelKhrMaterialsVariantsValue + CesiumGltf::ExtensionModelMaxarMeshVariants + CesiumGltf::ExtensionModelMaxarMeshVariantsValue + CesiumGltf::ExtensionNodeMaxarMeshVariants + CesiumGltf::ExtensionNodeMaxarMeshVariantsMappingsValue + CesiumGltf::ExtensionTextureWebp + CesiumGltf::FeatureId + CesiumGltf::FeatureIdFromAccessor + CesiumGltf::FeatureIdTexture + CesiumGltf::FeatureIdTextureView + CesiumGltf::Image + CesiumGltf::ImageAsset + CesiumGltf::ImageAssetMipPosition + CesiumGltf::ImageSpec + CesiumGltf::IndexFromAccessor + CesiumGltf::IndicesForFaceFromAccessor + CesiumGltf::InstanceAttributeSemantics + CesiumGltf::IsMetadataArray + CesiumGltf::IsMetadataArray< PropertyArrayCopy< T > > + CesiumGltf::IsMetadataArray< PropertyArrayView< T > > + CesiumGltf::IsMetadataArray< T > + CesiumGltf::IsMetadataBoolean + CesiumGltf::IsMetadataBoolean< bool > + CesiumGltf::IsMetadataBoolean< T > + CesiumGltf::IsMetadataBooleanArray + CesiumGltf::IsMetadataBooleanArray< PropertyArrayView< bool > > + CesiumGltf::IsMetadataBooleanArray< T > + CesiumGltf::IsMetadataFloating + CesiumGltf::IsMetadataFloating< double > + CesiumGltf::IsMetadataFloating< float > + CesiumGltf::IsMetadataFloating< T > + CesiumGltf::IsMetadataInteger + CesiumGltf::IsMetadataInteger< int16_t > + CesiumGltf::IsMetadataInteger< int32_t > + CesiumGltf::IsMetadataInteger< int64_t > + CesiumGltf::IsMetadataInteger< int8_t > + CesiumGltf::IsMetadataInteger< T > + CesiumGltf::IsMetadataInteger< uint16_t > + CesiumGltf::IsMetadataInteger< uint32_t > + CesiumGltf::IsMetadataInteger< uint64_t > + CesiumGltf::IsMetadataInteger< uint8_t > + CesiumGltf::IsMetadataMatN + CesiumGltf::IsMetadataMatN< glm::mat< n, n, T, P > > + CesiumGltf::IsMetadataMatN< T > + CesiumGltf::IsMetadataNumeric + CesiumGltf::IsMetadataNumeric< T > + CesiumGltf::IsMetadataNumericArray + CesiumGltf::IsMetadataNumericArray< PropertyArrayCopy< T > > + CesiumGltf::IsMetadataNumericArray< PropertyArrayView< T > > + CesiumGltf::IsMetadataNumericArray< T > + CesiumGltf::IsMetadataScalar + CesiumGltf::IsMetadataScalar< double > + CesiumGltf::IsMetadataScalar< float > + CesiumGltf::IsMetadataScalar< int16_t > + CesiumGltf::IsMetadataScalar< int32_t > + CesiumGltf::IsMetadataScalar< int64_t > + CesiumGltf::IsMetadataScalar< int8_t > + CesiumGltf::IsMetadataScalar< T > + CesiumGltf::IsMetadataScalar< uint16_t > + CesiumGltf::IsMetadataScalar< uint32_t > + CesiumGltf::IsMetadataScalar< uint64_t > + CesiumGltf::IsMetadataScalar< uint8_t > + CesiumGltf::IsMetadataString + CesiumGltf::IsMetadataString< std::string_view > + CesiumGltf::IsMetadataString< T > + CesiumGltf::IsMetadataStringArray + CesiumGltf::IsMetadataStringArray< PropertyArrayView< std::string_view > > + CesiumGltf::IsMetadataStringArray< T > + CesiumGltf::IsMetadataVecN + CesiumGltf::IsMetadataVecN< glm::vec< n, T, P > > + CesiumGltf::IsMetadataVecN< T > + CesiumGltf::KhrTextureTransform + CesiumGltf::Ktx2TranscodeTargets + CesiumGltf::Material + CesiumGltf::MaterialNormalTextureInfo + CesiumGltf::MaterialOcclusionTextureInfo + CesiumGltf::MaterialPBRMetallicRoughness + CesiumGltf::Mesh + CesiumGltf::MeshPrimitive + CesiumGltf::MetadataArrayType + CesiumGltf::MetadataArrayType< CesiumGltf::PropertyArrayCopy< T > > + CesiumGltf::MetadataArrayType< CesiumGltf::PropertyArrayView< T > > + CesiumGltf::MetadataConversions + CesiumGltf::MetadataConversions< bool, std::string > + CesiumGltf::MetadataConversions< bool, std::string_view > + CesiumGltf::MetadataConversions< bool, TFrom, std::enable_if_t< CesiumGltf::IsMetadataScalar< TFrom >::value > > + CesiumGltf::MetadataConversions< double, bool > + CesiumGltf::MetadataConversions< double, float > + CesiumGltf::MetadataConversions< double, std::string > + CesiumGltf::MetadataConversions< double, std::string_view > + CesiumGltf::MetadataConversions< double, TFrom, std::enable_if_t< CesiumGltf::IsMetadataInteger< TFrom >::value > > + CesiumGltf::MetadataConversions< float, bool > + CesiumGltf::MetadataConversions< float, double > + CesiumGltf::MetadataConversions< float, std::string > + CesiumGltf::MetadataConversions< float, std::string_view > + CesiumGltf::MetadataConversions< float, TFrom, std::enable_if_t< CesiumGltf::IsMetadataInteger< TFrom >::value > > + CesiumGltf::MetadataConversions< std::string, bool > + CesiumGltf::MetadataConversions< std::string, std::string_view > + CesiumGltf::MetadataConversions< std::string, TFrom, std::enable_if_t< IsMetadataScalar< TFrom >::value > > + CesiumGltf::MetadataConversions< std::string, TFrom, std::enable_if_t< IsMetadataVecN< TFrom >::value||IsMetadataMatN< TFrom >::value > > + CesiumGltf::MetadataConversions< T, T > + CesiumGltf::MetadataConversions< TTo, bool, std::enable_if_t< CesiumGltf::IsMetadataInteger< TTo >::value > > + CesiumGltf::MetadataConversions< TTo, bool, std::enable_if_t< IsMetadataMatN< TTo >::value > > + CesiumGltf::MetadataConversions< TTo, bool, std::enable_if_t< IsMetadataVecN< TTo >::value > > + CesiumGltf::MetadataConversions< TTo, std::string, std::enable_if_t< CesiumGltf::IsMetadataInteger< TTo >::value &&!std::is_signed_v< TTo > > > + CesiumGltf::MetadataConversions< TTo, std::string, std::enable_if_t< CesiumGltf::IsMetadataInteger< TTo >::value &&std::is_signed_v< TTo > > > + CesiumGltf::MetadataConversions< TTo, std::string_view, std::enable_if_t< CesiumGltf::IsMetadataInteger< TTo >::value > > + CesiumGltf::MetadataConversions< TTo, TFrom, std::enable_if_t< CesiumGltf::IsMetadataInteger< TTo >::value &&CesiumGltf::IsMetadataFloating< TFrom >::value > > + CesiumGltf::MetadataConversions< TTo, TFrom, std::enable_if_t< CesiumGltf::IsMetadataInteger< TTo >::value &&CesiumGltf::IsMetadataInteger< TFrom >::value &&!std::is_same_v< TTo, TFrom > > > + CesiumGltf::MetadataConversions< TTo, TFrom, std::enable_if_t< CesiumGltf::IsMetadataMatN< TTo >::value &&CesiumGltf::IsMetadataMatN< TFrom >::value &&!std::is_same_v< TTo, TFrom > > > + CesiumGltf::MetadataConversions< TTo, TFrom, std::enable_if_t< CesiumGltf::IsMetadataMatN< TTo >::value &&CesiumGltf::IsMetadataScalar< TFrom >::value > > + CesiumGltf::MetadataConversions< TTo, TFrom, std::enable_if_t< CesiumGltf::IsMetadataVecN< TTo >::value &&CesiumGltf::IsMetadataScalar< TFrom >::value > > + CesiumGltf::MetadataConversions< TTo, TFrom, std::enable_if_t< CesiumGltf::IsMetadataVecN< TTo >::value &&CesiumGltf::IsMetadataVecN< TFrom >::value &&!std::is_same_v< TTo, TFrom > > > + CesiumGltf::Model + CesiumGltf::ModelSpec + CesiumGltf::NamedObject + CesiumGltf::Node + CesiumGltf::PropertyArrayCopy + CesiumGltf::PropertyArrayView + CesiumGltf::PropertyArrayView< bool > + CesiumGltf::PropertyArrayView< std::string_view > + CesiumGltf::PropertyAttribute + CesiumGltf::PropertyAttributeProperty + CesiumGltf::PropertyAttributePropertyView + CesiumGltf::PropertyAttributePropertyView< ElementType, false > + CesiumGltf::PropertyAttributePropertyView< ElementType, true > + CesiumGltf::PropertyAttributePropertyViewStatus + CesiumGltf::PropertyAttributeView + CesiumGltf::PropertyTable + CesiumGltf::PropertyTableProperty + CesiumGltf::PropertyTablePropertyView + CesiumGltf::PropertyTablePropertyView< ElementType, false > + CesiumGltf::PropertyTablePropertyView< ElementType, true > + CesiumGltf::PropertyTablePropertyViewStatus + CesiumGltf::PropertyTableView + CesiumGltf::PropertyTexture + CesiumGltf::PropertyTextureProperty + CesiumGltf::PropertyTexturePropertyView + CesiumGltf::PropertyTexturePropertyView< ElementType, false > + CesiumGltf::PropertyTexturePropertyView< ElementType, true > + CesiumGltf::PropertyTexturePropertyViewStatus + CesiumGltf::PropertyTextureView + CesiumGltf::PropertyView + CesiumGltf::PropertyView< bool > + CesiumGltf::PropertyView< ElementType, false > + CesiumGltf::PropertyView< ElementType, true > + CesiumGltf::PropertyView< PropertyArrayView< bool > > + CesiumGltf::PropertyView< PropertyArrayView< ElementType >, false > + CesiumGltf::PropertyView< PropertyArrayView< ElementType >, true > + CesiumGltf::PropertyView< PropertyArrayView< std::string_view > > + CesiumGltf::PropertyView< std::string_view > + CesiumGltf::PropertyViewStatus + CesiumGltf::Sampler + CesiumGltf::Scene + CesiumGltf::Schema + CesiumGltf::Skin + CesiumGltf::StatusFromAccessor + CesiumGltf::SupportedGpuCompressedPixelFormats + CesiumGltf::TexCoordFromAccessor + CesiumGltf::Texture + CesiumGltf::TextureInfo + CesiumGltf::TextureView + CesiumGltf::TextureViewOptions + CesiumGltf::TypeToNormalizedType + CesiumGltf::TypeToNormalizedType< glm::mat< N, N, T, Q > > + CesiumGltf::TypeToNormalizedType< glm::vec< N, T, Q > > + CesiumGltf::TypeToNormalizedType< int16_t > + CesiumGltf::TypeToNormalizedType< int32_t > + CesiumGltf::TypeToNormalizedType< int64_t > + CesiumGltf::TypeToNormalizedType< int8_t > + CesiumGltf::TypeToNormalizedType< PropertyArrayView< glm::mat< N, N, T, Q > > > + CesiumGltf::TypeToNormalizedType< PropertyArrayView< glm::vec< N, T, Q > > > + CesiumGltf::TypeToNormalizedType< PropertyArrayView< int16_t > > + CesiumGltf::TypeToNormalizedType< PropertyArrayView< int32_t > > + CesiumGltf::TypeToNormalizedType< PropertyArrayView< int64_t > > + CesiumGltf::TypeToNormalizedType< PropertyArrayView< int8_t > > + CesiumGltf::TypeToNormalizedType< PropertyArrayView< uint16_t > > + CesiumGltf::TypeToNormalizedType< PropertyArrayView< uint32_t > > + CesiumGltf::TypeToNormalizedType< PropertyArrayView< uint64_t > > + CesiumGltf::TypeToNormalizedType< PropertyArrayView< uint8_t > > + CesiumGltf::TypeToNormalizedType< uint16_t > + CesiumGltf::TypeToNormalizedType< uint32_t > + CesiumGltf::TypeToNormalizedType< uint64_t > + CesiumGltf::TypeToNormalizedType< uint8_t > + CesiumGltf::TypeToPropertyType + CesiumGltf::TypeToPropertyType< bool > + CesiumGltf::TypeToPropertyType< double > + CesiumGltf::TypeToPropertyType< float > + CesiumGltf::TypeToPropertyType< glm::mat< 2, 2, T, P > > + CesiumGltf::TypeToPropertyType< glm::mat< 3, 3, T, P > > + CesiumGltf::TypeToPropertyType< glm::mat< 4, 4, T, P > > + CesiumGltf::TypeToPropertyType< glm::vec< 2, T, P > > + CesiumGltf::TypeToPropertyType< glm::vec< 3, T, P > > + CesiumGltf::TypeToPropertyType< glm::vec< 4, T, P > > + CesiumGltf::TypeToPropertyType< int16_t > + CesiumGltf::TypeToPropertyType< int32_t > + CesiumGltf::TypeToPropertyType< int64_t > + CesiumGltf::TypeToPropertyType< int8_t > + CesiumGltf::TypeToPropertyType< std::string_view > + CesiumGltf::TypeToPropertyType< uint16_t > + CesiumGltf::TypeToPropertyType< uint32_t > + CesiumGltf::TypeToPropertyType< uint64_t > + CesiumGltf::TypeToPropertyType< uint8_t > + CesiumGltf::VertexAttributeSemantics + + AccessorView< AccessorTypes::VEC3< float > > + PositionAccessorType + namespaceCesiumGltf.html + ae4d7cf2b1f305d3dc0eea604ad45ea14 + + + + AccessorView< AccessorTypes::VEC3< float > > + NormalAccessorType + namespaceCesiumGltf.html + a015639d22156a7c159151380f27bf5a5 + + + + std::variant< AccessorView< int8_t >, AccessorView< uint8_t >, AccessorView< int16_t >, AccessorView< uint16_t >, AccessorView< uint32_t >, AccessorView< float > > + FeatureIdAccessorType + namespaceCesiumGltf.html + a1291101ff1b0e8624ce7be38d984bc94 + + + + std::variant< std::monostate, AccessorView< uint8_t >, AccessorView< uint16_t >, AccessorView< uint32_t > > + IndexAccessorType + namespaceCesiumGltf.html + a176078918ff2038313a3d46389eba9c2 + + + + std::variant< AccessorView< AccessorTypes::VEC2< uint8_t > >, AccessorView< AccessorTypes::VEC2< uint16_t > >, AccessorView< AccessorTypes::VEC2< float > > > + TexCoordAccessorType + namespaceCesiumGltf.html + aca30004fffe898b2e6cfd37c35a667b7 + + + + std::variant< AccessorView< AccessorTypes::VEC4< uint8_t > >, AccessorView< AccessorTypes::VEC4< int8_t > >, AccessorView< AccessorTypes::VEC4< uint16_t > >, AccessorView< AccessorTypes::VEC4< int16_t > >, AccessorView< AccessorTypes::VEC4< float > > > + QuaternionAccessorType + namespaceCesiumGltf.html + a1f1fa60823b168de8079be4a6fc100fb + + + + std::conditional_t< IsMetadataNumericArray< T >::value, PropertyArrayCopy< typename MetadataArrayType< T >::type >, T > + PropertyValueViewToCopy + namespaceCesiumGltf.html + a971dcf32c4194c02e6823ca4734da068 + + + + std::conditional_t< IsMetadataNumericArray< T >::value, PropertyArrayView< typename MetadataArrayType< T >::type >, T > + PropertyValueCopyToView + namespaceCesiumGltf.html + a5e8f7d23a4e1da81c29477ad77eb2eb8 + + + + int32_t + PropertyViewStatusType + namespaceCesiumGltf.html + af49ffa4cbf39a2012657c25e709a2ece + + + + + AccessorViewStatus + namespaceCesiumGltf.html + a96efebd948c6621a9a3c5f064be8f677 + + Valid + InvalidAccessorIndex + InvalidBufferViewIndex + InvalidBufferIndex + BufferViewTooSmall + BufferTooSmall + WrongSizeT + InvalidType + InvalidComponentType + InvalidByteStride + + + + FeatureIdTextureViewStatus + namespaceCesiumGltf.html + a6fb7a16cb1d774073747aa962b176db6 + + Valid + ErrorUninitialized + ErrorInvalidTexture + ErrorInvalidImage + ErrorInvalidSampler + ErrorEmptyImage + ErrorInvalidImageBytesPerChannel + ErrorInvalidChannels + + + + KhrTextureTransformStatus + namespaceCesiumGltf.html + a6d6463a9096aee6d4b4aa4fff6e33e3f + + Valid + ErrorInvalidOffset + ErrorInvalidScale + + + + GpuCompressedPixelFormat + namespaceCesiumGltf.html + ac0e393684cdd5415cf710f30118ac3e8 + + NONE + ETC1_RGB + ETC2_RGBA + BC1_RGB + BC3_RGBA + BC4_R + BC5_RG + BC7_RGBA + PVRTC1_4_RGB + PVRTC1_4_RGBA + ASTC_4x4_RGBA + PVRTC2_4_RGB + PVRTC2_4_RGBA + ETC2_EAC_R11 + ETC2_EAC_RG11 + + + + PropertyAttributeViewStatus + namespaceCesiumGltf.html + a499434eb5a323c9bc0da9f55d2e9da0f + + Valid + ErrorMissingMetadataExtension + ErrorMissingSchema + ErrorClassNotFound + + + + PropertyTableViewStatus + namespaceCesiumGltf.html + ac065fe324496ffcc25b906fce691b05f + + Valid + ErrorMissingMetadataExtension + ErrorMissingSchema + ErrorClassNotFound + + + + PropertyTextureViewStatus + namespaceCesiumGltf.html + af9dd9586b45135c4a744357183c8ab2a + + Valid + ErrorMissingMetadataExtension + ErrorMissingSchema + ErrorClassNotFound + + + + PropertyType + namespaceCesiumGltf.html + ab203ff2f50e705295f485de120c68bb3 + + Invalid + Scalar + Vec2 + Vec3 + Vec4 + Mat2 + Mat3 + Mat4 + String + Boolean + Enum + + + + PropertyComponentType + namespaceCesiumGltf.html + a00808ebde48d3f56cef3021b4c179e4b + + None + Int8 + Uint8 + Int16 + Uint16 + Int32 + Uint32 + Int64 + Uint64 + Float32 + Float64 + + + + TextureViewStatus + namespaceCesiumGltf.html + a65c15cc24665a64e0456b9386bc3797c + + Valid + ErrorUninitialized + ErrorInvalidTexture + ErrorInvalidSampler + ErrorInvalidImage + ErrorEmptyImage + ErrorInvalidBytesPerChannel + + + PositionAccessorType + getPositionAccessorView + namespaceCesiumGltf.html + afbe0129772f0a8b3c958841fad2acf4a + (const Model &model, const MeshPrimitive &primitive) + + + NormalAccessorType + getNormalAccessorView + namespaceCesiumGltf.html + a8df6fe1e2f0c227dbc1c47052cc0839f + (const Model &model, const MeshPrimitive &primitive) + + + FeatureIdAccessorType + getFeatureIdAccessorView + namespaceCesiumGltf.html + a56be0a3d0c9bfeea830b9182068ffb3b + (const Model &model, const MeshPrimitive &primitive, int32_t featureIdAttributeIndex) + + + FeatureIdAccessorType + getFeatureIdAccessorView + namespaceCesiumGltf.html + a6a6957d2a50ff425a9df26d806883af8 + (const Model &model, const Node &node, int32_t featureIdAttributeIndex) + + + IndexAccessorType + getIndexAccessorView + namespaceCesiumGltf.html + a52ff94d035a087430b082ec45a2083a8 + (const Model &model, const MeshPrimitive &primitive) + + + TexCoordAccessorType + getTexCoordAccessorView + namespaceCesiumGltf.html + a7b6e6228c62fcc31ffbc862450cc100d + (const Model &model, const MeshPrimitive &primitive, int32_t textureCoordinateSetIndex) + + + QuaternionAccessorType + getQuaternionAccessorView + namespaceCesiumGltf.html + ae6ec7331585149e466bf8fcf9e84fa2e + (const Model &model, const Accessor *accessor) + + + QuaternionAccessorType + getQuaternionAccessorView + namespaceCesiumGltf.html + a9e5b2c143a8b2feff3d2b2aabcf799d9 + (const Model &model, int32_t accessorIndex) + + + std::invoke_result_t< TCallback, AccessorView< AccessorTypes::SCALAR< float > > > + createAccessorView + namespaceCesiumGltf.html + aff9d11b22abc16f6a9f8fcee56294707 + (const Model &model, const Accessor &accessor, TCallback &&callback) + + + std::invoke_result_t< TCallback, AccessorView< AccessorTypes::SCALAR< float > > > + createAccessorView + namespaceCesiumGltf.html + a1047e9b5328eeaa7c4ecb59ccf75d42b + (const Model &model, int32_t accessorIndex, TCallback &&callback) + + + bool + operator== + namespaceCesiumGltf.html + aecb76854b9e53bb65c55bee29c6d4dc4 + (const PropertyArrayView< T > &lhs, const PropertyArrayView< T > &rhs) + + + bool + operator== + namespaceCesiumGltf.html + a3e4db64da7dbad163ba7ecc2da4395f8 + (const PropertyArrayView< T > &lhs, const PropertyArrayCopy< T > &rhs) + + + bool + operator== + namespaceCesiumGltf.html + acfd36a64125c8a2a3147eb9737bead2f + (const PropertyArrayCopy< T > &lhs, const PropertyArrayView< T > &rhs) + + + bool + operator== + namespaceCesiumGltf.html + a8b3c7295cb014c888399edf5224339b4 + (const PropertyArrayCopy< T > &lhs, const PropertyArrayCopy< T > &rhs) + + + bool + operator!= + namespaceCesiumGltf.html + aedec8f7bdf14da7e658fe6225a00c8e2 + (const PropertyArrayView< T > &lhs, const PropertyArrayView< T > &rhs) + + + bool + operator!= + namespaceCesiumGltf.html + a2258b3d321a4543acd848b97d909d10e + (const PropertyArrayView< T > &lhs, const PropertyArrayCopy< T > &rhs) + + + bool + operator!= + namespaceCesiumGltf.html + ac09a4721ab3fd469ededca767ccf0a3d + (const PropertyArrayCopy< T > &lhs, const PropertyArrayView< T > &rhs) + + + bool + operator!= + namespaceCesiumGltf.html + af1e2e45747b066750aad6845f71274dc + (const PropertyArrayCopy< T > &lhs, const PropertyArrayCopy< T > &rhs) + + + PropertyType + getAccessorTypeAsPropertyType + namespaceCesiumGltf.html + a57a0af1f01a4747b3f18eb96aaca852b + (const Accessor &accessor) + + + PropertyComponentType + getAccessorComponentTypeAsPropertyComponentType + namespaceCesiumGltf.html + ac5d7d6bc5eb7a12e3705d307b9300704 + (const Accessor &accessor) + + + int64_t + getOffsetTypeSize + namespaceCesiumGltf.html + a8a689fd23893775ff55497a0116656c8 + (PropertyComponentType offsetType) noexcept + + + ElementType + assembleScalarValue + namespaceCesiumGltf.html + aa2a2d7f4479db680986f83b494b95440 + (const std::span< uint8_t > bytes) noexcept + + + ElementType + assembleVecNValue + namespaceCesiumGltf.html + a44ae546654f5121dfc604cbc7e359ac5 + (const std::span< uint8_t > bytes) noexcept + + + PropertyArrayCopy< T > + assembleArrayValue + namespaceCesiumGltf.html + aaf5fa61b1a99fb44908354568d214557 + (const std::span< uint8_t > bytes) noexcept + + + PropertyValueViewToCopy< ElementType > + assembleValueFromChannels + namespaceCesiumGltf.html + af2a23846a3a04bfd57ebebf0cd1b8f4a + (const std::span< uint8_t > bytes) noexcept + + + double + normalize + namespaceCesiumGltf.html + a658d7f821d3a8b09567030104e6f1c55 + (T value) + + + glm::vec< N, double > + normalize + namespaceCesiumGltf.html + a89ada4509156fa08da1fb38b78aeca1c + (glm::vec< N, T > value) + + + glm::mat< N, N, double > + normalize + namespaceCesiumGltf.html + a357d279cc4fc56e7e160405e0de54d2e + (glm::mat< N, N, T > value) + + + T + applyScale + namespaceCesiumGltf.html + a13b4fce3d63029b9cbcab510f8014e35 + (const T &value, const T &scale) + + + T + transformValue + namespaceCesiumGltf.html + a54c8daa4a2a86c81873afd19b32037ec + (const T &value, const std::optional< T > &offset, const std::optional< T > &scale) + + + PropertyArrayCopy< T > + transformArray + namespaceCesiumGltf.html + a8d4075c75c937b7ced12857100c0124d + (const PropertyArrayView< T > &value, const std::optional< PropertyArrayView< T > > &offset, const std::optional< PropertyArrayView< T > > &scale) + + + PropertyArrayCopy< NormalizedType > + transformNormalizedArray + namespaceCesiumGltf.html + a4a7fa5bd37e1072659337894a94f387b + (const PropertyArrayView< T > &value, const std::optional< PropertyArrayView< NormalizedType > > &offset, const std::optional< PropertyArrayView< NormalizedType > > &scale) + + + PropertyArrayCopy< glm::vec< N, double > > + transformNormalizedVecNArray + namespaceCesiumGltf.html + a342fd3972ff45e5be19fc3358ff8ff78 + (const PropertyArrayView< glm::vec< N, T > > &value, const std::optional< PropertyArrayView< glm::vec< N, double > > > &offset, const std::optional< PropertyArrayView< glm::vec< N, double > > > &scale) + + + PropertyArrayCopy< glm::mat< N, N, double > > + transformNormalizedMatNArray + namespaceCesiumGltf.html + a20df83b36f2dfc09e70aadd01331000b + (const PropertyArrayView< glm::mat< N, N, T > > &value, const std::optional< PropertyArrayView< glm::mat< N, N, double > > > &offset, const std::optional< PropertyArrayView< glm::mat< N, N, double > > > &scale) + + + std::string + convertPropertyTypeToString + namespaceCesiumGltf.html + a6ff02323644057282ca87e5bd6e23b09 + (PropertyType type) + + + PropertyType + convertStringToPropertyType + namespaceCesiumGltf.html + aadbfded2b34e08fa09942279b39c23a5 + (const std::string &str) + + + std::string + convertPropertyComponentTypeToString + namespaceCesiumGltf.html + a791ef92691e870f94ad4adfc0fa29a1a + (PropertyComponentType componentType) + + + PropertyComponentType + convertStringToPropertyComponentType + namespaceCesiumGltf.html + a2d62d96c0efd619705c17891033a79fa + (const std::string &str) + + + PropertyComponentType + convertArrayOffsetTypeStringToPropertyComponentType + namespaceCesiumGltf.html + a11ae0dceba9a480d027ff4c36a597a18 + (const std::string &str) + + + PropertyComponentType + convertStringOffsetTypeStringToPropertyComponentType + namespaceCesiumGltf.html + afaed14b0453eeb63de612925a9e85d31 + (const std::string &str) + + + PropertyComponentType + convertAccessorComponentTypeToPropertyComponentType + namespaceCesiumGltf.html + ab5956882cc4c8ddd9311a30293c2d20f + (int componentType) + + + bool + isPropertyTypeVecN + namespaceCesiumGltf.html + a1394ce7a775265113da9aca6252f4153 + (PropertyType type) + + + bool + isPropertyTypeMatN + namespaceCesiumGltf.html + a4b75ce98c3978caa79605297690dfe1d + (PropertyType type) + + + bool + isPropertyComponentTypeInteger + namespaceCesiumGltf.html + a245e07b9c059557ecae4de3e7f557178 + (PropertyComponentType componentType) + + + glm::length_t + getDimensionsFromPropertyType + namespaceCesiumGltf.html + abba5aca9925dfbac52fb44c78ec5f2c9 + (PropertyType type) + + + glm::length_t + getComponentCountFromPropertyType + namespaceCesiumGltf.html + aed8eebdc01b21d6b8d7886b965a1c220 + (PropertyType type) + + + size_t + getSizeOfComponentType + namespaceCesiumGltf.html + a0552d7e6bb1c8d0ec67316b302a8ce37 + (PropertyComponentType componentType) + + + PropertyViewStatusType + validatePropertyType + namespaceCesiumGltf.html + a9feed8666c9b942c7c7a4a305be3aca1 + (const ClassProperty &classProperty) + + + PropertyViewStatusType + validateArrayPropertyType + namespaceCesiumGltf.html + afb00bcc12a008c71f75a776cb3d887bb + (const ClassProperty &classProperty) + + + int64_t + getCount + namespaceCesiumGltf.html + a9ea472029b4705631cbc0fe673b2cf4e + (std::optional< std::vector< std::byte > > &buffer) + + + double + applySamplerWrapS + namespaceCesiumGltf.html + a00f07cf767c4685dc1e1c14f7ce01f07 + (const double u, const int32_t wrapS) + + + double + applySamplerWrapT + namespaceCesiumGltf.html + a4d6e8d5a415476bd88e420cee4eb4cb8 + (const double v, const int32_t wrapT) + + + + CesiumGltfContent + namespaceCesiumGltfContent.html + CesiumGltfContent::GltfUtilities + CesiumGltfContent::ImageManipulation + CesiumGltfContent::PixelRectangle + CesiumGltfContent::SkirtMeshMetadata + + + CesiumGltfReader + namespaceCesiumGltfReader.html + CesiumGltfReader::AccessorReader + CesiumGltfReader::AccessorSparseIndicesReader + CesiumGltfReader::AccessorSparseReader + CesiumGltfReader::AccessorSparseValuesReader + CesiumGltfReader::AnimationChannelReader + CesiumGltfReader::AnimationChannelTargetReader + CesiumGltfReader::AnimationReader + CesiumGltfReader::AnimationSamplerReader + CesiumGltfReader::AssetReader + CesiumGltfReader::BufferReader + CesiumGltfReader::BufferViewReader + CesiumGltfReader::CameraOrthographicReader + CesiumGltfReader::CameraPerspectiveReader + CesiumGltfReader::CameraReader + CesiumGltfReader::ClassPropertyReader + CesiumGltfReader::ClassReader + CesiumGltfReader::EnumReader + CesiumGltfReader::EnumValueReader + CesiumGltfReader::ExtensionBufferExtMeshoptCompressionReader + CesiumGltfReader::ExtensionBufferViewExtMeshoptCompressionReader + CesiumGltfReader::ExtensionCesiumPrimitiveOutlineReader + CesiumGltfReader::ExtensionCesiumRTCReader + CesiumGltfReader::ExtensionCesiumTileEdgesReader + CesiumGltfReader::ExtensionExtInstanceFeaturesFeatureIdReader + CesiumGltfReader::ExtensionExtInstanceFeaturesReader + CesiumGltfReader::ExtensionExtMeshFeaturesReader + CesiumGltfReader::ExtensionExtMeshGpuInstancingReader + CesiumGltfReader::ExtensionExtStructuralMetadataReader + CesiumGltfReader::ExtensionKhrDracoMeshCompressionReader + CesiumGltfReader::ExtensionKhrMaterialsUnlitReader + CesiumGltfReader::ExtensionKhrTextureBasisuReader + CesiumGltfReader::ExtensionKhrTextureTransformReader + CesiumGltfReader::ExtensionMeshPrimitiveExtStructuralMetadataReader + CesiumGltfReader::ExtensionMeshPrimitiveKhrMaterialsVariantsMappingsValueReader + CesiumGltfReader::ExtensionMeshPrimitiveKhrMaterialsVariantsReader + CesiumGltfReader::ExtensionModelExtStructuralMetadataReader + CesiumGltfReader::ExtensionModelKhrMaterialsVariantsReader + CesiumGltfReader::ExtensionModelKhrMaterialsVariantsValueReader + CesiumGltfReader::ExtensionModelMaxarMeshVariantsReader + CesiumGltfReader::ExtensionModelMaxarMeshVariantsValueReader + CesiumGltfReader::ExtensionNodeMaxarMeshVariantsMappingsValueReader + CesiumGltfReader::ExtensionNodeMaxarMeshVariantsReader + CesiumGltfReader::ExtensionTextureWebpReader + CesiumGltfReader::FeatureIdReader + CesiumGltfReader::FeatureIdTextureReader + CesiumGltfReader::GltfReader + CesiumGltfReader::GltfReaderOptions + CesiumGltfReader::GltfReaderResult + CesiumGltfReader::GltfSharedAssetSystem + CesiumGltfReader::ImageDecoder + CesiumGltfReader::ImageReader + CesiumGltfReader::ImageReaderResult + CesiumGltfReader::MaterialNormalTextureInfoReader + CesiumGltfReader::MaterialOcclusionTextureInfoReader + CesiumGltfReader::MaterialPBRMetallicRoughnessReader + CesiumGltfReader::MaterialReader + CesiumGltfReader::MeshPrimitiveReader + CesiumGltfReader::MeshReader + CesiumGltfReader::ModelReader + CesiumGltfReader::NetworkImageAssetDescriptor + CesiumGltfReader::NetworkSchemaAssetDescriptor + CesiumGltfReader::NodeReader + CesiumGltfReader::PropertyAttributePropertyReader + CesiumGltfReader::PropertyAttributeReader + CesiumGltfReader::PropertyTablePropertyReader + CesiumGltfReader::PropertyTableReader + CesiumGltfReader::PropertyTexturePropertyReader + CesiumGltfReader::PropertyTextureReader + CesiumGltfReader::SamplerReader + CesiumGltfReader::SceneReader + CesiumGltfReader::SchemaReader + CesiumGltfReader::SkinReader + CesiumGltfReader::TextureInfoReader + CesiumGltfReader::TextureReader + + + CesiumGltfWriter + namespaceCesiumGltfWriter.html + CesiumGltfWriter::GltfWriter + CesiumGltfWriter::GltfWriterOptions + CesiumGltfWriter::GltfWriterResult + CesiumGltfWriter::SchemaWriter + CesiumGltfWriter::SchemaWriterOptions + CesiumGltfWriter::SchemaWriterResult + + + CesiumIonClient + namespaceCesiumIonClient.html + CesiumIonClient::ApplicationData + CesiumIonClient::Asset + CesiumIonClient::Assets + CesiumIonClient::Connection + CesiumIonClient::DefaultAssets + CesiumIonClient::Defaults + CesiumIonClient::ListTokensOptions + CesiumIonClient::NoValue + CesiumIonClient::Profile + CesiumIonClient::ProfileStorage + CesiumIonClient::QuickAddAsset + CesiumIonClient::QuickAddRasterOverlay + CesiumIonClient::Response + CesiumIonClient::Token + CesiumIonClient::TokenList + + + AuthenticationMode + namespaceCesiumIonClient.html + a3d9fcdfbaa8937bc518e2c8d6c01f0db + + + + CesiumIon + namespaceCesiumIonClient.html + a3d9fcdfbaa8937bc518e2c8d6c01f0dba8c534a5c58a747947972c1b51739fd2f + + + + Saml + namespaceCesiumIonClient.html + a3d9fcdfbaa8937bc518e2c8d6c01f0dba8a7e39da9f9e7ad57e92340b968e6a74 + + + + SingleUser + namespaceCesiumIonClient.html + a3d9fcdfbaa8937bc518e2c8d6c01f0dba4b8c9e1c3b0de6ac6361af3ad46dca8d + + + + + SortOrder + namespaceCesiumIonClient.html + aa1af67bed81a4773884a59d292d4a72f + + Ascending + Descending + + + + CesiumJsonReader + namespaceCesiumJsonReader.html + CesiumJsonReader::ArrayJsonHandler + CesiumJsonReader::ArrayJsonHandler< double, DoubleJsonHandler > + CesiumJsonReader::ArrayJsonHandler< std::string, StringJsonHandler > + CesiumJsonReader::ArrayJsonHandler< std::vector< T >, ArrayJsonHandler< T, THandler > > + CesiumJsonReader::ArrayJsonHandler< T, IntegerJsonHandler< T > > + CesiumJsonReader::BoolJsonHandler + CesiumJsonReader::DictionaryJsonHandler + CesiumJsonReader::DoubleJsonHandler + CesiumJsonReader::ExtensibleObjectJsonHandler + CesiumJsonReader::ExtensionsJsonHandler + CesiumJsonReader::IExtensionJsonHandler + CesiumJsonReader::IgnoreValueJsonHandler + CesiumJsonReader::IJsonHandler + CesiumJsonReader::IntegerJsonHandler + CesiumJsonReader::JsonHandler + CesiumJsonReader::JsonObjectJsonHandler + CesiumJsonReader::JsonReader + CesiumJsonReader::JsonReaderOptions + CesiumJsonReader::ObjectJsonHandler + CesiumJsonReader::ReadJsonResult + CesiumJsonReader::SharedAssetJsonHandler + CesiumJsonReader::StringJsonHandler + + + ExtensionState + namespaceCesiumJsonReader.html + aa9f89c936c174140c5a4cbda5b7a6c78 + + Enabled + JsonOnly + Disabled + + + + CesiumJsonWriter + namespaceCesiumJsonWriter.html + CesiumJsonWriter::ExtensionWriterContext + CesiumJsonWriter::JsonWriter + CesiumJsonWriter::PrettyJsonWriter + + + ExtensionState + namespaceCesiumJsonWriter.html + ac37c5bf19403f16b1fdeffae84ad8e8a + + Enabled + Disabled + + + void + writeJsonValue + namespaceCesiumJsonWriter.html + a38b87718c2f241d26feea634eccd44b2 + (const CesiumUtility::JsonValue &value, JsonWriter &writer) + + + void + writeJsonExtensions + namespaceCesiumJsonWriter.html + acfc883fb9f3e9d758455cf909c4031dc + (const TExtended &obj, JsonWriter &jsonWriter, const ExtensionWriterContext &context) + + + bool + hasRegisteredExtensions + namespaceCesiumJsonWriter.html + a29ae5ef4ae95f1fc9ee53aee6d32bd68 + (const TExtended &obj, JsonWriter &jsonWriter, const ExtensionWriterContext &context) + + + + CesiumQuantizedMeshTerrain + namespaceCesiumQuantizedMeshTerrain.html + CesiumQuantizedMeshTerrain::AvailabilityRectangle + CesiumQuantizedMeshTerrain::AvailabilityRectangleReader + CesiumQuantizedMeshTerrain::Layer + CesiumQuantizedMeshTerrain::LayerReader + CesiumQuantizedMeshTerrain::LayerSpec + CesiumQuantizedMeshTerrain::LayerWriter + CesiumQuantizedMeshTerrain::LayerWriterOptions + CesiumQuantizedMeshTerrain::LayerWriterResult + CesiumQuantizedMeshTerrain::QuantizedMeshLoader + CesiumQuantizedMeshTerrain::QuantizedMeshLoadResult + CesiumQuantizedMeshTerrain::QuantizedMeshMetadataResult + + + CesiumRasterOverlays + namespaceCesiumRasterOverlays.html + CesiumRasterOverlays::BingMapsRasterOverlay + CesiumRasterOverlays::BingMapsStyle + CesiumRasterOverlays::DebugColorizeTilesRasterOverlay + CesiumRasterOverlays::IonRasterOverlay + CesiumRasterOverlays::IPrepareRasterOverlayRendererResources + CesiumRasterOverlays::LoadedRasterOverlayImage + CesiumRasterOverlays::LoadTileImageFromUrlOptions + CesiumRasterOverlays::QuadtreeRasterOverlayTileProvider + CesiumRasterOverlays::RasterizedPolygonsOverlay + CesiumRasterOverlays::RasterOverlay + CesiumRasterOverlays::RasterOverlayDetails + CesiumRasterOverlays::RasterOverlayLoadFailureDetails + CesiumRasterOverlays::RasterOverlayOptions + CesiumRasterOverlays::RasterOverlayTile + CesiumRasterOverlays::RasterOverlayTileProvider + CesiumRasterOverlays::RasterOverlayUtilities + CesiumRasterOverlays::TileMapServiceRasterOverlay + CesiumRasterOverlays::TileMapServiceRasterOverlayOptions + CesiumRasterOverlays::TileProviderAndTile + CesiumRasterOverlays::WebMapServiceRasterOverlay + CesiumRasterOverlays::WebMapServiceRasterOverlayOptions + CesiumRasterOverlays::WebMapTileServiceRasterOverlay + CesiumRasterOverlays::WebMapTileServiceRasterOverlayOptions + + + RasterOverlayLoadType + namespaceCesiumRasterOverlays.html + ac35b5620aa485d124da4ff830e51b50e + + Unknown + CesiumIon + TileProvider + + + + CesiumUtility + namespaceCesiumUtility.html + CesiumUtility::AttributeCompression + CesiumUtility::Credit + CesiumUtility::CreditSystem + CesiumUtility::DoublyLinkedListAdvanced + CesiumUtility::DoublyLinkedListPointers + CesiumUtility::ErrorList + CesiumUtility::ExtensibleObject + CesiumUtility::Hash + CesiumUtility::IDepotOwningAsset + CesiumUtility::IntrusivePointer + CesiumUtility::JsonHelpers + CesiumUtility::JsonValue + CesiumUtility::Math + CesiumUtility::ReferenceCounted + CesiumUtility::Result + CesiumUtility::Result< CesiumUtility::IntrusivePointer< T > > + CesiumUtility::ScopeGuard + CesiumUtility::SharedAsset + CesiumUtility::StringHelpers + CesiumUtility::Uri + + DoublyLinkedListAdvanced< T, T, Pointers > + DoublyLinkedList + namespaceCesiumUtility.html + ada2b86d4af311ed5bf8bfe9f65a7761e + + + + ReferenceCounted< T, true > + ReferenceCountedThreadSafe + namespaceCesiumUtility.html + adfa89e14984305be7ca3addc12d9a0a2 + + + + ReferenceCounted< T, false > + ReferenceCountedNonThreadSafe + namespaceCesiumUtility.html + ad0909c56f35a4efad530da3ba2983dd5 + + + + Result< IntrusivePointer< T > > + ResultPointer + namespaceCesiumUtility.html + ab0cbfe742a878c7a23ade69aa67de8ea + + + + bool + isGzip + namespaceCesiumUtility.html + a872f5d8de8d397bf98b9ba9dca248815 + (const std::span< const std::byte > &data) + + + bool + gzip + namespaceCesiumUtility.html + a3391ccfa99bd624214ba210e24fce748 + (const std::span< const std::byte > &data, std::vector< std::byte > &out) + + + bool + gunzip + namespaceCesiumUtility.html + a5e1206b043a9e91699ee6b4844f034fd + (const std::span< const std::byte > &data, std::vector< std::byte > &out) + + + IntrusivePointer< T > + const_intrusive_cast + namespaceCesiumUtility.html + a0c54805d441cc146176b990deea6aae6 + (const IntrusivePointer< U > &p) noexcept + + + std::string + joinToString + namespaceCesiumUtility.html + ada6ba84f34990f7d1a176b75e20415bb + (TIterator begin, TIterator end, const std::string &separator) + + + std::string + joinToString + namespaceCesiumUtility.html + aa61a2a444d5c46999356e190f50e7e34 + (TCollection collection, const std::string &separator) + + + constexpr std::optional< T > + losslessNarrow + namespaceCesiumUtility.html + a84f68c86674d511f2d6679776900acbb + (U u) noexcept + + + constexpr T + losslessNarrowOrDefault + namespaceCesiumUtility.html + a12a6c1e96ffba2bf45b0c27597ef8022 + (U u, T defaultValue) noexcept + + + + ScopeGuard + namespaceCesiumUtility.html + a4994166cb2d24ec688f2880ac508d38f + (ExitFunction) -> ScopeGuard< ExitFunction > + + + std::span< To > + reintepretCastSpan + namespaceCesiumUtility.html + a1a157ee7deb68decd911ade01b8a75dc + (const std::span< From > &from) noexcept + + + + std + namespacestd.html + std::hash< CesiumAsync::NetworkAssetDescriptor > + std::hash< CesiumGeometry::QuadtreeTileID > + std::hash< CesiumGltfReader::NetworkImageAssetDescriptor > + std::hash< CesiumGltfReader::NetworkSchemaAssetDescriptor > + + + contributing + Contribution Guide + contributing.html + md__2home_2runner_2work_2cesium-native_2cesium-native_2CONTRIBUTING + + + md__2home_2runner_2work_2cesium-native_2cesium-native_2CHANGES + Change Log + md__2home_2runner_2work_2cesium-native_2cesium-native_2CHANGES.html + + + async-system + AsyncSystem + async-system.html + md_topics_2async-system + asyncsystem-class + future + continuation-functions + catch + future-unwrapping + then-pass-through + combining-futures + creating-futures + promise + shared-future + lambda-captures-and-thread-safety + async-system-implementation + creating-an-asyncsystem + + + md_topics_2dependencies + Dependencies + md_topics_2dependencies.html + + + developer-setup + Developer Setup Guide + developer-setup.html + md_topics_2developer-setup + + + developer-resources + Developer Resources + developer-resources.html + developer-setup.html + multithreading.html + style-guide.html + contributing.html + md_topics_2developer + + + glossary + Glossary + glossary.html + md_topics_2glossary + glossary-ecef + + + multithreading + Multithreading + multithreading.html + thread-safety-rules.html + async-system.html + md_topics_2multithreading + + + rendering-3d-tiles + Rendering 3D Tiles + rendering-3d-tiles.html + md_topics_2rendering-3d-tiles + sequence-walkthrough + implement-3d-tiles-rendering + + + selection-algorithm-details + 3D Tiles Selection Algorithm + selection-algorithm-details.html + md_topics_2selection-algorithm-details + high-level-overview + culling + screen-space-error + selecting-loaded-tiles + ancestor-meets-sse + kicking + loading-descendant-limit + additional-topics + forbid-holes + + + style-guide + C++ Style Guide + style-guide.html + md_topics_2style-guide + + + thread-safety-rules + Thread Safety Rules + thread-safety-rules.html + md_topics_2thread-safety-rules + + + index + Cesium Native + index.html + md__2home_2runner_2work_2cesium-native_2cesium-native_2README + + diff --git a/Documentation/developer-setup-linux.md b/Documentation/developer-setup-linux.md index c64ddcecd..a65fc6f9b 100644 --- a/Documentation/developer-setup-linux.md +++ b/Documentation/developer-setup-linux.md @@ -1,4 +1,7 @@ +# Developer Setup for Linux {#developer-setup-linux} + Detailed instructions for setting up a Cesium for Unreal development environment on Linux. Please see the [Developer Setup](developer-setup.md) page for an overview of the process. + # Prerequisities @@ -13,8 +16,8 @@ export UNREAL_ENGINE_DIR= export UNREAL_ENGINE_COMPILER_DIR=$UNREAL_ENGINE_DIR/Engine/Extras/ThirdPartyNotUE/SDKs/HostLinux/Linux_x64/v20_clang-13.0.1-centos7/x86_64-unknown-linux-gnu export UNREAL_ENGINE_LIBCXX_DIR=$UNREAL_ENGINE_DIR/Engine/Source/ThirdParty/Unix/LibCxx ``` - -> Note: `v20_clang-13.0.1-centos7` is correct for Unreal Engine v5.0.3. It may be different for other versions of Unreal Engine. See [https://docs.unrealengine.com/5.0/en-US/SharingAndReleasing/Linux/GettingStarted/](https://docs.unrealengine.com/5.0/en-US/linux-development-requirements-for-unreal-engine/) or the equivalent for your version of Unreal Engine. +> [!note] +> `v20_clang-13.0.1-centos7` is correct for Unreal Engine v5.0.3. It may be different for other versions of Unreal Engine. See [https://docs.unrealengine.com/5.0/en-US/SharingAndReleasing/Linux/GettingStarted/](https://docs.unrealengine.com/5.0/en-US/linux-development-requirements-for-unreal-engine/) or the equivalent for your version of Unreal Engine. # Cloning the git repos @@ -22,16 +25,17 @@ The following illustrates the recommended directory layout for developers: - `~/dev` - Your own root directory for development. - `~/dev/cesium-unreal-samples` - The directory for the Unreal project that will use the plugin. -- `~/dev/cesium-unreal` - The directory for the actual *Cesium for Unreal* plugin. +- `~/dev/cesium-unreal` - The directory for the actual _Cesium for Unreal_ plugin. - `~/dev/cesium-unreal/extern/cesium-native` - The directory for the base libraries project. In this setup, we will build the Cesium for Unreal plugin separately from any project, and then install it as an Engine plugin. First, let's clone the Cesium for Unreal repo by issuing the following command in the `~/dev` directory: - - git clone -b ue5-main --recursive https://github.com/CesiumGS/cesium-unreal.git - -> Note: The last line will also check out the `cesium-native` submodule and its dependencies. If you forget the `--recursive` option, you will see many compiler errors later in this process. If this happens to you, run the following in the `Plugins\cesium-unreal` directory to update the submodules in the existing clone: +``` +git clone -b ue5-main --recursive https://github.com/CesiumGS/cesium-unreal.git +``` +> [!note] +> The last line will also check out the `cesium-native` submodule and its dependencies. If you forget the `--recursive` option, you will see many compiler errors later in this process. If this happens to you, run the following in the `Plugins\cesium-unreal` directory to update the submodules in the existing clone: git submodule update --init --recursive @@ -42,7 +46,8 @@ The cesium-native libraries and their dependencies use CMake and must be built s ## CMake command-line Configure the CMake project in the `~/dev/cesium-unreal/extern` directory by following the instructions below. -**Note**: The following steps must be done in the `extern` directory, and *not* the `cesium-native` subdirectory! +> [!note] +> The following steps must be done in the `extern` directory, and _not_ the `cesium-native` subdirectory! Change to the `~/dev/cesium-unreal/extern` directory, and execute the following commands to build and install a Debug version of cesium-native: @@ -50,10 +55,11 @@ Change to the `~/dev/cesium-unreal/extern` directory, and execute the following cmake --build build --target install To build a Release version, do the following: - - cmake -B build -S . -DCMAKE_TOOLCHAIN_FILE="unreal-linux-toolchain.cmake" -DCMAKE_POSITION_INDEPENDENT_CODE=ON -DCMAKE_BUILD_TYPE=Release - cmake --build build --target install - +``` +cmake -B build -S . -DCMAKE_TOOLCHAIN_FILE="unreal-linux-toolchain.cmake" -DCMAKE_POSITION_INDEPENDENT_CODE=ON -DCMAKE_BUILD_TYPE=Release +cmake --build build --target install +``` +> [!note] > To build faster by using multiple CPU cores, add `-j14` to the build/install command above, i.e. `cmake --build build --target install -j14`. "14" is the number of threads to use, and a higher or lower number may be more suitable for your system. ## KTX-Software workaround @@ -79,11 +85,12 @@ And build the plugin: ./RunUAT.sh BuildPlugin -Plugin="$CESIUM_FOR_UNREAL_DIR/CesiumForUnreal.uplugin" -Package="$CESIUM_FOR_UNREAL_DIR/../packages/CesiumForUnreal" -CreateSubFolder -TargetPlatforms=Linux And finally copy the built plugin into the Engine plugins directory: - - mkdir -p $UNREAL_ENGINE_DIR/Engine/Plugins/Marketplace - cp -r $CESIUM_FOR_UNREAL_DIR/../packages/CesiumForUnreal $UNREAL_ENGINE_DIR/Engine/Plugins/Marketplace/ - -> Note: On Linux (unlike Windows), it is essential that the `CesiumForUnreal` plugin go in the `Plugins/Marketplace/` subdirectory, rather than directly in `Plugins/`. Otherwise, the relative paths to other plugin `.so` files that the Unreal Build Tool has built into the plugin will not resolve correctly. +``` +mkdir -p $UNREAL_ENGINE_DIR/Engine/Plugins/Marketplace +cp -r $CESIUM_FOR_UNREAL_DIR/../packages/CesiumForUnreal $UNREAL_ENGINE_DIR/Engine/Plugins/Marketplace/ +``` +> [!note] +> On Linux (unlike Windows), it is essential that the `CesiumForUnreal` plugin go in the `Plugins/Marketplace/` subdirectory, rather than directly in `Plugins/`. Otherwise, the relative paths to other plugin `.so` files that the Unreal Build Tool has built into the plugin will not resolve correctly. # Using the plugin with the Cesium for Unreal Samples project @@ -92,6 +99,4 @@ The Cesium for Unreal Samples project demonstrates a bunch of features of Cesium cd ~/dev git clone https://github.com/CesiumGS/cesium-unreal-samples.git -Then, launch the Unreal Editor and open `~/dev/cesium-unreal-samples/CesiumForUnrealSamples.uproject`. Because we've already installed the plugin to the Engine Plugins directory, the samples project should pick it up automatically. - -> Note: These samples were built with UE v4.26. They can be converted to open in UE v5. +Then, launch the Unreal Editor and open `~/dev/cesium-unreal-samples/CesiumForUnrealSamples.uproject`. Because we've already installed the plugin to the Engine Plugins directory, the samples project should pick it up automatically. \ No newline at end of file diff --git a/Documentation/developer-setup-osx.md b/Documentation/developer-setup-osx.md index 9dfe7a548..d3a388426 100644 --- a/Documentation/developer-setup-osx.md +++ b/Documentation/developer-setup-osx.md @@ -1,11 +1,14 @@ +# Developer Setup for macOS {#developer-setup-osx} + Detailed instructions for setting up a Cesium for Unreal development environment on macOS. Please see the [Developer Setup](developer-setup.md) page for an overview of the process. + # Prerequisities - Install CMake (version 3.15 or newer) from https://cmake.org/install/ -- Install Xcode 11.3 from https://developer.apple.com/xcode/resources/ +- Install Xcode 14.2+ from https://developer.apple.com/xcode/resources/ - For best JPEG-decoding performance, you must have [nasm](https://www.nasm.us/) installed so that CMake can find it. Everything will work fine without it, just slower. -- Install the Unreal Engine (version 4.26 or newer) from https://www.unrealengine.com/en-US/download +- Install the minimum supported version of Unreal Engine (version 5.3 as of this writing) from https://www.unrealengine.com/en-US/download # Cloning the git repos @@ -13,53 +16,207 @@ The following illustrates the recommended directory layout for developers: - `~/dev` - Your own root directory for development. - `~/dev/cesium-unreal-samples` - The directory for the Unreal project that will use the plugin. -- `~/dev/cesium-unreal-samples/Plugins/cesium-unreal` - The directory for the actual *Cesium for Unreal* plugin. +- `~/dev/cesium-unreal-samples/Plugins/cesium-unreal` - The directory for the actual _Cesium for Unreal_ plugin. - `~/dev/cesium-unreal-samples/Plugins/cesium-unreal/extern/cesium-native` - The directory for the base libraries project. -You may use any directory for the project, but the directory for the actual *Cesium for Unreal* plugin **MUST** be in a subdirectory `Plugins/cesium-unreal` of the project directory. This way, Unreal will automatically find the Plugin when running the project, and pick up any changes that have been made to the plugin. +You may use any directory for the project, but the directory for the actual _Cesium for Unreal_ plugin **MUST** be in a subdirectory `Plugins/cesium-unreal` of the project directory. This way, Unreal will automatically find the Plugin when running the project, and pick up any changes that have been made to the plugin. This can be set up with the following sequence of commands, on the console, starting in the `~/dev` directory: +``` +git clone https://github.com/CesiumGS/cesium-unreal-samples.git +cd cesium-unreal-samples +mkdir Plugins +cd Plugins +git clone --recursive https://github.com/CesiumGS/cesium-unreal.git +``` +> [!note] +> The last line will also check out the `cesium-native` submodule and its dependencies. If you forget the `--recursive` option, you will see many compiler errors later in this process. If this happens to you, run the following in the `Plugins\cesium-unreal` directory to update the submodules in the existing clone: +``` +git submodule update --init --recursive +``` - git clone https://github.com/CesiumGS/cesium-unreal-samples.git - cd cesium-unreal-samples - mkdir Plugins - cd Plugins - git clone --recursive https://github.com/CesiumGS/cesium-unreal.git +# Setting up Xcode -> Note: The last line will also check out the `cesium-native` submodule and its dependencies. If you forget the `--recursive` option, you will see many compiler errors later in this process. If this happens to you, run the following in the `Plugins\cesium-unreal` directory to update the submodules in the existing clone: +Unreal Engine 5.3 requires a version of Xcode _no later_ than Xcode 15.x. This means that Xcode 16, which is the earliest version supported on macOS 15.2 Sequoia, cannot be used to build a UE 5.3 project without some tricks. You will see an error like this when you attempt to generate project files: - git submodule update --init --recursive +> Exception while generating include data for UnrealEditor: Platform Mac is not a valid platform to build. Check that the SDK is installed properly. -# Building cesium-native +We have a few options: + +1. Use an earlier version of macOS +2. Use a later version of Unreal Engine +3. [Hack UnrealBuildTool to allow us to build for UE 5.3 using Xcode 16](#modify-unrealbuildtool-for-xcode-16) +4. [Hack Xcode 15.4 to run on macOS 15.2 Sequoia](#modify-xcode-for-sequoia) + +## Modify UnrealBuildTool for Xcode 16 + +The source code for the UnrealBuildTool is installed with Unreal Engine, which makes it easy to modify it for our purposes. The file to edit in Unreal Engine 5.3 is here (or equivalent on your system): + +``` +/Users/Shared/Epic Games/UE_5.3/Engine/Source/Programs/UnrealBuildTool/Platform/Mac/ApplePlatformSDK.Versions.cs +``` + +Find a line in that file that looks like this: + +``` +MaxVersion = "15.9.9"; +``` -The cesium-native libraries and their dependencies use CMake and must be built separately from Cesium for Unreal. There are a number of ways to do this, but typically on macOS. +If you have Xcode 16, change it to: -## CMake command-line +``` +MaxVersion = "16.9.9"; +``` -First, configure the CMake project in the `~/dev/cesium-unreal-samples/Plugins/cesium-unreal/extern` directory by following the instructions below. -**Note**: The following steps must be done in the `extern` directory, and *not* the `cesium-native` subdirectory! +Now we need to build our modifications into a new binary, which we can do by running: -Change to the `~/dev/cesium-unreal-samples/Plugins/cesium-unreal/extern` directory, and execute the following commands to build and install a Debug version of cesium-native: +``` +cd "/Users/Shared/Epic Games/UE_5.3/Engine/Source/Programs/UnrealBuildTool" +"/Users/Shared/Epic Games/UE_5.3/Engine/Binaries/ThirdParty/DotNet/6.0.302/mac-x64/dotnet" build UnrealBuildTool.csproj +``` - cmake -B build -S . -DCMAKE_BUILD_TYPE=Debug - cmake --build build --target install +> [!note] +> The path to the `dotnet` executable may be different in different Unreal Engine versions. You can also install a system `dotnet` if desired with `brew install dotnet`. -To build a Release version, do the following: +This will build UnrealBuildTool to the place all of Unreal's build scripts expect to find it. You should now be able to [generate project files](#building-cesium-for-unreal) successfully. - cmake -B build -S . -DCMAKE_BUILD_TYPE=Release - cmake --build build --target install +However, because this version of Unreal Engine has not been tested on this Xcode version, you may run into compiler errors, and these may be easy or difficult to fix. With Unreal Engine 5.3 and Xcode 16.2, you'll likely see errors like this: + +> /Users/Shared/Epic Games/UE_5.3/Engine/Source/Runtime/RenderCore/Public/ShaderParameterStructDeclaration.h:22:3: encoding prefix 'u' on an unevaluated string literal has no effect and is incompatible with c++2c [-Werror,-Winvalid-unevaluated-string] + +We can "fix" this by suppressing this warning. Open `/Users/Shared/Epic Games/UE_5.3/Engine/Source/Runtime/Core/Public/Apple/ApplePlatformCompilerPreSetup.h` and add a line to disable this warning: + +``` +#pragma clang diagnostic ignored "-Winvalid-unevaluated-string" +``` + +## Modify Xcode for Sequoia + +It's possible to run Xcode 15.4 on macOS 15.2 Sequoia, as described here: +https://stackoverflow.com/questions/78996419/xcode-15-is-not-running-in-macos-sequoia + +More detailed instructions coming soon. + +# Building cesium-native -## CMake command-line for iOS +The cesium-native libraries and their dependencies use CMake and must be built separately from Cesium for Unreal. Cesium for Unreal supports both Intel and Apple Silicon processors. In development, we usually just want to build for the host's architecture, which is done as follows: + +``` +cd ~/dev/cesium-unreal-samples/Plugins/cesium-unreal/extern +cmake -B build -S . -DCMAKE_BUILD_TYPE=Debug +cmake --build build --target install --parallel 14 +``` + +Or to build a Release version: + +``` +cd ~/dev/cesium-unreal-samples/Plugins/cesium-unreal/extern +cmake -B build -S . -DCMAKE_BUILD_TYPE=RelWithDebInfo +cmake --build build --target install --parallel 14 +``` + +This will install the built libraries to one of these subdirectories of `~/dev/cesium-unreal-samples/Plugins/cesium-unreal/Source/ThirdParty/lib/`, depending on your configuration and processor architecture: + +* `Darwin-arm64-Debug` - Debug configuration for Apple Silicon. +* `Darwin-arm64-Release` - Release or RelWithDebInfo configuration for Apple Silicon. +* `Darwin-x64-Debug` - Debug configuration for Intel processors. +* `Darwin-x64-Release` - Release or RelWithDebInfo configuration for Intel processors. + +Cesium for Unreal expects to find the libraries in one of these locations, depending on its configuration: + +* `Darwin-universal-Debug` - DebugGame configuration for both processors. +* `Darwin-universal-Release` - Development and Shipping configuration for both processors. + +If we only care to run on the host's architecture, such as during development, we can create a symlink to enable the Cesium for Unreal build to find the libraries for the one processor: + +``` +cd ~/dev/cesium-unreal-samples/Plugins/cesium-unreal/Source/ThirdParty/lib +ln -s ./Darwin-arm64-Debug Darwin-universal-Debug +ln -s ./Darwin-arm64-Release Darwin-universal-Release +``` + +Or, we can build for the other processor: + +``` +cd ~/dev/cesium-unreal-samples/Plugins/cesium-unreal/extern +# Remove the symlink if it exists +rm ~/dev/cesium-unreal-samples/Plugins/cesium-unreal/Source/ThirdParty/lib/Darwin-universal-Release +# Build for Intel +cmake -B build-x64 -S . -DCMAKE_OSX_ARCHITECTURES=x86_64 -DCMAKE_SYSTEM_NAME=Darwin -DCMAKE_SYSTEM_PROCESSOR=x86_64 -DCMAKE_BUILD_TYPE=RelWithDebInfo +cmake --build build --target install --parallel 14 +``` + +And then create universal libraries using lipo: + +``` +mkdir -p ~/dev/cesium-unreal-samples/Plugins/cesium-unreal/Source/ThirdParty/lib/Darwin-universal-Release +for f in ~/dev/cesium-unreal-samples/Plugins/cesium-unreal/Source/ThirdParty/lib/Darwin-x86_64-Release/*.a +do + arm64f=~/dev/cesium-unreal-samples/Plugins/cesium-unreal/Source/ThirdParty/lib/Darwin-arm64-Release/$(basename -- $f) + x64f=~/dev/cesium-unreal-samples/Plugins/cesium-unreal/Source/ThirdParty/lib/Darwin-x86_64-Release/$(basename -- $f) + universalf=~/dev/cesium-unreal-samples/Plugins/cesium-unreal/Source/ThirdParty/lib/Darwin-universal-Release/$(basename -- $f) + if diff $arm64f $x64f; then + # arm64 and x64 files are identical, so just copy one to the universal directory. + cp $arm64f $universalf + else + lipo -create -output $universalf $arm64f $x64f + fi +done +``` + +## Building for iOS **Note**: It is recommended that the build steps for CMake command-line for macOS (above) be completed first. Unreal Engine Editor will not launch without the host side binaries compiled as well. Configure the CMake project in the `~/dev/cesium-unreal-samples/Plugins/cesium-unreal/extern` directory by following the instructions below. Use a different build directory than the one use for macOS as this will require compiling for a different architecture. +> [!note] +> The following steps must be done in the `extern` directory, and _not_ the `cesium-native` subdirectory! -**Note**: The following steps must be done in the `extern` directory, and *not* the `cesium-native` subdirectory! +Execute the following commands to build and install a Release version of cesium-native: -Change to the `~/dev/cesium-unreal-samples/Plugins/cesium-unreal/extern` directory, and execute the following commands to build and install a Release version of cesium-native: - - cmake -B build-ios -S . -GXcode -DCMAKE_SYSTEM_NAME=iOS -DCMAKE_OSX_ARCHITECTURES=arm64 -DCMAKE_POSITION_INDEPENDENT_CODE=ON -DCMAKE_BUILD_TYPE=Release - cmake --build build-ios --target install --config Release +``` +cd ~/dev/cesium-unreal-samples/Plugins/cesium-unreal/extern +cmake -B build-ios -S . -GXcode -DCMAKE_TOOLCHAIN_FILE="unreal-ios-toolchain.cmake" -DCMAKE_BUILD_TYPE=Release +cmake --build build-ios --target install --config Release --parallel 14 +``` You can also build and install the debug version by using `Debug` or `RelWithDebInfo` instead of `Release`. + +# Building Cesium for Unreal + +The Cesium for Unreal plugin must be built as part of a larger project, and that project must be a C++ project. The Cesium for Unreal Samples project is a Blueprint project, not C++, but it's easy to convert it to a C++ project by copying the `Source` directory from the documentation: + +``` +cd ~/dev/cesium-unreal-samples +cp -r ./Plugins/cesium-unreal/Documentation/Source . +``` + +Now we can generate Xcode project files for the Samples project and the plugin: + +``` +cd ~/dev/cesium-unreal-samples +"/Users/Shared/Epic Games/UE_5.3/Engine/Build/BatchFiles/Mac/GenerateProjectFiles.sh" -game -project="$PWD/CesiumForUnrealSamples.uproject" +``` + +You may see an error message like this: + +> Your Mac is set to use CommandLineTools for its build tools (/Library/Developer/CommandLineTools). Unreal expects Xcode as the build tools. Please install Xcode if it's not already, then do one of the following: +> - Run Xcode, go to Settings, and in the Locations tab, choose your Xcode in Command Line Tools dropdown. +> - In Terminal, run 'sudo xcode-select -s /Applications/Xcode.app' (or an alternate location if you installed Xcode to a non-standard location) +> Either way, you will need to enter your Mac password. + +In which case, do what it says. + +If you see a message like this: + +> Exception while generating include data for UnrealEditor: Platform Mac is not a valid platform to build. Check that the SDK is installed properly. + +It probably means Unreal doesn't like your Xcode version. Be sure that Xcode is installed and that you have followed the [Xcode setup instructions](#setting-up-xcode). + +If the project file generation succeeds, you should see a file named `CesiumForUnrealSamples (Mac).xcworkspace` in the same directory as your uproject. Double-click it to open Xcode. + +In Xcode, on the Product -> Scheme menu, choose `devEditor`. If you want to build a debug configuration, go to Product -> Scheme -> Edit Scheme... and then change the "Build Configuration" to "DebugGame". + +Build by choosing Product -> Build. Watch the progress in the "Report Navigator" which is the rightmost icon above the tree on the left. + +You can launch the Unreal Engine Editor and the Samples project with Product -> Run. diff --git a/Documentation/developer-setup-windows.md b/Documentation/developer-setup-windows.md index 3b4567904..02e660a4f 100644 --- a/Documentation/developer-setup-windows.md +++ b/Documentation/developer-setup-windows.md @@ -1,24 +1,28 @@ +# Developer Setup for Windows {#developer-setup-windows} + Detailed instructions for setting up a Cesium for Unreal development environment on Windows. Please see the [Developer Setup](developer-setup.md) page for an overview of the process. + # Prerequisities - Install CMake (version 3.15 or newer) from https://cmake.org/install/ -- Install Visual Studio 2019 v16.11+ (or Visual Studio 2017 v15.6+) +- Install Visual Studio 2022 v17.4+ - Under **Workloads**, check `Desktop development with C++` - - Under **Workloads**, check `Game development with C++` + - Under **Workloads**, check `Game development with C++` - Under **Individual components**, check `.NET Framework 4.8 SDK` (or newer) -> Note: Visual Studio options are derived from Unreal Engine's [recommended setup](https://docs.unrealengine.com/5.0/en-US/setting-up-visual-studio-development-environment-for-cplusplus-projects-in-unreal-engine/) - - Install the .NET Core 3.1 Runtime, [link](https://dotnet.microsoft.com/en-us/download/dotnet/thank-you/runtime-3.1.32-windows-x64-installer?cid=getdotnetcore) + > [!note] + > Visual Studio options are derived from Unreal Engine's [recommended setup](https://dev.epicgames.com/documentation/en-us/unreal-engine/setting-up-visual-studio-development-environment-for-cplusplus-projects-in-unreal-engine?application_version=5.3) +- Install the .NET Core 3.1 Runtime, [link](https://dotnet.microsoft.com/en-us/download/dotnet/thank-you/runtime-3.1.32-windows-x64-installer?cid=getdotnetcore) - For best JPEG-decoding performance, you must have [nasm](https://www.nasm.us/) installed so that CMake can find it. Everything will work fine without it, just slower. -- Install the Unreal Engine (version 5.0 or newer) from https://www.unrealengine.com/en-US/download +- Install the Unreal Engine (version 5.3 or newer) from https://www.unrealengine.com/en-US/download ## To Cross Compile Android on Windows - Follow the [Unreal Engine setup guide for Android](https://docs.unrealengine.com/SharingAndReleasing/Mobile/Android/Setup/AndroidStudio/). - Then set the following environment variable either in command line or system variables. Note that you must use forward-slashes, i.e. `c:/android` not `c:\android`. - ```cmd - SET ANDROID_NDK_ROOT= - ``` + ```cmd + SET ANDROID_NDK_ROOT= + ``` # Clone the git repos @@ -26,66 +30,73 @@ The following illustrates the recommended directory layout for developers: - `C:\Dev` - Your own root directory for development. Keep it short! - `C:\Dev\cesium-unreal-samples` - The directory for the Unreal project that will use the plugin. -- `C:\Dev\cesium-unreal-samples\Plugins\cesium-unreal` - The directory for the actual *Cesium for Unreal* plugin. +- `C:\Dev\cesium-unreal-samples\Plugins\cesium-unreal` - The directory for the actual _Cesium for Unreal_ plugin. - `C:\Dev\cesium-unreal-samples\Plugins\cesium-unreal\extern\cesium-native` - The directory for the base libraries project. -You may use any directory for the project, but the directory for the actual *Cesium for Unreal* plugin **MUST** be in a subdirectory `Plugins/cesium-unreal` of the project directory. This way, Unreal will automatically find the Plugin when running the project, and pick up any changes that have been made to the plugin. - +You may use any directory for the project, but the directory for the actual _Cesium for Unreal_ plugin **MUST** be in a subdirectory `Plugins/cesium-unreal` of the project directory. This way, Unreal will automatically find the Plugin when running the project, and pick up any changes that have been made to the plugin. +> [!note] > On Windows, it is important that the top-level project directory have a short pathname. Otherwise, you may run into mysterious errors caused by the Windows [maximum path length limitation](https://docs.microsoft.com/en-us/windows/win32/fileio/maximum-file-path-limitation?tabs=cmd). This can be set up with the following sequence of commands, on the console, starting in the `C:\Dev` directory: - - git clone https://github.com/CesiumGS/cesium-unreal-samples.git - cd cesium-unreal-samples - mkdir Plugins - cd Plugins - git clone --recursive https://github.com/CesiumGS/cesium-unreal.git - -> Note: The last line will also check out the `cesium-native` submodule and its dependencies. If you forget the `--recursive` option, you will see many compiler errors later in this process. If this happens to you, run the following in the `Plugins\cesium-unreal` directory to update the submodules in the existing clone: - - git submodule update --init --recursive +``` +git clone https://github.com/CesiumGS/cesium-unreal-samples.git +cd cesium-unreal-samples +mkdir Plugins +cd Plugins +git clone --recursive https://github.com/CesiumGS/cesium-unreal.git +``` +> [!note] +> The last line will also check out the `cesium-native` submodule and its dependencies. If you forget the `--recursive` option, you will see many compiler errors later in this process. If this happens to you, run the following in the `Plugins\cesium-unreal` directory to update the submodules in the existing clone: +``` +git submodule update --init --recursive +``` # Build cesium-native The cesium-native libraries and their dependencies use CMake and must be built separately from Cesium for Unreal. There are a number of ways to do this, depending on your preferred environment: -* [Visual Studio 2019](#Visual-Studio-2019) -* [Visual Studio Code](#Visual-Studio-Code) -* [CMake GUI](#CMake-GUI) -* [CMake command-line](#CMake-command-line) -* [CMake command line for Android](#CMake-command-line-for-android) +- [Visual Studio 2022](#Visual-Studio-2022) +- [Visual Studio Code](#Visual-Studio-Code) +- [CMake GUI](#CMake-GUI) +- [CMake command-line](#CMake-command-line) +- [CMake command line for Android](#CMake-command-line-for-android) The version of CMake included with Visual Studio 2017 is too old to build cesium-native, so to build with Visual Studio 2017, follow the CMake command-line or CMake GUI instructions. -## Visual Studio 2019 +## Visual Studio 2022 {#Visual-Studio-2022} -Launch Visual Studio 2019 and "Open a local folder". Select `C:\Dev\cesium-unreal-samples\Plugins\cesium-unreal\extern`. -> Be sure to select the `extern` directory, *not* the `cesium-native` subdirectory. +Launch Visual Studio 2022 and "Open a local folder". Select `C:\Dev\cesium-unreal-samples\Plugins\cesium-unreal\extern`. +> [!note] +> Be sure to select the `extern` directory, _not_ the `cesium-native` subdirectory. Find the "Solution Explorer - Folder View". -To build a "Debug" build of cesium-native, - - Right-click on the root `CMakeLists.txt` and select "Install". - - This will compile and "install" it to the place in the project that Cesium for Unreal expects to find it - - `c:\Dev\cesium-unreal-samples\Plugins\cesium-unreal\Source\ThirdParty`. +To build a "Debug" build of cesium-native, -To build a "Release" build of cesium-native, - - Right click on `CMakeLists.txt` and select "CMake Settings for cesium-unreal-extern". - - Add a new configuration by clicking the `+` and choose `x64-Release`. - - Select the new "x64-Release" from the Solution Configuration dropdown. - - Right-click on `CMakeLists.txt` again and choose "Install". +- Right-click on the root `CMakeLists.txt` and select "Install". +- This will compile and "install" it to the place in the project that Cesium for Unreal expects to find it +- `c:\Dev\cesium-unreal-samples\Plugins\cesium-unreal\Source\ThirdParty`. + +To build a "Release" build of cesium-native, + +- Right click on `CMakeLists.txt` and select "CMake Settings for cesium-unreal-extern". +- Add a new configuration by clicking the `+` and choose `x64-Release`. +- Select the new "x64-Release" from the Solution Configuration dropdown. +- Right-click on `CMakeLists.txt` again and choose "Install". +> [!note] > In Visual Studio, this defaults to the "RelWithDebInfo" configuration type. You can change this at any time -## Visual Studio Code +## Visual Studio Code {#Visual-Studio-Code} Open the `C:\Dev\cesium-unreal-samples\Plugins\cesium-unreal\extern` folder in Visual Studio Code and invoke the "install" target. -## CMake GUI +## CMake GUI {#CMake-GUI} - Start `cmake-gui` - In the "Where is the source code" text field, enter `C:\Dev\cesium-unreal-samples\Plugins\cesium-unreal\extern` - **Note**: This must be the `extern` directory, and *not* the `cesium-native` subdirectory! + > [!note] +> This must be the `extern` directory, and _not_ the `cesium-native` subdirectory! - In the "Where to build the binaries" text field, enter `C:\Dev\cesium-unreal-samples\Plugins\cesium-unreal\extern\build` - Press "Configure" (and confirm the creation of the directory and the default generator for the project) @@ -93,49 +104,49 @@ Open the `C:\Dev\cesium-unreal-samples\Plugins\cesium-unreal\extern` folder in V This will generate the project file called `cesium-unreal-extern.sln` in the directory `C:\Dev\cesium-unreal-samples\Plugins\cesium-unreal\extern\build`. You can open this solution file in the Visual Studio IDE and compile as normal. To install cesium-native to the project - which is required for use with Cesium for Unreal - right-click on `INSTALL` in Solution Explorer, and choose Build. `INSTALL` may be found inside a folder called `CMakePredefinedTargets`. Use the Solution Configuration dropdown to change between the Debug and Release configurations. - -## CMake command-line +## CMake command-line {#CMake-command-line} First, configure the CMake project in the `C:\Dev\cesium-unreal-samples\Plugins\cesium-unreal\extern` directory by following the instructions below. -**Note**: The following steps must be done in the `extern` directory, and *not* the `cesium-native` subdirectory! - -To configure for Visual Studio 2019, open "x64 Native Tools Command Prompt for VS 2019" and execute the following command: +> [!note] +> The following steps must be done in the `extern` directory, and _not_ the `cesium-native` subdirectory! - cmake -B build -S . -G "Visual Studio 16 2019" -A x64 - -To use Visual Studio 2017 instead, open "x64 Native Tools Command Prompt for VS 2017" and execute the following command: - - cmake -B build -S . -G "Visual Studio 15 2017 Win64" +To configure for Visual Studio 2022, open "x64 Native Tools Command Prompt for VS 2022" and execute the following command: +``` +cmake -B build -S . -G "Visual Studio 17 2022" -A x64 +``` With either compiler, the commands above will generate the project file called `cesium-unreal-extern.sln` in the directory `C:\Dev\cesium-unreal-samples\Plugins\cesium-unreal\extern\build`. You can open this solution file in the Visual Studio IDE and compile as normal. To install cesium-native to the project - which is required for use with Cesium for Unreal - right-click on `INSTALL` in Solution Explorer, and choose Build. `INSTALL` may be found inside a folder called `CMakePredefinedTargets`. Use the Solution Configuration dropdown to change between the Debug and Release configurations. You can also build the Release version entirely from the command-line: - - cmake --build build --config Release --target install +``` +cmake --build build --config Release --target install +``` Or the debug version: +``` +cmake --build build --config Debug --target install +``` - cmake --build build --config Debug --target install - - -## CMake command-line for Android +## CMake command-line for Android {#CMake-command-line-for-android} To cross-compile Cesium Native for Android, ensure that you have [installed Android Studio and Android NDK, and configured ANDROID_NDK_ROOT](#to-cross-compile-android-on-windows). Then you will need to have Ninja installed. With [chocolatey](https://chocolatey.org/install), you can run: - - choco install ninja +``` +choco install ninja +``` or download [Ninja from GitHub](https://github.com/ninja-build/ninja/releases) and add it to your PATH. -Then, change into the `C:\Dev\cesium-unreal-samples\Plugins\cesium-unreal\extern` directory, and execute the following commands. (**Note**: The following steps must be done in the `extern` directory, and *not* the `cesium-native` subdirectory!). To create and install the `Release` package for Android: - - cmake -B build-android -S . -G Ninja -DCMAKE_TOOLCHAIN_FILE="unreal-android-toolchain.cmake" -DCMAKE_POSITION_INDEPENDENT_CODE=ON -DCMAKE_BUILD_TYPE=Release - cmake --build build-android --config Release --target install +Then, change into the `C:\Dev\cesium-unreal-samples\Plugins\cesium-unreal\extern` directory, and execute the following commands. (**Note**: The following steps must be done in the `extern` directory, and _not_ the `cesium-native` subdirectory!). To create and install the `Release` package for Android: +``` +cmake -B build-android -S . -G Ninja -DCMAKE_TOOLCHAIN_FILE="unreal-android-toolchain.cmake" -DCMAKE_POSITION_INDEPENDENT_CODE=ON -DCMAKE_BUILD_TYPE=Release +cmake --build build-android --config Release --target install +``` You can also build and install the debug version by using `Debug` or `RelWithDebInfo` instead of `Release`. # Create the Visual Studio project files for cesium-unreal-samples -The project files for the samples project, *including* the actual *Cesium for Unreal* plugin, can be created with the Unreal Engine. +The project files for the samples project, _including_ the actual _Cesium for Unreal_ plugin, can be created with the Unreal Engine. ## Convert the Unreal project into a C++ project @@ -145,8 +156,8 @@ The project files for the samples project, *including* the actual *Cesium for Un - Select "Generate Visual Studio project files" This will generate the `CesiumForUnrealSamples.sln` file that can be opened, compiled, and debugger with Visual Studio. Be sure to switch the "Solution Platform" to "Win64". - -> Unreal Engine does not allow a Blueprints-only project to have an embedded C++ plugin like Cesium for Unreal. Fortunately, it's easy to convert a Blueprints project to a C++ project just by adding a few files: Just copy the [Source directory](Source) from this documentation folder into the root directory of your project. Your project should now work as a C++ project. However, you probably do not want to commit this change to your project's source code repository. A project that includes C++ code like this will require everyone opening the project to have an installed and working C++ compiler, including e.g. artists that do not typically have such an environment. +> [!note] +> Unreal Engine does not allow a Blueprints-only project to have an embedded C++ plugin like Cesium for Unreal. Fortunately, it's easy to convert a Blueprints project to a C++ project just by adding a few files: Just copy the `Source` directory from this documentation folder into the root directory of your project. Your project should now work as a C++ project. However, you probably do not want to commit this change to your project's source code repository. A project that includes C++ code like this will require everyone opening the project to have an installed and working C++ compiler, including e.g. artists that do not typically have such an environment. If you have both Visual Studio 2017 and Visual Studio 2019 installed, the Visual Studio project files generated above may build with VS2017 even if they're opened with VS2019. This will still be true even if you allow VS2019 to upgrade the project files to the VS2019 toolchain. That's because the project files simply invoke the Unreal Build Tool, which plays by its own rules. This is generally not a problem, except if you used Visual Studio 2019 to build cesium-native. In that case, you will get linker errors when you try to compile Cesium for Unreal. @@ -160,8 +171,8 @@ When you build "DebugGame Editor", the build process will _first_ look for an in So, when you make changes to cesium-native code, make sure you are building _and installing_ the correct configuration of cesium-native for the Cesium for Unreal configuration that you're using: -* `Development Editor` -> `Release` -* `DebugGame Editor` -> `Debug` +- `Development Editor` -> `Release` +- `DebugGame Editor` -> `Debug` See the sections above to learn how to build the Debug and Release configurations of cesium-native in your preferred environment. diff --git a/Documentation/developer-setup.md b/Documentation/developer-setup.md index 56bd42173..e5e63a80b 100644 --- a/Documentation/developer-setup.md +++ b/Documentation/developer-setup.md @@ -1,12 +1,17 @@ +# Developer Setup {#developer-setup-unreal} + ## Overview -This is a summary of a setup and workflows for developers who want to work with the *Cesium for Unreal* plugin. Such a setup consists of three main components: +This is a summary of a setup and workflows for developers who want to work with the _Cesium for Unreal_ plugin. Such a setup consists of three main components: -- [`cesium-native`](https://github.com/CesiumGS/cesium-native) : A collection of engine-independent libraries for 3D Tiles, geospatial, etc. Most of the functionality of *Cesium for Unreal* is built based on these libraries. -- [`cesium-unreal`](https://github.com/CesiumGS/cesium-unreal) : The source code of the actual *Cesium for Unreal* plugin. +- [`cesium-native`](https://github.com/CesiumGS/cesium-native) : A collection of engine-independent libraries for 3D Tiles, geospatial, etc. Most of the functionality of _Cesium for Unreal_ is built based on these libraries. +- [`cesium-unreal`](https://github.com/CesiumGS/cesium-unreal) : The source code of the actual _Cesium for Unreal_ plugin. - An Unreal project that uses the plugin. We will use the [`cesium-unreal-samples`](https://github.com/CesiumGS/cesium-unreal-samples) as an example here, to get started quickly. It contains sample levels for different use cases, and can therefore be used to quickly check for possible regressions of feature changes. -> Note: It is generally possible to work with `cesium-native` *independent* of `cesium-unreal`. But any modification in `cesium-native` will have to be checked carefully for possible breaking changes in the API or the build process. So the following describes the developer setup from the perspective of someone who wants to work with `cesium-native` mainly in the context of `cesium-unreal`. +> [!note] +> It is generally possible to work with `cesium-native` _independent_ of `cesium-unreal`. But any modification in `cesium-native` will have to be checked carefully for possible breaking changes in the API or the build process. So the following describes the developer setup from the perspective of someone who wants to work with `cesium-native` mainly in the context of `cesium-unreal`. + + ## Principles @@ -21,14 +26,19 @@ There are detailed instructions for setting up a Cesium for Unreal development e ## Platform-specific setup instructions -* [Windows](developer-setup-windows.md) -* [Linux](developer-setup-linux.md) -* [macOS](developer-setup-osx.md) + +- [Windows](developer-setup-windows.md) +- [Linux](developer-setup-linux.md) +- [macOS](developer-setup-osx.md) + + + + ## Deployment instructions -* The [Packaging Guide](packaging-guide.md) describes how to create a package and use it in a local Unreal installation. This is similar to installing it from the Unreal Engine Marketplace, but allows testing non-release branches. -* The [Release Process](release-process.md) describes the necessary steps to publish a new version of the plugin to the Unreal Marketplace. +- The [Packaging Guide](packaging-guide.md) describes how to create a package and use it in a local Unreal installation. This is similar to installing it from the Unreal Engine Marketplace, but allows testing non-release branches. +- The [Release Process](release-process.md) describes the necessary steps to publish a new version of the plugin to the Unreal Marketplace. ## Run the tests @@ -37,12 +47,13 @@ There are detailed instructions for setting up a Cesium for Unreal development e - In the Session Frontend Window, look for the Automation tab, and find the "Cesium" group of tests - Check the Cesium group - Click on "Start Tests" - -> Note: The TestsProject uses the Cesium and Functional Testing Editor plugins. You can run the tests from any project as long as you have both of these plugins enabled +> [!note] +> The TestsProject uses the Cesium and Functional Testing Editor plugins. You can run the tests from any project as long as you have both of these plugins enabled ## Generate Reference Documentation - Install Doxygen and make sure `doxygen` is in your path. +- Run `npm install` - Run `npm run doxygen` -The reference documentation will be written to `Documentation/Reference`. +The reference documentation will be written to `Documentation/Reference`. \ No newline at end of file diff --git a/Documentation/developing-uobjects.md b/Documentation/developing-uobjects.md deleted file mode 100644 index 107f9b252..000000000 --- a/Documentation/developing-uobjects.md +++ /dev/null @@ -1,11 +0,0 @@ -It can be a challenge to develop a UObject-derived class that can be used from C++, from Blueprints, and in the Editor while ensuring internal states stay consistent. Here are some tips: - -# UPROPERTY - -* Add `VisibleAnywhere` or `EditAnywhere` depending on whether the property is read-only or editable in the Details panel in the Editor. Or omit both of these if it should not show up in the Editor at all. -* Add `BlueprintReadOnly` or `BlueprintReadWrite` depending on whether the property is read-only or editable from Blueprints. Or omit both of these if it should now be accessible from Blueprints at all. -* Override the `PostEditChangeProperty` method to be notified of changes to UPROPERTY values in the Editor. -* Add a `BlueprintSetter` attribute to each property to be notified of changes to UPROPERTY values from Blueprints. -* In almost all cases, UPROPERTY declarations should appear in the `private:` section of the class and have `Meta = (AllowPrivateAccess)`. This prevents them from being get/set directly from C++ code outside the class, which is important because there is no mechanism like `PostEditChangeProperty` or `BlueprintSetter` available from C++ code. -* In the rare case that no action is necessary when setting a property from C++ (and it's unlikely to be needed in the future), the property can be in the `public:` section. Such a property probably doesn't need a `PostEditChangeProperty` or `BlueprintSetter` either. -* The function given to `BlueprintSetter` must be a UFUNCTION. This function should usually be public and it should be the mechanism for setting the property from C++, too. A corresponding `BlueprintGetter` is usually needed for use by C++ even though it's often not needed for Blueprints. diff --git a/Documentation/footer.html b/Documentation/footer.html new file mode 100644 index 000000000..206c70816 --- /dev/null +++ b/Documentation/footer.html @@ -0,0 +1,79 @@ + + + + + + + + +
    + + + + + + + + + \ No newline at end of file diff --git a/Documentation/packaging-guide.md b/Documentation/packaging-guide.md index 11c0fe644..5c7273b43 100644 --- a/Documentation/packaging-guide.md +++ b/Documentation/packaging-guide.md @@ -1,9 +1,9 @@ -# Packaging +# Packaging {#packaging-guide} Our Travis CI automatically creates a plugin package on every commit to the Cesium for Unreal repo. But if you want to do it locally, there are a few things to keep in mind: -* Unreal Engine always uses Visual Studio 2017 to package a plugin. So if you only have Visual Studio 2019 installed, the package process will fail. -* Similarly, if you built cesium-native with Visual Studio 2019, you will get linker errors when you try to build Cesium for Unreal with Visual Studio 2017. So, be sure to build cesium-native with Visual Studio 2017 if you need to package. +- Unreal Engine always uses Visual Studio 2017 to package a plugin. So if you only have Visual Studio 2019 installed, the package process will fail. +- Similarly, if you built cesium-native with Visual Studio 2019, you will get linker errors when you try to build Cesium for Unreal with Visual Studio 2017. So, be sure to build cesium-native with Visual Studio 2017 if you need to package. ## Packaging Cesium for Unreal Plugin @@ -12,29 +12,29 @@ Packaging an Unreal Engine plugin makes it portable and you can use it as part o To package the plugin, follow the steps below: 1. After compiling Cesium Native in your `cesium-unreal` directory, run the following command: - ```bash - # Command Template: - $UNREAL_ENGINE_DIR/Engine/Build/BatchFiles/RunUAT.bat" BuildPlugin -Plugin="" -Package="" -CreateSubFolder -TargetPlatforms= - ``` - * Windows Example: - ```cmd - "C:\Program Files\Epic Games\UE_4.26\Engine\Build\BatchFiles\RunUAT.bat" BuildPlugin -Plugin="C:\workspace\cesium-unreal\CesiumForUnreal.uplugin" -Package="C:\workspace\Packages\CesiumForUnreal" -CreateSubFolder -TargetPlatforms=Win64 - ``` - * Windows+Android Example (ensure you have completed the [Android-specific cross-compilation steps](https://github.com/CesiumGS/cesium-unreal/blob/main/Documentation/developer-setup-windows.md#cmake-command-line-for-android) first): - ```cmd - "C:\Program Files\Epic Games\UE_4.26\Engine\Build\BatchFiles\RunUAT.bat" BuildPlugin -Plugin="C:\workspace\cesium-unreal\CesiumForUnreal.uplugin" -Package="C:\workspace\Packages\CesiumForUnreal" -CreateSubFolder -TargetPlatforms=Win64+Android - ``` - * macOS Example: - ```bash - "$UNREAL_ENGINE_DIR/Engine/Build/BatchFiles/RunUAT.sh" BuildPlugin -Plugin="/home/user/workspace/cesium-unreal/CesiumForUnreal.uplugin" -Package="/home/user/workspace/packages/CesiumForUnreal" -CreateSubFolder -TargetPlatforms=Mac - ``` - * macOS + iOS Example (ensure you have completed the [iOS-specific cross-compilation steps](https://github.com/CesiumGS/cesium-unreal/blob/main/Documentation/developer-setup-osx.md#cmake-command-line-for-ios) first): - ```bash - "$UNREAL_ENGINE_DIR/Engine/Build/BatchFiles/RunUAT.command" BuildPlugin -Plugin="/Users/user/workspace/cesium-unreal/CesiumForUnreal.uplugin" -Package="/Users/user/workspace/packages/CesiumForUnreal" -CreateSubFolder -TargetPlatforms=Mac+iOS - ``` - * Linux Example: - ```bash - "$UNREAL_ENGINE_DIR/Engine/Build/BatchFiles/RunUAT.sh" BuildPlugin -Plugin="/home/user/workspace/cesium-unreal/CesiumForUnreal.uplugin" -Package="/home/user/workspace/packages/CesiumForUnreal" -CreateSubFolder -TargetPlatforms=Linux - ``` + ```bash + # Command Template: + $UNREAL_ENGINE_DIR/Engine/Build/BatchFiles/RunUAT.bat" BuildPlugin -Plugin="" -Package="" -CreateSubFolder -TargetPlatforms= + ``` + - Windows Example: + ```cmd + "C:\Program Files\Epic Games\UE_4.26\Engine\Build\BatchFiles\RunUAT.bat" BuildPlugin -Plugin="C:\workspace\cesium-unreal\CesiumForUnreal.uplugin" -Package="C:\workspace\Packages\CesiumForUnreal" -CreateSubFolder -TargetPlatforms=Win64 + ``` + - Windows+Android Example (ensure you have completed the [Android-specific cross-compilation steps](https://github.com/CesiumGS/cesium-unreal/blob/main/Documentation/developer-setup-windows.md#cmake-command-line-for-android) first): + ```cmd + "C:\Program Files\Epic Games\UE_4.26\Engine\Build\BatchFiles\RunUAT.bat" BuildPlugin -Plugin="C:\workspace\cesium-unreal\CesiumForUnreal.uplugin" -Package="C:\workspace\Packages\CesiumForUnreal" -CreateSubFolder -TargetPlatforms=Win64+Android + ``` + - macOS Example: + ```bash + "$UNREAL_ENGINE_DIR/Engine/Build/BatchFiles/RunUAT.sh" BuildPlugin -Plugin="/home/user/workspace/cesium-unreal/CesiumForUnreal.uplugin" -Package="/home/user/workspace/packages/CesiumForUnreal" -CreateSubFolder -TargetPlatforms=Mac + ``` + - macOS + iOS Example (ensure you have completed the [iOS-specific cross-compilation steps](https://github.com/CesiumGS/cesium-unreal/blob/main/Documentation/developer-setup-osx.md#cmake-command-line-for-ios) first): + ```bash + "$UNREAL_ENGINE_DIR/Engine/Build/BatchFiles/RunUAT.command" BuildPlugin -Plugin="/Users/user/workspace/cesium-unreal/CesiumForUnreal.uplugin" -Package="/Users/user/workspace/packages/CesiumForUnreal" -CreateSubFolder -TargetPlatforms=Mac+iOS + ``` + - Linux Example: + ```bash + "$UNREAL_ENGINE_DIR/Engine/Build/BatchFiles/RunUAT.sh" BuildPlugin -Plugin="/home/user/workspace/cesium-unreal/CesiumForUnreal.uplugin" -Package="/home/user/workspace/packages/CesiumForUnreal" -CreateSubFolder -TargetPlatforms=Linux + ``` 2. Copy the output directory `CesiumForUnreal` to the Unreal Engine Plugins directory, example `C:\Program Files\Epic Games\UE_4.26\Engine\Plugins\Marketplace\CesiumForUnreal` on Windows. Once the packged plugin is copied, all Unreal projects will be able to enable it. - * Note: you can also copy the `CesiumForUnreal` directory to a specific projects `Plugins` directory, such as `cesium-unreal-samples/Plugins/CesiumForUnreal`. In this case, the built plugin is only available to the specific project and will be prioritized over Engine-level copies of Cesium for Unreal. This doesn't work well with shipping builds especially on mobile platforms. + - Note: you can also copy the `CesiumForUnreal` directory to a specific projects `Plugins` directory, such as `cesium-unreal-samples/Plugins/CesiumForUnreal`. In this case, the built plugin is only available to the specific project and will be prioritized over Engine-level copies of Cesium for Unreal. This doesn't work well with shipping builds especially on mobile platforms. diff --git a/Documentation/performance-profiling-setup-test.md b/Documentation/performance-profiling-setup-test.md index b22469215..8929049b2 100644 --- a/Documentation/performance-profiling-setup-test.md +++ b/Documentation/performance-profiling-setup-test.md @@ -1,18 +1,17 @@ -# Set up a repeatable test - -We need an area of code to execute repeatedly, with as many variables locked down as possible. +# Set up a repeatable test {#performance-profiling-setup-test} +We need an area of code to execute repeatedly, with as many variables locked down as possible. ### Set up Unreal -1) Open Unreal Editor (UnrealEditor.exe) -2) Create a blank map (project doesn't matter. Choose an existing one or create a new one) -3) Go to Edit->Plugins -4) Search for "Functional Testing plugin". Check it to enable it -![smaller](https://github.com/CesiumGS/cesium-unreal/assets/130494071/5a3bc9de-cdaf-4d9d-842d-104719426663) -5) Save all -6) Set this map as the 'Editor Startup Map' so it loads when starting from Visual Studio -![smaller 2](https://github.com/CesiumGS/cesium-unreal/assets/130494071/8ba5c6c2-8c97-4048-afe2-db74770d85cc) +1. Open Unreal Editor (UnrealEditor.exe) +2. Create a blank map (project doesn't matter. Choose an existing one or create a new one) +3. Go to Edit->Plugins +4. Search for "Functional Testing plugin". Check it to enable it + ![smaller](Images/functionalTesting.png) +5. Save all +6. Set this map as the 'Editor Startup Map' so it loads when starting from Visual Studio + ![smaller 2](Images/startupMap.png) ### Build Release Code @@ -20,10 +19,10 @@ We need to make sure all our C++ code is building in release mode, preferably wi > This assumes that you have already built your code successfully and are familiar with the concepts from our [developer setup guide](https://github.com/CesiumGS/cesium-unreal/blob/ue5-main/Documentation/developer-setup-windows.md). Although you could profile a debug build, it is typically more useful to build in release, since this is how a game is usually packaged. -1) If building the cesium-native library, make sure you are using a release configuration derived from "RelWithDebInfo" -2) Open your Unreal project's Visual Studio solution (.sln). This example uses the solution generated from [cesium-unreal-samples](https://github.com/CesiumGS/cesium-unreal-samples) -3) Choose "Development Editor" +1. If building the cesium-native library, make sure you are using a release configuration derived from "RelWithDebInfo" +2. Open your Unreal project's Visual Studio solution (.sln). This example uses the solution generated from [cesium-unreal-samples](https://github.com/CesiumGS/cesium-unreal-samples) +3. Choose "Development Editor" -![smaller 3](https://github.com/CesiumGS/cesium-unreal/assets/130494071/0e70065f-c717-466b-a92b-cab1dcfdd29b) + ![](Images/developmentEditorTarget.png) -4) From the menu, choose Build -> Build Solution +4. From the menu, choose Build -> Build Solution diff --git a/Documentation/performance-profiling-with-cpu-usage.md b/Documentation/performance-profiling-with-cpu-usage.md index b68844728..bed0c223e 100644 --- a/Documentation/performance-profiling-with-cpu-usage.md +++ b/Documentation/performance-profiling-with-cpu-usage.md @@ -1,83 +1,86 @@ +# Performance Profiling with CPU Usage {#performance-profiling-cpu-usage} This guide will help you find performance problems in your C++ code using the [CPU Usage tool](https://learn.microsoft.com/en-us/visualstudio/profiling/beginners-guide-to-performance-profiling?view=vs-2022) included in Visual Studio's Diagnostic tools window. The CPU Usage tool is easy to set up with minimal impact on how your app is built or how it runs. If you use Visual Studio often, you may have this running already. This is a sampling-based profiler, with pros and cons detailed [here](https://learn.microsoft.com/en-us/visualstudio/profiling/understanding-performance-collection-methods-perf-profiler?view=vs-2022). + # Set up a repeatable test -In this example, we will use our Cesium performance tests. Follow the steps outlined [here](https://github.com/CesiumGS/cesium-unreal/blob/profiling-documentation/Documentation/performance-profiling-setup-test.md). +In this example, we will use our Cesium performance tests. Follow the steps outlined [here](performance-profiling-setup-test.md). # Prepare for capture ### Visual Studio -1) Open your project's Visual Studio solution (.sln). This example uses the solution generated from [cesium-unreal-samples](https://github.com/CesiumGS/cesium-unreal-samples) -2) From the menu, choose Debug->Windows->Show Diagnostic Tools -3) Configure it. Uncheck 'Memory Usage'. Under Settings, Uncheck "Enable CPU Profiling", we'll turn this back on later. +1. Open your project's Visual Studio solution (.sln). This example uses the solution generated from [cesium-unreal-samples](https://github.com/CesiumGS/cesium-unreal-samples) +2. From the menu, choose Debug->Windows->Show Diagnostic Tools +3. Configure it. Uncheck 'Memory Usage'. Under Settings, Uncheck "Enable CPU Profiling", we'll turn this back on later. -DiagSetup +![](Images/profilingDisableCpuProfiling.png) -4) Optionally, find two places in your code to set breakpoints. In our example, performance test start / end marks are perfect. +4. Optionally, find two places in your code to set breakpoints. In our example, performance test start / end marks are perfect. -![Breakpoint Set small](https://github.com/CesiumGS/cesium-unreal/assets/130494071/5a793b9c-fd68-42ed-96ae-6ec884c38951) +![](Images/profilingBreakpoints.jpg) ->We could profile the entire debugging session if we needed to. But it's generally good practice to reduce your timing capture as much as possible. This can improve responsiveness when using resource intensive profiling tools, like memory tracking. +> We could profile the entire debugging session if we needed to. But it's generally good practice to reduce your timing capture as much as possible. This can improve responsiveness when using resource intensive profiling tools, like memory tracking. # Run the timing capture session -1) From Visual Studio, start your debugging session (Debug->Start Debugging, F5) -2) Find the performance tests in Unreal. Tools->Test Automation -![Automation Window small](https://github.com/CesiumGS/cesium-unreal/assets/130494071/d27e7d67-3658-4cb2-ab10-777498cba0da) +1. From Visual Studio, start your debugging session (Debug->Start Debugging, F5) +2. Find the performance tests in Unreal. Tools->Test Automation + ![Automation Window small](Images/profilingAutomationTestWindow.jpg) -3) Check "LoadTestDenver" -4) Click "Start Tests" -5) Your first break point should hit in Visual Studio -6) Go back to the Diagnostic Tools window, click on "Record CPU Profile". It should turn red. +3. Check "LoadTestDenver" +4. Click "Start Tests" +5. Your first break point should hit in Visual Studio +6. Go back to the Diagnostic Tools window, click on "Record CPU Profile". It should turn red. -![image](https://github.com/CesiumGS/cesium-unreal/assets/130494071/ce0c7e86-c1ef-4a01-97fd-c97275b6f62b) +![](Images/profilingRecordCpuProfile.png) -7) Continue the debugging session (Debug->Continue, F5) -8) Your second break point should hit -9) Go back to the Diagnostic Tools window, you should now see a report +7. Continue the debugging session (Debug->Continue, F5) +8. Your second break point should hit +9. Go back to the Diagnostic Tools window, you should now see a report # Interpret the report -![image](https://github.com/CesiumGS/cesium-unreal/assets/130494071/a9fb3e0b-86f5-4239-b4ab-c7f9b1dba4a5) +![](Images/profilingInterpretReport.png) This can be a bit daunting at first, but most profiling tools have a similar workflow. ### Start at the timeline -![image](https://github.com/CesiumGS/cesium-unreal/assets/130494071/da733adc-6cae-4c89-8a6c-01a367667a0d) +![](Images/profilingStartAtTimeline.png) -Note the highlighted area to the right where the CPU usage spikes. This corresponds to the breakpoints that we set. +Note the highlighted area to the right where the CPU usage spikes. This corresponds to the breakpoints that we set. All data from the report will reflect this selection only. ### Trace calls with high usage From the main window, click on "Open Details" -![image](https://github.com/CesiumGS/cesium-unreal/assets/130494071/f34b5ee3-15b7-485a-a90a-8f71310b1b44) +![](Images/profilingOpenDetails.png) The CPU Usage window will appear. Set "Current View" to "Functions", then find the 'Self CPU' column and sort descending (down arrow). -![image](https://github.com/CesiumGS/cesium-unreal/assets/130494071/20836178-8337-4d53-be58-f388db905f9f) +![](Images/profilingFunctions.png) -This window now shows the functions that have the highest time spent within themselves only. Useful for finding individual functions that are called often or need to be optimized. +This window now shows the functions that have the highest time spent within themselves only. Useful for finding individual functions that are called often or need to be optimized. -In this example, `stbir_resample_horizontal_downsample` is of particular interest because it's in the code base we built. Entries with `[External]` or originate from an unfamiliar module are generally ignored, although it is useful to know we are calling into them. +In this example, `stbir_resample_horizontal_downsample` is of particular interest because it's in the code base we built. Entries with `[External]` or originate from an unfamiliar module are generally ignored, although it is useful to know we are calling into them. -Right click on the `stbir_resample_horizontal_downsample` row, select "View in Call Tree". +Right click on the `stbir_resample_horizontal_downsample` row, select "View in Call Tree". -![image](https://github.com/CesiumGS/cesium-unreal/assets/130494071/e5a88c06-5b76-4a07-83be-db5147a961b2) +![](Images/profilingStbirHorizontalDownsample.png) # Draw conclusions The window above is starting to show some actionable information: + - 20% of the sampled CPU time was spent in `CesiumTextureUtility::loadTextureAnyThreadPart`. Basically, we're loading textures - There are a variety of `stbir_XXX functions` that are taking the bulk of the time, and might be candidates for optimization - The highest cost single function is `stbir_resample_horizontal_downsample`, but keep in mind the limits of a sampling profiler. We don't know how many times it was called, just that it was being executed ~6% of the time. -Are these functions worth investigating and potentially optimizing? Maybe. Again, know this is a sampling profiler. Even if you optimize the highest cost function to 0.001%, you are only improving CPU efficiency. +Are these functions worth investigating and potentially optimizing? Maybe. Again, know this is a sampling profiler. Even if you optimize the highest cost function to 0.001%, you are only improving CPU efficiency. If your goal is to reach absolute numbers, like specific loading times, or frames per second, you may need another type of profiling tool. diff --git a/Documentation/performance-profiling-with-unreal-insights.md b/Documentation/performance-profiling-with-unreal-insights.md index 4a4e947f9..be8e52c08 100644 --- a/Documentation/performance-profiling-with-unreal-insights.md +++ b/Documentation/performance-profiling-with-unreal-insights.md @@ -1,6 +1,9 @@ +# Performance Profiling with Unreal Insights {#performance-profiling-unreal-insights} + This guide will help you find performance problems in your C++ code using [Unreal Insights](https://docs.unrealengine.com/5.0/en-US/unreal-insights-in-unreal-engine/), included with Unreal Engine. Unreal Insights can display the scope of timing events as well as activity across threads. There is minimal impact to app execution, and you can set up your own custom events. It provides more functionality than an exclusive [CPU sampling-based profiler](https://learn.microsoft.com/en-us/visualstudio/profiling/understanding-performance-collection-methods-perf-profiler?view=vs-2022), although both tools can complement each other. + # Set up a repeatable test @@ -9,35 +12,38 @@ In this example, we will use our Cesium performance tests. Follow the steps outl # Prepare for capture ### Unreal Editor -1) In Visual Studio, click Debug -> Start Debugging (F5) -2) In Unreal, click Tools->Test Automation -3) Check the Cesium.Performance.LoadTestDenver row (don't start the test yet) -![Automation Window small](https://github.com/CesiumGS/cesium-unreal/assets/130494071/d27e7d67-3658-4cb2-ab10-777498cba0da) -4) Click Tools->Run Unreal Insights -5) In Unreal Insights, click on the "Connection" tab (don't connect yet) -> You can also find UnrealInsights.exe in UE_5.X\Engine\Binaries\Win64 +1. In Visual Studio, click Debug -> Start Debugging (F5) +2. In Unreal, click Tools->Test Automation +3. Check the Cesium.Performance.LoadTestDenver row (don't start the test yet) + ![](Images/profilingAutomationTestWindow.jpg) +4. Click Tools->Run Unreal Insights +5. In Unreal Insights, click on the "Connection" tab (don't connect yet) + +> You can also find UnrealInsights.exe in `UE_5.X/Engine/Binaries/Win64` -![image](https://github.com/CesiumGS/cesium-unreal/assets/130494071/eadd4013-ca10-4b61-bb7d-0ab233440a39) +![](Images/profilingUnrealInsightsSessionBrowser.png) # Run the timing capture session -1) In Unreal Insights, click "Connect" -2) In Unreal Editor, click "Start Tests" (you should already have the Test Automation window open) -3) When the test ends, close Unreal Editor. We don't need it anymore. -4) In Unreal Insights, click the Trace Store tab, notice the trace that was just created -5) Click on it, then click on the 'Open Trace' button + +1. In Unreal Insights, click "Connect" +2. In Unreal Editor, click "Start Tests" (you should already have the Test Automation window open) +3. When the test ends, close Unreal Editor. We don't need it anymore. +4. In Unreal Insights, click the Trace Store tab, notice the trace that was just created +5. Click on it, then click on the 'Open Trace' button > On the right side, there's a "Explore Trace Store Directory" button. You can click on this to delete or organize your traces -![image](https://github.com/CesiumGS/cesium-unreal/assets/130494071/f1e34fbc-35cd-4bc3-b935-5e322f5d9ba6) +![](Images/profilingOpenTrace.png) # Interpret the report -![image](https://github.com/CesiumGS/cesium-unreal/assets/130494071/9cab7cf1-ab6d-4b58-a362-fc21ccff0334) +![](Images/profilingUnrealInterpretReport.png) By default, the Timings Insights Tab is shown. More detail can be found [here](https://docs.unrealengine.com/5.0/en-US/timing-insights-in-unreal-engine-5/). For this session, there are several sections of interest for us: + - The Frames panel (top, a timeline view) - The Timings panel (middle, mostly empty because nothing is selected) - The Log Panel (bottom) @@ -45,25 +51,24 @@ For this session, there are several sections of interest for us: ### Isolate your area of interest -1) In the Log Panel, search for "mark". This will show the logging of our timing marks for our test. Select the start mark, then hold shift and down arrow to select the end mark too -![image](https://github.com/CesiumGS/cesium-unreal/assets/130494071/7cccc075-edf7-4b8e-b704-b9efc9de1a3c) +1. In the Log Panel, search for "mark". This will show the logging of our timing marks for our test. Select the start mark, then hold shift and down arrow to select the end mark too + ![](Images/profilingUnrealMark.png) -2) Notice that the Timings panel is now displaying timing data, with a specific time region highlighted -3) In the Timings panel, select View Mode -> Compact Mode to see more of a bird's eye view -4) Select All Tracks and uncheck the following threads that don't have much activity for our test: ```RenderThread 3-7, BackgroundThreadPool #1, ForegroundWorker #0-#1, DDC IO ThreadPool #0-#2, Reserve Worker #0-#13, AudioMixerXXX``` -5) Use the mouse wheel to zoom in to selected region. Right click and drag to pan left and right. +2. Notice that the Timings panel is now displaying timing data, with a specific time region highlighted +3. In the Timings panel, select View Mode -> Compact Mode to see more of a bird's eye view +4. Select All Tracks and uncheck the following threads that don't have much activity for our test: `RenderThread 3-7, BackgroundThreadPool #1, ForegroundWorker #0-#1, DDC IO ThreadPool #0-#2, Reserve Worker #0-#13, AudioMixerXXX` +5. Use the mouse wheel to zoom in to selected region. Right click and drag to pan left and right. The view should be a lot cleaner now -![image](https://github.com/CesiumGS/cesium-unreal/assets/130494071/aca0680e-3dc3-4d23-9838-8f598f384089) - +![](Images/profilingUnrealTracks.png) ### Examine high traffic timers -Let's look at the Timers tab. +Let's look at the Timers tab. -![image](https://github.com/CesiumGS/cesium-unreal/assets/130494071/823fc4d4-25d3-40dc-9b41-1cffee560454) +![](Images/profilingUnrealTimers.png) -Every row is a timing event. Some events come from the engine, some are custom timers in the Cesium for Unreal plugin code. You'll notice that Incl is sorting descending, showing the events with the highest inclusive time. +Every row is a timing event. Some events come from the engine, some are custom timers in the Cesium for Unreal plugin code. You'll notice that Incl is sorting descending, showing the events with the highest inclusive time. > You may feel the need to jump right in to `Cesium::CreateRHITexture2D`. It seems to have one of the highest exclusive times (Excl) of any of the events in the list, 1 second. After all, our selection is only 1.2 seconds long, so this must be the performance bottleneck right? Hold on. The total sampled time at the top (CPU) is 19.8s, indicating the times are the total sampled times across threads, not absolute session duration. @@ -71,29 +76,27 @@ Given that the sampled time of the highest cost calls are actually somewhat smal This brings us to... - ### Examine low use areas -1) Go back to the Timings panel. -2) In All Tracks, check Game Frames -2) Turn off compact mode by unchecking "View Mode->Compact Mode". -3) In View Mode, set "Depth Limit" to "4 lanes" -4) Zoom and pan to an area of the selection where the background workers haven't started loading yet +1. Go back to the Timings panel. +2. In All Tracks, check Game Frames +3. Turn off compact mode by unchecking "View Mode->Compact Mode". +4. In View Mode, set "Depth Limit" to "4 lanes" +5. Zoom and pan to an area of the selection where the background workers haven't started loading yet -![image](https://github.com/CesiumGS/cesium-unreal/assets/130494071/caa47e66-b088-46d8-9aa0-1916a65777de) +![](Images/profilingUnrealLowUse.png) -The selected area is the first phase of the loading test. This is a region between when the start mark was logged until when background workers start loading models. +The selected area is the first phase of the loading test. This is a region between when the start mark was logged until when background workers start loading models. It lasts about 8 game frames, or 388 ms, and does not seem to be making use of background threads at all. Could be something to investigate. - ### Examine fragmented use areas -1) Find the Timings panel -2) In View Mode, set "Depth Limit" to "Unlimited" -3) Zoom a bit into an area where our background workers are very busy +1. Find the Timings panel +2. In View Mode, set "Depth Limit" to "Unlimited" +3. Zoom a bit into an area where our background workers are very busy -![image](https://github.com/CesiumGS/cesium-unreal/assets/130494071/29d7c3a2-3710-4a2b-a4f1-09050bdb9287) +![](Images/profilingUnrealFragmentedUse.png) This selected area is zoomed in enough to see that the background workers are all calling the same functions. They finish their work, then wait for more work to be available. Some of this work seems to take longer than others, especially at the beginning. @@ -102,7 +105,8 @@ Note the gaps between the work. In general, there seems to be more inactivity th # Draw conclusions We've identified some actionable information so far, even if it only leads to investigation: -* There is a 388 ms low use area at the beginning of the test (~30%). What is happening here? Can it be faster? -* During high use areas, background threads seems to inactive more than they are active. Why? Can this be optimized so they are always active? + +- There is a 388 ms low use area at the beginning of the test (~30%). What is happening here? Can it be faster? +- During high use areas, background threads seems to inactive more than they are active. Why? Can this be optimized so they are always active? It's very common for profiling to be an iterative process. The result of a profiling session could easily be just adding more event timers, or digging deeper into how something works. Before we can expect that code change that results in a heroic 10x speedup, we need to be able to see clearly what is going on. diff --git a/Documentation/reference-frames.md b/Documentation/reference-frames.md index 296a067a7..2b0e0e88f 100644 --- a/Documentation/reference-frames.md +++ b/Documentation/reference-frames.md @@ -1,40 +1,40 @@ -# Reference Frames +# Reference Frames {#reference-frames} This is an inventory of the most important reference frames used in Cesium for Unreal. + ## Ellipsoid-centered This is the "native" reference frame of Cesium. -| | | -|----------|----------| -| *Handedness* | Right | -| *Units* | Meters | -| *Origin* | Center of the ellipsoid (Earth) | -| *Orientation* |
    • +X passes through the intersection of the equator and prime meridian (0 degrees latitude, 0 degrees longitude)
    • +Y passes through the intersection of the equator and +90 degrees longitude (0 degrees latitude, 90 degrees longitude)
    • +Z is up through the North Pole
    | +| | | +| ------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| _Handedness_ | Right | +| _Units_ | Meters | +| _Origin_ | Center of the ellipsoid (Earth) | +| _Orientation_ |
    • +X passes through the intersection of the equator and prime meridian (0 degrees latitude, 0 degrees longitude)
    • +Y passes through the intersection of the equator and +90 degrees longitude (0 degrees latitude, 90 degrees longitude)
    • +Z is up through the North Pole
    | ## Georeferenced A reference frame defined by the `ACesiumGeoreference` actor. -| | | -|----------|----------| -| *Handedness* | Right | -| *Units* | Meters | -| *Origin* | The origin defined by the `ACesiumGeoreference::OriginPlacement` and possibly `OriginLongitude`, `OriginLatitude`, and `OriginHeight` properties. | -| *Orientation* |
    • If `ACesiumGeoreference::AlignTilesetUpWithZ` is _true_:
      • +X points East at the origin
      • +Y points North at the origin
      • +Z is in the direction of the ellipsoid surface normal at the origin (up)
    • If `ACesiumGeoreference::AlignTilesetUpWithZ` is _false_:
      • Same as Ellipsoid-centered above.
    | +| | | +| ------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| _Handedness_ | Right | +| _Units_ | Meters | +| _Origin_ | The origin defined by the `ACesiumGeoreference::OriginPlacement` and possibly `OriginLongitude`, `OriginLatitude`, and `OriginHeight` properties. | +| _Orientation_ |
    • If `ACesiumGeoreference::AlignTilesetUpWithZ` is _true_:
      • +X points East at the origin
      • +Y points North at the origin
      • +Z is in the direction of the ellipsoid surface normal at the origin (up)
    • If `ACesiumGeoreference::AlignTilesetUpWithZ` is _false_:
      • Same as Ellipsoid-centered above.
    | ## Cesium Tileset The reference frame of a Cesium 3D Tiles tileset, as defined by the tileset.json. Usually, tilesets are georeferenced and this reference frame is identical to the `Ellipsoid-centered` frame described above, but this is not strictly required by 3D Tiles. A non-georeferenced model of a building, for example, may have an origin at the center of the building and axes aligned with the principal sides of the building. -| | | -|----------|----------| -| *Handedness* | Right | -| *Units* | Meters | -| *Origin* | Specified by tileset.json, often the center of the Earth. | -| *Orientation* | Specified by tileset.json, often ECEF. | - +| | | +| ------------- | --------------------------------------------------------- | +| _Handedness_ | Right | +| _Units_ | Meters | +| _Origin_ | Specified by tileset.json, often the center of the Earth. | +| _Orientation_ | Specified by tileset.json, often ECEF. | ## Unreal Tileset @@ -42,31 +42,31 @@ The same as the Cesium Tileset, but expressed in Unreal Engine terms: the coordi Please note that the transformation from Unreal Tileset coordinates to Unreal Absolute/Relative World (below) is affected by the ACesium3DTileset Actor's Location and Orientation properties. However, these should almost always be set to identity. -| | | -|----------|----------| -| *Handedness* | Left | -| *Units* | Centimeters | -| *Origin* | Specified by tileset.json, often the center of the Earth. | -| *Orientation* | Specified by tileset.json, often ECEF. | +| | | +| ------------- | --------------------------------------------------------- | +| _Handedness_ | Left | +| _Units_ | Centimeters | +| _Origin_ | Specified by tileset.json, often the center of the Earth. | +| _Orientation_ | Specified by tileset.json, often ECEF. | ## Unreal Absolute World Vectors and matrices in Unreal Engine are expressed using single-precision floating-point numbers. In order to maintain precision, these coordinate values must remain relatively small. To support this, the Unreal floating world origin can be moved by setting the `OriginLocation` property of `UWorld`. Coordinates that are said to be in the "Unreal Absolute World" reference frame are expressed relative to the absolute origin (0,0,0) and are not affected by the value of the `OriginLocation` property. -| | | -|----------|----------| -| *Handedness* | Left | -| *Units* | Centimeters | -| *Origin* | No fixed meaning. | -| *Orientation* | No fixed meaning. | +| | | +| ------------- | ----------------- | +| _Handedness_ | Left | +| _Units_ | Centimeters | +| _Origin_ | No fixed meaning. | +| _Orientation_ | No fixed meaning. | ## Unreal Relative World This reference frame has the same orientation as "Unreal Absolute World", but is offset from it by the `UWorld`'s `OriginLocation`. Coordinates are expressed relative to the floating origin. -| | | -|----------|----------| -| *Handedness* | Left | -| *Units* | Centimeters | -| *Origin* | No fixed meaning. | -| *Orientation* | No fixed meaning. | +| | | +| ------------- | ----------------- | +| _Handedness_ | Left | +| _Units_ | Centimeters | +| _Origin_ | No fixed meaning. | +| _Orientation_ | No fixed meaning. | diff --git a/Documentation/release-process.md b/Documentation/release-process.md index 796f2b181..fbf5cd974 100644 --- a/Documentation/release-process.md +++ b/Documentation/release-process.md @@ -1,28 +1,28 @@ -# Releasing a new version of Cesium for Unreal +# Releasing a new version of Cesium for Unreal {#release-process} This is the process we follow when releasing a new version of Cesium for Unreal on GitHub and on the Unreal Engine Marketplace. ## Verify the code -* Update any hard coded API keys in the code, including: - * `testIonToken` in `CesiumSceneGeneration.cpp`. Make sure it matches the key in the samples project. -* Verify that the cesium-native submodule in the `extern` directory references the expected commit of cesium-native. Update it if necessary. Verify that CI has completed successfully for that commit of cesium-native. -* Wait for CI to complete for `main`. Verify that it does so successfully. +- Update any hard coded API keys in the code, including: + - `testIonToken` in `CesiumSceneGeneration.cpp`. Make sure it matches the key in the samples project. +- Verify that the cesium-native submodule in the `extern` directory references the expected commit of cesium-native. Update it if necessary. Verify that CI has completed successfully for that commit of cesium-native. +- Wait for CI to complete for `main`. Verify that it does so successfully. ## Test the release candidate For the following instructions, replace `v2.0.0` with the actual version number you are targeting. Let `X` represent the minor version of Unreal Engine 5 you're currently testing. -* Remove all existing copies of the Cesium for Unreal plugin from the engine plugin directories on your system. On Windows this is usually `C:\Program Files\Epic Games\UE_5.X\Engine\Plugins\Marketplace`. -* In the `main` branch, go to https://github.com/CesiumGS/cesium-unreal/actions and click the most recent build of the branch (it should be near the top). Scroll down to **Artifacts** and download the artifact that doesn't have an operating system in its name, e.g., `CesiumForUnreal-5X-v2.0.0`. It will also be the largest artifact. Extract it to `C:\Program Files\Epic Games\UE_5.X\Engine\Plugins\Marketplace`. -* Clone a fresh copy of [cesium-unreal-samples](https://github.com/CesiumGS/cesium-unreal-samples) to a new directory. To test in a different version, right-click on the `CesiumForUnrealSamples.uproject` file and select "Switch Unreal Engine Version". Double-click that same file to open it in the Editor. -* Open each level in Content -> CesiumSamples -> Maps and verify it works correctly. - * Does it open without crashing? - * Does it look correct? - * Press Play. Does each sample work as expected? The billboard in each level should give you a good idea of what to expect. - * For `04_MAIN_CesiumSublevels`, make sure that the sub-levels are loading as expected. Ensure that no other tilesets or objects showing outside of their intended sub-levels. -* Using one of the sample scenes, open the foliage window and create a new foliage type using any engine static mesh. Verify that foliage painting on Cesium World Terrain works correctly. -* Test on other platforms and other versions of Unreal Engine if you can. If you can't (e.g., you don't have a Mac), post a message on Slack asking others to give it at least a quick smoke test. +- Remove all existing copies of the Cesium for Unreal plugin from the engine plugin directories on your system. On Windows this is usually `C:\Program Files\Epic Games\UE_5.X\Engine\Plugins\Marketplace`. +- In the `main` branch, go to https://github.com/CesiumGS/cesium-unreal/actions and click the most recent build of the branch (it should be near the top). Scroll down to **Artifacts** and download the artifact that doesn't have an operating system in its name, e.g., `CesiumForUnreal-5X-v2.0.0`. It will also be the largest artifact. Extract it to `C:\Program Files\Epic Games\UE_5.X\Engine\Plugins\Marketplace`. +- Clone a fresh copy of [cesium-unreal-samples](https://github.com/CesiumGS/cesium-unreal-samples) to a new directory. To test in a different version, right-click on the `CesiumForUnrealSamples.uproject` file and select "Switch Unreal Engine Version". Double-click that same file to open it in the Editor. +- Open each level in Content -> CesiumSamples -> Maps and verify it works correctly. + - Does it open without crashing? + - Does it look correct? + - Press Play. Does each sample work as expected? The billboard in each level should give you a good idea of what to expect. + - For `04_MAIN_CesiumSublevels`, make sure that the sub-levels are loading as expected. Ensure that no other tilesets or objects showing outside of their intended sub-levels. +- Using one of the sample scenes, open the foliage window and create a new foliage type using any engine static mesh. Verify that foliage painting on Cesium World Terrain works correctly. +- Test on other platforms and other versions of Unreal Engine if you can. If you can't (e.g., you don't have a Mac), post a message on Slack asking others to give it at least a quick smoke test. Make sure to do this for all three currently-supported versions of Unreal Engine. If all of the above goes well, you're ready to release Cesium for Unreal. @@ -30,43 +30,43 @@ Make sure to do this for all three currently-supported versions of Unreal Engine While doing the steps below, make sure no new changes are going into either cesium-unreal or cesium-native that may invalidate the testing you did above. If new changes go in, it's ok, but you should either retest with those changes or make sure they are not included in the release. -* Change the version in `CesiumForUnreal.uplugin`: - * Increment the `Version` integer property. - * Change the `VersionName` property to the new three digit, dot-delimited version number. Use [Semantic Versioning](https://semver.org/) to pick the version number. -* Change the `version` property in `package.json` to match the `VersionName` above. -* Verify that cesium-native's CHANGES.md is complete and accurate. -* Verify that cesium-unreal's CHANGES.md is complete and accurate. -* Verify again that cesium-native CI has completed successfully on all platforms. -* Verify again that the submodule reference in cesium-unreal references the correct commit of cesium-native. -* Verify again that cesium-unreal CI has completed successfully on all platforms. -* Tag the cesium-native release, e.g., `git tag -a v0.2.0 -m "0.2.0 release"`, replacing the version number with your actual version. -* Push the tag to GitHub: `git push origin v0.2.0` -* Tag the cesium-unreal release, e.g., `git tag -a v2.0.0 -m "2.0.0 release"`, replacing the version number with your actual version. -* Push the tag to GitHub: `git push origin v2.0.0` +- Change the version in `CesiumForUnreal.uplugin`: + - Increment the `Version` integer property. + - Change the `VersionName` property to the new three digit, dot-delimited version number. Use [Semantic Versioning](https://semver.org/) to pick the version number. +- Change the `version` property in `package.json` to match the `VersionName` above. +- Verify that cesium-native's CHANGES.md is complete and accurate. +- Verify that cesium-unreal's CHANGES.md is complete and accurate. +- Verify again that cesium-native CI has completed successfully on all platforms. +- Verify again that the submodule reference in cesium-unreal references the correct commit of cesium-native. +- Verify again that cesium-unreal CI has completed successfully on all platforms. +- Tag the cesium-native release, e.g., `git tag -a v0.2.0 -m "0.2.0 release"`, replacing the version number with your actual version. +- Push the tag to GitHub: `git push origin v0.2.0` +- Tag the cesium-unreal release, e.g., `git tag -a v2.0.0 -m "2.0.0 release"`, replacing the version number with your actual version. +- Push the tag to GitHub: `git push origin v2.0.0` # Publish the release on GitHub -* Wait for the release tag CI build to complete. -* Download the built plugin packages for the tags, as you did above for the main branches. -* Create a new release on GitHub: https://github.com/CesiumGS/cesium-unreal/releases/new. Copy the changelog into it. Follow the format used in previous release and upload the release .zips that you downloaded above. Make sure you upload the .zips for all three currently-supported versions. +- Wait for the release tag CI build to complete. +- Download the built plugin packages for the tags, as you did above for the main branches. +- Create a new release on GitHub: https://github.com/CesiumGS/cesium-unreal/releases/new. Copy the changelog into it. Follow the format used in previous release and upload the release .zips that you downloaded above. Make sure you upload the .zips for all three currently-supported versions. ## Publish the Release on Marketplace 1. Open https://publish.unrealengine.com/. Login with the unreal@cesium.com credentials. 2. Navigate to **Products -> Published**. - ![image](https://user-images.githubusercontent.com/2288659/115271431-58b68180-a10b-11eb-9819-a0bb10c54714.png) + ![image](https://user-images.githubusercontent.com/2288659/115271431-58b68180-a10b-11eb-9819-a0bb10c54714.png) 3. Select **Cesium for Unreal**, then scroll all the way to the bottom to the **Product Files** section. - ![image](https://user-images.githubusercontent.com/2288659/115271629-86032f80-a10b-11eb-9e60-9d838e3a1aec.png) + ![image](https://user-images.githubusercontent.com/2288659/115271629-86032f80-a10b-11eb-9e60-9d838e3a1aec.png) 4. Click the **Submit File Update** button. Confirm the prompts, and you will be directed to this page below. - * A note here - The **Create New Version** button (don't use this) is for adding a plugin that is for a different version of Unreal Engine. For example, if there were different builds for 4.25 and 4.26. Even if you accidentally click it, the box for 4.26 will be greyed out. Delete the accidentally added row by clicking the delete icon. - ![image](https://user-images.githubusercontent.com/2288659/115272156-16417480-a10c-11eb-8b8b-eddbbc3854d6.png) + - A note here - The **Create New Version** button (don't use this) is for adding a plugin that is for a different version of Unreal Engine. For example, if there were different builds for 4.25 and 4.26. Even if you accidentally click it, the box for 4.26 will be greyed out. Delete the accidentally added row by clicking the delete icon. + ![image](https://user-images.githubusercontent.com/2288659/115272156-16417480-a10c-11eb-8b8b-eddbbc3854d6.png) 5. Do the following to update the plugin: - 1. Update the Version Title to match the release version. - 2. Confirm the supported Unreal Engine versions. - 3. Confirm the supported platforms. - 4. Update the version notes to reference the appropriate version of [CHANGES.md](https://github.com/CesiumGS/cesium-unreal/blob/main/CHANGES.md). - 5. Copy download URLs from the GitHub release pages you created above into the **Project File Link** field. - ![image](https://user-images.githubusercontent.com/2288659/115272024-f0b46b00-a10b-11eb-98ec-c01e40b5e3fb.png) + 1. Update the Version Title to match the release version. + 2. Confirm the supported Unreal Engine versions. + 3. Confirm the supported platforms. + 4. Update the version notes to reference the appropriate version of [CHANGES.md](https://github.com/CesiumGS/cesium-unreal/blob/main/CHANGES.md). + 5. Copy download URLs from the GitHub release pages you created above into the **Project File Link** field. + ![image](https://user-images.githubusercontent.com/2288659/115272024-f0b46b00-a10b-11eb-98ec-c01e40b5e3fb.png) 6. Click **Submit**. 7. This should take you back to the product page, and the **Product Files** section should show **View Pending File Update**. The admin will also recieve an email confirming the submission. The release is now pending Epic's review. If the Marketplace Team reaches out about any issues, those may need resolving, and follow this process again to submit a new zip file for the release. ![image](https://user-images.githubusercontent.com/2288659/115330453-140a0500-a162-11eb-95f4-fd7e3f3312b0.png) @@ -82,8 +82,8 @@ Assuming you tested the release candidate as described above, you should have [c 1. Create a new branch of cesium-unreal-samples. 2. Create a new access token using the CesiumJS ion account. - * The name of the token should match the format "Cesium for Unreal Samples x.x.x - Delete on September 1st, 2021". The expiry date should be set to two months after the date it was created. - * The scope of the token should be "assets:read" for all assets. + - The name of the token should match the format "Cesium for Unreal Samples x.x.x - Delete on September 1st, 2021". The expiry date should be set to two months after the date it was created. + - The scope of the token should be "assets:read" for all assets. 3. Copy the access token you just created. 4. Open cesium-unreal-samples in the oldest supported version of Unreal Engine. 5. For the `ion.cesium.com` server, use the **Token** window to paste the new token into the field for **Specify a token**. @@ -96,8 +96,10 @@ Assuming you tested the release candidate as described above, you should have [c After the update has been merged to `main`, do the following: 1. Pull and check out the latest version of `main` from GitHub, and then tag the new release by doing the following: - * `git tag -a v1.10.0 -m "v1.10.0 release"` - * `git push origin v1.10.0` + +- `git tag -a v1.10.0 -m "v1.10.0 release"` +- `git push origin v1.10.0` + 2. Wait for the continuation integration build to complete for the tag. 3. Switch to the tag in the GitHub UI by visiting the repo, https://github.com/CesiumGS/cesium-unreal-samples, clicking the combo box where it says "main", switching to the Tags tab, and selecting the new tag that you created above. 4. Click the green tick ✔️ at the top of the list of files and click the "Details" link next to "project-package". This will download the built package to your computer. Also copy this URL (by right-clicking the Details link and choosing `Copy link address`) because you will need it later. @@ -107,20 +109,20 @@ After the update has been merged to `main`, do the following: ## Publish Cesium for Unreal Samples on Marketplace -**DO NOT do this step until Epic has accepted the updated plugin!** Otherwise, Epic may release the Samples update on the Marketplace before the plugin itself is updated. The updated Samples project is not guaranteed to work with old versions of the plugin, so this can leave users in a broken state. On the other hand, the plugin is usually backwards compatible, so the old Samples version will work fine with the new plugin version. Therefore, always make sure the plugin is published to the Marketplace first. +**DO NOT do this step until Epic has accepted the updated plugin!** Otherwise, Epic may release the Samples update on the Marketplace before the plugin itself is updated. The updated Samples project is not guaranteed to work with old versions of the plugin, so this can leave users in a broken state. On the other hand, the plugin is usually backwards compatible, so the old Samples version will work fine with the new plugin version. Therefore, always make sure the plugin is published to the Marketplace first. 1. Open https://publish.unrealengine.com/. Login with the admin credentials. 2. Navigate to **Products -> Published**. 3. Select **Cesium for Unreal Samples**, then scroll all the way to the bottom to the **Product Files** section. 4. Click the **Submit File Update** button. Confirm the prompts, and you will be directed to this page below. - * A note here - The **Create New Version** button (don't use this) is for adding a plugin that is for a different version of Unreal Engine. For example if there were different build for 4.25 and 4.26. Even if you accidentally click it, the box for 4.26 will be greyed out. Delete the accidentally added row by clicking the delete icon. + - A note here - The **Create New Version** button (don't use this) is for adding a plugin that is for a different version of Unreal Engine. For example if there were different build for 4.25 and 4.26. Even if you accidentally click it, the box for 4.26 will be greyed out. Delete the accidentally added row by clicking the delete icon. 5. Do the following to update the plugin: - 1. Update the Version Title to match the release version. - 2. Replace the Project File Link with the download link you copied from the github continuation integration green tick. - 3. Confirm the supported Unreal Engine versions. - 4. Confirm the supported platforms. - 5. Replace the Version Notes with the link to the published release.(Likely `https://github.com/CesiumGS/cesium-unreal-samples/releases/tag/vX.X.X`) - ![image](https://user-images.githubusercontent.com/39537389/126185273-f4df4437-a9c9-477b-85a3-10e75699c26c.png) + 1. Update the Version Title to match the release version. + 2. Replace the Project File Link with the download link you copied from the github continuation integration green tick. + 3. Confirm the supported Unreal Engine versions. + 4. Confirm the supported platforms. + 5. Replace the Version Notes with the link to the published release.(Likely `https://github.com/CesiumGS/cesium-unreal-samples/releases/tag/vX.X.X`) + ![image](https://user-images.githubusercontent.com/39537389/126185273-f4df4437-a9c9-477b-85a3-10e75699c26c.png) 6. Click **Submit**. 7. This should take you back to the product page, and the **Product Files** section should show **View Pending File Update**. The admin will also recieve an email confirming the submission. The release is now pending Epic's review. If the Marketplace Team reaches out about any issues, those may need resolving, and follow this process again to submit a new zip file for the release. 8. Once the new release is approved, it does not automatically go live. Take this opportunity to update the product description, images, and other content as needed (product page changes do not require Epic's review). diff --git a/Documentation/style-guide.md b/Documentation/style-guide.md new file mode 100644 index 000000000..6afb3384a --- /dev/null +++ b/Documentation/style-guide.md @@ -0,0 +1,205 @@ +# Cesium for Unreal Style Guide + +Cesium strives to maintain a high standard for code quality across all of its codebases. The effort to write readable, organized, and consistent code makes it much easier for contributors to work with the code, whether new or experienced. + +That said, the Cesium for Unreal plugin is a bit special. It combines code from [Cesium Native](https://github.com/CesiumGS/cesium-native/) and Unreal Engine, two large codebases with diverging guidelines, libraries, and design decisions. This guide attempts to reconcile between these two codebases and make recommendations where there are conflicts. + +Before diving into this guide, we recommend the following: + +1. Browse Cesium Native's [C++ style guide](https://cesium.com/learn/cesium-native/ref-doc/style-guide.html) to familiarize yourself with fundamental principles and expectations for C++ development. + +2. Go through the [Unreal Engine Coding Standard](https://dev.epicgames.com/documentation/en-us/unreal-engine/epic-cplusplus-coding-standard-for-unreal-engine) for the official coding guidelines for Unreal Engine. + +This guide will explicitly link to sections in the above resources when relevant, but it is good practice to learn the overall expectations of both environments. + +**IN GENERAL**, if you're writing code for a public API, defer to Unreal Engine's style and code standards. When working with private APIs or implementation details, fall back on Cesium Native's C++ style. Use existing, similar code to infer the appropriate style for your own. + +## Table of Contents + +- [Naming](#naming) +- [Types](#types) +- [Documentation](#documentation) +- [File Organization](#file-organization) + +## Naming + +First, check out the [Naming Conventions](https://dev.epicgames.com/documentation/en-us/unreal-engine/epic-cplusplus-coding-standard-for-unreal-engine#namingconventions) section in the Unreal Engine coding standard. Then, read below. + +### General + +- You will have to follow Unreal's conventions for naming new structs or classes, e.g, prefixing structs with `F` or actor subclasses with `A`. If these prefixes are absent, the Unreal Header Tool will likely complain during the build process, and subsequently fail to compile your code. + +- Although the names should be prefixed in code, the files containing them should *not* follow this rule. For example, `ACesium3DTileset` is defined in `Cesium3DTileset.h` and implemented in `Cesium3DTileset.cpp`, and *not* `ACesium3DTileset.h` or `ACesium3DTileset.cpp`. + +- Every `struct` or `class` in the public API should be prefaced with the word "Cesium". This helps to clearly separate our API from other elements in Unreal, and allows users to more easily search for our components in Unreal. + +```cpp +// Don't do this. +public AGeoreference : public AActor {...} + +// Do this. +public ACesiumGeoreference : public AActor {...} +``` + +> Note that the above is not enforced for classes that are used in private implementations. For example, users won't ever interact directly with `LoadModelResult` or `UnrealAssetAccessor`, so these do not include a "Cesium" prefix. +> +> We also tend to omit "Cesium" from the names of `enum`s, for readability. Just be sure to add [Documentation](#documentation) so users understand how it is used in Cesium. + +### Public vs. Private Style + +Functions and fields in the public API should be written in `PascalCase`. However, continue to use `lowerCamelCase` for any private members or anonymous namespace functions. + +```cpp +USTRUCT() +struct CESIUMRUNTIME_API FCesiumStruct { + GENERATED_BODY() + +public: + float PublicField; + void DoSomethingPublic(float Input); + +private: + float _privateField; + void doSomethingPrivate(float input); +} +``` + +For pointer variables that are mentioned in the public API, e.g., public fields or function parameters, omit the `p` prefix. However, continue to use `p` to prefix pointers in private code. + +```cpp +UCLASS() +class CESIUMRUNTIME_API UCesiumClass { + GENERATED_BODY() + +public: + UCesiumEllipsoid* Ellipsoid; + void SetEllipsoid(UCesiumEllipsoid* NewEllipsoid) + +private: + ACesium3DTileset* _pTilesetActor; + void setTileset(ACesium3DTileset* pNewTileset); +} +``` + +If you're wondering about `CESIUMRUNTIME_API`, this macro is necessary for all public types in our plugin (and free functions, if we have any) to be DLL-exported. Otherwise, they won't be usable by other modules on Windows. Make sure to include this macro in the `public` class, struct, or function definition. (If you're working in the Editor module, use `CESIUMEDITOR_API` instead.) + +### Clarity + +Aim to assign names to variables, functions, etc. that are succinctly descriptive. This is crucial for creating an intuitive user experience with the public API, but even private code should aspire to this standard. + +**When in doubt, err on the side of being overly explicit.** Try to be precise about scope and meaning. + +For example, consider the context of multiple frames of reference in Cesium for Unreal. The plugin has to operate in multiple coordinate systems: Unreal's coordinate system, Earth-Centered Earth-Fixed coordinates, and cartographic coordinates (longitude, latitude, height). Whenever something deals with position or orientation, it is important to distinguish what space it is operating in. + +This intentionally vague example leaves a lot to be desired: + +```cpp +FMatrix ComputeTransform(FVector Location) {...} +``` + +From a glance, it is not clear what the intended frame-of-reference is. (Maybe you assumed it was in Unreal space due to `Location`, but what is `Transform` for?) The function body might give us a hint, but the declaration could use more clarity. Adding documentation will definitely help here, and in some cases that is enough to avoid ambiguity. + +```cpp +/** + * Computes the matrix that transforms from an East-South-Up frame centered at + * a given location to the Unreal frame. + * + * (Insert detailed explanation of East-South-Up.) + */ +FMatrix ComputeTransform(FVector Location) {...} +``` + +However, we can take this even a step further. Let's rename the function and its parameter so that the intent is very obvious from the start. + +```cpp +/** + * Computes the matrix that transforms from an East-South-Up frame centered at + * a given location to the Unreal frame. + * + * (Insert detailed explanation of East-South-Up.) + */ +FMatrix ComputeEastSouthUpToUnrealTransformation(FVector UnrealLocation) {...} +``` + +In the same vein, avoid abbreviations unless they are commonly accepted or used across the codebase. This improves readability such that code is understandable to new developers from a glance. (Additionally, consider developers for whom English is not their first language; the arbitrary abbreviations can be even more confusing.) + +```cpp +// Not great. +static void CompBoundingRect(FVector BL, FVector TR) {...} + +// Better. +static void ComputeBoundingRectangle(FVector BottomLeft, FVector TopRight) {...} +``` + +We also write out "Earth-Centered, Earth-Fixed" and "Longitude, Latitude, Height" in the plugin. Though this makes for longer names, it is helpful for users who are new to geospatial and aren't familiar with abbreviations like ECEF. However, we still use WGS84 because the full name is cumbersome, and less helpful when spelled out. + +### Units + +Units should stay consistent across the API to avoid confusion as values are passed. In particular: + +- Unreal uses centimeter units, while Cesium for Unreal uses meters. Meters are the standard units across our runtimes (like CesiumJS). +- Longitude and latitude are expressed in degrees, while height above the WGS84 ellipsoid is expressed in meters. + +It's encouraged to leave documentation about the expected units and/or frame of reference for a function and its parameters. This comment in `CesiumGeoreference.h` is a good example: + +```cpp + /** + * Transforms a position in Unreal coordinates into longitude in degrees (x), + * latitude in degrees (y), and height above the ellipsoid in meters (z). The + * position should generally not be an Unreal _world_ position, but rather a + * position expressed in some parent Actor's reference frame as defined by its + * transform. This way, the chain of Unreal transforms places and orients the + * "globe" in the Unreal world. + */ + FVector TransformUnrealPositionToLongitudeLatitudeHeight( + const FVector& UnrealPosition) const; +``` + +## Types + +### Pointers + +Unreal provides engine-specific pointer types that may not be obvious to distinguish from one another. This [community guide](https://dev.epicgames.com/community/learning/tutorials/kx/unreal-engine-all-about-soft-and-weak-pointers) goes into detail about the differences between these types, but they are summarized for convenience below. + +| Type | Description | +| ---- | ----------- | +| `TObjectPtr` | An optional replacement for raw pointers. The type `T` should be complete and derived from `UObject`. | +| `TSoftObjectPtr` | Used in UProperties. | +| `TWeakObjectPtr` | Used to reference already instantiated objects. Will resolve to null if the object gets destroyed or garbage collected. | + +Generally, the above pointers are used whenever you instantiate something that inherits from an Unreal type (e.g., `UObject`, `USceneComponent`). Of course, raw pointers may be used where ownership is not required. + +Unreal also provides `TUniquePtr` and `TSharedPtr` definitions, equivalent to their `std` counterparts. For consistency, Cesium for Unreal prefers using `TUniquePtr` and `TSharedPtr`. However, you can't use these when the type `T` is a `UObject`, as `UObject`s are always garbage collected. + +### Math + +Unreal contains various vector and matrix classes that are functionally similar to the classes in `glm`, e.g., `FVector` for `glm::dvec3`, `FMatrix` for `glm::dmat4`. + +However, if you ever find yourself doing any vector and matrix arithmetic, it is **strongly encouraged** to do operations with `glm` first. The computed result can later be copied into the corresponding Unreal Engine type. + +This is especially recommended for matrix math. `FMatrix` makes strong assumptions about the content of the matrix that can result in unexpected behaviors. It also defines operators in ways that deviate from typical linear algebra expectations. If you need the result to be an `FMatrix`, first use `glm::dmat4` for the computation, and *then* copy it into an `FMatrix`. + +> Example of faulty `FMatrix` math: +> +> The `FMatrix::operator*` composed matrices in the opposite of the normal order. If you wanted a matrix that transforms by `A` then by `B`, Unreal would want you to multiply `A * B`. You would otherwise multiply `B * A` in `glm`. + +## Documentation + +Documentation is generated by Doxygen before being published [online](https://cesium.com/learn/cesium-unreal/ref-doc). Therefore, any public API should be documented with Doxygen-compatible comments that follow the standards put forth by [Cesium Native](https://github.com/CesiumGS/cesium-native/blob/main/doc/topics/style-guide.md#-documentation). + +The sole exception is to avoid the use of `@copydoc` for `UPROPERTY`s or `UFUNCTION`s in Cesium for Unreal. Unreal Engine uses comments to generate tooltips for object properties and Blueprints functions, but it won't parse every Doxygen command. Often, the tooltip often copies the text of a comment verbatim. While this isn't an issue for most comments, `@copydoc` will never create a copy of the target comment, so the tooltip will be left as `"@copydoc"`. + +We circumvent the above by manually duplicating the documentation comments as necessary. But feel free to use `@copydoc` when documenting elements that are only used in C++. + +## File Organization + +Cesium for Unreal's source code (located in the `Source` folder) is divided into `Runtime` and `Editor`. The `Editor` folder contains elements that are used within the Unreal Editor only, e.g., UI components or functionality. These will not be included in a packaged build, so don't place anything here that is otherwise required for the application to run! + +The `Runtime` folder contains everything else. The classes in here may be acted upon by the Unreal Editor, but they are not exclusive to the Editor. + +Within the `Runtime` folder are two subfolders: `Public` and `Private`. + +- The `Public` folder should contain files related to the public API. +- The `Private` folder contains everything else: private classes, functions, etc. that users will never have to deal with. + +Be aware that the `Private` folder can reference files in the `Public` folder, but not vice versa. It's possible that a class in `Public` needs to `#include` something that would otherwise exist in the `Private` folder, e.g., the type of a private member variable. Use forward declarations to avoid this where possible, but you ultimately may have to move that class to the `Public` folder, even if it's not public API. This is fine. diff --git a/Documentation/unreal-engine-3d-tiles.md b/Documentation/unreal-engine-3d-tiles.md new file mode 100644 index 000000000..be784fcb5 --- /dev/null +++ b/Documentation/unreal-engine-3d-tiles.md @@ -0,0 +1,77 @@ +# 3D Tiles in Unreal Engine + +The [Rendering 3D Tiles](\ref rendering-3d-tiles) page in the Cesium Native documentation explains in the abstract how Cesium Native can be used to integrate 3D Tiles rendering into an application. This page explains how Cesium for Unreal integrates 3D Tiles rendering into Unreal Engine specifically. + +## ITaskProcessor + +The implementation of [ITaskProcessor](\ref CesiumAsync::ITaskProcessor) for Unreal Engine is found in `UnrealTaskProcessor.h` and `.cpp` and is only a few lines of code. It uses Unreal's `AsyncTask` function to run the provided callback on the Unreal Engine task graph. The particular thread specifier used is `AnyBackgroundThreadNormalTask`. The meaning of this is not well documented, but we initially used `AnyThread` and found that our background work could sometimes block essential tasks related to rendering, causing frame-rate hiccups. Switching to `AnyBackgroundThreadNormalTask` slightly increased load times, but made rendering much smoother. See [CesiumGS/cesium-unreal#975](https://github.com/CesiumGS/cesium-unreal/pull/975) for further details. + +## IAssetAccessor + +`UnrealAssetAccessor` implements [IAssetAccessor](\ref CesiumAsync::IAssetAccessor) using Unreal's `HttpModule`. While this is largely straightforward and it has served us well overall, it has also been a source of quirks and performance problems. + +##### File URLs + +Unreal's HttpModule uses [libcurl](https://curl.se/libcurl/) under the hood, but the developers have chosen to disable libcurl's support for `file:///` URLs. Because our users frequently want to access 3D Tiles tileset from the local file system (in addition to the web), we have implemented custom support for file URLs in our asset accessor. It uses Unreal's `FFileHelper::LoadFileToArray` to read files, running in the `GIOThreadPool`. + +##### Configuration Parameters + +The Cesium for Unreal plugin includes `Config/Engine.ini` and `Config/Editor.ini` files to configure various aspects of Unreal's HTTP request system. See the comments in those files for an explanation of what we're changing and why. Without these tweaks, Unreal would spam the Output Log, complaining about Cesium making too many network requests. The time to download 3D Tiles files would also be much longer. + +## IPrepareRendererResources + +The implementation of the [IPrepareRendererResources](\ref Cesium3DTilesSelection::IPrepareRendererResources) interface in `UnrealPrepareRendererResources` is the heart of Cesium for Unreal. It is responsible for creating Unreal objects from 3D Tiles glTFs so that they can be rendered and interacted-with in Unreal Engine. + +The major `UObject` classes involved in 3D Tiles rendering, and their inheritance relationships, are shown in the class diagram below. The types built into Unreal Engine are shown in a different color from the ones provided with Cesium for Unreal. + +@mermaid{classes-for-3d-tiles} + +* `ACesium3DTileset`: The Actor responsible for loading a 3D Tiles tileset. On each `Tick`, it calls Cesium Native's [updateView](\ref Cesium3DTilesSelection::Tileset::updateView). +* `UCesiumGltfComponent`: Represents a single 3D Tiles tile. A `ACesium3DTileset` will have many `UCesiumGltfComponent` instances attached to it, one for each tile that is currently loaded. +* `UCesiumGltfPrimitiveComponent`: Represents a single [MeshPrimitive](\ref CesiumGltf::MeshPrimitive) within a single 3D Tiles tile (glTF). A `UCesiumGltfComponent` will usually have one or more `UCesiumGltfPrimitiveComponent` instances attached to it. +* `UCesiumGltfPointsComponent`: A more specific type of `UCesiumGltfPrimitiveComponent` that is used when the `MeshPrimitive` uses the [POINTS](\ref CesiumGltf::MeshPrimitive::Mode::POINTS) mode. That is, when it is a point cloud. +* `UCesiumGltfInstancedComponent`: An alternate representation of a glTF `MeshPrimitive` that is used when multiple copies of the mesh are rendered under the direction of the [EXT_gpu_instancing](https://github.com/KhronosGroup/glTF/tree/main/extensions/2.0/Vendor/EXT_mesh_gpu_instancing) extension. + +Instances of `UCesiumGltfComponent`, `UCesiumGltfInstancedComponent`, and `UCesiumGltfPointsComponent`, along with accompanying `UStaticMesh`, `UMaterialInstanceDynamic`, and `UTexture2D` instances, are created by `UnrealPrepareRendererResources` as 3D Tiles are loaded. These `UObject`-derived classes are created on the game thread. Game thread time is a limited resource in most Unreal Engine applications, though, so we strive to do as much of the loading work as possible in background threads. + +For that reason, Cesium for Unreal takes advantage of the separate [prepareInLoadThread](\ref Cesium3DTilesSelection::IPrepareRendererResources::prepareInLoadThread) and [prepareInMainThread](\ref Cesium3DTilesSelection::IPrepareRendererResources::prepareInMainThread) methods on `IPrepareRendererResources`. + +> [!note] +> Recent versions of Unreal Engine reportedly do allow creating UObjects in background threads, probably with some significant caveats. In the future, we should consider whether the relaxation of this limitation allows us to improve our design or performance. + +In `prepareInLoadThread`, Cesium for Unreal receives a [Model](\ref CesiumGltf::Model) from Cesium Native and creates from it a `LoadedModelResult`. This struct holds a representation of the model that is as close to "fully renderable in Unreal Engine" as we can manage without creating any `UObjects`: + +* Normals and tangents are generated, if required. +* Texture MipMaps are generated, if required. +* Physics meshes are generated, if required. +* Mesh vertex and index data for each `MeshPrimitive` are copied into an instance of Unreal's `FStaticMeshRenderData`. +* An `FCesiumTextureResource` is created for each texture. This class is derived from Unreal's `FTextureResource` and is Unreal's low-level, render-thread representation of a texture. +* Feature IDs and metadata that are made available to a material via the [UCesiumFeaturesMetadataComponent](\ref UCesiumFeaturesMetadataComponent) are turned into additional textures. + +Then, in `prepareInMainThread`, we receive the `LoadedModelResult` produced above, and create all of the `UObject` instances from it, avoiding as much as possible copying or transforming any data. + +### Multithreaded Texture Creation + +Textures are often the largest part of a 3D Tiles tileset, especially for real-world, photogrammetry-derived models. So, Cesium for Unreal takes great pains to: + +1. Avoid keeping multiple copies of a texture in CPU or GPU memory. +2. Avoid copying texture data unnecessarily, even if it's only held temporarily. +3. Create renderable textures on the GPU without using any more game thread or render thread time than is absolutely necessary. + +To that end, Cesium for Unreal's texture creation system uses some low-level, largely undocumented parts of the Unreal Engine API. This is made trickier by the fact that a single image may have multiple purposes within a glTF, or it may be shared across multiple glTF tiles in a 3D Tiles tileset. + +Textures are created near the start of `prepareInLoadThread` with calls to `ExtensionImageAssetUnreal::getOrCreate`. This method expects that multiple threads may call it simultaneously on a single [ImageAsset](\ref CesiumGltf::ImageAsset). This happens when the two threads are loading two different tiles that happen to share a single image. It uses a mutex to ensure that only the first thread adds an `ExtensionImageAssetUnreal` and then proceeds to load the image. Any other threads will instead get the existing `ExtensionImageAssetUnreal`, which includes a [SharedFuture](\ref CesiumAsync::SharedFuture) that will resolve when the first thread has finished loading the image. + +This system ensures that a) only one thread loads the image, and b) other threads can asynchronously wait for the image to be loaded, without blocking any threads while they're waiting. + +The thread that is doing the actual loading will create a new instance of a class derived from `FCesiumTextureResource` for the `ImageAsset`. + +@mermaid{texture-resource-classes} + +For Unreal Render Hardware Interfaces (RHI) that support asynchronous texture upload (`GRHISupportsAsyncTextureCreation` is set), which is currently only Direct3D 11 and 12, the instance will be of type `FCesiumPreCreatedRHITextureResource`. The GPU upload will happen immediately under the control of the worker thread with a call to `RHIAsyncCreateTexture2D`. + +For RHIs that don't support async texture upload, the new instance will be of type `FCesiumCreateNewTextureResource` and a command will be queued to the render thread to do the texture upload with a call to `RHICreateTexture`. In either case, the CPU-side pixel data, which is now owned by the `FCesiumTextureResource`, is freed once the GPU upload is complete. + +In Unreal Engine, an `FTextureResource` encapsulates both the GPU texture resource (represented as `FRHITexture`), but also details such as the sampling mode (nearest, linear, mipmaps), as well as whether or not to treat it as sRGB. This is unfortunate because we would like to have just one copy of each set of pixel data, even if that pixel data happens to be sampled differently when it's used in different contexts. Fortunately, we can create multiple `FTextureResource` instances that reference a single `FRHITexture` via reference counting. + +For simplicity, we always do this, even when there is no sharing. The initial `FCesiumTextureResource` that is created can be viewed as a representation of the glTF [Image](\ref CesiumGltf::Image). Then, we create an instance of `FCesiumUseExistingTextureResource` for each glTF [Texture](\ref CesiumGltf::Texture). The `FCesiumUseExistingTextureResource` wraps the `FCesiumCreateNewTextureResource` or `FCesiumPreCreatedRHITextureResource` instance created previously and brings the sampler settings that are appropriate for the context. diff --git a/Documentation/upgrade-to-2.0-guide.md b/Documentation/upgrade-to-2.0-guide.md index 0b78f5047..dd0f09184 100644 --- a/Documentation/upgrade-to-2.0-guide.md +++ b/Documentation/upgrade-to-2.0-guide.md @@ -1,14 +1,17 @@ -# Cesium for Unreal v2.0 Upgrade Guide +# Cesium for Unreal v2.0 Upgrade Guide {#v2-upgrade-guide} As of v2.0, Cesium for Unreal supports the `EXT_mesh_features` and `EXT_structural_metadata` extensions from 3D Tiles 1.1. Models with `EXT_features_metadata` will still load, but their feature IDs and metadata will no longer be accessible. Some differences between the extensions – in particular, differences between possible metadata types and the ways that property collections were accessed or stored – required an overhaul of the metadata-accessing API in Unreal. - This guide intends to inform users of the differences between the old and new metadata APIs. While there are measures in-place to ensure backwards compatibility, be sure to make a backup of your project before switching Cesium for Unreal versions. +This guide intends to inform users of the differences between the old and new metadata APIs. While there are measures in-place to ensure backwards compatibility, be sure to make a backup of your project before switching Cesium for Unreal versions. + + ## Table of Contents - [Retrieving Feature IDs From `EXT_mesh_features`](#ext-mesh-features) - [Retrieving Metadata From `EXT_structural_metadata`](#ext-structural-metadata) - [Styling with `EXT_mesh_features` and `EXT_structural_metadata`](#styling) +

    Retrieving Feature IDs From EXT_mesh_features

    @@ -42,13 +45,13 @@ Implicit feature ID sets have no counterpart – they simply correspond to the i In `EXT_feature_metadata`, feature IDs were associated with feature tables by name. The name was used to retrieve the corresponding feature table from a map of feature tables in the model's root `EXT_feature_metadata` extension. -This changes with 3D Tiles 1.1. In `EXT_mesh_features`, feature IDs are optionally associated with property tables from `EXT_structural_metadata`. If a `FCesiumFeatureIDSet` is associated with a property table, it will have a property table *index*. This value indexes into an array of property tables in the model's root extension. +This changes with 3D Tiles 1.1. In `EXT_mesh_features`, feature IDs are optionally associated with property tables from `EXT_structural_metadata`. If a `FCesiumFeatureIDSet` is associated with a property table, it will have a property table _index_. This value indexes into an array of property tables in the model's root extension. The property table index of a feature ID set can be retrieved with the **"Get Property Table Index"** Blueprint node. See Property Tables for more information. ### Feature ID Attributes and Textures -Property tables are retrieved by index in `EXT_structural_metadata`, so the **"Get Feature Table Name"** Blueprints functions have been deprecated. Aside from this, `FCesiumFeatureIdAttribute` and `FCesiumFeatureIdTexture` are mostly unchanged. +Property tables are retrieved by index in `EXT_structural_metadata`, so the **"Get Feature Table Name"** Blueprints functions have been deprecated. Aside from this, `FCesiumFeatureIdAttribute` and `FCesiumFeatureIdTexture` are mostly unchanged. Previously, a feature ID attribute or texture would not indicate that it was somehow broken, and thus unable to return accurate feature IDs. For example, if the image of a feature ID texture did not actually exist, nothing in the Cesium for Unreal API would communicate that. Thus, the `ECesiumFeatureIdAttributeStatus` and `ECesiumFeatureIdTextureStatus` enums were added to indicate when something in a feature ID set is invalid. These statuses can be queried using the **"Get Feature ID Attribute Status"** and **"Get Feature ID Texture Status"** nodes respectively. @@ -83,26 +86,28 @@ See the complete `EXT_structural_metadata` specification [here](https://github.c In `EXT_structural_metadata`, metadata types are more complex, with too many permutations to reasonably define in one enum. This called for the deprecation of `ECesiumMetadataTrueType`. Now, the type of a metadata property or value is conveyed through the `FCesiumMetadataValueType` struct. This struct is closely modeled after how class property types appear in the extension itself. A `FCesiumMetadataValueType` has three components: + - `ECesiumMetadataType`, an enum that corresponds to the `type` of a class property in the metadata schema. -- `ECesiumMetadataComponentType`, an enum that corresponds to the `componentType` of a class property. This is only applicable to scalar, `VECN`, and `MATN` types, and will be marked `None` for all other types. +- `ECesiumMetadataComponentType`, an enum that corresponds to the `componentType` of a class property. This is only applicable to scalar, `VECN`, and `MATN` types, and will be marked `None` for all other types. - `bIsArray`, a boolean that corresponds to the `array` flag in a class property. If `bIsArray` is true, the type represents an array of elements, where the elements are of the given type and component type. ![Metadata Value Type struct in Blueprints](Images/metadataValueType.jpeg) Below are some example type definitions and their interpretations. -| Example | Explanation | -| ------- | ----------- | -| Type: `Boolean`
    ComponentType: `None`
    bIsArray: `false` | Describes a boolean property. Values are retrieved as booleans. | -| Type: `Vec2`
    ComponentType: `Uint8`
    bIsArray: `false` | Describes a `VEC2` property where the vectors contain unsigned 8-bit integer components. Values are retrieved as two-dimensional unsigned 8-bit integer vectors. | -| Type: `String`
    ComponentType: `None`
    bIsArray: `true` | Describes a string array property. Values are retrieved as arrays of strings. | -| Type: `Scalar`
    ComponentType: `Float32`
    bIsArray: `true` | Describes a scalar array property where the scalars are single-precision floats. Values are retrieved as arrays of single-precision floats. | +| Example | Explanation | +| ---------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| Type: `Boolean`
    ComponentType: `None`
    bIsArray: `false` | Describes a boolean property. Values are retrieved as booleans. | +| Type: `Vec2`
    ComponentType: `Uint8`
    bIsArray: `false` | Describes a `VEC2` property where the vectors contain unsigned 8-bit integer components. Values are retrieved as two-dimensional unsigned 8-bit integer vectors. | +| Type: `String`
    ComponentType: `None`
    bIsArray: `true` | Describes a string array property. Values are retrieved as arrays of strings. | +| Type: `Scalar`
    ComponentType: `Float32`
    bIsArray: `true` | Describes a scalar array property where the scalars are single-precision floats. Values are retrieved as arrays of single-precision floats. | ### Expanded Blueprint Types The `ECesiumMetadataBlueprintType` enum is still used to indicate the best-fitting Blueprints type for a metadata property or value. In Cesium for Unreal v2.0, it has been expanded to include the vector and matrix types possible with the `EXT_structural_metadata` extension. Many of these do not have an exact representation in Blueprints, but can be converted to a sufficiently compatible Blueprints type. The newly supported Blueprints types include: + - `FIntPoint` - `FVector2D` - `FIntVector` @@ -113,24 +118,24 @@ The newly supported Blueprints types include: Vector property values can be converted to other dimensions for flexibility. For example, a `VEC2` can be returned as a `FVector4` with zeroes in the unused components. A `VEC3` can be returned as a `FVector2D` containing the first two components. Scalars can also be retrieved in vector form, as a vector with the value in all components. Some examples below: -| Original | Converted | -| -------- | --------- | -| `vec2(1, 2)` | `FVector(1, 2, 0)` | -| `vec3(1, 2, 3)` | `FVector2D(1, 2)`. | -| `2.5` | `FVector4(2.5, 2.5, 2.5, 2.5)` | +| Original | Converted | +| --------------- | ------------------------------ | +| `vec2(1, 2)` | `FVector(1, 2, 0)` | +| `vec3(1, 2, 3)` | `FVector2D(1, 2)`. | +| `2.5` | `FVector4(2.5, 2.5, 2.5, 2.5)` | Unfortunately, there are no perfect representations for `MAT2` and `MAT3` properties in Unreal Engine, but they can still be retrieved from properties as `FMatrix` instances, padded by zeros in the unused components. For example: -| Original | FMatrix | -| ---- | ------ | -| `[1, 2]`
    `[3, 4]`| `[1, 2, 0, 0]`
    `[3, 4, 0, 0]`
    `[0, 0, 0, 0]`
    `[0, 0, 0, 0]`| +| Original | FMatrix | +| ------------------------------------------- | ------------------------------------------------------------------------ | +| `[1, 2]`
    `[3, 4]` | `[1, 2, 0, 0]`
    `[3, 4, 0, 0]`
    `[0, 0, 0, 0]`
    `[0, 0, 0, 0]` | | `[1, 2, 3]`
    `[4, 5, 6]`
    `[7, 8, 9]` | `[1, 2, 3, 0]`
    `[4, 5, 6, 0]`
    `[7, 8, 9, 0]`
    `[0, 0, 0, 0]` | Additionally, scalars can be retrieved as an `FMatrix` with the value along its diagonal. For example, -| Original | FMatrix | -| -------- | ------- | -| `2.5` | `[2.5, 0, 0, 0]`
    `[0, 2.5, 0, 0]`
    `[0, 0, 2.5, 0]`
    `[0, 0, 0, 2.5]` | +| Original | FMatrix | +| -------- | ------------------------------------------------------------------------------- | +| `2.5` | `[2.5, 0, 0, 0]`
    `[0, 2.5, 0, 0]`
    `[0, 0, 2.5, 0]`
    `[0, 0, 0, 2.5]` | Keep in mind that while matrices are column-major in `EXT_structural_metadata`, an Unreal Engine `FMatrix` is row-major. The values are transposed to the correct places in the `FMatrix`. @@ -180,9 +185,9 @@ The complete change list concerning property arrays is as follows: Property tables in `EXT_structural_metadata` evolved from the feature tables in `EXT_feature_metadata`. As such, `FCesiumFeatureTable` has been renamed to `FCesiumPropertyTable`, and `FCesiumMetadataProperty` to `FCesiumPropertyTableProperty` for clarity. -`ECesiumPropertyTableStatus` has been added to indicate whether a property table is valid. Invalid property tables will not have any metadata properties. Additionally, a `FCesiumPropertyTableProperty` can now report its `ECesiumPropertyTablePropertyStatus`, indicating when it has experienced an error. +`ECesiumPropertyTableStatus` has been added to indicate whether a property table is valid. Invalid property tables will not have any metadata properties. Additionally, a `FCesiumPropertyTableProperty` can now report its `ECesiumPropertyTablePropertyStatus`, indicating when it has experienced an error. -Previously, if any properties were invalid, they would be omitted from the property table without explanation. Now, any invalid properties will still be represented in the property table, but can be queried for their status. +Previously, if any properties were invalid, they would be omitted from the property table without explanation. Now, any invalid properties will still be represented in the property table, but can be queried for their status. ![Get Property Table Status and Get Property Table Property Status Blueprints](Images/getPropertyTableStatusFunctions.jpeg) @@ -210,7 +215,7 @@ Finally, `UCesiumMetadataPropertyBlueprintLibrary` has been renamed to `UCesiumP - `GetVector4` - `GetMatrix` -In the `EXT_structural_metadata` specification, properties may contain *transformations* that affect the interpretation of their values in some way. These include `offset`, `scale`, `noData`, and `defaultValue`. A `min` and `max` value may also be specified if the property is a numeric type. To retrieve these values in Unreal Engine, use the `GetOffset`, `GetScale`, `GetNoDataValue`, `GetDefaultValue`, `GetMinimumValue`, and `GetMaximumValue` functions respectively. These return the value as a `FCesiumMetadataValue`, which can later be converted to the appropriate type. +In the `EXT_structural_metadata` specification, properties may contain _transformations_ that affect the interpretation of their values in some way. These include `offset`, `scale`, `noData`, and `defaultValue`. A `min` and `max` value may also be specified if the property is a numeric type. To retrieve these values in Unreal Engine, use the `GetOffset`, `GetScale`, `GetNoDataValue`, `GetDefaultValue`, `GetMinimumValue`, and `GetMaximumValue` functions respectively. These return the value as a `FCesiumMetadataValue`, which can later be converted to the appropriate type. ### Property Textures @@ -218,7 +223,7 @@ Property textures in `EXT_structural_metadata` are derived from the feature text In previous versions of Cesium for Unreal, `FCesiumFeatureTextureProperty` did not preserve the type information of the properties. Instead, it used specialized structs – `FCesiumIntegerColor` and `FCesiumFloatColor` – to hold the channel values of a pixel in the texture. These structs required the user to determine the property's type and manually construct the correct metadata value from the pixel. To remove this extra work on the user, the newly-renamed `FCesiumPropertyTextureProperty` now interprets the texture channels on the user's behalf and returns the values as the property's specified type. -The `ECesiumPropertyTextureStatus` has been added to indicate whether a property texture is valid. Invalid property textures will not have any metadata properties. Additionally, a `FCesiumPropertyTextureProperty` can now report its `ECesiumPropertyTexturePropertyStatus`, indicating when it has experienced an error. +The `ECesiumPropertyTextureStatus` has been added to indicate whether a property texture is valid. Invalid property textures will not have any metadata properties. Additionally, a `FCesiumPropertyTextureProperty` can now report its `ECesiumPropertyTexturePropertyStatus`, indicating when it has experienced an error. Finally, `UCesiumFeatureTexturePropertyBlueprintLibrary` has been renamed to `UCesiumPropertyTexturePropertyBlueprintLibrary`, and its functionality now mirrors that of `UCesiumPropertyTablePropertyBlueprintLibrary` with the following changes: @@ -247,11 +252,11 @@ TODO picking functions here For both `EXT_feature_metadata` and `EXT_structural_metadata`, the extensions use different specifications based on which glTF component it is extending. They could extend the individual glTF primitives as well the glTF model itself. Previously, the `FCesiumMetadataModel` and `FCesiumMetadataPrimitive` structs were used to differentiate between the placements of the `EXT_feature_metadata` extension. In Cesium for Unreal v2.0, the `FCesiumModelMetadata` and `FCesiumPrimitiveMetadata` struts are used for `EXT_structural_metadata`. -`FCesiumMetadataModel` has simply been renamed to `FCesiumModelMetadata`, representing the metadata specified by the `EXT_structural_metadata` extension on the root glTF model. However, `FCesiumMetadataPrimitive` was not so simple to rename. In `EXT_feature_metadata`, the primitive extension stored both metadata *and* feature IDs, whereas the `EXT_structural_metadata` primitive extension only indicated metadata. To handle this distinction, the `FCesiumMetadataPrimitive` is treated as separate from the newer `FCesiumPrimitiveMetadata` struct. `FCesiumMetadataPrimitive` is still deprecated, so instead use `FCesiumPrimitiveFeatures` to access the feature IDs of a primitive and `FCesiumPrimitiveMetadata` to access its metadata. +`FCesiumMetadataModel` has simply been renamed to `FCesiumModelMetadata`, representing the metadata specified by the `EXT_structural_metadata` extension on the root glTF model. However, `FCesiumMetadataPrimitive` was not so simple to rename. In `EXT_feature_metadata`, the primitive extension stored both metadata _and_ feature IDs, whereas the `EXT_structural_metadata` primitive extension only indicated metadata. To handle this distinction, the `FCesiumMetadataPrimitive` is treated as separate from the newer `FCesiumPrimitiveMetadata` struct. `FCesiumMetadataPrimitive` is still deprecated, so instead use `FCesiumPrimitiveFeatures` to access the feature IDs of a primitive and `FCesiumPrimitiveMetadata` to access its metadata. ### TODO: Metadata Picking -*Picking* refers to the act of selecting a feature (e.g., selecting by mouse click) and querying it for information. Typically, picking is used to access the metadata of a particular feature. +_Picking_ refers to the act of selecting a feature (e.g., selecting by mouse click) and querying it for information. Typically, picking is used to access the metadata of a particular feature. in Cesium for Unreal v2.0, metadata picking can be easily implemented using a new Blueprint library. Using **"Line Trace By Channel"**, trace a line into the scene upon mouse click. Then, retrieve the **"Hit Component"** and **"Face Index"** from the resulting hit. @@ -267,7 +272,7 @@ To retrieve the values as strings, use **"Get Metadata Values For Face As String

    Styling with EXT_mesh_features and EXT_structural_metadata

    -*Styling* refers to the visual modification of data based on some information – usually metadata – and rules built around it by the developer. Previous versions of Cesium for Unreal allowed styling with the `UCesiumEncodedMetadataComponent`, which made `EXT_feature_metadata` accessible in Unreal materials. In this way, Unreal's material editor and rendering systems could be leveraged to visually alter tilesets based on their metadata. +_Styling_ refers to the visual modification of data based on some information – usually metadata – and rules built around it by the developer. Previous versions of Cesium for Unreal allowed styling with the `UCesiumEncodedMetadataComponent`, which made `EXT_feature_metadata` accessible in Unreal materials. In this way, Unreal's material editor and rendering systems could be leveraged to visually alter tilesets based on their metadata. In Cesium for Unreal v2.0, `UCesiumEncodedMetadataComponent` has been deprecated and replaced by `UCesiumFeaturesMetadataComponent`. The new component is functionally similar, but it handles the `EXT_mesh_features` and `EXT_structural_metadata` extensions instead. Styling with `EXT_feature_metadata` is no longer supported. @@ -276,15 +281,15 @@ In Cesium for Unreal v2.0, `UCesiumEncodedMetadataComponent` has been deprecated - Added `UCesiumPrimitiveFeaturesBlueprintLibrary::GetFeatureIDFromHit` to retrieve the feature ID from a line trace hit on a primitive, where the desired feature ID set is specified by index. For feature ID textures, this returns more accurate values than `GetFeatureIDFromFace`. - Added `UCesiumPropertyTextureBlueprintLibrary::GetMetadataValuesFromHit` to retrieve the property texture property values from a line trace hit on the primitive. Each property may specify a different texture coordinate set, so this function accounts for each property's specified set. -### Auto Fill +### Auto Fill -Like its predecessor, the `UCesiumFeaturesMetadataComponent` contains descriptions of the feature ID sets and metadata properties in the tileset. These descriptions indicate which feature ID sets or metadata should be made available for styling in Unreal materials. The contents can be manually specified by a developer or automatically generated using the **Auto Fill** button. +Like its predecessor, the `UCesiumFeaturesMetadataComponent` contains descriptions of the feature ID sets and metadata properties in the tileset. These descriptions indicate which feature ID sets or metadata should be made available for styling in Unreal materials. The contents can be manually specified by a developer or automatically generated using the **Auto Fill** button. ![Auto Fill button on the CesiumFeaturesMetadataComponent](Images/autoFill.jpeg) -**Auto Fill** populates the descriptions based on the tiles currently in-view in the editor. This is a *cumulative* view, so it is possible for listed properties to only apply to a portion of the tileset. +**Auto Fill** populates the descriptions based on the tiles currently in-view in the editor. This is a _cumulative_ view, so it is possible for listed properties to only apply to a portion of the tileset. -Everything that is listed in the descriptions will be passed to the material on the tileset, and anything not listed will be skipped. Passing metadata values may involve *encoding* – converting property values to GPU-accessible types, then passing them to the material as a texture. This requires time and storage, so **only include feature ID sets and metadata that will actually be used by the application**. Unused properties may affect memory and performance. +Everything that is listed in the descriptions will be passed to the material on the tileset, and anything not listed will be skipped. Passing metadata values may involve _encoding_ – converting property values to GPU-accessible types, then passing them to the material as a texture. This requires time and storage, so **only include feature ID sets and metadata that will actually be used by the application**. Unused properties may affect memory and performance. ### Generate Material @@ -301,7 +306,8 @@ Feature ID sets and metadata properties have specific naming schemes for their c Once the material layer has been generated, it can be added to a material instance with the **"FeaturesMetadata"** label. ![Material Layer in the Material Editor](Images/featuresMetadataMaterialLayer.jpeg) -> Previous versions of Cesium for Unreal required the "Metadata" label in the material instance. This label is reserved for backwards compatibility with `UCesiumEncodedMetadataComponent`. However, it will not work for the newer `UCesiumFeaturesMetadataComponent`. **Use the "FeaturesMetadata" label**, or else the feature IDs and metadata will not be passed to the material layer. + +> Previous versions of Cesium for Unreal required the "Metadata" label in the material instance. This label is reserved for backwards compatibility with `UCesiumEncodedMetadataComponent`. However, it will not work for the newer `UCesiumFeaturesMetadataComponent`. **Use the "FeaturesMetadata" label**, or else the feature IDs and metadata will not be passed to the material layer. ### Feature ID Sets @@ -314,18 +320,18 @@ Cesium for Unreal v2.0 supports styling with all types of feature ID sets – at > **Note**: This implementation assumes that feature ID sets with the same name will have identical definitions throughout the tileset. If a feature ID set is defined differently between two glTF primitives, it may lead to undefined behavior. > > For example, suppose that one primitive's `EXT_mesh_features` contains a feature ID attribute named **"FeatureIDSet0"**. Theoretically, another primitive in the tileset can also contain a **"FeatureIdSet0"**, but defined instead as a feature ID texture. If the feature ID attribute is discovered first, the `UCesiumFeaturesMetadataComponent` assumes that all subsequent instances of **"FeatureIdSet0"** are also attributes. This will result in unexpected behavior when it tries to handle **"FeatureIdSet0"** in the second primitive. - + In general, the list of feature ID sets populated by **Auto Fill** may be larger than the list of feature ID sets that a glTF primitive actually has. All feature ID sets can be simultaneously handled in the Unreal material layer, but they may have nonexistent values depending on the primitive. Below are examples of the nodes added by **Generate Material** for each type of feature ID set. -| Type | Example | -| ---- | ------- | +| Type | Example | +| --------- | ------------------------------------------------------------------------- | | Attribute | | -| Texture | | -| Implicit | | +| Texture | | +| Implicit | | -> Implicit feature IDs are passed as an attribute to the material because there is no way (currently) to retrieve the vertex index with a material node. +> Implicit feature IDs are passed as an attribute to the material because there is no way (currently) to retrieve the vertex index with a material node. **Auto Fill** can also detect whether a feature ID set contains a `nullFeatureId` in the `EXT_mesh_features` extension. If so, it will tick the **Has Null Feature Id** checkbox, allowing the `nullFeatureId` to be passed to the material layer as a parameter. An **If** node will also be added to the material to allow feature IDs to be compared against the null value. @@ -352,32 +358,33 @@ Each property table description contains a list of properties that are also dist Every property table property displays **Property Details** that capture detailed information about the property's type. This also includes any special characteristics about the property, e.g., if it is `normalized` or has an `offset` and `scale`. This information is taken from its corresponding `classProperty` definition in `EXT_structural_metadata`, but the `offset` and `scale` may be defined on individual instances of the property. **Auto Fill** will detect these instance definitions as it is gathering the other information. ![Example property details](Images/propertyDetailsExample.jpeg) + > **Note**: This implementation assumes that same-name properties will have identical definitions if they are under same-name property tables In other words, the **Property Details** of the first found property are assumed to represent all other instances of that property table property throughout the tileset. If any instance of the property has different property details, they will not overwrite the existing details in the description. This may affect how its values are transferred to the Unreal material. -Below the **Property Details** are the **Encoding Details**, which determine how a property's values will be encoded to a texture and how they will be retrieved from the texture parameter. +Below the **Property Details** are the **Encoding Details**, which determine how a property's values will be encoded to a texture and how they will be retrieved from the texture parameter. The **Property Details** inform how a property table property can be best encoded during **Auto Fill**. However, the **Encoding Details** of the property may be manually set if desired. ![Example encoding details](Images/encodingDetailsExample.jpeg) Once the necessary **Property Details** and **Encoding Details** are filled out, **Generate Material** will create a custom node that retrieves the values for the listed properties. As previously described, the values for the properties will be passed in as texture parameters. - +![](Images/materialGetPropertyValues.jpeg) -The options in **Property Details** can prompt additional nodes to be generated. For instance, if any of **Is Normalized**, **Has Offset**, or **Has Scale** are true, a custom node will be created to handle the transforms. +The options in **Property Details** can prompt additional nodes to be generated. For instance, if any of **Is Normalized**, **Has Offset**, or **Has Scale** are true, a custom node will be created to handle the transforms. - +![](Images/materialApplyValueTransforms.jpeg) -When value transforms are present in the property, the property's *raw* values will be encoded. They can then be transformed by the body of the custom function. The `scale` and `offset` are passed to the material as parameters, and the **TransformedValue** output provides the value with normalization, scale, and offset applied. +When value transforms are present in the property, the property's _raw_ values will be encoded. They can then be transformed by the body of the custom function. The `scale` and `offset` are passed to the material as parameters, and the **TransformedValue** output provides the value with normalization, scale, and offset applied. Then, if **Has No Data Value** is true, another parameter node and an **If** node will be generated. The "no data" value acts as a sentinel value, indicating when a feature has no associated data for that property. This **If** node enables fallback behavior to be executed when the "no data" value is encountered. - +![](Images/materialNoData.jpeg) > **Note**: The "no data" value is compared against raw property values, not the transformed ones. Finally, if **Has Default Value** is true, nodes can be autogenerated to handle the default value. It is entirely possible (and allowed by the spec) for a property to omitted from the property table, if it is not marked `required` in the `classProperty`. If the `classProperty` provides a `default` value, the default value should be used instead. **Generate Material** adds parameters and an **If** node to check for this case. - +![](Images/materialDefaultValue.jpeg) > The `B` of the **If** node is set to a constant 1.0. @@ -385,11 +392,11 @@ If an instance of the property table property actually contains a buffer of valu If the property has a "no data" value as well, the default value will automatically be used as a fallback when encountering the "no data" value. - +![](Images/materialNoDataAndDefault.jpeg) If all of **Has Offset**, **Has Scale**, **Has No Data Value**, and **Has Default Value** are simultaneously enabled on the same property, **Generate Material** will produce a material graph that contains a combination of the aforementioned nodes. - +![](Images/materialAllPossibleNodes.jpeg) The logic of this graph can be summarized as the following pseudocode: @@ -401,7 +408,7 @@ if (propertyHasValue) { transformedValue = rawValue * scale + offset; return transformedValue; - + } else { return defaultValue; } @@ -421,4 +428,3 @@ Unfortunately, these conversion methods are not compatible with all property typ - Arrays of non-scalar and non-boolean elements Additionally, if a property contains arrays of fixed length, only up to the first four elements will be encoded. - diff --git a/Documentation/using-prerelease-packages.md b/Documentation/using-prerelease-packages.md index 8992e2abe..abc9f0081 100644 --- a/Documentation/using-prerelease-packages.md +++ b/Documentation/using-prerelease-packages.md @@ -1,11 +1,12 @@ -# Using Pre-Release Packages +# Using Pre-Release Packages {#using-prerelease} Cesium for Unreal has a continous integration (CI) system that automatically builds an installable version of the plugin for every commit in every branch. You can download and install these yourself to try out new features before they're released. + _Before you begin, **back up your project**. Cesium for Unreal can not guarantee that levels saved with a pre-release version will be loadable in other versions of the plugin._ -* [Download a pre-release version from a Pull Request](#download-a-pre-release-version-from-a-pull-request) -* [Download a pre-release version from a Branch or Commit](#download-a-pre-release-version-from-a-branch-or-commit) +- [Download a pre-release version from a Pull Request](#download-a-pre-release-version-from-a-pull-request) +- [Download a pre-release version from a Branch or Commit](#download-a-pre-release-version-from-a-branch-or-commit) ## Download a pre-release version from a Pull Request @@ -23,7 +24,7 @@ And scroll down to the Artifacts section: If there is no Artifacts section on that page, it's probably because the CI run is still in progress. Artifacts don't appear until the build is complete. -Find the appropriate ZIP file for your version of Unreal Engine. For example, `CesiumForUnreal-52-*.zip` is for Unreal Engine 5.2. Note that artifacts that name a platform will _only_ work on that platform, while artifacts without any platform in the name will work on _all_ platforms that Cesium for Unreal supports. So in most cases you should download an artifact without any platform in its name. +Find the appropriate ZIP file for your version of Unreal Engine. For example, `CesiumForUnreal-53-*.zip` is for Unreal Engine 5.3. Note that artifacts that name a platform will _only_ work on that platform, while artifacts without any platform in the name will work on _all_ platforms that Cesium for Unreal supports. So in most cases you should download an artifact without any platform in its name. Once you've downloaded the appropriate ZIP, move on to [installing a Cesium for Unreal ZIP](#installing-a-cesium-for-unreal-zip). @@ -47,7 +48,7 @@ And scroll down to the Artifacts section: If there is no Artifacts section on that page, it's probably because the CI run is still in progress. Artifacts don't appear until the build is complete. -Find the appropriate ZIP file for your version of Unreal Engine. For example, `CesiumForUnreal-52-*.zip` is for Unreal Engine 5.2. Note that artifacts that name a platform will _only_ work on that platform, while artifacts without any platform in the name will work on _all_ platforms that Cesium for Unreal supports. So in most cases you should download an artifact without any platform in its name. +Find the appropriate ZIP file for your version of Unreal Engine. For example, `CesiumForUnreal-53-*.zip` is for Unreal Engine 5.3. Note that artifacts that name a platform will _only_ work on that platform, while artifacts without any platform in the name will work on _all_ platforms that Cesium for Unreal supports. So in most cases you should download an artifact without any platform in its name. Once you've downloaded the appropriate ZIP, move on to [installing a Cesium for Unreal ZIP](#installing-a-cesium-for-unreal-zip). @@ -56,6 +57,6 @@ Once you've downloaded the appropriate ZIP, move on to [installing a Cesium for Once you've download a pre-release ZIP file using one of the methods above, you can install it into your Unreal Engine as follows: 1. If you previously installed the Cesium for Unreal plugin via the Unreal Engine Marketplace, uninstall it first. -2. Find Unreal Engine's `Engine/Plugins/Marketplace` directory. For example, on Unreal Engine 5.2 on Windows, this is typically `C:\Program Files\Epic Games\UE_5.2\Engine\Plugins\Marketplace`. You may need to create the `Marketplace` directory yourself. +2. Find Unreal Engine's `Engine/Plugins/Marketplace` directory. For example, on Unreal Engine 5.3 on Windows, this is typically `C:\Program Files\Epic Games\UE_5.3\Engine\Plugins\Marketplace`. You may need to create the `Marketplace` directory yourself. 3. If the `CesiumForUnreal` subdirectory already exists in this `Marketplace` directory, delete it first to make sure you're getting a clean installation. 4. Extract the release ZIP into this `Marketplace` directory. If you've done this correctly, you'll find a `CesiumForUnreal` sub-directory inside the `Marketplace` directory. diff --git a/README.md b/README.md index 4f5acaf15..8ae88800b 100644 --- a/README.md +++ b/README.md @@ -6,7 +6,7 @@ Cesium for Unreal brings the 3D geospatial ecosystem to Unreal Engine. By combin [Cesium for Unreal Homepage](https://cesium.com/cesium-for-unreal?utm_source=github&utm_medium=github&utm_campaign=unreal) -### :rocket: Get Started +### 🚀 Get Started **[Download Cesium for Unreal from Unreal Engine Marketplace](https://cesium.com/unreal-marketplace?utm_source=cesium-unreal&utm_medium=github&utm_campaign=unreal)** @@ -14,7 +14,7 @@ Cesium for Unreal brings the 3D geospatial ecosystem to Unreal Engine. By combin Have questions? Ask them on the [community forum](https://community.cesium.com). -### :clap: Featured Demos +### 👏 Featured Demos

      @@ -23,7 +23,7 @@ Have questions? Ask them on the [community forum](https://community.cesium.com).

    -### :house_with_garden: Cesium for Unreal and the 3D Geospatial Ecosystem +### 🏡 Cesium for Unreal and the 3D Geospatial Ecosystem Cesium for Unreal streams real-world 3D content such as high-resolution photogrammetry, terrain, imagery, and 3D buildings from [Cesium ion](https://cesium.com/cesium-ion) and other sources, available as optional commercial subscriptions. The plugin includes Cesium ion integration for instant access to global high-resolution 3D content ready for runtime streaming. Cesium ion users can also leverage cloud-based 3D tiling pipelines to create end-to-end workflows to transform massive heterogenous content into semantically-rich 3D Tiles, ready for streaming to Unreal Engine. @@ -31,28 +31,28 @@ Cesium for Unreal supports cloud and private network content and services based [![Cesium for Unreal Ecosystem Architecture](https://prismic-io.s3.amazonaws.com/cesium/b1505fbc-5769-4032-9233-364a4f52acf6_unreal-pipeline-ice-blue-background.png)](https://cesium.com/cesium-for-unreal?utm_source=cesium-unreal&utm_medium=github&utm_campaign=unreal) -Using Cesium ion helps support Cesium for Unreal development. :heart: +Using Cesium ion helps support Cesium for Unreal development. ❤️ -### :chains: Unreal Engine Integration +### ⛓️ Unreal Engine Integration Cesium for Unreal is tightly integrated with Unreal Engine making it possible to visualize and interact with real-world content in editor and at runtime. The plugin also has support for Unreal Engine physics, collisions, character interaction, and landscaping tools. Leverage decades worth of cutting-edge advancements in Unreal Engine and geospatial to create cohesive, interactive, and realistic simulations and applications with Cesium for Unreal. -### :green_book: License +### 📗 License [Apache 2.0](http://www.apache.org/licenses/LICENSE-2.0.html). Cesium for Unreal is free for both commercial and non-commercial use. -### :package: Installing Cesium for Unreal +### 📦 Installing Cesium for Unreal The easiest way to install Cesium for Unreal is by downloading the officially released version from the [Unreal Engine Marketplace](https://cesium.com/unreal-marketplace?utm_source=cesium-unreal&utm_medium=github&utm_campaign=unreal). You can also find all releases on the [Releases](https://github.com/CesiumGS/cesium-unreal/releases) page. This is useful if you want an older version, or if you can't or don't want to use the Unreal Engine Marketplace. In particular, if you're using Linux, the Releases page is a better option. To install any of these releases: 1. If you previously installed the Cesium for Unreal plugin via the Unreal Engine Marketplace, uninstall it. -2. Extract the release ZIP to Unreal Engine's `Engine/Plugins/Marketplace` directory. For example, on Unreal Engine 5.2 on Windows, this is typically `C:\Program Files\Epic Games\UE_5.2\Engine\Plugins\Marketplace`. You may need to create the `Marketplace` directory yourself. +2. Extract the release ZIP to Unreal Engine's `Engine/Plugins/Marketplace` directory. For example, on Unreal Engine 5.3 on Windows, this is typically `C:\Program Files\Epic Games\UE_5.3\Engine\Plugins\Marketplace`. You may need to create the `Marketplace` directory yourself. 3. If you've done this correctly, you'll find a `CesiumForUnreal` sub-directory inside the `Marketplace` directory, and the plugin is ready to use. You can also [use pre-release packages](Documentation/using-prerelease-packages.md). -### :computer: Developing with Unreal Engine +### 💻 Developing with Unreal Engine See the [Developer Setup Guide](Documentation/developer-setup.md) to learn how to set up a development environment for Cesium for Unreal, allowing you to compile it, customize it, and contribute to its development. diff --git a/Shaders/Private/CesiumPointAttenuationVertexFactory.ush b/Shaders/Private/CesiumPointAttenuationVertexFactory.ush index 6574e9c04..c48406820 100644 --- a/Shaders/Private/CesiumPointAttenuationVertexFactory.ush +++ b/Shaders/Private/CesiumPointAttenuationVertexFactory.ush @@ -4,6 +4,14 @@ CesiumPointAttenuationVertexFactory.ush: point attenuation vertex factory shader code. =============================================================================*/ +#ifndef ENGINE_VERSION_5_4_OR_HIGHER +#define ENGINE_VERSION_5_4_OR_HIGHER 0 +#endif + +#ifndef ENGINE_VERSION_5_5_OR_HIGHER +#define ENGINE_VERSION_5_5_OR_HIGHER 0 +#endif + #include "/Engine/Private/Common.ush" #include "/Engine/Private/VertexFactoryCommon.ush" @@ -40,7 +48,7 @@ struct FVertexFactoryInput #endif }; -/** +/** * Per-vertex inputs. Used by passes with a trimmed down position-only shader. */ struct FPositionOnlyVertexFactoryInput @@ -54,7 +62,7 @@ struct FPositionOnlyVertexFactoryInput #endif }; -/** +/** * Per-vertex inputs. Used by passes with a trimmed down position-and-normal-only shader. */ struct FPositionAndNormalOnlyVertexFactoryInput @@ -83,7 +91,7 @@ struct FVertexFactoryIntermediates half TangentToWorldSign; half4 Color; - + /** Cached primitive and instance data */ FSceneDataIntermediates SceneData; }; @@ -119,7 +127,7 @@ half3x3 CalculateTangentToLocal(uint PointIndex, out float TangentSign) { half3 TangentInputX = PackedTangentsBuffer[2 * PointIndex + 0].xyz; half4 TangentInputZ = PackedTangentsBuffer[2 * PointIndex + 1].xyzw; - + half3 TangentX = TangentBias(TangentInputX); half4 TangentZ = TangentBias(TangentInputZ); @@ -127,7 +135,7 @@ half3x3 CalculateTangentToLocal(uint PointIndex, out float TangentSign) // Derive the binormal by getting the cross product of the normal and tangent half3 TangentY = cross(TangentZ.xyz, TangentX) * TangentZ.w; - + // Recalculate TangentX off of the other two vectors // This corrects quantization errors since TangentX was passed in as a quantized vertex input half3x3 Result; @@ -158,7 +166,7 @@ FVertexFactoryIntermediates GetVertexFactoryIntermediates(FVertexFactoryInput In { FVertexFactoryIntermediates Intermediates = (FVertexFactoryIntermediates)0; Intermediates.SceneData = VF_GPUSCENE_GET_INTERMEDIATES(Input); - + uint PointIndex = Input.VertexId / 4; uint CornerIndex = Input.VertexId - (PointIndex * 4); @@ -213,19 +221,19 @@ FVertexFactoryInterpolantsVSToPS VertexFactoryGetInterpolantsVSToPS( Interpolants.TangentToWorld0 = float4(Intermediates.TangentToWorld[0], 0); Interpolants.TangentToWorld2 = float4(Intermediates.TangentToWorld[2], Intermediates.TangentToWorldSign); Interpolants.Color = Intermediates.Color; - + #if NUM_TEX_COORD_INTERPOLATORS float2 CustomizedUVs[NUM_TEX_COORD_INTERPOLATORS]; GetMaterialCustomizedUVs(VertexParameters, CustomizedUVs); GetCustomInterpolators(VertexParameters, CustomizedUVs); - + UNROLL for (int CoordinateIndex = 0; CoordinateIndex < NUM_TEX_COORD_INTERPOLATORS; CoordinateIndex++) { SetUV(Interpolants, CoordinateIndex, CustomizedUVs[CoordinateIndex]); } #endif - + #if INSTANCED_STEREO Interpolants.EyeIndex = 0; #endif @@ -253,6 +261,13 @@ float4 VertexFactoryGetWorldPosition(FPositionAndNormalOnlyVertexFactoryInput In return GetWorldPosition(Input.VertexId); } +// local position relative to instance +float3 VertexFactoryGetInstanceSpacePosition(FVertexFactoryInput Input, FVertexFactoryIntermediates Intermediates) +{ + // No support for instancing, so instance == primitive + return Intermediates.Position; +} + float3 VertexFactoryGetWorldNormal(FPositionAndNormalOnlyVertexFactoryInput Input) { float3 PointNormal = GetPointNormal(Input.VertexId); @@ -275,6 +290,13 @@ float4 VertexFactoryGetPreviousWorldPosition(FVertexFactoryInput Input, FVertexF #endif } +// local position relative to instance +float3 VertexFactoryGetPreviousInstanceSpacePosition(FVertexFactoryInput Input, FVertexFactoryIntermediates Intermediates) +{ + // No support for instancing, so instance == primitive + return Intermediates.Position; +} + float4 ApplyAttenuation(float4 WorldPosition, uint CornerIndex) { // These offsets generate the quad like so: // 1 --- 2 @@ -333,10 +355,24 @@ FMaterialVertexParameters GetMaterialVertexParameters( FVertexFactoryInput Input, FVertexFactoryIntermediates Intermediates, float3 WorldPosition, - half3x3 TangentToLocal) + half3x3 TangentToLocal, + bool bIsPreviousFrame = false) { +#if ENGINE_VERSION_5_5_OR_HIGHER + FMaterialVertexParameters Result = MakeInitializedMaterialVertexParameters(); + if (bIsPreviousFrame) + { + Result.PositionInstanceSpace = VertexFactoryGetPreviousInstanceSpacePosition(Input, Intermediates); + } + else + { + Result.PositionInstanceSpace = VertexFactoryGetInstanceSpacePosition(Input, Intermediates); + } + Result.PositionPrimitiveSpace = Result.PositionInstanceSpace; // No support for instancing, so instance == primitive +#else FMaterialVertexParameters Result = (FMaterialVertexParameters)0; - +#endif + Result.SceneData = Intermediates.SceneData; Result.WorldPosition = WorldPosition; Result.TangentToWorld = Intermediates.TangentToWorld; @@ -354,6 +390,10 @@ FMaterialVertexParameters GetMaterialVertexParameters( } #endif +#if ENGINE_VERSION_5_4_OR_HIGHER + Result.LWCData = MakeMaterialLWCData(Result); +#endif + return Result; } @@ -439,7 +479,7 @@ FVertexFactoryRayTracingInterpolants VertexFactoryInterpolate( float bInterp) { FVertexFactoryRayTracingInterpolants O; - + INTERPOLATE_MEMBER(InterpolantsVSToPS.TangentToWorld0.xyz); INTERPOLATE_MEMBER(InterpolantsVSToPS.TangentToWorld2); diff --git a/Source/CesiumEditor/CesiumEditor.Build.cs b/Source/CesiumEditor/CesiumEditor.Build.cs index 69c287dbc..4b39523a0 100644 --- a/Source/CesiumEditor/CesiumEditor.Build.cs +++ b/Source/CesiumEditor/CesiumEditor.Build.cs @@ -11,8 +11,6 @@ public class CesiumEditor : ModuleRules { public CesiumEditor(ReadOnlyTargetRules Target) : base(Target) { - PCHUsage = ModuleRules.PCHUsageMode.UseExplicitOrSharedPCHs; - PublicIncludePaths.AddRange( new string[] { // ... add public include paths required here ... @@ -26,78 +24,64 @@ public CesiumEditor(ReadOnlyTargetRules Target) : base(Target) } ); - string libPrefix; - string libPostfix; string platform; - if (Target.Platform == UnrealTargetPlatform.Win64) { - platform = "Windows-x64"; - libPostfix = ".lib"; - libPrefix = ""; + string libSearchPattern; + if (Target.Platform == UnrealTargetPlatform.Win64) + { + platform = "Windows-AMD64-"; + libSearchPattern = "*.lib"; } - else if (Target.Platform == UnrealTargetPlatform.Mac) { - platform = "Darwin-x64"; - libPostfix = ".a"; - libPrefix = "lib"; + else if (Target.Platform == UnrealTargetPlatform.Mac) + { + platform = "Darwin-universal-"; + libSearchPattern = "lib*.a"; } - else if(Target.Platform == UnrealTargetPlatform.Android) { - platform = "Android-xaarch64"; - libPostfix = ".a"; - libPrefix = "lib"; + else if (Target.Platform == UnrealTargetPlatform.Android) + { + platform = "Android-aarch64-"; + libSearchPattern = "lib*.a"; } - else if(Target.Platform == UnrealTargetPlatform.Linux) { - platform = "Linux-x64"; - libPostfix = ".a"; - libPrefix = "lib"; + else if (Target.Platform == UnrealTargetPlatform.Linux) + { + platform = "Linux-x86_64-"; + libSearchPattern = "lib*.a"; } - else if(Target.Platform == UnrealTargetPlatform.IOS) { - platform = "iOS-xarm64"; - libPostfix = ".a"; - libPrefix = "lib"; + else if (Target.Platform == UnrealTargetPlatform.IOS) + { + platform = "iOS-ARM64-"; + libSearchPattern = "lib*.a"; } - else { - platform = "Unknown"; - libPostfix = ".Unknown"; - libPrefix = "Unknown"; + else + { + throw new InvalidOperationException("Cesium for Unreal does not support this platform."); } - string libPath = Path.Combine(ModuleDirectory, "../ThirdParty/lib/" + platform); + string libPathBase = Path.Combine(ModuleDirectory, "../ThirdParty/lib/" + platform); + string libPathDebug = libPathBase + "Debug"; + string libPathRelease = libPathBase + "Release"; - string releasePostfix = ""; - string debugPostfix = "d"; - - bool preferDebug = (Target.Configuration == UnrealTargetConfiguration.Debug || Target.Configuration == UnrealTargetConfiguration.DebugGame); - string postfix = preferDebug ? debugPostfix : releasePostfix; - - string[] libs = new string[] - { - "CesiumIonClient", - "csprng" - }; - - if (preferDebug) + bool useDebug = false; + if (Target.Configuration == UnrealTargetConfiguration.Debug || Target.Configuration == UnrealTargetConfiguration.DebugGame) { - // We prefer Debug, but might still use Release if that's all that's available. - foreach (string lib in libs) + if (Directory.Exists(libPathDebug)) { - string debugPath = Path.Combine(libPath, libPrefix + lib + debugPostfix + libPostfix); - if (!File.Exists(debugPath)) - { - Console.WriteLine("Using release build of cesium-native because a debug build is not available."); - preferDebug = false; - postfix = releasePostfix; - break; - } + useDebug = true; } } - PublicAdditionalLibraries.AddRange(libs.Select(lib => Path.Combine(libPath, libPrefix + lib + postfix + libPostfix))); + string libPath = useDebug ? libPathDebug : libPathRelease; + + string[] allLibs = Directory.Exists(libPath) ? Directory.GetFiles(libPath, libSearchPattern) : new string[0]; + + PublicAdditionalLibraries.AddRange(allLibs); PublicDependencyModuleNames.AddRange( new string[] { "Core", "UnrealEd", - "CesiumRuntime" + "CesiumRuntime", + "OpenSSL" } ); @@ -136,8 +120,8 @@ public CesiumEditor(ReadOnlyTargetRules Target) : base(Target) } ); + IncludeOrderVersion = EngineIncludeOrderVersion.Unreal5_2; PCHUsage = PCHUsageMode.UseExplicitOrSharedPCHs; - PrivatePCHHeaderFile = "Private/PCH.h"; - CppStandard = CppStandardVersion.Cpp17; + CppStandard = CppStandardVersion.Cpp20; } } diff --git a/Source/CesiumEditor/Private/CesiumGlobeAnchorCustomization.cpp b/Source/CesiumEditor/Private/CesiumGlobeAnchorCustomization.cpp index 2da1e15bd..4e0792bb0 100644 --- a/Source/CesiumEditor/Private/CesiumGlobeAnchorCustomization.cpp +++ b/Source/CesiumEditor/Private/CesiumGlobeAnchorCustomization.cpp @@ -3,10 +3,12 @@ #include "CesiumGlobeAnchorCustomization.h" #include "CesiumCustomization.h" #include "CesiumDegreesMinutesSecondsEditor.h" +#include "CesiumGeoreference.h" #include "CesiumGlobeAnchorComponent.h" #include "DetailCategoryBuilder.h" #include "DetailLayoutBuilder.h" #include "IDetailGroup.h" +#include "Widgets/SToolTip.h" FName FCesiumGlobeAnchorCustomization::RegisteredLayoutName; @@ -201,32 +203,63 @@ void UCesiumGlobeAnchorDerivedProperties::PostEditChangeProperty( this->GlobeAnchor->Modify(); this->GlobeAnchor->MoveToEarthCenteredEarthFixedPosition( FVector(this->X, this->Y, this->Z)); - } else if ( - propertyName == GET_MEMBER_NAME_CHECKED( - UCesiumGlobeAnchorDerivedProperties, - Longitude) || - propertyName == GET_MEMBER_NAME_CHECKED( - UCesiumGlobeAnchorDerivedProperties, - Latitude) || - propertyName == GET_MEMBER_NAME_CHECKED( - UCesiumGlobeAnchorDerivedProperties, - Height)) { - this->GlobeAnchor->Modify(); - this->GlobeAnchor->MoveToLongitudeLatitudeHeight( - FVector(this->Longitude, this->Latitude, this->Height)); - } else if ( - propertyName == - GET_MEMBER_NAME_CHECKED(UCesiumGlobeAnchorDerivedProperties, Pitch) || - propertyName == - GET_MEMBER_NAME_CHECKED(UCesiumGlobeAnchorDerivedProperties, Yaw) || - propertyName == - GET_MEMBER_NAME_CHECKED(UCesiumGlobeAnchorDerivedProperties, Roll)) { - this->GlobeAnchor->Modify(); - this->GlobeAnchor->SetEastSouthUpRotation( - FRotator(this->Pitch, this->Yaw, this->Roll).Quaternion()); + } else if (true) { + if (propertyName == GET_MEMBER_NAME_CHECKED( + UCesiumGlobeAnchorDerivedProperties, + Longitude) || + propertyName == GET_MEMBER_NAME_CHECKED( + UCesiumGlobeAnchorDerivedProperties, + Latitude) || + propertyName == GET_MEMBER_NAME_CHECKED( + UCesiumGlobeAnchorDerivedProperties, + Height)) { + this->GlobeAnchor->Modify(); + this->GlobeAnchor->MoveToLongitudeLatitudeHeight( + FVector(this->Longitude, this->Latitude, this->Height)); + } else if ( + propertyName == GET_MEMBER_NAME_CHECKED( + UCesiumGlobeAnchorDerivedProperties, + Pitch) || + propertyName == + GET_MEMBER_NAME_CHECKED(UCesiumGlobeAnchorDerivedProperties, Yaw) || + propertyName == GET_MEMBER_NAME_CHECKED( + UCesiumGlobeAnchorDerivedProperties, + Roll)) { + this->GlobeAnchor->Modify(); + this->GlobeAnchor->SetEastSouthUpRotation( + FRotator(this->Pitch, this->Yaw, this->Roll).Quaternion()); + } } } +bool UCesiumGlobeAnchorDerivedProperties::CanEditChange( + const FProperty* InProperty) const { + const FName Name = InProperty->GetFName(); + + // Valid georeference, nothing to disable + if (IsValid(this->GlobeAnchor->ResolveGeoreference())) { + return true; + } + + return Name != GET_MEMBER_NAME_CHECKED( + UCesiumGlobeAnchorDerivedProperties, + Longitude) && + Name != GET_MEMBER_NAME_CHECKED( + UCesiumGlobeAnchorDerivedProperties, + Latitude) && + Name != GET_MEMBER_NAME_CHECKED( + UCesiumGlobeAnchorDerivedProperties, + Height) && + Name != GET_MEMBER_NAME_CHECKED( + UCesiumGlobeAnchorDerivedProperties, + Pitch) && + Name != GET_MEMBER_NAME_CHECKED( + UCesiumGlobeAnchorDerivedProperties, + Yaw) && + Name != + GET_MEMBER_NAME_CHECKED(UCesiumGlobeAnchorDerivedProperties, Roll); +} + void UCesiumGlobeAnchorDerivedProperties::Initialize( UCesiumGlobeAnchorComponent* GlobeAnchorComponent) { this->GlobeAnchor = GlobeAnchorComponent; @@ -240,16 +273,21 @@ void UCesiumGlobeAnchorDerivedProperties::Tick(float DeltaTime) { this->Y = position.Y; this->Z = position.Z; - FVector llh = this->GlobeAnchor->GetLongitudeLatitudeHeight(); - this->Longitude = llh.X; - this->Latitude = llh.Y; - this->Height = llh.Z; - - FQuat rotation = this->GlobeAnchor->GetEastSouthUpRotation(); - FRotator rotator = rotation.Rotator(); - this->Roll = rotator.Roll; - this->Pitch = rotator.Pitch; - this->Yaw = rotator.Yaw; + // We can't transform the GlobeAnchor's ECEF coordinates back to + // cartographic & rotation without a valid georeference to know what + // ellipsoid to use. + if (IsValid(this->GlobeAnchor->ResolveGeoreference())) { + FVector llh = this->GlobeAnchor->GetLongitudeLatitudeHeight(); + this->Longitude = llh.X; + this->Latitude = llh.Y; + this->Height = llh.Z; + + FQuat rotation = this->GlobeAnchor->GetEastSouthUpRotation(); + FRotator rotator = rotation.Rotator(); + this->Roll = rotator.Roll; + this->Pitch = rotator.Pitch; + this->Yaw = rotator.Yaw; + } } } diff --git a/Source/CesiumEditor/Private/CesiumGlobeAnchorCustomization.h b/Source/CesiumEditor/Private/CesiumGlobeAnchorCustomization.h index 49b663719..13e7365a7 100644 --- a/Source/CesiumEditor/Private/CesiumGlobeAnchorCustomization.h +++ b/Source/CesiumEditor/Private/CesiumGlobeAnchorCustomization.h @@ -137,6 +137,7 @@ class UCesiumGlobeAnchorDerivedProperties : public UObject, virtual void PostEditChangeProperty( struct FPropertyChangedEvent& PropertyChangedEvent) override; + virtual bool CanEditChange(const FProperty* InProperty) const override; void Initialize(UCesiumGlobeAnchorComponent* GlobeAnchor); diff --git a/Source/CesiumEditor/Private/CesiumIonSession.cpp b/Source/CesiumEditor/Private/CesiumIonSession.cpp index 2c64997a9..68f37d727 100644 --- a/Source/CesiumEditor/Private/CesiumIonSession.cpp +++ b/Source/CesiumEditor/Private/CesiumIonSession.cpp @@ -6,7 +6,9 @@ #include "CesiumIonServer.h" #include "CesiumRuntimeSettings.h" #include "CesiumSourceControl.h" +THIRD_PARTY_INCLUDES_START #include "CesiumUtility/Uri.h" +THIRD_PARTY_INCLUDES_END #include "FileHelpers.h" #include "HAL/PlatformProcess.h" #include "Misc/App.h" diff --git a/Source/CesiumEditor/Private/CesiumIonTokenTroubleshooting.cpp b/Source/CesiumEditor/Private/CesiumIonTokenTroubleshooting.cpp index 269192815..c25b6456b 100644 --- a/Source/CesiumEditor/Private/CesiumIonTokenTroubleshooting.cpp +++ b/Source/CesiumEditor/Private/CesiumIonTokenTroubleshooting.cpp @@ -8,7 +8,9 @@ #include "CesiumIonRasterOverlay.h" #include "CesiumIonServerDisplay.h" #include "CesiumRuntimeSettings.h" +THIRD_PARTY_INCLUDES_START #include "CesiumUtility/Uri.h" +THIRD_PARTY_INCLUDES_END #include "EditorStyleSet.h" #include "LevelEditor.h" #include "ScopedTransaction.h" @@ -46,7 +48,7 @@ using namespace CesiumIonClient; // If this is a tileset, close any already-open panels associated with its // overlays. Overlays won't appear until the tileset is working anyway. TWeakObjectPtr* ppTileset = - std::get_if>(&ionObject); + swl::get_if>(&ionObject); if (ppTileset && ppTileset->IsValid()) { TArray rasterOverlays; (*ppTileset)->GetComponents(rasterOverlays); @@ -69,7 +71,7 @@ using namespace CesiumIonClient; // If this is a raster overlay and this panel is already open for its attached // tileset, don't open the panel for the overlay for the same reason as above. TWeakObjectPtr* ppRasterOverlay = - std::get_if>(&ionObject); + swl::get_if>(&ionObject); if (ppRasterOverlay && ppRasterOverlay->IsValid()) { ACesium3DTileset* pOwner = Cast((*ppRasterOverlay)->GetOwner()); @@ -145,7 +147,7 @@ addTokenCheck(const FString& label, std::optional& state) { } bool isNull(const CesiumIonObject& o) { - return std::visit([](auto p) { return p == nullptr; }, o); + return swl::visit([](auto p) { return p == nullptr; }, o); } FString getLabel(const CesiumIonObject& o) { @@ -160,11 +162,11 @@ FString getLabel(const CesiumIonObject& o) { } }; - return std::visit(Operation(), o); + return swl::visit(Operation(), o); } FString getName(const CesiumIonObject& o) { - return std::visit([](auto p) { return p->GetName(); }, o); + return swl::visit([](auto p) { return p->GetName(); }, o); } int64 getIonAssetID(const CesiumIonObject& o) { @@ -192,7 +194,7 @@ int64 getIonAssetID(const CesiumIonObject& o) { } }; - return std::visit(Operation(), o); + return swl::visit(Operation(), o); } FString getIonAccessToken(const CesiumIonObject& o) { @@ -220,7 +222,7 @@ FString getIonAccessToken(const CesiumIonObject& o) { } }; - return std::visit(Operation(), o); + return swl::visit(Operation(), o); } void setIonAccessToken(const CesiumIonObject& o, const FString& newToken) { @@ -255,7 +257,7 @@ void setIonAccessToken(const CesiumIonObject& o, const FString& newToken) { } }; - return std::visit(Operation{newToken}, o); + return swl::visit(Operation{newToken}, o); } FString getObjectType(const CesiumIonObject& o) { @@ -269,11 +271,11 @@ FString getObjectType(const CesiumIonObject& o) { } }; - return std::visit(Operation(), o); + return swl::visit(Operation(), o); } UObject* asUObject(const CesiumIonObject& o) { - return std::visit( + return swl::visit( [](auto p) -> UObject* { return p.IsValid() ? p.Get() : nullptr; }, o); } @@ -294,7 +296,7 @@ bool isUsingCesiumIon(const CesiumIonObject& o) { } }; - return std::visit(Operation(), o); + return swl::visit(Operation(), o); } UCesiumIonServer* getCesiumIonServer(const CesiumIonObject& o) { @@ -314,7 +316,7 @@ UCesiumIonServer* getCesiumIonServer(const CesiumIonObject& o) { } }; - UCesiumIonServer* pServer = std::visit(Operation{}, o); + UCesiumIonServer* pServer = swl::visit(Operation{}, o); if (!IsValid(pServer)) { pServer = UCesiumIonServer::GetDefaultServer(); } diff --git a/Source/CesiumEditor/Private/CesiumIonTokenTroubleshooting.h b/Source/CesiumEditor/Private/CesiumIonTokenTroubleshooting.h index b9b1d65a3..4602793de 100644 --- a/Source/CesiumEditor/Private/CesiumIonTokenTroubleshooting.h +++ b/Source/CesiumEditor/Private/CesiumIonTokenTroubleshooting.h @@ -4,13 +4,13 @@ #include "Widgets/SWindow.h" #include -#include +#include #include class ACesium3DTileset; class UCesiumRasterOverlay; -using CesiumIonObject = std::variant< +using CesiumIonObject = swl::variant< TWeakObjectPtr, TWeakObjectPtr>; diff --git a/Source/CesiumEditor/Private/CesiumPanel.cpp b/Source/CesiumEditor/Private/CesiumPanel.cpp index 43fd08fb9..db5f33de5 100644 --- a/Source/CesiumEditor/Private/CesiumPanel.cpp +++ b/Source/CesiumEditor/Private/CesiumPanel.cpp @@ -10,7 +10,9 @@ #include "CesiumIonServerSelector.h" #include "CesiumRuntime.h" #include "CesiumRuntimeSettings.h" +THIRD_PARTY_INCLUDES_START #include "CesiumUtility/Uri.h" +THIRD_PARTY_INCLUDES_END #include "Editor.h" #include "Framework/MultiBox/MultiBoxBuilder.h" #include "Interfaces/IPluginManager.h" diff --git a/Source/CesiumEditor/Private/IonQuickAddPanel.cpp b/Source/CesiumEditor/Private/IonQuickAddPanel.cpp index 4ca8000b8..89d930f86 100644 --- a/Source/CesiumEditor/Private/IonQuickAddPanel.cpp +++ b/Source/CesiumEditor/Private/IonQuickAddPanel.cpp @@ -8,7 +8,9 @@ #include "CesiumIonRasterOverlay.h" #include "CesiumIonServer.h" #include "CesiumRuntimeSettings.h" +THIRD_PARTY_INCLUDES_START #include "CesiumUtility/Uri.h" +THIRD_PARTY_INCLUDES_END #include "Editor.h" #include "PropertyCustomizationHelpers.h" #include "SelectCesiumIonToken.h" diff --git a/Source/CesiumEditor/Private/PCH.h b/Source/CesiumEditor/Private/PCH.h deleted file mode 100644 index f92035967..000000000 --- a/Source/CesiumEditor/Private/PCH.h +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright 2020-2024 CesiumGS, Inc. and Contributors - -#pragma once - -#define _SILENCE_CXX17_CODECVT_HEADER_DEPRECATION_WARNING -#include "CoreMinimal.h" - -// Workaround for an unhelpful warning (that gets treated as an error) in -// VS2017. See https://github.com/akrzemi1/Optional/issues/57 and -// https://answers.unrealengine.com/questions/607946/anonymous-union-with-none-trivial-type.html -#ifdef _MSC_VER -#if _MSC_VER < 1920 -#pragma warning(push) -#pragma warning(disable : 4583) -#pragma warning(disable : 4582) -#include -#include -#pragma warning(pop) -#endif -#endif - -#include "Blueprint/UserWidget.h" -#include "Components/MeshComponent.h" -#include "Components/PrimitiveComponent.h" -#include "Components/WidgetComponent.h" -#include "Engine/Engine.h" -#include "Engine/World.h" -#include "Physics/PhysicsInterfaceCore.h" -#include "PhysicsEngine/BodyInstance.h" diff --git a/Source/CesiumRuntime/CesiumRuntime.Build.cs b/Source/CesiumRuntime/CesiumRuntime.Build.cs index 394af8d5a..9d4bd207c 100644 --- a/Source/CesiumRuntime/CesiumRuntime.Build.cs +++ b/Source/CesiumRuntime/CesiumRuntime.Build.cs @@ -11,9 +11,6 @@ public class CesiumRuntime : ModuleRules { public CesiumRuntime(ReadOnlyTargetRules Target) : base(Target) { - PCHUsage = ModuleRules.PCHUsageMode.UseExplicitOrSharedPCHs; - ShadowVariableWarningLevel = WarningLevel.Off; - PublicIncludePaths.AddRange( new string[] { Path.Combine(ModuleDirectory, "../ThirdParty/include") @@ -26,119 +23,56 @@ public CesiumRuntime(ReadOnlyTargetRules Target) : base(Target) } ); - string libPrefix; - string libPostfix; string platform; + string libSearchPattern; if (Target.Platform == UnrealTargetPlatform.Win64) { - platform = "Windows-x64"; - libPostfix = ".lib"; - libPrefix = ""; + platform = "Windows-AMD64-"; + libSearchPattern = "*.lib"; } else if (Target.Platform == UnrealTargetPlatform.Mac) { - platform = "Darwin-x64"; - libPostfix = ".a"; - libPrefix = "lib"; + platform = "Darwin-universal-"; + libSearchPattern = "lib*.a"; } else if (Target.Platform == UnrealTargetPlatform.Android) { - platform = "Android-xaarch64"; - libPostfix = ".a"; - libPrefix = "lib"; + platform = "Android-aarch64-"; + libSearchPattern = "lib*.a"; } else if (Target.Platform == UnrealTargetPlatform.Linux) { - platform = "Linux-x64"; - libPostfix = ".a"; - libPrefix = "lib"; + platform = "Linux-x86_64-"; + libSearchPattern = "lib*.a"; } else if(Target.Platform == UnrealTargetPlatform.IOS) { - platform = "iOS-xarm64"; - libPostfix = ".a"; - libPrefix = "lib"; - } - else { - platform = "Unknown"; - libPostfix = ".Unknown"; - libPrefix = "Unknown"; - } - - string libPath = Path.Combine(ModuleDirectory, "../ThirdParty/lib/" + platform); - - string releasePostfix = ""; - string debugPostfix = "d"; - - bool preferDebug = (Target.Configuration == UnrealTargetConfiguration.Debug || Target.Configuration == UnrealTargetConfiguration.DebugGame); - string postfix = preferDebug ? debugPostfix : releasePostfix; - - string[] libs = new string[] - { - "async++", - "Cesium3DTiles", - "Cesium3DTilesContent", - "Cesium3DTilesReader", - "Cesium3DTilesSelection", - "CesiumAsync", - "CesiumIonClient", - "CesiumGeometry", - "CesiumGeospatial", - "CesiumGltfReader", - "CesiumGltfContent", - "CesiumGltf", - "CesiumJsonReader", - "CesiumRasterOverlays", - "CesiumQuantizedMeshTerrain", - "CesiumUtility", - "csprng", - "draco", - "ktx", - //"MikkTSpace", - "meshoptimizer", - "modp_b64", - "s2geometry", - "spdlog", - "sqlite3", - "tinyxml2", - "turbojpeg", - "uriparser", - "webpdecoder", - }; - - // Use our own copy of MikkTSpace on Android. - if (Target.Platform == UnrealTargetPlatform.Android || Target.Platform == UnrealTargetPlatform.IOS) - { - libs = libs.Concat(new string[] { "MikkTSpace" }).ToArray(); - PrivateIncludePaths.Add(Path.Combine(ModuleDirectory, "../ThirdParty/include/mikktspace")); - } - - if (Target.Platform == UnrealTargetPlatform.Win64) - { - libs = libs.Concat(new string[] { "tidy_static", "zlibstatic" }).ToArray(); + platform = "iOS-ARM64-"; + libSearchPattern = "lib*.a"; } else { - libs = libs.Concat(new string[] { "tidy", "z" }).ToArray(); + throw new InvalidOperationException("Cesium for Unreal does not support this platform."); } - if (preferDebug) + string libPathBase = Path.Combine(ModuleDirectory, "../ThirdParty/lib/" + platform); + string libPathDebug = libPathBase + "Debug"; + string libPathRelease = libPathBase + "Release"; + + bool useDebug = false; + if (Target.Configuration == UnrealTargetConfiguration.Debug || Target.Configuration == UnrealTargetConfiguration.DebugGame) { - // We prefer Debug, but might still use Release if that's all that's available. - foreach (string lib in libs) + if (Directory.Exists(libPathDebug)) { - string debugPath = Path.Combine(libPath, libPrefix + lib + debugPostfix + libPostfix); - if (!File.Exists(debugPath)) - { - Console.WriteLine("Using release build of cesium-native because a debug build is not available."); - preferDebug = false; - postfix = releasePostfix; - break; - } + useDebug = true; } } - PublicAdditionalLibraries.AddRange(libs.Select(lib => Path.Combine(libPath, libPrefix + lib + postfix + libPostfix))); + string libPath = useDebug ? libPathDebug : libPathRelease; + + string[] allLibs = Directory.Exists(libPath) ? Directory.GetFiles(libPath, libSearchPattern) : new string[0]; + + PublicAdditionalLibraries.AddRange(allLibs); PublicDependencyModuleNames.AddRange( new string[] @@ -156,16 +90,21 @@ public CesiumRuntime(ReadOnlyTargetRules Target) : base(Target) "SunPosition", "DeveloperSettings", "UMG", - "Renderer" + "Renderer", + "OpenSSL" } ); - // Use UE's MikkTSpace on non-Android - if (Target.Platform != UnrealTargetPlatform.Android) + // Use UE's MikkTSpace on most platforms, except Android and iOS. + // On those platforms, UE's isn't available, so we use our own. + if (Target.Platform != UnrealTargetPlatform.Android && Target.Platform != UnrealTargetPlatform.IOS) { PrivateDependencyModuleNames.Add("MikkTSpace"); } - + else + { + PrivateIncludePaths.Add(Path.Combine(ModuleDirectory, "../ThirdParty/include/mikktspace")); + } PublicDefinitions.AddRange( new string[] @@ -174,9 +113,13 @@ public CesiumRuntime(ReadOnlyTargetRules Target) : base(Target) "LIBASYNC_STATIC", "GLM_FORCE_XYZW_ONLY", "GLM_FORCE_EXPLICIT_CTOR", - "GLM_FORCE_SIZE_T_LENGTH", + "GLM_ENABLE_EXPERIMENTAL", "TIDY_STATIC", - "URI_STATIC_BUILD" + "URI_STATIC_BUILD", + "SWL_VARIANT_NO_CONSTEXPR_EMPLACE", + // Define to record the state of every tile, every frame, to a SQLite database. + // The database will be found in [Project Dir]/Saved/CesiumDebugTileStateDatabase. + // "CESIUM_DEBUG_TILE_STATES", } ); @@ -203,14 +146,11 @@ public CesiumRuntime(ReadOnlyTargetRules Target) : base(Target) } ); + ShadowVariableWarningLevel = WarningLevel.Off; + IncludeOrderVersion = EngineIncludeOrderVersion.Unreal5_2; PCHUsage = PCHUsageMode.UseExplicitOrSharedPCHs; - PrivatePCHHeaderFile = "Private/PCH.h"; -#if UE_5_4_OR_LATER CppStandard = CppStandardVersion.Cpp20; -#else - CppStandard = CppStandardVersion.Cpp17; -#endif bEnableExceptions = true; } } diff --git a/Source/CesiumRuntime/Private/Cesium3DTileset.cpp b/Source/CesiumRuntime/Private/Cesium3DTileset.cpp index 26ec2cb82..7e6618583 100644 --- a/Source/CesiumRuntime/Private/Cesium3DTileset.cpp +++ b/Source/CesiumRuntime/Private/Cesium3DTileset.cpp @@ -4,34 +4,33 @@ #include "Async/Async.h" #include "Camera/CameraTypes.h" #include "Camera/PlayerCameraManager.h" -#include "Cesium3DTilesSelection/IPrepareRendererResources.h" +#include "Cesium3DTilesSelection/EllipsoidTilesetLoader.h" #include "Cesium3DTilesSelection/Tile.h" #include "Cesium3DTilesSelection/TilesetLoadFailureDetails.h" #include "Cesium3DTilesSelection/TilesetOptions.h" +#include "Cesium3DTilesSelection/TilesetSharedAssetSystem.h" #include "Cesium3DTilesetLoadFailureDetails.h" #include "Cesium3DTilesetRoot.h" #include "CesiumActors.h" +#include "CesiumAsync/SharedAssetDepot.h" #include "CesiumBoundingVolumeComponent.h" #include "CesiumCamera.h" #include "CesiumCameraManager.h" #include "CesiumCommon.h" #include "CesiumCustomVersion.h" #include "CesiumGeospatial/GlobeTransforms.h" -#include "CesiumGltf/ImageCesium.h" +#include "CesiumGltf/ImageAsset.h" #include "CesiumGltf/Ktx2TranscodeTargets.h" #include "CesiumGltfComponent.h" #include "CesiumGltfPointsSceneProxyUpdater.h" #include "CesiumGltfPrimitiveComponent.h" #include "CesiumIonClient/Connection.h" -#include "CesiumLifetime.h" #include "CesiumRasterOverlay.h" #include "CesiumRuntime.h" #include "CesiumRuntimeSettings.h" -#include "CesiumTextureUtility.h" #include "CesiumTileExcluder.h" #include "CesiumViewExtension.h" #include "Components/SceneCaptureComponent2D.h" -#include "CreateGltfOptions.h" #include "Engine/Engine.h" #include "Engine/LocalPlayer.h" #include "Engine/SceneCapture2D.h" @@ -47,11 +46,17 @@ #include "Math/UnrealMathUtility.h" #include "PixelFormat.h" #include "StereoRendering.h" +#include "UnrealPrepareRendererResources.h" #include "VecMath.h" #include #include #include +#ifdef CESIUM_DEBUG_TILE_STATES +#include "HAL/PlatformFileManager.h" +#include +#endif + FCesium3DTilesetLoadFailure OnCesium3DTilesetLoadFailure{}; #if WITH_EDITOR @@ -73,6 +78,10 @@ ACesium3DTileset::ACesium3DTileset() _pTileset(nullptr), +#ifdef CESIUM_DEBUG_TILE_STATES + _pStateDebug(nullptr), +#endif + _lastTilesRendered(0), _lastWorkerThreadTileLoadQueueLength(0), _lastMainThreadTileLoadQueueLength(0), @@ -90,7 +99,6 @@ ACesium3DTileset::ACesium3DTileset() _beforeMovieUseLodTransitions{true}, _tilesetsBeingDestroyed(0) { - PrimaryActorTick.bCanEverTick = true; PrimaryActorTick.TickGroup = ETickingGroup::TG_PostUpdateWork; @@ -105,10 +113,6 @@ ACesium3DTileset::ACesium3DTileset() this->Root = this->RootComponent; PlatformName = UGameplayStatics::GetPlatformName(); - -#if WITH_EDITOR - bIsMac = PlatformName == TEXT("Mac"); -#endif } ACesium3DTileset::~ACesium3DTileset() { this->DestroyTileset(); } @@ -125,6 +129,90 @@ void ACesium3DTileset::SetMobility(EComponentMobility::Type NewMobility) { } } +void ACesium3DTileset::SampleHeightMostDetailed( + const TArray& LongitudeLatitudeHeightArray, + FCesiumSampleHeightMostDetailedCallback OnHeightsSampled) { + // It's possible to call this function before a Tick happens, so make sure + // that the necessary variables are resolved. + this->ResolveGeoreference(); + this->ResolveCameraManager(); + this->ResolveCreditSystem(); + + if (this->_pTileset == nullptr) { + this->LoadTileset(); + } + + std::vector positions; + positions.reserve(LongitudeLatitudeHeightArray.Num()); + + for (const FVector& position : LongitudeLatitudeHeightArray) { + positions.emplace_back(CesiumGeospatial::Cartographic::fromDegrees( + position.X, + position.Y, + position.Z)); + } + + auto sampleHeights = [this, &positions]() mutable { + if (this->_pTileset) { + return this->_pTileset->sampleHeightMostDetailed(positions) + .catchImmediately([positions = std::move(positions)]( + std::exception&& exception) mutable { + std::vector sampleSuccess(positions.size(), false); + return Cesium3DTilesSelection::SampleHeightResult{ + std::move(positions), + std::move(sampleSuccess), + {exception.what()}}; + }); + } else { + std::vector sampleSuccess(positions.size(), false); + return getAsyncSystem().createResolvedFuture( + Cesium3DTilesSelection::SampleHeightResult{ + std::move(positions), + std::move(sampleSuccess), + {"Could not sample heights from tileset because it has not " + "been created."}}); + } + }; + + sampleHeights().thenImmediately( + [this, OnHeightsSampled = std::move(OnHeightsSampled)]( + Cesium3DTilesSelection::SampleHeightResult&& result) { + if (!IsValid(this)) + return; + + check(result.positions.size() == result.sampleSuccess.size()); + + // This should do nothing, but will prevent undefined behavior if + // the array sizes are unexpectedly different. + result.sampleSuccess.resize(result.positions.size(), false); + + TArray sampleHeightResults; + sampleHeightResults.Reserve(result.positions.size()); + + for (size_t i = 0; i < result.positions.size(); ++i) { + const CesiumGeospatial::Cartographic& position = result.positions[i]; + + FCesiumSampleHeightResult unrealResult; + unrealResult.LongitudeLatitudeHeight = FVector( + CesiumUtility::Math::radiansToDegrees(position.longitude), + CesiumUtility::Math::radiansToDegrees(position.latitude), + position.height); + unrealResult.SampleSuccess = result.sampleSuccess[i]; + + sampleHeightResults.Emplace(std::move(unrealResult)); + } + + TArray warnings; + warnings.Reserve(result.warnings.size()); + + for (const std::string& warning : result.warnings) { + warnings.Emplace(UTF8_TO_TCHAR(warning.c_str())); + } + + OnHeightsSampled.ExecuteIfBound(this, sampleHeightResults, warnings); + }); +} + void ACesium3DTileset::SetGeoreference( TSoftObjectPtr NewGeoreference) { this->Georeference = NewGeoreference; @@ -149,6 +237,9 @@ ACesiumGeoreference* ACesium3DTileset::ResolveGeoreference() { this->ResolvedGeoreference->OnGeoreferenceUpdated.AddUniqueDynamic( pRoot, &UCesium3DTilesetRoot::HandleGeoreferenceUpdated); + this->ResolvedGeoreference->OnEllipsoidChanged.AddUniqueDynamic( + this, + &ACesium3DTileset::HandleOnGeoreferenceEllipsoidChanged); // Update existing tile positions, if any. pRoot->HandleGeoreferenceUpdated(); @@ -286,6 +377,35 @@ void ACesium3DTileset::SetTilesetSource(ETilesetSource InSource) { } } +namespace { + +bool MapsAreEqual( + const TMap& Lhs, + const TMap& Rhs) { + if (Lhs.Num() != Rhs.Num()) { + return false; + } + + for (const auto& [Key, Value] : Lhs) { + const FString* RhsVal = Rhs.Find(Key); + if (!RhsVal || *RhsVal != Value) { + return false; + } + } + + return true; +} + +} // namespace + +void ACesium3DTileset::SetRequestHeaders( + const TMap& InRequestHeaders) { + if (!MapsAreEqual(InRequestHeaders, this->RequestHeaders)) { + this->DestroyTileset(); + this->RequestHeaders = InRequestHeaders; + } +} + void ACesium3DTileset::SetUrl(const FString& InUrl) { if (InUrl != this->Url) { if (this->TilesetSource == ETilesetSource::FromUrl) { @@ -463,7 +583,6 @@ void ACesium3DTileset::PauseMovieSequencer() { this->StopMovieSequencer(); } #if WITH_EDITOR void ACesium3DTileset::OnFocusEditorViewportOnThis() { - UE_LOG( LogCesium, Verbose, @@ -471,10 +590,14 @@ void ACesium3DTileset::OnFocusEditorViewportOnThis() { *this->GetName()); struct CalculateECEFCameraPosition { + const CesiumGeospatial::Ellipsoid& ellipsoid; + glm::dvec3 operator()(const CesiumGeometry::BoundingSphere& sphere) { const glm::dvec3& center = sphere.getCenter(); glm::dmat4 ENU = - CesiumGeospatial::GlobeTransforms::eastNorthUpToFixedFrame(center); + CesiumGeospatial::GlobeTransforms::eastNorthUpToFixedFrame( + center, + ellipsoid); glm::dvec3 offset = sphere.getRadius() * glm::normalize( @@ -487,7 +610,9 @@ void ACesium3DTileset::OnFocusEditorViewportOnThis() { operator()(const CesiumGeometry::OrientedBoundingBox& orientedBoundingBox) { const glm::dvec3& center = orientedBoundingBox.getCenter(); glm::dmat4 ENU = - CesiumGeospatial::GlobeTransforms::eastNorthUpToFixedFrame(center); + CesiumGeospatial::GlobeTransforms::eastNorthUpToFixedFrame( + center, + ellipsoid); const glm::dmat3& halfAxes = orientedBoundingBox.getHalfAxes(); glm::dvec3 offset = glm::length(halfAxes[0] + halfAxes[1] + halfAxes[2]) * @@ -525,9 +650,12 @@ void ACesium3DTileset::OnFocusEditorViewportOnThis() { ACesiumGeoreference* pGeoreference = this->ResolveGeoreference(); + const CesiumGeospatial::Ellipsoid& ellipsoid = + pGeoreference->GetEllipsoid()->GetNativeEllipsoid(); + // calculate unreal camera position glm::dvec3 ecefCameraPosition = - std::visit(CalculateECEFCameraPosition{}, boundingVolume); + std::visit(CalculateECEFCameraPosition{ellipsoid}, boundingVolume); FVector unrealCameraPosition = pGeoreference->TransformEarthCenteredEarthFixedPositionToUnreal( VecMath::createVector(ecefCameraPosition)); @@ -575,7 +703,6 @@ ACesium3DTileset::GetCesiumTilesetToUnrealRelativeWorldTransform() const { } void ACesium3DTileset::UpdateTransformFromCesium() { - const glm::dmat4& CesiumToUnreal = this->GetCesiumTilesetToUnrealRelativeWorldTransform(); TArray gltfComponents; @@ -591,6 +718,13 @@ void ACesium3DTileset::UpdateTransformFromCesium() { } } +void ACesium3DTileset::HandleOnGeoreferenceEllipsoidChanged( + UCesiumEllipsoid* OldEllipsoid, + UCesiumEllipsoid* NewEllpisoid) { + UE_LOG(LogCesium, Warning, TEXT("Ellipsoid changed")); + this->RefreshTileset(); +} + // Called when the game starts or when spawned void ACesium3DTileset::BeginPlay() { Super::BeginPlay(); @@ -672,231 +806,6 @@ void ACesium3DTileset::NotifyHit( // std::cout << "Hit face index 2: " << detailedHit.FaceIndex << std::endl; } -class UnrealResourcePreparer - : public Cesium3DTilesSelection::IPrepareRendererResources { -public: - UnrealResourcePreparer(ACesium3DTileset* pActor) : _pActor(pActor) {} - - virtual CesiumAsync::Future< - Cesium3DTilesSelection::TileLoadResultAndRenderResources> - prepareInLoadThread( - const CesiumAsync::AsyncSystem& asyncSystem, - Cesium3DTilesSelection::TileLoadResult&& tileLoadResult, - const glm::dmat4& transform, - const std::any& rendererOptions) override { - CesiumGltf::Model* pModel = - std::get_if(&tileLoadResult.contentKind); - if (!pModel) - return asyncSystem.createResolvedFuture( - Cesium3DTilesSelection::TileLoadResultAndRenderResources{ - std::move(tileLoadResult), - nullptr}); - - CreateGltfOptions::CreateModelOptions options; - options.pModel = pModel; - options.alwaysIncludeTangents = this->_pActor->GetAlwaysIncludeTangents(); - options.createPhysicsMeshes = this->_pActor->GetCreatePhysicsMeshes(); - - options.ignoreKhrMaterialsUnlit = - this->_pActor->GetIgnoreKhrMaterialsUnlit(); - - if (this->_pActor->_featuresMetadataDescription) { - options.pFeaturesMetadataDescription = - &(*this->_pActor->_featuresMetadataDescription); - } else if (this->_pActor->_metadataDescription_DEPRECATED) { - options.pEncodedMetadataDescription_DEPRECATED = - &(*this->_pActor->_metadataDescription_DEPRECATED); - } - - TUniquePtr pHalf = - UCesiumGltfComponent::CreateOffGameThread(transform, options); - - return asyncSystem.createResolvedFuture( - Cesium3DTilesSelection::TileLoadResultAndRenderResources{ - std::move(tileLoadResult), - pHalf.Release()}); - } - - virtual void* prepareInMainThread( - Cesium3DTilesSelection::Tile& tile, - void* pLoadThreadResult) override { - Cesium3DTilesSelection::TileContent& content = tile.getContent(); - if (content.isRenderContent()) { - TUniquePtr pHalf( - reinterpret_cast( - pLoadThreadResult)); - Cesium3DTilesSelection::TileRenderContent& renderContent = - *content.getRenderContent(); - return UCesiumGltfComponent::CreateOnGameThread( - renderContent.getModel(), - this->_pActor, - std::move(pHalf), - _pActor->GetCesiumTilesetToUnrealRelativeWorldTransform(), - this->_pActor->GetMaterial(), - this->_pActor->GetTranslucentMaterial(), - this->_pActor->GetWaterMaterial(), - this->_pActor->GetCustomDepthParameters(), - tile, - this->_pActor->GetCreateNavCollision()); - } - // UE_LOG(LogCesium, VeryVerbose, TEXT("No content for tile")); - return nullptr; - } - - virtual void free( - Cesium3DTilesSelection::Tile& tile, - void* pLoadThreadResult, - void* pMainThreadResult) noexcept override { - if (pLoadThreadResult) { - UCesiumGltfComponent::HalfConstructed* pHalf = - reinterpret_cast( - pLoadThreadResult); - delete pHalf; - } else if (pMainThreadResult) { - UCesiumGltfComponent* pGltf = - reinterpret_cast(pMainThreadResult); - CesiumLifetime::destroyComponentRecursively(pGltf); - } - } - - virtual void* prepareRasterInLoadThread( - CesiumGltf::ImageCesium& image, - const std::any& rendererOptions) override { - auto ppOptions = - std::any_cast(&rendererOptions); - check(ppOptions != nullptr && *ppOptions != nullptr); - if (ppOptions == nullptr || *ppOptions == nullptr) { - return nullptr; - } - - auto pOptions = *ppOptions; - - if (pOptions->useMipmaps) { - std::optional errorMessage = - CesiumGltfReader::GltfReader::generateMipMaps(image); - if (errorMessage) { - UE_LOG( - LogCesium, - Warning, - TEXT("%s"), - UTF8_TO_TCHAR(errorMessage->c_str())); - } - } - - auto texture = CesiumTextureUtility::loadTextureAnyThreadPart( - image, - TextureAddress::TA_Clamp, - TextureAddress::TA_Clamp, - pOptions->filter, - pOptions->useMipmaps, - pOptions->group, - // TODO: sRGB should probably be configurable on the raster overlay. - true, - std::nullopt, - nullptr); - return texture.Release(); - } - - virtual void* prepareRasterInMainThread( - CesiumRasterOverlays::RasterOverlayTile& rasterTile, - void* pLoadThreadResult) override { - - TUniquePtr pLoadedTexture{ - static_cast( - pLoadThreadResult)}; - - if (!pLoadedTexture) { - return nullptr; - } - - CesiumUtility::IntrusivePointer< - CesiumTextureUtility::ReferenceCountedUnrealTexture> - pTexture = CesiumTextureUtility::loadTextureGameThreadPart( - pLoadedTexture.Get()); - if (!pTexture) { - return nullptr; - } - - // Don't let this ReferenceCountedUnrealTexture be destroyed when the - // intrusive pointer goes out of scope. - pTexture->addReference(); - return pTexture.get(); - } - - virtual void freeRaster( - const CesiumRasterOverlays::RasterOverlayTile& rasterTile, - void* pLoadThreadResult, - void* pMainThreadResult) noexcept override { - if (pLoadThreadResult) { - CesiumTextureUtility::LoadedTextureResult* pLoadedTexture = - static_cast( - pLoadThreadResult); - delete pLoadedTexture; - } - - if (pMainThreadResult) { - CesiumTextureUtility::ReferenceCountedUnrealTexture* pTexture = - static_cast( - pMainThreadResult); - pTexture->releaseReference(); - } - } - - virtual void attachRasterInMainThread( - const Cesium3DTilesSelection::Tile& tile, - int32_t overlayTextureCoordinateID, - const CesiumRasterOverlays::RasterOverlayTile& rasterTile, - void* pMainThreadRendererResources, - const glm::dvec2& translation, - const glm::dvec2& scale) override { - const Cesium3DTilesSelection::TileContent& content = tile.getContent(); - const Cesium3DTilesSelection::TileRenderContent* pRenderContent = - content.getRenderContent(); - if (pRenderContent) { - UCesiumGltfComponent* pGltfContent = - reinterpret_cast( - pRenderContent->getRenderResources()); - if (pGltfContent) { - pGltfContent->AttachRasterTile( - tile, - rasterTile, - static_cast( - pMainThreadRendererResources) - ->getUnrealTexture(), - translation, - scale, - overlayTextureCoordinateID); - } - } - } - - virtual void detachRasterInMainThread( - const Cesium3DTilesSelection::Tile& tile, - int32_t overlayTextureCoordinateID, - const CesiumRasterOverlays::RasterOverlayTile& rasterTile, - void* pMainThreadRendererResources) noexcept override { - const Cesium3DTilesSelection::TileContent& content = tile.getContent(); - const Cesium3DTilesSelection::TileRenderContent* pRenderContent = - content.getRenderContent(); - if (pRenderContent) { - UCesiumGltfComponent* pGltfContent = - reinterpret_cast( - pRenderContent->getRenderResources()); - if (pGltfContent) { - pGltfContent->DetachRasterTile( - tile, - rasterTile, - static_cast( - pMainThreadRendererResources) - ->getUnrealTexture()); - } - } - } - -private: - ACesium3DTileset* _pActor; -}; - void ACesium3DTileset::UpdateLoadStatus() { TRACE_CPUPROFILER_EVENT_SCOPE(Cesium::UpdateLoadStatus) @@ -939,7 +848,6 @@ void ACesium3DTileset::UpdateLoadStatus() { } namespace { - const TSharedRef& getCesiumViewExtension() { static TSharedRef @@ -947,7 +855,6 @@ getCesiumViewExtension() { GEngine->ViewExtensions->NewExtension(); return cesiumViewExtension; } - } // namespace void ACesium3DTileset::LoadTileset() { @@ -1052,11 +959,14 @@ void ACesium3DTileset::LoadTileset() { this->BoundingVolumePoolComponent->initPool(this->OcclusionPoolSize); } + CesiumGeospatial::Ellipsoid pNativeEllipsoid = + this->ResolveGeoreference()->GetEllipsoid()->GetNativeEllipsoid(); + ACesiumCreditSystem* pCreditSystem = this->ResolvedCreditSystem; Cesium3DTilesSelection::TilesetExternals externals{ pAssetAccessor, - std::make_shared(this), + std::make_shared(this), asyncSystem, pCreditSystem ? pCreditSystem->GetExternalCreditSystem() : nullptr, spdlog::default_logger(), @@ -1072,6 +982,8 @@ void ACesium3DTileset::LoadTileset() { Cesium3DTilesSelection::TilesetOptions options; + options.ellipsoid = pNativeEllipsoid; + options.enableOcclusionCulling = GetDefault() ->EnableExperimentalOcclusionCullingFeature && @@ -1150,7 +1062,23 @@ void ACesium3DTileset::LoadTileset() { options.contentOptions.applyTextureTransform = false; + options.requestHeaders.reserve(this->RequestHeaders.Num()); + + for (const auto& [Key, Value] : this->RequestHeaders) { + options.requestHeaders.emplace_back(CesiumAsync::IAssetAccessor::THeader{ + TCHAR_TO_UTF8(*Key), + TCHAR_TO_UTF8(*Value)}); + } + switch (this->TilesetSource) { + case ETilesetSource::FromEllipsoid: + UE_LOG(LogCesium, Log, TEXT("Loading tileset from ellipsoid")); + this->_pTileset = TUniquePtr( + Cesium3DTilesSelection::EllipsoidTilesetLoader::createTileset( + externals, + options) + .release()); + break; case ETilesetSource::FromUrl: UE_LOG(LogCesium, Log, TEXT("Loading tileset from URL %s"), *this->Url); this->_pTileset = MakeUnique( @@ -1190,6 +1118,23 @@ void ACesium3DTileset::LoadTileset() { break; } +#ifdef CESIUM_DEBUG_TILE_STATES + FString dbDirectory = FPaths::Combine( + FPaths::ProjectSavedDir(), + TEXT("CesiumDebugTileStateDatabase")); + + IPlatformFile& PlatformFile = FPlatformFileManager::Get().GetPlatformFile(); + if (!PlatformFile.DirectoryExists(*dbDirectory)) { + PlatformFile.CreateDirectory(*dbDirectory); + } + + FString dbFile = + FPaths::Combine(dbDirectory, this->GetName() + TEXT(".sqlite")); + this->_pStateDebug = + MakeUnique( + TCHAR_TO_UTF8(*dbFile)); +#endif + for (UCesiumRasterOverlay* pOverlay : rasterOverlays) { if (pOverlay->IsActive()) { pOverlay->AddToTileset(); @@ -1203,6 +1148,9 @@ void ACesium3DTileset::LoadTileset() { } switch (this->TilesetSource) { + case ETilesetSource::FromEllipsoid: + UE_LOG(LogCesium, Log, TEXT("Loading tileset from ellipsoid done")); + break; case ETilesetSource::FromUrl: UE_LOG( LogCesium, @@ -1241,6 +1189,9 @@ void ACesium3DTileset::DestroyTileset() { } switch (this->TilesetSource) { + case ETilesetSource::FromEllipsoid: + UE_LOG(LogCesium, Verbose, TEXT("Destroying tileset from ellipsoid")); + break; case ETilesetSource::FromUrl: UE_LOG( LogCesium, @@ -1291,6 +1242,9 @@ void ACesium3DTileset::DestroyTileset() { this->_pTileset.Reset(); switch (this->TilesetSource) { + case ETilesetSource::FromEllipsoid: + UE_LOG(LogCesium, Verbose, TEXT("Destroying tileset from ellipsoid done")); + break; case ETilesetSource::FromUrl: UE_LOG( LogCesium, @@ -1367,7 +1321,6 @@ std::vector ACesium3DTileset::GetPlayerCameras() const { for (auto playerControllerIt = pWorld->GetPlayerControllerIterator(); playerControllerIt; playerControllerIt++) { - const TWeakObjectPtr pPlayerController = *playerControllerIt; if (pPlayerController == nullptr) { @@ -1545,8 +1498,8 @@ std::vector ACesium3DTileset::GetSceneCaptures() const { /*static*/ Cesium3DTilesSelection::ViewState ACesium3DTileset::CreateViewStateFromViewParameters( const FCesiumCamera& camera, - const glm::dmat4& unrealWorldToTileset) { - + const glm::dmat4& unrealWorldToTileset, + UCesiumEllipsoid* ellipsoid) { double horizontalFieldOfView = FMath::DegreesToRadians(camera.FieldOfViewDegrees); @@ -1595,7 +1548,8 @@ ACesium3DTileset::CreateViewStateFromViewParameters( tilesetCameraUp, size, horizontalFieldOfView, - verticalFieldOfView); + verticalFieldOfView, + ellipsoid->GetNativeEllipsoid()); } #if WITH_EDITOR @@ -1678,6 +1632,34 @@ bool ACesium3DTileset::ShouldTickIfViewportsOnly() const { } namespace { +template +void forEachRenderableTile(const auto& tiles, Func&& f) { + for (Cesium3DTilesSelection::Tile* pTile : tiles) { + if (!pTile || + pTile->getState() != Cesium3DTilesSelection::TileLoadState::Done) { + continue; + } + + const Cesium3DTilesSelection::TileContent& content = pTile->getContent(); + const Cesium3DTilesSelection::TileRenderContent* pRenderContent = + content.getRenderContent(); + if (!pRenderContent) { + continue; + } + + UCesiumGltfComponent* Gltf = static_cast( + pRenderContent->getRenderResources()); + if (!Gltf) { + // When a tile does not have render resources (i.e. a glTF), then + // the resources either have not yet been loaded or prepared, + // or the tile is from an external tileset and does not directly + // own renderable content. In both cases, the tile is ignored here. + continue; + } + + f(pTile, Gltf); + } +} void removeVisibleTilesFromList( std::vector& list, @@ -1705,31 +1687,20 @@ void removeVisibleTilesFromList( */ void hideTiles(const std::vector& tiles) { TRACE_CPUPROFILER_EVENT_SCOPE(Cesium::HideTiles) - for (Cesium3DTilesSelection::Tile* pTile : tiles) { - if (pTile->getState() != Cesium3DTilesSelection::TileLoadState::Done) { - continue; - } - - const Cesium3DTilesSelection::TileContent& content = pTile->getContent(); - const Cesium3DTilesSelection::TileRenderContent* pRenderContent = - content.getRenderContent(); - if (!pRenderContent) { - continue; - } - - UCesiumGltfComponent* Gltf = static_cast( - pRenderContent->getRenderResources()); - if (Gltf && Gltf->IsVisible()) { - TRACE_CPUPROFILER_EVENT_SCOPE(Cesium::SetVisibilityFalse) - Gltf->SetVisibility(false, true); - } else { - // TODO: why is this happening? - UE_LOG( - LogCesium, - Verbose, - TEXT("Tile to no longer render does not have a visible Gltf")); - } - } + forEachRenderableTile( + tiles, + [](Cesium3DTilesSelection::Tile* /*pTile*/, UCesiumGltfComponent* pGltf) { + if (pGltf->IsVisible()) { + TRACE_CPUPROFILER_EVENT_SCOPE(Cesium::SetVisibilityFalse) + pGltf->SetVisibility(false, true); + } else { + // TODO: why is this happening? + UE_LOG( + LogCesium, + Verbose, + TEXT("Tile to no longer render does not have a visible Gltf")); + } + }); } /** @@ -1739,25 +1710,12 @@ void hideTiles(const std::vector& tiles) { void removeCollisionForTiles( const std::unordered_set& tiles) { TRACE_CPUPROFILER_EVENT_SCOPE(Cesium::RemoveCollisionForTiles) - for (Cesium3DTilesSelection::Tile* pTile : tiles) { - if (pTile->getState() != Cesium3DTilesSelection::TileLoadState::Done) { - continue; - } - - const Cesium3DTilesSelection::TileContent& content = pTile->getContent(); - const Cesium3DTilesSelection::TileRenderContent* pRenderContent = - content.getRenderContent(); - if (!pRenderContent) { - continue; - } - - UCesiumGltfComponent* Gltf = static_cast( - pRenderContent->getRenderResources()); - if (Gltf) { - TRACE_CPUPROFILER_EVENT_SCOPE(Cesium::SetCollisionDisabled) - Gltf->SetCollisionEnabled(ECollisionEnabled::NoCollision); - } - } + forEachRenderableTile( + tiles, + [](Cesium3DTilesSelection::Tile* /*pTile*/, UCesiumGltfComponent* pGltf) { + TRACE_CPUPROFILER_EVENT_SCOPE(Cesium::SetCollisionDisabled) + pGltf->SetCollisionEnabled(ECollisionEnabled::NoCollision); + }); } /** @@ -1828,7 +1786,45 @@ void ACesium3DTileset::updateLastViewUpdateResultState( const Cesium3DTilesSelection::ViewUpdateResult& result) { TRACE_CPUPROFILER_EVENT_SCOPE(Cesium::updateLastViewUpdateResultState) - if (!this->LogSelectionStats) { + if (this->DrawTileInfo) { + const UWorld* World = GetWorld(); + check(World); + + const TSoftObjectPtr Georeference = + ResolveGeoreference(); + check(Georeference); + + for (Cesium3DTilesSelection::Tile* tile : result.tilesToRenderThisFrame) { + CesiumGeometry::OrientedBoundingBox obb = + Cesium3DTilesSelection::getOrientedBoundingBoxFromBoundingVolume( + tile->getBoundingVolume(), + Georeference->GetEllipsoid()->GetNativeEllipsoid()); + + FVector unrealCenter = + Georeference->TransformEarthCenteredEarthFixedPositionToUnreal( + VecMath::createVector(obb.getCenter())); + + FString text = FString::Printf( + TEXT("ID %s (%p)"), + UTF8_TO_TCHAR( + Cesium3DTilesSelection::TileIdUtilities::createTileIdString( + tile->getTileID()) + .c_str()), + tile); + + DrawDebugString(World, unrealCenter, text, nullptr, FColor::Red, 0, true); + } + } + +#ifdef CESIUM_DEBUG_TILE_STATES + if (this->_pStateDebug && GetWorld()->IsPlayInEditor()) { + this->_pStateDebug->recordAllTileStates( + result.frameNumber, + *this->_pTileset); + } +#endif + + if (!this->LogSelectionStats && !this->LogSharedAssetStats) { return; } @@ -1844,7 +1840,6 @@ void ACesium3DTileset::updateLastViewUpdateResultState( result.tilesWaitingForOcclusionResults != this->_lastTilesWaitingForOcclusionResults || result.maxDepthVisited != this->_lastMaxDepthVisited) { - this->_lastTilesRendered = result.tilesToRenderThisFrame.size(); this->_lastWorkerThreadTileLoadQueueLength = result.workerThreadTileLoadQueueLength; @@ -1859,121 +1854,98 @@ void ACesium3DTileset::updateLastViewUpdateResultState( result.tilesWaitingForOcclusionResults; this->_lastMaxDepthVisited = result.maxDepthVisited; - UE_LOG( - LogCesium, - Display, - TEXT( - "%s: %d ms, Visited %d, Culled Visited %d, Rendered %d, Culled %d, Occluded %d, Waiting For Occlusion Results %d, Max Depth Visited: %d, Loading-Worker %d, Loading-Main %d, Loaded tiles %g%%"), - *this->GetName(), - (std::chrono::high_resolution_clock::now() - this->_startTime).count() / - 1000000, - result.tilesVisited, - result.culledTilesVisited, - result.tilesToRenderThisFrame.size(), - result.tilesCulled, - result.tilesOccluded, - result.tilesWaitingForOcclusionResults, - result.maxDepthVisited, - result.workerThreadTileLoadQueueLength, - result.mainThreadTileLoadQueueLength, - this->LoadProgress); + if (this->LogSelectionStats) { + UE_LOG( + LogCesium, + Display, + TEXT( + "%s: %d ms, Unreal Frame #%d, Tileset Frame: #%d, Visited %d, Culled Visited %d, Rendered %d, Culled %d, Occluded %d, Waiting For Occlusion Results %d, Max Depth Visited: %d, Loading-Worker %d, Loading-Main %d, Loaded tiles %g%%"), + *this->GetName(), + (std::chrono::high_resolution_clock::now() - this->_startTime) + .count() / + 1000000, + GFrameCounter, + result.frameNumber, + result.tilesVisited, + result.culledTilesVisited, + result.tilesToRenderThisFrame.size(), + result.tilesCulled, + result.tilesOccluded, + result.tilesWaitingForOcclusionResults, + result.maxDepthVisited, + result.workerThreadTileLoadQueueLength, + result.mainThreadTileLoadQueueLength, + this->LoadProgress); + } + + if (this->LogSharedAssetStats && this->_pTileset) { + const Cesium3DTilesSelection::TilesetSharedAssetSystem::ImageDepot& + imageDepot = *this->_pTileset->getSharedAssetSystem().pImage; + UE_LOG( + LogCesium, + Display, + TEXT( + "Images shared asset depot: %d distinct assets, %d inactive assets pending deletion (%d bytes)"), + imageDepot.getAssetCount(), + imageDepot.getInactiveAssetCount(), + imageDepot.getInactiveAssetTotalSizeBytes()); + } } } void ACesium3DTileset::showTilesToRender( const std::vector& tiles) { TRACE_CPUPROFILER_EVENT_SCOPE(Cesium::ShowTilesToRender) + forEachRenderableTile( + tiles, + [&RootComponent = this->RootComponent, + &BodyInstance = this->BodyInstance]( + Cesium3DTilesSelection::Tile* pTile, + UCesiumGltfComponent* pGltf) { + applyActorCollisionSettings(BodyInstance, pGltf); + + if (pGltf->GetAttachParent() == nullptr) { + // The AttachToComponent method is ridiculously complex, + // so print a warning if attaching fails for some reason + bool attached = pGltf->AttachToComponent( + RootComponent, + FAttachmentTransformRules::KeepRelativeTransform); + if (!attached) { + FString tileIdString( + Cesium3DTilesSelection::TileIdUtilities::createTileIdString( + pTile->getTileID()) + .c_str()); + UE_LOG( + LogCesium, + Warning, + TEXT("Tile %s could not be attached to root"), + *tileIdString); + } + } - for (Cesium3DTilesSelection::Tile* pTile : tiles) { - if (pTile->getState() != Cesium3DTilesSelection::TileLoadState::Done) { - continue; - } - - // That looks like some reeeally entertaining debug session...: - // const Cesium3DTilesSelection::TileID& id = pTile->getTileID(); - // const CesiumGeometry::QuadtreeTileID* pQuadtreeID = - // std::get_if(&id); if (!pQuadtreeID || - // pQuadtreeID->level != 14 || pQuadtreeID->x != 5503 || pQuadtreeID->y != - // 11626) { continue; - //} - - const Cesium3DTilesSelection::TileContent& content = pTile->getContent(); - const Cesium3DTilesSelection::TileRenderContent* pRenderContent = - content.getRenderContent(); - if (!pRenderContent) { - continue; - } - - UCesiumGltfComponent* Gltf = static_cast( - pRenderContent->getRenderResources()); - if (!Gltf) { - // When a tile does not have render resources (i.e. a glTF), then - // the resources either have not yet been loaded or prepared, - // or the tile is from an external tileset and does not directly - // own renderable content. In both cases, the tile is ignored here. - continue; - } - - applyActorCollisionSettings(BodyInstance, Gltf); - - if (Gltf->GetAttachParent() == nullptr) { - - // The AttachToComponent method is ridiculously complex, - // so print a warning if attaching fails for some reason - bool attached = Gltf->AttachToComponent( - this->RootComponent, - FAttachmentTransformRules::KeepRelativeTransform); - if (!attached) { - FString tileIdString( - Cesium3DTilesSelection::TileIdUtilities::createTileIdString( - pTile->getTileID()) - .c_str()); - UE_LOG( - LogCesium, - Warning, - TEXT("Tile %s could not be attached to root"), - *tileIdString); - } - } - - if (!Gltf->IsVisible()) { - TRACE_CPUPROFILER_EVENT_SCOPE(Cesium::SetVisibilityTrue) - Gltf->SetVisibility(true, true); - } + if (!pGltf->IsVisible()) { + TRACE_CPUPROFILER_EVENT_SCOPE(Cesium::SetVisibilityTrue) + pGltf->SetVisibility(true, true); + } - { - TRACE_CPUPROFILER_EVENT_SCOPE(Cesium::SetCollisionEnabled) - Gltf->SetCollisionEnabled(ECollisionEnabled::QueryAndPhysics); - } - } + { + TRACE_CPUPROFILER_EVENT_SCOPE(Cesium::SetCollisionEnabled) + pGltf->SetCollisionEnabled(ECollisionEnabled::QueryAndPhysics); + } + }); } -static void updateTileFade(Cesium3DTilesSelection::Tile* pTile, bool fadingIn) { - if (!pTile || !pTile->getContent().isRenderContent()) { - return; - } - - if (pTile->getState() != Cesium3DTilesSelection::TileLoadState::Done) { - return; - } - - const Cesium3DTilesSelection::TileContent& content = pTile->getContent(); - const Cesium3DTilesSelection::TileRenderContent* pRenderContent = - content.getRenderContent(); - if (!pRenderContent) { - return; - } - - UCesiumGltfComponent* pGltf = reinterpret_cast( - pRenderContent->getRenderResources()); - if (!pGltf) { - return; - } - - float percentage = - pTile->getContent().getRenderContent()->getLodTransitionFadePercentage(); - - pGltf->UpdateFade(percentage, fadingIn); +static void updateTileFades(const auto& tiles, bool fadingIn) { + forEachRenderableTile( + tiles, + [fadingIn]( + Cesium3DTilesSelection::Tile* pTile, + UCesiumGltfComponent* pGltf) { + float percentage = pTile->getContent() + .getRenderContent() + ->getLodTransitionFadePercentage(); + pGltf->UpdateFade(percentage, fadingIn); + }); } // Called every frame @@ -2025,9 +1997,6 @@ void ACesium3DTileset::Tick(float DeltaTime) { updateTilesetOptionsFromProperties(); std::vector cameras = this->GetCameras(); - if (cameras.empty()) { - return; - } glm::dmat4 ueTilesetToUeWorld = VecMath::createMatrix4D(this->GetActorTransform().ToMatrixWithScale()); @@ -2044,10 +2013,14 @@ void ACesium3DTileset::Tick(float DeltaTime) { return; } + UCesiumEllipsoid* ellipsoid = this->ResolveGeoreference()->GetEllipsoid(); + std::vector frustums; for (const FCesiumCamera& camera : cameras) { - frustums.push_back( - CreateViewStateFromViewParameters(camera, unrealWorldToCesiumTileset)); + frustums.push_back(CreateViewStateFromViewParameters( + camera, + unrealWorldToCesiumTileset, + ellipsoid)); } const Cesium3DTilesSelection::ViewUpdateResult* pResult; @@ -2082,15 +2055,8 @@ void ACesium3DTileset::Tick(float DeltaTime) { if (this->UseLodTransitions) { TRACE_CPUPROFILER_EVENT_SCOPE(Cesium::UpdateTileFades) - - for (Cesium3DTilesSelection::Tile* pTile : - pResult->tilesToRenderThisFrame) { - updateTileFade(pTile, true); - } - - for (Cesium3DTilesSelection::Tile* pTile : pResult->tilesFadingOut) { - updateTileFade(pTile, false); - } + updateTileFades(pResult->tilesToRenderThisFrame, true); + updateTileFades(pResult->tilesFadingOut, false); } this->UpdateLoadStatus(); @@ -2185,6 +2151,7 @@ void ACesium3DTileset::PostEditChangeProperty( GET_MEMBER_NAME_CHECKED(ACesium3DTileset, ShowCreditsOnScreen) || PropName == GET_MEMBER_NAME_CHECKED(ACesium3DTileset, Root) || PropName == GET_MEMBER_NAME_CHECKED(ACesium3DTileset, CesiumIonServer) || + PropName == GET_MEMBER_NAME_CHECKED(ACesium3DTileset, RequestHeaders) || // For properties nested in structs, GET_MEMBER_NAME_CHECKED will prefix // with the struct name, so just do a manual string comparison. PropNameAsString == TEXT("RenderCustomDepth") || @@ -2251,6 +2218,15 @@ void ACesium3DTileset::PostEditImport() { // Recreate the tileset on Paste. this->DestroyTileset(); } + +bool ACesium3DTileset::CanEditChange(const FProperty* InProperty) const { + if (InProperty->GetFName() == + GET_MEMBER_NAME_CHECKED(ACesium3DTileset, EnableWaterMask)) { + // Disable this option on Mac + return PlatformName != TEXT("Mac"); + } + return true; +} #endif void ACesium3DTileset::BeginDestroy() { diff --git a/Source/CesiumRuntime/Private/CesiumBingMapsRasterOverlay.cpp b/Source/CesiumRuntime/Private/CesiumBingMapsRasterOverlay.cpp index a538e8c69..bcc7c0046 100644 --- a/Source/CesiumRuntime/Private/CesiumBingMapsRasterOverlay.cpp +++ b/Source/CesiumRuntime/Private/CesiumBingMapsRasterOverlay.cpp @@ -43,6 +43,5 @@ UCesiumBingMapsRasterOverlay::CreateOverlay( TCHAR_TO_UTF8(*this->BingMapsKey), mapStyle, "", - CesiumGeospatial::Ellipsoid::WGS84, options); } diff --git a/Source/CesiumRuntime/Private/CesiumBoundingVolumeComponent.cpp b/Source/CesiumRuntime/Private/CesiumBoundingVolumeComponent.cpp index 7f517369d..dd262db00 100644 --- a/Source/CesiumRuntime/Private/CesiumBoundingVolumeComponent.cpp +++ b/Source/CesiumRuntime/Private/CesiumBoundingVolumeComponent.cpp @@ -120,8 +120,8 @@ void UCesiumBoundingVolumeComponent::UpdateOcclusion( } void UCesiumBoundingVolumeComponent::_updateTransform() { - const FTransform transform = FTransform( - VecMath::createMatrix(this->_cesiumToUnreal * this->_tileTransform)); + const FTransform transform = + VecMath::createTransform(this->_cesiumToUnreal * this->_tileTransform); this->SetRelativeTransform_Direct(transform); this->SetComponentToWorld(transform); diff --git a/Source/CesiumRuntime/Private/CesiumEllipsoid.cpp b/Source/CesiumRuntime/Private/CesiumEllipsoid.cpp new file mode 100644 index 000000000..c304940cc --- /dev/null +++ b/Source/CesiumRuntime/Private/CesiumEllipsoid.cpp @@ -0,0 +1,140 @@ +// Copyright 2020-2024 CesiumGS, Inc. and Contributors + +#include "CesiumEllipsoid.h" +#include "CesiumEllipsoidFunctions.h" +#include "CesiumGeoreference.h" +#include "CesiumRuntime.h" +#include "VecMath.h" + +#include "EngineUtils.h" +#include "MathUtil.h" +#include "UObject/ConstructorHelpers.h" +#include "UObject/ObjectSaveContext.h" + +#if WITH_EDITOR +#include "Editor.h" +#include "LevelEditor.h" +#endif + +#include + +using namespace CesiumGeospatial; + +UCesiumEllipsoid* UCesiumEllipsoid::Create(const FVector& Radii) { + UCesiumEllipsoid* pEllipsoid = NewObject(); + pEllipsoid->SetRadii(Radii); + return pEllipsoid; +} + +FVector UCesiumEllipsoid::GetRadii() { return this->Radii; } + +void UCesiumEllipsoid::SetRadii(const FVector& NewRadii) { + this->Radii = NewRadii; +} + +double UCesiumEllipsoid::GetMaximumRadius() { return this->Radii.X; } + +double UCesiumEllipsoid::GetMinimumRadius() { return this->Radii.Z; } + +FVector UCesiumEllipsoid::ScaleToGeodeticSurface( + const FVector& EllipsoidCenteredEllipsoidFixedPosition) { + return CesiumEllipsoidFunctions::ScaleToGeodeticSurface( + this->GetNativeEllipsoid(), + EllipsoidCenteredEllipsoidFixedPosition); +} + +FVector UCesiumEllipsoid::GeodeticSurfaceNormal( + const FVector& EllipsoidCenteredEllipsoidFixedPosition) { + return CesiumEllipsoidFunctions::GeodeticSurfaceNormal( + this->GetNativeEllipsoid(), + EllipsoidCenteredEllipsoidFixedPosition); +} + +FVector +UCesiumEllipsoid::LongitudeLatitudeHeightToEllipsoidCenteredEllipsoidFixed( + const FVector& LongitudeLatitudeHeight) { + return CesiumEllipsoidFunctions:: + LongitudeLatitudeHeightToEllipsoidCenteredEllipsoidFixed( + this->GetNativeEllipsoid(), + LongitudeLatitudeHeight); +} + +FVector +UCesiumEllipsoid::EllipsoidCenteredEllipsoidFixedToLongitudeLatitudeHeight( + const FVector& EllipsoidCenteredEllipsoidFixedPosition) { + return CesiumEllipsoidFunctions:: + EllipsoidCenteredEllipsoidFixedToLongitudeLatitudeHeight( + this->GetNativeEllipsoid(), + EllipsoidCenteredEllipsoidFixedPosition); +} + +FMatrix UCesiumEllipsoid::EastNorthUpToEllipsoidCenteredEllipsoidFixed( + const FVector& EllipsoidCenteredEllipsoidFixedPosition) { + return CesiumEllipsoidFunctions::EastNorthUpToEllipsoidCenteredEllipsoidFixed( + this->GetNativeEllipsoid(), + EllipsoidCenteredEllipsoidFixedPosition); +} + +LocalHorizontalCoordinateSystem +UCesiumEllipsoid::CreateCoordinateSystem(const FVector& Center, double Scale) { + { + return LocalHorizontalCoordinateSystem( + VecMath::createVector3D(Center), + LocalDirection::East, + LocalDirection::South, + LocalDirection::Up, + 1.0 / Scale, + this->GetNativeEllipsoid()); + } +} + +const Ellipsoid& UCesiumEllipsoid::GetNativeEllipsoid() { + const double MinRadiiValue = TMathUtilConstants::Epsilon; + + if (!this->NativeEllipsoid.IsSet()) { + // Radii of zero will throw Infs and NaNs into our calculations which will + // cause Unreal to crash when the values reach a transform. + if (this->Radii.X < MinRadiiValue || this->Radii.Y < MinRadiiValue || + this->Radii.Z < MinRadiiValue) { + UE_LOG( + LogCesium, + Error, + TEXT( + "Radii must be greater than 0 - clamping to minimum value to avoid crashes.")); + } + + this->NativeEllipsoid.Emplace(Ellipsoid( + FMath::Max(this->Radii.X, MinRadiiValue), + FMath::Max(this->Radii.Y, MinRadiiValue), + FMath::Max(this->Radii.Z, MinRadiiValue))); + } + + return *this->NativeEllipsoid; +} + +#if WITH_EDITOR +void UCesiumEllipsoid::PostSaveRoot( + FObjectPostSaveRootContext ObjectSaveContext) { + if (!IsValid(GEditor)) { + return; + } + + GEditor->GetWorld(); + + UWorld* World = GEditor->GetEditorWorldContext().World(); + if (!IsValid(World)) { + return; + } + + // Go through every georeference and update its ellipsoid if it's this + // ellipsoid, since we might have modified values after saving. + if (ObjectSaveContext.SaveSucceeded()) { + for (TActorIterator It(World); It; ++It) { + ACesiumGeoreference* Georeference = *It; + if (Georeference->GetEllipsoid() == this) { + Georeference->SetEllipsoid(this); + } + } + } +} +#endif diff --git a/Source/CesiumRuntime/Private/CesiumEllipsoidFunctions.cpp b/Source/CesiumRuntime/Private/CesiumEllipsoidFunctions.cpp new file mode 100644 index 000000000..d38c23e56 --- /dev/null +++ b/Source/CesiumRuntime/Private/CesiumEllipsoidFunctions.cpp @@ -0,0 +1,66 @@ +// Copyright 2020-2024 CesiumGS, Inc. and Contributors + +#include "CesiumEllipsoidFunctions.h" +#include "VecMath.h" +#include +#include +#include + +using namespace CesiumGeospatial; +using namespace CesiumUtility; + +FVector CesiumEllipsoidFunctions::ScaleToGeodeticSurface( + const CesiumGeospatial::Ellipsoid& Ellipsoid, + const FVector& EllipsoidCenteredEllipsoidFixedPosition) { + std::optional result = Ellipsoid.scaleToGeodeticSurface( + VecMath::createVector3D(EllipsoidCenteredEllipsoidFixedPosition)); + if (result) { + return VecMath::createVector(*result); + } else { + return FVector(0.0, 0.0, 0.0); + } +} + +FVector CesiumEllipsoidFunctions::GeodeticSurfaceNormal( + const CesiumGeospatial::Ellipsoid& Ellipsoid, + const FVector& EllipsoidCenteredEllipsoidFixedPosition) { + return VecMath::createVector(Ellipsoid.geodeticSurfaceNormal( + VecMath::createVector3D(EllipsoidCenteredEllipsoidFixedPosition))); +} + +FVector CesiumEllipsoidFunctions:: + LongitudeLatitudeHeightToEllipsoidCenteredEllipsoidFixed( + const CesiumGeospatial::Ellipsoid& Ellipsoid, + const FVector& LongitudeLatitudeHeight) { + glm::dvec3 cartesian = + Ellipsoid.cartographicToCartesian(Cartographic::fromDegrees( + LongitudeLatitudeHeight.X, + LongitudeLatitudeHeight.Y, + LongitudeLatitudeHeight.Z)); + return VecMath::createVector(cartesian); +} + +FVector CesiumEllipsoidFunctions:: + EllipsoidCenteredEllipsoidFixedToLongitudeLatitudeHeight( + const CesiumGeospatial::Ellipsoid& Ellipsoid, + const FVector& EllipsoidCenteredEllipsoidFixedPosition) { + std::optional result = Ellipsoid.cartesianToCartographic( + VecMath::createVector3D(EllipsoidCenteredEllipsoidFixedPosition)); + if (result) { + return FVector( + Math::radiansToDegrees(result->longitude), + Math::radiansToDegrees(result->latitude), + result->height); + } else { + return FVector(0.0, 0.0, 0.0); + } +} + +FMatrix CesiumEllipsoidFunctions::EastNorthUpToEllipsoidCenteredEllipsoidFixed( + const CesiumGeospatial::Ellipsoid& Ellipsoid, + const FVector& EllipsoidCenteredEllipsoidFixedPosition) { + return VecMath::createMatrix( + CesiumGeospatial::GlobeTransforms::eastNorthUpToFixedFrame( + VecMath::createVector3D(EllipsoidCenteredEllipsoidFixedPosition), + Ellipsoid)); +} diff --git a/Source/CesiumRuntime/Private/CesiumEllipsoidFunctions.h b/Source/CesiumRuntime/Private/CesiumEllipsoidFunctions.h new file mode 100644 index 000000000..4029d2360 --- /dev/null +++ b/Source/CesiumRuntime/Private/CesiumEllipsoidFunctions.h @@ -0,0 +1,63 @@ +// Copyright 2020-2024 CesiumGS, Inc. and Contributors + +#pragma once + +#include "Math/Matrix.h" + +namespace CesiumGeospatial { +class Ellipsoid; +}; + +/** + * A collection of methods for working with {@link CesiumGeospatial::Ellipsoid} + * objects from Unreal. + */ +class CesiumEllipsoidFunctions { +public: + /** + * Scale the given Ellipsoid-Centered, Ellipsoid-Fixed position along the + * geodetic surface normal so that it is on the surface of the ellipsoid. If + * the position is near the center of the ellipsoid, the result will have the + * value (0,0,0) because the surface position is undefined. + */ + static FVector ScaleToGeodeticSurface( + const CesiumGeospatial::Ellipsoid& Ellipsoid, + const FVector& EllipsoidCenteredEllipsoidFixedPosition); + + /** + * Computes the normal of the plane tangent to the surface of the ellipsoid + * at the provided Ellipsoid-Centered, Ellipsoid-Fixed position. + */ + static FVector GeodeticSurfaceNormal( + const CesiumGeospatial::Ellipsoid& Ellipsoid, + const FVector& EarthCenteredEarthFixedPosition); + + /** + * Convert longitude in degrees (X), latitude in degrees (Y), and height above + * the ellipsoid in meters (Z) to Ellipsoid-Centered, Ellipsoid-Fixed (ECEF) + * coordinates. + */ + static FVector LongitudeLatitudeHeightToEllipsoidCenteredEllipsoidFixed( + const CesiumGeospatial::Ellipsoid& Ellipsoid, + const FVector& LongitudeLatitudeHeight); + + /** + * Convert Ellipsoid-Centered, Ellipsoid-Fixed (ECEF) coordinates to longitude + * in degrees (X), latitude in degrees (Y), and height above the ellipsoid in + * meters (Z). If the position is near the center of the Earth, the result + * will have the value (0,0,0) because the longitude, latitude, and height are + * undefined. + */ + static FVector EllipsoidCenteredEllipsoidFixedToLongitudeLatitudeHeight( + const CesiumGeospatial::Ellipsoid& Ellipsoid, + const FVector& EllipsoidCenteredEllipsoidFixedPosition); + + /** + * Computes the transformation matrix from the local East-North-Up (ENU) frame + * to Ellipsoid-Centered, Ellipsoid-Fixed (ECEF) at the specified ECEF + * location. + */ + static FMatrix EastNorthUpToEllipsoidCenteredEllipsoidFixed( + const CesiumGeospatial::Ellipsoid& Ellipsoid, + const FVector& EllipsoidCenteredEllipsoidFixedPosition); +}; diff --git a/Source/CesiumRuntime/Private/CesiumEncodedFeaturesMetadata.cpp b/Source/CesiumRuntime/Private/CesiumEncodedFeaturesMetadata.cpp index d419da552..e895a762b 100644 --- a/Source/CesiumRuntime/Private/CesiumEncodedFeaturesMetadata.cpp +++ b/Source/CesiumRuntime/Private/CesiumEncodedFeaturesMetadata.cpp @@ -13,12 +13,13 @@ #include "CesiumPropertyTexture.h" #include "CesiumRuntime.h" #include "Containers/Map.h" +#include "Materials/MaterialInstanceDynamic.h" #include "PixelFormat.h" #include "TextureResource.h" #include "UnrealMetadataConversions.h" + #include #include -#include #include #include @@ -51,6 +52,20 @@ FString getNameForFeatureIDSet( } } + if (type == ECesiumFeatureIdSetType::Instance) { + FCesiumFeatureIdAttribute attribute = + UCesiumFeatureIdSetBlueprintLibrary::GetAsFeatureIDAttribute( + featureIDSet); + ECesiumFeatureIdAttributeStatus status = + UCesiumFeatureIdAttributeBlueprintLibrary::GetFeatureIDAttributeStatus( + attribute); + if (status == ECesiumFeatureIdAttributeStatus::Valid) { + std::string generatedName = "_FEATURE_INSTANCE_ID_" + + std::to_string(attribute.getAttributeIndex()); + return FString(generatedName.c_str()); + } + } + if (type == ECesiumFeatureIdSetType::Texture) { std::string generatedName = "_FEATURE_ID_TEXTURE_" + std::to_string(FeatureIdTextureCounter); @@ -62,6 +77,10 @@ FString getNameForFeatureIDSet( return FString("_IMPLICIT_FEATURE_ID"); } + if (type == ECesiumFeatureIdSetType::InstanceImplicit) { + return FString("_IMPLICIT_FEATURE_INSTANCE_ID"); + } + // If for some reason an empty / invalid feature ID set was constructed, // return an empty name. return FString(); @@ -98,7 +117,7 @@ encodeFeatureIdAttribute(const FCesiumFeatureIdAttribute& attribute) { std::optional encodeFeatureIdTexture( const FCesiumFeatureIdTexture& texture, - TMap>& + TMap>& featureIdTextureMap) { const ECesiumFeatureIdTextureStatus status = UCesiumFeatureIdTextureBlueprintLibrary::GetFeatureIDTextureStatus( @@ -113,7 +132,7 @@ std::optional encodeFeatureIdTexture( const CesiumGltf::FeatureIdTextureView& featureIdTextureView = texture.getFeatureIdTextureView(); - const CesiumGltf::ImageCesium* pFeatureIdImage = + const CesiumGltf::ImageAsset* pFeatureIdImage = featureIdTextureView.getImage(); TRACE_CPUPROFILER_EVENT_SCOPE(Cesium::EncodeFeatureIdTexture) @@ -142,10 +161,11 @@ std::optional encodeFeatureIdTexture( } // Copy the image, so that we can keep a copy of it in the glTF. - CesiumGltf::ImageCesium imageCopy(*pFeatureIdImage); + CesiumUtility::IntrusivePointer pImageCopy = + new CesiumGltf::ImageAsset(*pFeatureIdImage); encodedFeatureIdTexture.pTexture = MakeShared(std::move(*loadTextureAnyThreadPart( - imageCopy, + *pImageCopy, addressX, addressY, TextureFilter::TF_Nearest, @@ -153,8 +173,7 @@ std::optional encodeFeatureIdTexture( TEXTUREGROUP_8BitData, false, // TODO: currently this is always the case, but doesn't have to be - EPixelFormat::PF_R8G8B8A8_UINT, - nullptr))); + EPixelFormat::PF_R8G8B8A8_UINT))); featureIdTextureMap.Emplace( pFeatureIdImage, encodedFeatureIdTexture.pTexture); @@ -162,6 +181,7 @@ std::optional encodeFeatureIdTexture( return result; } + } // namespace EncodedPrimitiveFeatures encodePrimitiveFeaturesAnyThreadPart( @@ -175,7 +195,7 @@ EncodedPrimitiveFeatures encodePrimitiveFeaturesAnyThreadPart( // Not all feature ID sets are necessarily textures, but reserve the max // amount just in case. - TMap> + TMap> featureIdTextureMap; featureIdTextureMap.Reserve(featureIDSetDescriptions.Num()); @@ -315,44 +335,6 @@ FString getMaterialNameForPropertyTextureProperty( namespace { -struct EncodedPixelFormat { - EPixelFormat format; - int32_t bytesPerChannel; - int32_t channels; -}; - -// TODO: consider picking better pixel formats when they are available for the -// current platform. -EncodedPixelFormat -getPixelFormat(FCesiumMetadataEncodingDetails encodingDetails) { - - switch (encodingDetails.ComponentType) { - case ECesiumEncodedMetadataComponentType::Uint8: - switch (encodingDetails.Type) { - case ECesiumEncodedMetadataType::Scalar: - return {EPixelFormat::PF_R8_UINT, 1, 1}; - case ECesiumEncodedMetadataType::Vec2: - case ECesiumEncodedMetadataType::Vec3: - case ECesiumEncodedMetadataType::Vec4: - return {EPixelFormat::PF_R8G8B8A8_UINT, 1, 4}; - default: - return {EPixelFormat::PF_Unknown, 0, 0}; - } - case ECesiumEncodedMetadataComponentType::Float: - switch (encodingDetails.Type) { - case ECesiumEncodedMetadataType::Scalar: - return {EPixelFormat::PF_R32_FLOAT, 4, 1}; - case ECesiumEncodedMetadataType::Vec2: - case ECesiumEncodedMetadataType::Vec3: - case ECesiumEncodedMetadataType::Vec4: - // Note this is ABGR - return {EPixelFormat::PF_A32B32G32R32F, 4, 4}; - } - default: - return {EPixelFormat::PF_Unknown, 0, 0}; - } -} - bool isValidPropertyTablePropertyDescription( const FCesiumPropertyTablePropertyDescription& propertyDescription, const FCesiumPropertyTableProperty& property) { @@ -518,7 +500,8 @@ EncodedPropertyTable encodePropertyTableAnyThreadPart( continue; } - EncodedPixelFormat encodedFormat = getPixelFormat(encodingDetails); + EncodedPixelFormat encodedFormat = + getPixelFormat(encodingDetails.Type, encodingDetails.ComponentType); if (encodedFormat.format == EPixelFormat::PF_Unknown) { UE_LOG( LogCesium, @@ -545,11 +528,12 @@ EncodedPropertyTable encodePropertyTableAnyThreadPart( ? floorSqrtFeatureCount : (floorSqrtFeatureCount + 1); - CesiumGltf::ImageCesium image; - image.width = image.height = textureDimension; - image.bytesPerChannel = encodedFormat.bytesPerChannel; - image.channels = encodedFormat.channels; - image.pixelData.resize( + CesiumUtility::IntrusivePointer pImage = + new CesiumGltf::ImageAsset(); + pImage->width = pImage->height = textureDimension; + pImage->bytesPerChannel = encodedFormat.bytesPerChannel; + pImage->channels = encodedFormat.channels; + pImage->pixelData.resize( textureDimension * textureDimension * encodedFormat.bytesPerChannel * encodedFormat.channels); @@ -558,26 +542,25 @@ EncodedPropertyTable encodePropertyTableAnyThreadPart( CesiumEncodedMetadataParseColorFromString::encode( *pDescription, property, - gsl::span(image.pixelData), + std::span(pImage->pixelData), encodedFormat.bytesPerChannel * encodedFormat.channels); } else /* info.Conversion == ECesiumEncodedMetadataConversion::Coerce */ { CesiumEncodedMetadataCoerce::encode( *pDescription, property, - gsl::span(image.pixelData), + std::span(pImage->pixelData), encodedFormat.bytesPerChannel * encodedFormat.channels); } encodedProperty.pTexture = loadTextureAnyThreadPart( - image, + *pImage, TextureAddress::TA_Clamp, TextureAddress::TA_Clamp, TextureFilter::TF_Nearest, false, TEXTUREGROUP_8BitData, false, - encodedFormat.format, - nullptr); + encodedFormat.format); } if (pDescription->PropertyDetails.bHasOffset) { @@ -627,7 +610,7 @@ EncodedPropertyTable encodePropertyTableAnyThreadPart( EncodedPropertyTexture encodePropertyTextureAnyThreadPart( const FCesiumPropertyTextureDescription& propertyTextureDescription, const FCesiumPropertyTexture& propertyTexture, - TMap>& + TMap>& propertyTexturePropertyMap) { TRACE_CPUPROFILER_EVENT_SCOPE(Cesium::EncodePropertyTexture) @@ -676,7 +659,7 @@ EncodedPropertyTexture encodePropertyTextureAnyThreadPart( encodedProperty.channels[i] = channels[i]; } - const CesiumGltf::ImageCesium* pImage = property.getImage(); + const CesiumGltf::ImageAsset* pImage = property.getImage(); TWeakPtr* pMappedUnrealImageIt = propertyTexturePropertyMap.Find(pImage); @@ -693,10 +676,11 @@ EncodedPropertyTexture encodePropertyTextureAnyThreadPart( } // Copy the image, so that we can keep a copy of it in the glTF. - CesiumGltf::ImageCesium imageCopy(*pImage); + CesiumUtility::IntrusivePointer pImageCopy = + new CesiumGltf::ImageAsset(*pImage); encodedProperty.pTexture = MakeShared(std::move(*loadTextureAnyThreadPart( - imageCopy, + *pImageCopy, addressX, addressY, // TODO: account for texture filter @@ -706,8 +690,7 @@ EncodedPropertyTexture encodePropertyTextureAnyThreadPart( false, // This assumes that the texture's image only contains one byte // per channel. - EPixelFormat::PF_R8G8B8A8_UINT, - nullptr))); + EPixelFormat::PF_R8G8B8A8_UINT))); propertyTexturePropertyMap.Emplace(pImage, encodedProperty.pTexture); } }; @@ -782,7 +765,7 @@ EncodedModelMetadata encodeModelMetadataAnyThreadPart( const TArray& propertyTables = UCesiumModelMetadataBlueprintLibrary::GetPropertyTables(metadata); result.propertyTables.Reserve(propertyTables.Num()); - for (const auto& propertyTable : propertyTables) { + for (const FCesiumPropertyTable& propertyTable : propertyTables) { const FString propertyTableName = getNameForPropertyTable(propertyTable); const FCesiumPropertyTableDescription* pExpectedPropertyTable = @@ -807,13 +790,12 @@ EncodedModelMetadata encodeModelMetadataAnyThreadPart( UCesiumModelMetadataBlueprintLibrary::GetPropertyTextures(metadata); result.propertyTextures.Reserve(propertyTextures.Num()); - TMap> + TMap> propertyTexturePropertyMap; propertyTexturePropertyMap.Reserve(propertyTextures.Num()); - for (const auto& propertyTexture : propertyTextures) { - const FString propertyTextureName = - getNameForPropertyTexture(propertyTexture); + for (const FCesiumPropertyTexture& propertyTexture : propertyTextures) { + FString propertyTextureName = getNameForPropertyTexture(propertyTexture); const FCesiumPropertyTextureDescription* pExpectedPropertyTexture = metadataDescription.PropertyTextures.FindByPredicate( @@ -938,4 +920,335 @@ FString createHlslSafeName(const FString& rawName) { return safeName; } +// TODO: consider picking better pixel formats when they are available for the +// current platform. +EncodedPixelFormat getPixelFormat( + ECesiumEncodedMetadataType Type, + ECesiumEncodedMetadataComponentType ComponentType) { + switch (ComponentType) { + case ECesiumEncodedMetadataComponentType::Uint8: + switch (Type) { + case ECesiumEncodedMetadataType::Scalar: + return {EPixelFormat::PF_R8_UINT, 1, 1}; + case ECesiumEncodedMetadataType::Vec2: + case ECesiumEncodedMetadataType::Vec3: + case ECesiumEncodedMetadataType::Vec4: + return {EPixelFormat::PF_R8G8B8A8_UINT, 1, 4}; + default: + return {EPixelFormat::PF_Unknown, 0, 0}; + } + case ECesiumEncodedMetadataComponentType::Float: + switch (Type) { + case ECesiumEncodedMetadataType::Scalar: + return {EPixelFormat::PF_R32_FLOAT, 4, 1}; + case ECesiumEncodedMetadataType::Vec2: + case ECesiumEncodedMetadataType::Vec3: + case ECesiumEncodedMetadataType::Vec4: + // Note this is ABGR + return {EPixelFormat::PF_A32B32G32R32F, 4, 4}; + } + default: + return {EPixelFormat::PF_Unknown, 0, 0}; + } +} + +bool isSupportedPropertyTextureProperty( + const FCesiumMetadataPropertyDetails& PropertyDetails) { + if (PropertyDetails.bIsArray && + PropertyDetails.Type != ECesiumMetadataType::Scalar) { + // Only scalar arrays are supported. + return false; + } + + uint32 byteSize = GetMetadataTypeByteSize( + PropertyDetails.Type, + PropertyDetails.ComponentType); + if (PropertyDetails.bIsArray) { + byteSize *= PropertyDetails.ArraySize; + } + + return byteSize > 0 && byteSize <= 4; +} + +void SetPropertyParameterValue( + UMaterialInstanceDynamic* pMaterial, + EMaterialParameterAssociation association, + int32 index, + const FString& name, + ECesiumEncodedMetadataType type, + const FCesiumMetadataValue& value, + float defaultValue) { + if (type == ECesiumEncodedMetadataType::Scalar) { + pMaterial->SetScalarParameterValueByInfo( + FMaterialParameterInfo(FName(name), association, index), + UCesiumMetadataValueBlueprintLibrary::GetFloat(value, defaultValue)); + } else if ( + type == ECesiumEncodedMetadataType::Vec2 || + type == ECesiumEncodedMetadataType::Vec3 || + type == ECesiumEncodedMetadataType::Vec4) { + FVector4 vector4Value = UCesiumMetadataValueBlueprintLibrary::GetVector4( + value, + FVector4(defaultValue, defaultValue, defaultValue, defaultValue)); + + pMaterial->SetVectorParameterValueByInfo( + FMaterialParameterInfo(FName(name), association, index), + FLinearColor( + static_cast(vector4Value.X), + static_cast(vector4Value.Y), + static_cast(vector4Value.Z), + static_cast(vector4Value.W))); + } +} + +void SetFeatureIdTextureParameterValues( + UMaterialInstanceDynamic* pMaterial, + EMaterialParameterAssociation association, + int32 index, + const FString& name, + const EncodedFeatureIdTexture& encodedFeatureIdTexture) { + pMaterial->SetTextureParameterValueByInfo( + FMaterialParameterInfo( + FName(name + MaterialTextureSuffix), + association, + index), + encodedFeatureIdTexture.pTexture->pTexture->getUnrealTexture()); + + size_t numChannels = encodedFeatureIdTexture.channels.size(); + pMaterial->SetScalarParameterValueByInfo( + FMaterialParameterInfo( + FName(name + MaterialNumChannelsSuffix), + association, + index), + static_cast(numChannels)); + + std::vector channelsAsFloats{0.0f, 0.0f, 0.0f, 0.0f}; + for (size_t i = 0; i < numChannels; i++) { + channelsAsFloats[i] = + static_cast(encodedFeatureIdTexture.channels[i]); + } + + FLinearColor channels{ + channelsAsFloats[0], + channelsAsFloats[1], + channelsAsFloats[2], + channelsAsFloats[3], + }; + + pMaterial->SetVectorParameterValueByInfo( + FMaterialParameterInfo( + FName(name + MaterialChannelsSuffix), + association, + index), + channels); + + if (!encodedFeatureIdTexture.textureTransform) { + return; + } + + glm::dvec2 scale = encodedFeatureIdTexture.textureTransform->scale(); + glm::dvec2 offset = encodedFeatureIdTexture.textureTransform->offset(); + + pMaterial->SetVectorParameterValueByInfo( + FMaterialParameterInfo( + FName(name + MaterialTextureScaleOffsetSuffix), + association, + index), + FLinearColor(scale[0], scale[1], offset[0], offset[1])); + + glm::dvec2 rotation = + encodedFeatureIdTexture.textureTransform->rotationSineCosine(); + pMaterial->SetVectorParameterValueByInfo( + FMaterialParameterInfo( + FName(name + MaterialTextureRotationSuffix), + association, + index), + FLinearColor(rotation[0], rotation[1], 0.0f, 1.0f)); +} + +void SetPropertyTableParameterValues( + UMaterialInstanceDynamic* pMaterial, + EMaterialParameterAssociation association, + int32 index, + const EncodedPropertyTable& encodedPropertyTable) { + for (const EncodedPropertyTableProperty& encodedProperty : + encodedPropertyTable.properties) { + FString fullPropertyName = getMaterialNameForPropertyTableProperty( + encodedPropertyTable.name, + encodedProperty.name); + + if (encodedProperty.pTexture) { + pMaterial->SetTextureParameterValueByInfo( + FMaterialParameterInfo(FName(fullPropertyName), association, index), + encodedProperty.pTexture->pTexture->getUnrealTexture()); + } + + if (!UCesiumMetadataValueBlueprintLibrary::IsEmpty( + encodedProperty.offset)) { + FString parameterName = fullPropertyName + MaterialPropertyOffsetSuffix; + SetPropertyParameterValue( + pMaterial, + association, + index, + parameterName, + encodedProperty.type, + encodedProperty.offset, + 0.0f); + } + + if (!UCesiumMetadataValueBlueprintLibrary::IsEmpty(encodedProperty.scale)) { + FString parameterName = fullPropertyName + MaterialPropertyScaleSuffix; + SetPropertyParameterValue( + pMaterial, + association, + index, + parameterName, + encodedProperty.type, + encodedProperty.scale, + 1.0f); + } + + if (!UCesiumMetadataValueBlueprintLibrary::IsEmpty( + encodedProperty.noData)) { + FString parameterName = fullPropertyName + MaterialPropertyNoDataSuffix; + SetPropertyParameterValue( + pMaterial, + association, + index, + parameterName, + encodedProperty.type, + encodedProperty.noData, + 0.0f); + } + + if (!UCesiumMetadataValueBlueprintLibrary::IsEmpty( + encodedProperty.defaultValue)) { + FString parameterName = + fullPropertyName + MaterialPropertyDefaultValueSuffix; + SetPropertyParameterValue( + pMaterial, + association, + index, + parameterName, + encodedProperty.type, + encodedProperty.defaultValue, + 0.0f); + + FString hasValueName = fullPropertyName + MaterialPropertyHasValueSuffix; + pMaterial->SetScalarParameterValueByInfo( + FMaterialParameterInfo(FName(hasValueName), association, index), + encodedProperty.pTexture ? 1.0 : 0.0); + } + } +} + +void SetPropertyTextureParameterValues( + UMaterialInstanceDynamic* pMaterial, + EMaterialParameterAssociation association, + int32 index, + const EncodedPropertyTexture& encodedPropertyTexture) { + for (const EncodedPropertyTextureProperty& encodedProperty : + encodedPropertyTexture.properties) { + FString fullPropertyName = getMaterialNameForPropertyTextureProperty( + encodedPropertyTexture.name, + encodedProperty.name); + + if (encodedProperty.pTexture) { + pMaterial->SetTextureParameterValueByInfo( + FMaterialParameterInfo(FName(fullPropertyName), association, index), + encodedProperty.pTexture->pTexture->getUnrealTexture()); + } + + pMaterial->SetVectorParameterValueByInfo( + FMaterialParameterInfo( + FName(fullPropertyName + MaterialChannelsSuffix), + association, + index), + FLinearColor( + encodedProperty.channels[0], + encodedProperty.channels[1], + encodedProperty.channels[2], + encodedProperty.channels[3])); + + if (!UCesiumMetadataValueBlueprintLibrary::IsEmpty( + encodedProperty.offset)) { + FString parameterName = fullPropertyName + MaterialPropertyOffsetSuffix; + SetPropertyParameterValue( + pMaterial, + association, + index, + parameterName, + encodedProperty.type, + encodedProperty.offset, + 0.0f); + } + + if (!UCesiumMetadataValueBlueprintLibrary::IsEmpty(encodedProperty.scale)) { + FString parameterName = fullPropertyName + MaterialPropertyScaleSuffix; + SetPropertyParameterValue( + pMaterial, + association, + index, + parameterName, + encodedProperty.type, + encodedProperty.scale, + 1.0f); + } + + if (!UCesiumMetadataValueBlueprintLibrary::IsEmpty( + encodedProperty.noData)) { + FString parameterName = fullPropertyName + MaterialPropertyNoDataSuffix; + SetPropertyParameterValue( + pMaterial, + association, + index, + parameterName, + encodedProperty.type, + encodedProperty.noData, + 0.0f); + } + + if (!UCesiumMetadataValueBlueprintLibrary::IsEmpty( + encodedProperty.defaultValue)) { + FString parameterName = + fullPropertyName + MaterialPropertyDefaultValueSuffix; + SetPropertyParameterValue( + pMaterial, + association, + index, + parameterName, + encodedProperty.type, + encodedProperty.defaultValue, + 0.0f); + + FString hasValueName = fullPropertyName + MaterialPropertyHasValueSuffix; + pMaterial->SetScalarParameterValueByInfo( + FMaterialParameterInfo(FName(hasValueName), association, index), + encodedProperty.pTexture ? 1.0 : 0.0); + } + + if (!encodedProperty.textureTransform) { + continue; + } + + glm::dvec2 scale = encodedProperty.textureTransform->scale(); + glm::dvec2 offset = encodedProperty.textureTransform->offset(); + + pMaterial->SetVectorParameterValueByInfo( + FMaterialParameterInfo( + FName(fullPropertyName + MaterialTextureScaleOffsetSuffix), + association, + index), + FLinearColor(scale[0], scale[1], offset[0], offset[1])); + + glm::dvec2 rotation = + encodedProperty.textureTransform->rotationSineCosine(); + pMaterial->SetVectorParameterValueByInfo( + FMaterialParameterInfo( + FName(fullPropertyName + MaterialTextureRotationSuffix), + association, + index), + FLinearColor(rotation[0], rotation[1], 0.0f, 1.0f)); + } +} + } // namespace CesiumEncodedFeaturesMetadata diff --git a/Source/CesiumRuntime/Private/CesiumEncodedFeaturesMetadata.h b/Source/CesiumRuntime/Private/CesiumEncodedFeaturesMetadata.h index a2a74bbeb..45f3ece2b 100644 --- a/Source/CesiumRuntime/Private/CesiumEncodedFeaturesMetadata.h +++ b/Source/CesiumRuntime/Private/CesiumEncodedFeaturesMetadata.h @@ -11,6 +11,7 @@ #include "Templates/SharedPointer.h" #include "Templates/UniquePtr.h" #include +#include #include struct FCesiumFeatureIdSet; @@ -27,6 +28,10 @@ struct FCesiumModelMetadataDescription; struct FCesiumPrimitiveFeaturesDescription; struct FCesiumPrimitiveMetadataDescription; +struct FCesiumMetadataPropertyDetails; +class UMaterialInstanceDynamic; +enum EMaterialParameterAssociation : int; + /** * @brief Provides utility for encoding feature IDs from EXT_mesh_features and * metadata from EXT_structural_metadata. "Encoding" refers broadly to the @@ -472,7 +477,7 @@ EncodedPropertyTexture encodePropertyTextureAnyThreadPart( const FCesiumPropertyTextureDescription& propertyTextureDescription, const FCesiumPropertyTexture& propertyTexture, TMap< - const CesiumGltf::ImageCesium*, + const CesiumGltf::ImageAsset*, TWeakPtr>& propertyTexturePropertyMap); @@ -499,6 +504,53 @@ void destroyEncodedModelMetadata(EncodedModelMetadata& encodedMetadata); #pragma endregion +#pragma region Utility + +struct EncodedPixelFormat { + EPixelFormat format; + int32_t bytesPerChannel; + int32_t channels; +}; + +// TODO: consider picking better pixel formats when they are available for the +// current platform. +EncodedPixelFormat getPixelFormat( + ECesiumEncodedMetadataType Type, + ECesiumEncodedMetadataComponentType ComponentType); + FString createHlslSafeName(const FString& rawName); +bool isSupportedPropertyTextureProperty( + const FCesiumMetadataPropertyDetails& PropertyDetails); + +void SetPropertyParameterValue( + UMaterialInstanceDynamic* pMaterial, + EMaterialParameterAssociation association, + int32 index, + const FString& name, + ECesiumEncodedMetadataType type, + const FCesiumMetadataValue& value, + float defaultValue); + +void SetFeatureIdTextureParameterValues( + UMaterialInstanceDynamic* pMaterial, + EMaterialParameterAssociation association, + int32 index, + const FString& name, + const EncodedFeatureIdTexture& encodedFeatureIdTexture); + +void SetPropertyTableParameterValues( + UMaterialInstanceDynamic* pMaterial, + EMaterialParameterAssociation association, + int32 index, + const EncodedPropertyTable& encodedPropertyTable); + +void SetPropertyTextureParameterValues( + UMaterialInstanceDynamic* pMaterial, + EMaterialParameterAssociation association, + int32 index, + const EncodedPropertyTexture& encodedPropertyTexture); + +#pragma endregion + } // namespace CesiumEncodedFeaturesMetadata diff --git a/Source/CesiumRuntime/Private/CesiumEncodedMetadataConversions.cpp b/Source/CesiumRuntime/Private/CesiumEncodedMetadataConversions.cpp index 3384878a2..7ac5a7b4b 100644 --- a/Source/CesiumRuntime/Private/CesiumEncodedMetadataConversions.cpp +++ b/Source/CesiumRuntime/Private/CesiumEncodedMetadataConversions.cpp @@ -135,7 +135,7 @@ template void coerceAndEncodeArrays( const FCesiumPropertyTablePropertyDescription& propertyDescription, const FCesiumPropertyTableProperty& property, - const gsl::span& textureData, + const std::span& textureData, size_t pixelSize) { int64 propertySize = UCesiumPropertyTablePropertyBlueprintLibrary::GetPropertySize(property); @@ -180,7 +180,7 @@ void coerceAndEncodeArrays( template void coerceAndEncodeScalars( const FCesiumPropertyTableProperty& property, - const gsl::span& textureData) { + const std::span& textureData) { int64 propertySize = UCesiumPropertyTablePropertyBlueprintLibrary::GetPropertySize(property); if (textureData.size() < propertySize * sizeof(T)) { @@ -208,7 +208,7 @@ void coerceAndEncodeScalars( template void coerceAndEncodeVec2s( const FCesiumPropertyTableProperty& property, - const gsl::span& textureData, + const std::span& textureData, size_t pixelSize) { int64 propertySize = UCesiumPropertyTablePropertyBlueprintLibrary::GetPropertySize(property); @@ -254,7 +254,7 @@ void coerceAndEncodeVec2s( template void coerceAndEncodeVec3s( const FCesiumPropertyTableProperty& property, - const gsl::span& textureData, + const std::span& textureData, size_t pixelSize) { int64 propertySize = UCesiumPropertyTablePropertyBlueprintLibrary::GetPropertySize(property); @@ -298,7 +298,7 @@ void coerceAndEncodeVec3s( template void coerceAndEncodeVec4s( const FCesiumPropertyTableProperty& property, - const gsl::span& textureData, + const std::span& textureData, size_t pixelSize) { int64 propertySize = UCesiumPropertyTablePropertyBlueprintLibrary::GetPropertySize(property); @@ -383,7 +383,7 @@ bool CesiumEncodedMetadataCoerce::canEncode( void CesiumEncodedMetadataCoerce::encode( const FCesiumPropertyTablePropertyDescription& propertyDescription, const FCesiumPropertyTableProperty& property, - const gsl::span& textureData, + const std::span& textureData, size_t pixelSize) { if (propertyDescription.PropertyDetails.bIsArray) { if (propertyDescription.EncodingDetails.ComponentType == @@ -497,7 +497,7 @@ glm::u8vec3 getRgbColorFromString(const FString& rgbString) { template void parseAndEncodeColors( const FCesiumPropertyTableProperty& property, - const gsl::span& textureData, + const std::span& textureData, size_t pixelSize) { int64 propertySize = UCesiumPropertyTablePropertyBlueprintLibrary::GetPropertySize(property); @@ -555,7 +555,7 @@ bool CesiumEncodedMetadataParseColorFromString::canEncode( void CesiumEncodedMetadataParseColorFromString::encode( const FCesiumPropertyTablePropertyDescription& propertyDescription, const FCesiumPropertyTableProperty& property, - const gsl::span& textureData, + const std::span& textureData, size_t pixelSize) { if (propertyDescription.EncodingDetails.ComponentType == ECesiumEncodedMetadataComponentType::Uint8) { diff --git a/Source/CesiumRuntime/Private/CesiumEncodedMetadataConversions.h b/Source/CesiumRuntime/Private/CesiumEncodedMetadataConversions.h index eb38ca9db..d3ed133e6 100644 --- a/Source/CesiumRuntime/Private/CesiumEncodedMetadataConversions.h +++ b/Source/CesiumRuntime/Private/CesiumEncodedMetadataConversions.h @@ -2,7 +2,8 @@ #pragma once -#include +#include "HAL/Platform.h" +#include enum class ECesiumMetadataType : uint8; enum class ECesiumEncodedMetadataType : uint8; @@ -79,7 +80,7 @@ struct CesiumEncodedMetadataCoerce { static void encode( const FCesiumPropertyTablePropertyDescription& propertyDescription, const FCesiumPropertyTableProperty& property, - const gsl::span& pTextureData, + const std::span& pTextureData, size_t pixelSize); }; @@ -112,6 +113,6 @@ struct CesiumEncodedMetadataParseColorFromString { static void encode( const FCesiumPropertyTablePropertyDescription& propertyDescription, const FCesiumPropertyTableProperty& property, - const gsl::span& textureData, + const std::span& textureData, size_t pixelSize); }; diff --git a/Source/CesiumRuntime/Private/CesiumEncodedMetadataUtility.cpp b/Source/CesiumRuntime/Private/CesiumEncodedMetadataUtility.cpp index 53fe9a576..28f6fa3d1 100644 --- a/Source/CesiumRuntime/Private/CesiumEncodedMetadataUtility.cpp +++ b/Source/CesiumRuntime/Private/CesiumEncodedMetadataUtility.cpp @@ -21,7 +21,6 @@ #include #include #include -#include #include using namespace CesiumTextureUtility; @@ -206,18 +205,20 @@ EncodedMetadataFeatureTable encodeMetadataFeatureTableAnyThreadPart( ? floorSqrtFeatureCount : (floorSqrtFeatureCount + 1); - CesiumGltf::ImageCesium image; - image.bytesPerChannel = encodedFormat.bytesPerChannel; - image.channels = encodedFormat.channels; - image.compressedPixelFormat = CesiumGltf::GpuCompressedPixelFormat::NONE; - image.height = image.width = ceilSqrtFeatureCount; - image.pixelData.resize(size_t( - image.width * image.height * image.channels * image.bytesPerChannel)); + CesiumUtility::IntrusivePointer pImage = + new CesiumGltf::ImageAsset(); + pImage->bytesPerChannel = encodedFormat.bytesPerChannel; + pImage->channels = encodedFormat.channels; + pImage->compressedPixelFormat = CesiumGltf::GpuCompressedPixelFormat::NONE; + pImage->height = pImage->width = ceilSqrtFeatureCount; + pImage->pixelData.resize(size_t( + pImage->width * pImage->height * pImage->channels * + pImage->bytesPerChannel)); if (isArray) { switch (gpuType) { case ECesiumMetadataPackedGpuType_DEPRECATED::Uint8_DEPRECATED: { - uint8* pWritePos = reinterpret_cast(image.pixelData.data()); + uint8* pWritePos = reinterpret_cast(pImage->pixelData.data()); int64_t pixelSize = encodedFormat.channels * encodedFormat.bytesPerChannel; for (int64 i = 0; i < featureCount; ++i) { @@ -233,7 +234,7 @@ EncodedMetadataFeatureTable encodeMetadataFeatureTableAnyThreadPart( } } break; case ECesiumMetadataPackedGpuType_DEPRECATED::Float_DEPRECATED: { - uint8* pWritePos = reinterpret_cast(image.pixelData.data()); + uint8* pWritePos = reinterpret_cast(pImage->pixelData.data()); int64_t pixelSize = encodedFormat.channels * encodedFormat.bytesPerChannel; for (int64 i = 0; i < featureCount; ++i) { @@ -257,7 +258,7 @@ EncodedMetadataFeatureTable encodeMetadataFeatureTableAnyThreadPart( } else { switch (gpuType) { case ECesiumMetadataPackedGpuType_DEPRECATED::Uint8_DEPRECATED: { - uint8* pWritePos = reinterpret_cast(image.pixelData.data()); + uint8* pWritePos = reinterpret_cast(pImage->pixelData.data()); for (int64 i = 0; i < featureCount; ++i) { *pWritePos = UCesiumPropertyTablePropertyBlueprintLibrary::GetByte( property, @@ -266,7 +267,7 @@ EncodedMetadataFeatureTable encodeMetadataFeatureTableAnyThreadPart( } } break; case ECesiumMetadataPackedGpuType_DEPRECATED::Float_DEPRECATED: { - float* pWritePosF = reinterpret_cast(image.pixelData.data()); + float* pWritePosF = reinterpret_cast(pImage->pixelData.data()); for (int64 i = 0; i < featureCount; ++i) { *pWritePosF = UCesiumPropertyTablePropertyBlueprintLibrary::GetFloat( property, @@ -278,22 +279,21 @@ EncodedMetadataFeatureTable encodeMetadataFeatureTableAnyThreadPart( } encodedProperty.pTexture = loadTextureAnyThreadPart( - image, + *pImage, TextureAddress::TA_Clamp, TextureAddress::TA_Clamp, TextureFilter::TF_Nearest, false, TEXTUREGROUP_8BitData, false, - encodedFormat.format, - nullptr); + encodedFormat.format); } return encodedFeatureTable; } EncodedFeatureTexture encodeFeatureTextureAnyThreadPart( - TMap>& + TMap>& featureTexturePropertyMap, const FFeatureTextureDescription& featureTextureDescription, const FString& featureTextureName, @@ -322,7 +322,7 @@ EncodedFeatureTexture encodeFeatureTextureAnyThreadPart( const FCesiumPropertyTextureProperty& featureTextureProperty = propertyIt.Value; - const CesiumGltf::ImageCesium* pImage = featureTextureProperty.getImage(); + const CesiumGltf::ImageAsset* pImage = featureTextureProperty.getImage(); if (!pImage) { UE_LOG( @@ -411,10 +411,11 @@ EncodedFeatureTexture encodeFeatureTextureAnyThreadPart( if (pMappedUnrealImageIt) { encodedFeatureTextureProperty.pTexture = pMappedUnrealImageIt->Pin(); } else { - CesiumGltf::ImageCesium imageCopy(*pImage); + CesiumUtility::IntrusivePointer pImageCopy = + new CesiumGltf::ImageAsset(*pImage); encodedFeatureTextureProperty.pTexture = MakeShared(std::move(*loadTextureAnyThreadPart( - imageCopy, + *pImageCopy, TextureAddress::TA_Clamp, TextureAddress::TA_Clamp, TextureFilter::TF_Nearest, @@ -425,8 +426,7 @@ EncodedFeatureTexture encodeFeatureTextureAnyThreadPart( // R8G8B8A8 form, but this does not necessarily need to be the // case in the future. isNormalized ? EPixelFormat::PF_R8G8B8A8 - : EPixelFormat::PF_R8G8B8A8_UINT, - nullptr))); + : EPixelFormat::PF_R8G8B8A8_UINT))); featureTexturePropertyMap.Emplace( pImage, encodedFeatureTextureProperty.pTexture); @@ -462,7 +462,7 @@ EncodedMetadataPrimitive encodeMetadataPrimitiveAnyThreadPart( } } - TMap> + TMap> featureIdTextureMap; featureIdTextureMap.Reserve(featureIdTextures.Num()); @@ -490,7 +490,7 @@ EncodedMetadataPrimitive encodeMetadataPrimitiveAnyThreadPart( if (pFeatureIdTexture) { const CesiumGltf::FeatureIdTextureView& featureIdTextureView = pFeatureIdTexture->getFeatureIdTextureView(); - const CesiumGltf::ImageCesium* pFeatureIdImage = + const CesiumGltf::ImageAsset* pFeatureIdImage = featureIdTextureView.getImage(); if (!pFeatureIdImage) { @@ -517,10 +517,11 @@ EncodedMetadataPrimitive encodeMetadataPrimitiveAnyThreadPart( if (pMappedUnrealImageIt) { encodedFeatureIdTexture.pTexture = pMappedUnrealImageIt->Pin(); } else { - CesiumGltf::ImageCesium imageCopy(*pFeatureIdImage); + CesiumUtility::IntrusivePointer pImageCopy = + new CesiumGltf::ImageAsset(*pFeatureIdImage); encodedFeatureIdTexture.pTexture = MakeShared( std::move(*loadTextureAnyThreadPart( - imageCopy, + *pImageCopy, TextureAddress::TA_Clamp, TextureAddress::TA_Clamp, TextureFilter::TF_Nearest, @@ -529,8 +530,7 @@ EncodedMetadataPrimitive encodeMetadataPrimitiveAnyThreadPart( false, // TODO: currently this is always the case, but doesn't have // to be - EPixelFormat::PF_R8G8B8A8_UINT, - nullptr))); + EPixelFormat::PF_R8G8B8A8_UINT))); featureIdTextureMap.Emplace( pFeatureIdImage, encodedFeatureIdTexture.pTexture); @@ -599,7 +599,7 @@ EncodedMetadata encodeMetadataAnyThreadPart( const TMap& featureTextures = UCesiumModelMetadataBlueprintLibrary::GetFeatureTextures(metadata); result.encodedFeatureTextures.Reserve(featureTextures.Num()); - TMap> + TMap> featureTexturePropertyMap; featureTexturePropertyMap.Reserve(featureTextures.Num()); for (const auto& featureTextureIt : featureTextures) { diff --git a/Source/CesiumRuntime/Private/CesiumEncodedMetadataUtility.h b/Source/CesiumRuntime/Private/CesiumEncodedMetadataUtility.h index 070f2b00c..84c4b3d23 100644 --- a/Source/CesiumRuntime/Private/CesiumEncodedMetadataUtility.h +++ b/Source/CesiumRuntime/Private/CesiumEncodedMetadataUtility.h @@ -106,7 +106,7 @@ EncodedMetadataFeatureTable encodeMetadataFeatureTableAnyThreadPart( EncodedFeatureTexture encodeFeatureTextureAnyThreadPart( TMap< - const CesiumGltf::ImageCesium*, + const CesiumGltf::ImageAsset*, TWeakPtr>& featureTexturePropertyMap, const FFeatureTextureDescription& featureTextureDescription, diff --git a/Source/CesiumRuntime/Private/CesiumFeatureIdAttribute.cpp b/Source/CesiumRuntime/Private/CesiumFeatureIdAttribute.cpp index 4b0b07d1c..60936b34e 100644 --- a/Source/CesiumRuntime/Private/CesiumFeatureIdAttribute.cpp +++ b/Source/CesiumRuntime/Private/CesiumFeatureIdAttribute.cpp @@ -4,11 +4,9 @@ #include #include -using namespace CesiumGltf; - FCesiumFeatureIdAttribute::FCesiumFeatureIdAttribute( - const Model& Model, - const MeshPrimitive& Primitive, + const CesiumGltf::Model& Model, + const CesiumGltf::MeshPrimitive& Primitive, const int64 FeatureIDAttribute, const FString& PropertyTableName) : _status(ECesiumFeatureIdAttributeStatus::ErrorInvalidAttribute), @@ -23,13 +21,6 @@ FCesiumFeatureIdAttribute::FCesiumFeatureIdAttribute( return; } - const Accessor* accessor = - Model.getSafe(&Model.accessors, featureID->second); - if (!accessor || accessor->type != Accessor::Type::SCALAR) { - this->_status = ECesiumFeatureIdAttributeStatus::ErrorInvalidAccessor; - return; - } - this->_featureIdAccessor = CesiumGltf::getFeatureIdAccessorView( Model, Primitive, @@ -37,7 +28,32 @@ FCesiumFeatureIdAttribute::FCesiumFeatureIdAttribute( this->_status = std::visit( [](auto view) { - if (view.status() != AccessorViewStatus::Valid) { + if (view.status() != CesiumGltf::AccessorViewStatus::Valid) { + return ECesiumFeatureIdAttributeStatus::ErrorInvalidAccessor; + } + + return ECesiumFeatureIdAttributeStatus::Valid; + }, + this->_featureIdAccessor); +} + +FCesiumFeatureIdAttribute::FCesiumFeatureIdAttribute( + const CesiumGltf::Model& Model, + const CesiumGltf::Node& Node, + const int64 FeatureIDAttribute, + const FString& PropertyTableName) + : _status(ECesiumFeatureIdAttributeStatus::ErrorInvalidAttribute), + _featureIdAccessor(), + _attributeIndex(FeatureIDAttribute), + _propertyTableName(PropertyTableName) { + this->_featureIdAccessor = CesiumGltf::getFeatureIdAccessorView( + Model, + Node, + static_cast(this->_attributeIndex)); + + this->_status = std::visit( + [](auto&& view) { + if (view.status() != CesiumGltf::AccessorViewStatus::Valid) { return ECesiumFeatureIdAttributeStatus::ErrorInvalidAccessor; } @@ -57,15 +73,17 @@ UCesiumFeatureIdAttributeBlueprintLibrary::GetFeatureIDAttributeStatus( return FeatureIDAttribute._status; } -int64 UCesiumFeatureIdAttributeBlueprintLibrary::GetVertexCount( +int64 UCesiumFeatureIdAttributeBlueprintLibrary::GetCount( UPARAM(ref) const FCesiumFeatureIdAttribute& FeatureIDAttribute) { - return std::visit(CountFromAccessor{}, FeatureIDAttribute._featureIdAccessor); + return std::visit( + CesiumGltf::CountFromAccessor{}, + FeatureIDAttribute._featureIdAccessor); } -int64 UCesiumFeatureIdAttributeBlueprintLibrary::GetFeatureIDForVertex( +int64 UCesiumFeatureIdAttributeBlueprintLibrary::GetFeatureID( UPARAM(ref) const FCesiumFeatureIdAttribute& FeatureIDAttribute, - int64 VertexIndex) { + int64 Index) { return std::visit( - FeatureIdFromAccessor{VertexIndex}, + CesiumGltf::FeatureIdFromAccessor{Index}, FeatureIDAttribute._featureIdAccessor); } diff --git a/Source/CesiumRuntime/Private/CesiumFeatureIdSet.cpp b/Source/CesiumRuntime/Private/CesiumFeatureIdSet.cpp index 4adc304ab..50d475b9f 100644 --- a/Source/CesiumRuntime/Private/CesiumFeatureIdSet.cpp +++ b/Source/CesiumRuntime/Private/CesiumFeatureIdSet.cpp @@ -2,20 +2,19 @@ #include "CesiumFeatureIdSet.h" #include "CesiumGltf/Accessor.h" +#include "CesiumGltf/ExtensionExtInstanceFeaturesFeatureId.h" #include "CesiumGltf/ExtensionModelExtStructuralMetadata.h" #include "CesiumGltf/FeatureId.h" #include "CesiumGltf/Model.h" #include "CesiumGltfPrimitiveComponent.h" -using namespace CesiumGltf; - static FCesiumFeatureIdAttribute EmptyFeatureIDAttribute; static FCesiumFeatureIdTexture EmptyFeatureIDTexture; FCesiumFeatureIdSet::FCesiumFeatureIdSet( - const Model& InModel, - const MeshPrimitive& Primitive, - const FeatureId& FeatureID) + const CesiumGltf::Model& InModel, + const CesiumGltf::MeshPrimitive& Primitive, + const CesiumGltf::FeatureId& FeatureID) : _featureID(), _featureIDSetType(ECesiumFeatureIdSetType::None), _featureCount(FeatureID.featureCount), @@ -25,12 +24,13 @@ FCesiumFeatureIdSet::FCesiumFeatureIdSet( FString propertyTableName; // For backwards compatibility with GetFeatureTableName. - const ExtensionModelExtStructuralMetadata* pMetadata = - InModel.getExtension(); + const CesiumGltf::ExtensionModelExtStructuralMetadata* pMetadata = + InModel.getExtension(); if (pMetadata && _propertyTableIndex >= 0) { size_t index = static_cast(_propertyTableIndex); if (index < pMetadata->propertyTables.size()) { - const PropertyTable& propertyTable = pMetadata->propertyTables[index]; + const CesiumGltf::PropertyTable& propertyTable = + pMetadata->propertyTables[index]; std::string name = propertyTable.name.value_or(""); propertyTableName = FString(name.c_str()); } @@ -63,6 +63,42 @@ FCesiumFeatureIdSet::FCesiumFeatureIdSet( } } +FCesiumFeatureIdSet::FCesiumFeatureIdSet( + const CesiumGltf::Model& InModel, + const CesiumGltf::Node& Node, + const CesiumGltf::ExtensionExtInstanceFeaturesFeatureId& InstanceFeatureID) + : _featureID(), + _featureIDSetType(ECesiumFeatureIdSetType::Instance), + _featureCount(InstanceFeatureID.featureCount), + _nullFeatureID(InstanceFeatureID.nullFeatureId.value_or(-1)), + _propertyTableIndex(InstanceFeatureID.propertyTable.value_or(-1)), + _label(FString(InstanceFeatureID.label.value_or("").c_str())) { + FString propertyTableName; + + // For backwards compatibility with GetFeatureTableName. + const CesiumGltf::ExtensionModelExtStructuralMetadata* pMetadata = + InModel.getExtension(); + if (pMetadata && this->_propertyTableIndex >= 0) { + size_t index = static_cast(_propertyTableIndex); + if (index < pMetadata->propertyTables.size()) { + const CesiumGltf::PropertyTable& propertyTable = + pMetadata->propertyTables[index]; + std::string name = propertyTable.name.value_or(""); + propertyTableName = FString(name.c_str()); + } + } + + if (InstanceFeatureID.attribute) { + _featureID = FCesiumFeatureIdAttribute( + InModel, + Node, + *InstanceFeatureID.attribute, + propertyTableName); + } else if (_featureCount > 0) { + _featureIDSetType = ECesiumFeatureIdSetType::InstanceImplicit; + } +} + const ECesiumFeatureIdSetType UCesiumFeatureIdSetBlueprintLibrary::GetFeatureIDSetType( UPARAM(ref) const FCesiumFeatureIdSet& FeatureIDSet) { @@ -72,7 +108,8 @@ UCesiumFeatureIdSetBlueprintLibrary::GetFeatureIDSetType( const FCesiumFeatureIdAttribute& UCesiumFeatureIdSetBlueprintLibrary::GetAsFeatureIDAttribute( UPARAM(ref) const FCesiumFeatureIdSet& FeatureIDSet) { - if (FeatureIDSet._featureIDSetType == ECesiumFeatureIdSetType::Attribute) { + if (FeatureIDSet._featureIDSetType == ECesiumFeatureIdSetType::Attribute || + FeatureIDSet._featureIDSetType == ECesiumFeatureIdSetType::Instance) { return std::get(FeatureIDSet._featureID); } @@ -115,7 +152,7 @@ int64 UCesiumFeatureIdSetBlueprintLibrary::GetFeatureIDForVertex( if (FeatureIDSet._featureIDSetType == ECesiumFeatureIdSetType::Attribute) { FCesiumFeatureIdAttribute attribute = std::get(FeatureIDSet._featureID); - return UCesiumFeatureIdAttributeBlueprintLibrary::GetFeatureIDForVertex( + return UCesiumFeatureIdAttributeBlueprintLibrary::GetFeatureID( attribute, VertexIndex); } @@ -137,9 +174,40 @@ int64 UCesiumFeatureIdSetBlueprintLibrary::GetFeatureIDForVertex( return -1; } +int64 UCesiumFeatureIdSetBlueprintLibrary::GetFeatureIDForInstance( + UPARAM(ref) const FCesiumFeatureIdSet& FeatureIDSet, + int64 InstanceIndex) { + ECesiumFeatureIdSetType type = FeatureIDSet._featureIDSetType; + if (type == ECesiumFeatureIdSetType::InstanceImplicit) { + return InstanceIndex; + } else if ( + type != ECesiumFeatureIdSetType::Instance || + !std::holds_alternative( + FeatureIDSet._featureID) || + InstanceIndex < 0) { + return -1; + } + const auto& featureIdAttribute = + std::get(FeatureIDSet._featureID); + return UCesiumFeatureIdAttributeBlueprintLibrary::GetFeatureID( + featureIdAttribute, + InstanceIndex); +} + int64 UCesiumFeatureIdSetBlueprintLibrary::GetFeatureIDFromHit( UPARAM(ref) const FCesiumFeatureIdSet& FeatureIDSet, const FHitResult& Hit) { + // FeatureIDs from instanced geometry take precedence. + const auto* pInstancedComponent = + Cast(Hit.Component); + if (IsValid(pInstancedComponent)) { + const FCesiumPrimitiveFeatures& instanceFeatures = + *pInstancedComponent->pInstanceFeatures; + return UCesiumPrimitiveFeaturesBlueprintLibrary::GetFeatureIDFromInstance( + instanceFeatures, + Hit.Item); + } + if (FeatureIDSet._featureIDSetType == ECesiumFeatureIdSetType::Texture) { FCesiumFeatureIdTexture texture = std::get(FeatureIDSet._featureID); @@ -171,7 +239,7 @@ int64 UCesiumFeatureIdSetBlueprintLibrary::GetFeatureIDFromHit( if (FeatureIDSet._featureIDSetType == ECesiumFeatureIdSetType::Attribute) { FCesiumFeatureIdAttribute attribute = std::get(FeatureIDSet._featureID); - return UCesiumFeatureIdAttributeBlueprintLibrary::GetFeatureIDForVertex( + return UCesiumFeatureIdAttributeBlueprintLibrary::GetFeatureID( attribute, VertexIndex); } diff --git a/Source/CesiumRuntime/Private/CesiumFeatureIdTexture.cpp b/Source/CesiumRuntime/Private/CesiumFeatureIdTexture.cpp index 7b5125dcb..8ee2edb37 100644 --- a/Source/CesiumRuntime/Private/CesiumFeatureIdTexture.cpp +++ b/Source/CesiumRuntime/Private/CesiumFeatureIdTexture.cpp @@ -8,19 +8,17 @@ #include -using namespace CesiumGltf; - FCesiumFeatureIdTexture::FCesiumFeatureIdTexture( - const Model& Model, - const MeshPrimitive& Primitive, - const FeatureIdTexture& FeatureIdTexture, + const CesiumGltf::Model& Model, + const CesiumGltf::MeshPrimitive& Primitive, + const CesiumGltf::FeatureIdTexture& FeatureIdTexture, const FString& PropertyTableName) : _status(ECesiumFeatureIdTextureStatus::ErrorInvalidTexture), _featureIdTextureView(), _texCoordAccessor(), _textureCoordinateSetIndex(FeatureIdTexture.texCoord), _propertyTableName(PropertyTableName) { - TextureViewOptions options; + CesiumGltf::TextureViewOptions options; options.applyKhrTextureTransformExtension = true; if (FeatureIdTexture.extras.find("makeImageCopy") != @@ -30,13 +28,13 @@ FCesiumFeatureIdTexture::FCesiumFeatureIdTexture( } this->_featureIdTextureView = - FeatureIdTextureView(Model, FeatureIdTexture, options); + CesiumGltf::FeatureIdTextureView(Model, FeatureIdTexture, options); switch (_featureIdTextureView.status()) { - case FeatureIdTextureViewStatus::Valid: + case CesiumGltf::FeatureIdTextureViewStatus::Valid: this->_status = ECesiumFeatureIdTextureStatus::Valid; break; - case FeatureIdTextureViewStatus::ErrorInvalidChannels: + case CesiumGltf::FeatureIdTextureViewStatus::ErrorInvalidChannels: this->_status = ECesiumFeatureIdTextureStatus::ErrorInvalidTextureAccess; return; default: diff --git a/Source/CesiumRuntime/Private/CesiumFeaturesMetadataComponent.cpp b/Source/CesiumRuntime/Private/CesiumFeaturesMetadataComponent.cpp index 9b0212cb2..ac2d9bc8f 100644 --- a/Source/CesiumRuntime/Private/CesiumFeaturesMetadataComponent.cpp +++ b/Source/CesiumRuntime/Private/CesiumFeaturesMetadataComponent.cpp @@ -26,6 +26,8 @@ #include "Materials/MaterialExpressionFunctionOutput.h" #include "Materials/MaterialExpressionIf.h" #include "Materials/MaterialExpressionMaterialFunctionCall.h" +#include "Materials/MaterialExpressionPerInstanceCustomData.h" +#include "Materials/MaterialExpressionRound.h" #include "Materials/MaterialExpressionScalarParameter.h" #include "Materials/MaterialExpressionSetMaterialAttributes.h" #include "Materials/MaterialExpressionTextureCoordinate.h" @@ -37,12 +39,6 @@ #include "Subsystems/AssetEditorSubsystem.h" #include "UObject/Package.h" -#if ENGINE_VERSION_5_3_OR_HIGHER -#define GET_INPUTS_MEMBER GetInputsView -#else -#define GET_INPUTS_MEMBER GetInputs -#endif - extern UNREALED_API class UEditorEngine* GEditor; using namespace CesiumEncodedFeaturesMetadata; @@ -274,9 +270,15 @@ void AutoFillPropertyTextureDescriptions( void AutoFillFeatureIdSetDescriptions( TArray& Descriptions, const FCesiumPrimitiveFeatures& Features, + const FCesiumPrimitiveFeatures* InstanceFeatures, const TArray& PropertyTables) { - const TArray featureIDSets = + TArray featureIDSets = UCesiumPrimitiveFeaturesBlueprintLibrary::GetFeatureIDSets(Features); + if (InstanceFeatures) { + featureIDSets.Append( + UCesiumPrimitiveFeaturesBlueprintLibrary::GetFeatureIDSets( + *InstanceFeatures)); + } int32 featureIDTextureCounter = 0; for (const FCesiumFeatureIdSet& featureIDSet : featureIDSets) { @@ -391,9 +393,16 @@ void UCesiumFeaturesMetadataComponent::AutoFill() { const TArray& propertyTables = UCesiumModelMetadataBlueprintLibrary::GetPropertyTables( modelMetadata); + const FCesiumPrimitiveFeatures* pInstanceFeatures = nullptr; + const auto* pInstancedComponent = + Cast(pChildComponent); + if (pInstancedComponent) { + pInstanceFeatures = pInstancedComponent->pInstanceFeatures.Get(); + } AutoFillFeatureIdSetDescriptions( this->FeatureIdSets, primitiveFeatures, + pInstanceFeatures, propertyTables); const FCesiumPrimitiveMetadata& primitiveMetadata = primData.Metadata; @@ -444,6 +453,7 @@ struct MaterialFunctionLibrary { UMaterialFunction* TransformTexCoords = nullptr; UMaterialFunction* GetFeatureIdsFromAttribute = nullptr; UMaterialFunction* GetFeatureIdsFromTexture = nullptr; + UMaterialFunction* GetFeatureIdsFromInstance = nullptr; MaterialFunctionLibrary() : SelectTexCoords(LoadMaterialFunction( @@ -453,13 +463,16 @@ struct MaterialFunctionLibrary { GetFeatureIdsFromAttribute(LoadMaterialFunction( "/CesiumForUnreal/Materials/MaterialFunctions/CesiumGetFeatureIdsFromAttribute.CesiumGetFeatureIdsFromAttribute")), GetFeatureIdsFromTexture(LoadMaterialFunction( - "/CesiumForUnreal/Materials/MaterialFunctions/CesiumGetFeatureIdsFromTexture.CesiumGetFeatureIdsFromTexture")) { + "/CesiumForUnreal/Materials/MaterialFunctions/CesiumGetFeatureIdsFromTexture.CesiumGetFeatureIdsFromTexture")), + GetFeatureIdsFromInstance(LoadMaterialFunction( + "/CesiumForUnreal/Materials/MaterialFunctions/CesiumGetFeatureIdsFromInstance.CesiumGetFeatureIdsFromInstance")) { } bool isValid() { return SelectTexCoords != nullptr && GetFeatureIdsFromAttribute != nullptr && - GetFeatureIdsFromTexture != nullptr; + GetFeatureIdsFromTexture != nullptr && + GetFeatureIdsFromInstance != nullptr; } }; } // namespace @@ -474,7 +487,8 @@ static void ClassifyNodes( FunctionLibrary.GetFeatureIdsFromAttribute; const UMaterialFunction* GetFeatureIdsFromTextureFunction = FunctionLibrary.GetFeatureIdsFromTexture; - + const UMaterialFunction* GetFeatureIdsFromInstanceFunction = + FunctionLibrary.GetFeatureIdsFromInstance; for (const TObjectPtr& Node : Layer->GetExpressionCollection().Expressions) { // Check if this node is marked as autogenerated. @@ -513,7 +527,8 @@ static void ClassifyNodes( const FName& name = FunctionCallNode->MaterialFunction->GetFName(); if (name == GetFeatureIdsFromAttributeFunction->GetFName() || - name == GetFeatureIdsFromTextureFunction->GetFName()) { + name == GetFeatureIdsFromTextureFunction->GetFName() || + name == GetFeatureIdsFromInstanceFunction->GetFName()) { Classification.GetFeatureIdNodes.Add(FunctionCallNode); } } else { @@ -545,7 +560,7 @@ static void ClearAutoGeneratedNodes( // Should not happen, but just in case, this node would be invalid. Break // any user-made connections to this node and don't attempt to remap it. for (UMaterialExpression* UserNode : Classification.UserAddedNodes) { - for (FExpressionInput* Input : UserNode->GET_INPUTS_MEMBER()) { + for (FExpressionInput* Input : UserNode->GetInputsView()) { if (Input->Expression == GetFeatureIdNode && Input->OutputIndex == 0) { Input->Expression = nullptr; @@ -570,7 +585,7 @@ static void ClearAutoGeneratedNodes( // In case, treat the node as invalid. Break any user-made connections to // this node and don't attempt to remap it. for (UMaterialExpression* UserNode : Classification.UserAddedNodes) { - for (FExpressionInput* Input : UserNode->GET_INPUTS_MEMBER()) { + for (FExpressionInput* Input : UserNode->GetInputsView()) { if (Input->Expression == GetFeatureIdNode && Input->OutputIndex == 0) { Input->Expression = nullptr; @@ -583,7 +598,7 @@ static void ClearAutoGeneratedNodes( FString Key = GetFeatureIdNode->GetDescription() + ParameterName; TArray Connections; for (UMaterialExpression* UserNode : Classification.UserAddedNodes) { - for (FExpressionInput* Input : UserNode->GET_INPUTS_MEMBER()) { + for (FExpressionInput* Input : UserNode->GetInputsView()) { // Look for user-made connections to this node. if (Input->Expression == GetFeatureIdNode && Input->OutputIndex == 0) { Connections.Add(Input); @@ -607,7 +622,7 @@ static void ClearAutoGeneratedNodes( // Look for user-made connections to this property. TArray Connections; for (UMaterialExpression* UserNode : Classification.UserAddedNodes) { - for (FExpressionInput* Input : UserNode->GET_INPUTS_MEMBER()) { + for (FExpressionInput* Input : UserNode->GetInputsView()) { if (Input->Expression == GetPropertyValueNode && Input->OutputIndex == OutputIndex) { Connections.Add(Input); @@ -634,7 +649,7 @@ static void ClearAutoGeneratedNodes( // Look for user-made connections to this property. TArray Connections; for (UMaterialExpression* UserNode : Classification.UserAddedNodes) { - for (FExpressionInput* Input : UserNode->GET_INPUTS_MEMBER()) { + for (FExpressionInput* Input : UserNode->GetInputsView()) { if (Input->Expression == ApplyValueTransformNode && Input->OutputIndex == OutputIndex) { Connections.Add(Input); @@ -680,7 +695,7 @@ static void ClearAutoGeneratedNodes( // In case, treat the node as invalid. Break any user-made connections to // this node and don't attempt to remap it. for (UMaterialExpression* UserNode : Classification.UserAddedNodes) { - for (FExpressionInput* Input : UserNode->GET_INPUTS_MEMBER()) { + for (FExpressionInput* Input : UserNode->GetInputsView()) { if (Input->Expression == IfNode && Input->OutputIndex == 0) { Input->Expression = nullptr; } @@ -692,7 +707,7 @@ static void ClearAutoGeneratedNodes( FString Key = IfNode->GetDescription() + IfNodeName; TArray Connections; for (UMaterialExpression* UserNode : Classification.UserAddedNodes) { - for (FExpressionInput* Input : UserNode->GET_INPUTS_MEMBER()) { + for (FExpressionInput* Input : UserNode->GetInputsView()) { // Look for user-made connections to this node. if (Input->Expression == IfNode && Input->OutputIndex == 0) { Connections.Add(Input); @@ -748,15 +763,17 @@ static void RemapUserConnections( for (UMaterialExpressionMaterialFunctionCall* GetFeatureIdNode : Classification.GetFeatureIdNodes) { const auto Inputs = GetFeatureIdNode->FunctionInputs; - const auto Parameter = - Cast(Inputs[0].Input.Expression); - FString ParameterName = Parameter->ParameterName.ToString(); + if (!Inputs.IsEmpty()) { + const auto Parameter = + Cast(Inputs[0].Input.Expression); + FString ParameterName = Parameter->ParameterName.ToString(); - FString Key = GetFeatureIdNode->GetDescription() + ParameterName; - TArray* pConnections = ConnectionOutputRemap.Find(Key); - if (pConnections) { - for (FExpressionInput* pConnection : *pConnections) { - pConnection->Connect(0, GetFeatureIdNode); + FString Key = GetFeatureIdNode->GetDescription() + ParameterName; + TArray* pConnections = ConnectionOutputRemap.Find(Key); + if (pConnections) { + for (FExpressionInput* pConnection : *pConnections) { + pConnection->Connect(0, GetFeatureIdNode); + } } } } @@ -920,24 +937,6 @@ FString GetSwizzleForEncodedType(ECesiumEncodedMetadataType Type) { }; } -bool IsSupportedPropertyTextureProperty( - const FCesiumMetadataPropertyDetails& PropertyDetails) { - if (PropertyDetails.bIsArray && - PropertyDetails.Type != ECesiumMetadataType::Scalar) { - // Only scalar arrays are supported. - return false; - } - - uint32 byteSize = GetMetadataTypeByteSize( - PropertyDetails.Type, - PropertyDetails.ComponentType); - if (PropertyDetails.bIsArray) { - byteSize *= PropertyDetails.ArraySize; - } - - return byteSize > 0 && byteSize <= 4; -} - /** * @brief Generates code for assembling metadata values from a scalar property * texture property. @@ -1827,7 +1826,7 @@ void GenerateNodesForPropertyTable( UMaterialFunctionMaterialLayer* TargetMaterialLayer, int32& NodeX, int32& NodeY, - UMaterialExpressionMaterialFunctionCall* GetFeatureIdCall) { + UMaterialExpression* GetFeatureExpression) { int32 BeginSectionX = NodeX; // This value is used by parameters on the left side of the // "GetPropertyValues" function... @@ -1867,7 +1866,7 @@ void GenerateNodesForPropertyTable( FCustomInput& FeatureIDInput = GetPropertyValuesFunction->Inputs[0]; FeatureIDInput.InputName = FName("FeatureID"); - FeatureIDInput.Input.Expression = GetFeatureIdCall; + FeatureIDInput.Input.Expression = GetFeatureExpression; GetPropertyValuesFunction->AdditionalOutputs.Reserve( PropertyTable.Properties.Num()); @@ -2062,7 +2061,7 @@ void GenerateNodesForPropertyTexture( for (const FCesiumPropertyTexturePropertyDescription& Property : PropertyTexture.Properties) { - if (!IsSupportedPropertyTextureProperty(Property.PropertyDetails)) { + if (!isSupportedPropertyTextureProperty(Property.PropertyDetails)) { // Ignore properties that are unsupported, i.e., properties that require // more than four bytes to parse values from. This limitation is imposed // by cesium-native because only single-byte channels are supported. @@ -2351,6 +2350,27 @@ void GenerateNodesForPropertyTexture( NodeY = FMath::Max(PropertyDataSectionY, PropertyTransformsSectionY) + Incr; } +UMaterialExpression* GenerateInstanceNodes( + TArray& AutoGeneratedNodes, + UMaterialFunctionMaterialLayer* TargetMaterialLayer, + UMaterialFunction* GetFeatureIdsFromInstanceFunction, + int32& NodeX, + int32& NodeY) { + UMaterialExpressionMaterialFunctionCall* GetFeatureIds = + NewObject(TargetMaterialLayer); + GetFeatureIds->MaterialFunction = GetFeatureIdsFromInstanceFunction; + GetFeatureIds->MaterialExpressionEditorX = NodeX; + GetFeatureIds->MaterialExpressionEditorY = NodeY; + + GetFeatureIdsFromInstanceFunction->GetInputsAndOutputs( + GetFeatureIds->FunctionInputs, + GetFeatureIds->FunctionOutputs); + + NodeX += 2 * Incr; + AutoGeneratedNodes.Add(GetFeatureIds); + return GetFeatureIds; +} + void GenerateMaterialNodes( UCesiumFeaturesMetadataComponent* pComponent, TArray& AutoGeneratedNodes, @@ -2372,17 +2392,25 @@ void GenerateMaterialNodes( } UMaterialExpressionMaterialFunctionCall* GetFeatureIdCall = nullptr; + UMaterialExpression* LastNode = nullptr; if (featureIdSet.Type == ECesiumFeatureIdSetType::Texture) { - GetFeatureIdCall = GenerateNodesForFeatureIdTexture( + LastNode = GenerateNodesForFeatureIdTexture( featureIdSet, AutoGeneratedNodes, pComponent->TargetMaterialLayer, FunctionLibrary, NodeX, NodeY); + } else if (featureIdSet.Type == ECesiumFeatureIdSetType::Instance) { + LastNode = GenerateInstanceNodes( + AutoGeneratedNodes, + pComponent->TargetMaterialLayer, + FunctionLibrary.GetFeatureIdsFromInstance, + NodeX, + NodeY); } else { // Handle implicit feature IDs the same as feature ID attributes - GetFeatureIdCall = GenerateNodesForFeatureIdAttribute( + LastNode = GenerateNodesForFeatureIdAttribute( featureIdSet, AutoGeneratedNodes, pComponent->TargetMaterialLayer, @@ -2391,7 +2419,6 @@ void GenerateMaterialNodes( NodeY); } - UMaterialExpression* LastNode = GetFeatureIdCall; int32 BeginSectionY = NodeY; if (!featureIdSet.PropertyTableName.IsEmpty()) { @@ -2410,7 +2437,7 @@ void GenerateMaterialNodes( pComponent->TargetMaterialLayer, NodeX, NodeY, - GetFeatureIdCall); + LastNode); GeneratedPropertyTableNames.Add(pPropertyTable->Name); } } diff --git a/Source/CesiumRuntime/Private/CesiumFlyToComponent.cpp b/Source/CesiumRuntime/Private/CesiumFlyToComponent.cpp index cd8997afd..4601159c7 100644 --- a/Source/CesiumRuntime/Private/CesiumFlyToComponent.cpp +++ b/Source/CesiumRuntime/Private/CesiumFlyToComponent.cpp @@ -10,7 +10,7 @@ #include "UObject/ConstructorHelpers.h" #include "VecMath.h" -#include +#include UCesiumFlyToComponent::UCesiumFlyToComponent() { // Structure to hold one-time initialization @@ -60,11 +60,17 @@ void UCesiumFlyToComponent::FlyToLocationEarthCenteredEarthFixed( // Compute source location in ECEF FVector ecefSource = GlobeAnchor->GetEarthCenteredEarthFixedPosition(); + // Obtain Ellipsoid + UCesiumEllipsoid* ellipsoid = + GlobeAnchor->ResolveGeoreference()->GetEllipsoid(); + + check(IsValid(ellipsoid)); + // Create curve std::optional curve = CesiumGeospatial::SimplePlanarEllipsoidCurve:: fromEarthCenteredEarthFixedCoordinates( - CesiumGeospatial::Ellipsoid::WGS84, + ellipsoid->GetNativeEllipsoid(), glm::dvec3(ecefSource.X, ecefSource.Y, ecefSource.Z), glm::dvec3( EarthCenteredEarthFixedDestination.X, @@ -110,8 +116,11 @@ void UCesiumFlyToComponent::FlyToLocationLongitudeLatitudeHeight( double YawAtDestination, double PitchAtDestination, bool CanInterruptByMoving) { + UCesiumEllipsoid* ellipsoid = + this->GetGlobeAnchor()->ResolveGeoreference()->GetEllipsoid(); + FVector Ecef = - UCesiumWgs84Ellipsoid::LongitudeLatitudeHeightToEarthCenteredEarthFixed( + ellipsoid->LongitudeLatitudeHeightToEllipsoidCenteredEllipsoidFixed( LongitudeLatitudeHeightDestination); this->FlyToLocationEarthCenteredEarthFixed( Ecef, @@ -153,6 +162,10 @@ void UCesiumFlyToComponent::FlyToLocationUnreal( CanInterruptByMoving); } +bool UCesiumFlyToComponent::IsFlightInProgress() const { + return this->_flightInProgress; +} + void UCesiumFlyToComponent::InterruptFlight() { this->_flightInProgress = false; diff --git a/Source/CesiumRuntime/Private/CesiumGeoreference.cpp b/Source/CesiumRuntime/Private/CesiumGeoreference.cpp index 0a564dd71..bf374f3d5 100644 --- a/Source/CesiumRuntime/Private/CesiumGeoreference.cpp +++ b/Source/CesiumRuntime/Private/CesiumGeoreference.cpp @@ -2,23 +2,26 @@ #include "CesiumGeoreference.h" #include "Camera/PlayerCameraManager.h" +#include "Cesium3DTileset.h" #include "CesiumActors.h" #include "CesiumCommon.h" #include "CesiumCustomVersion.h" #include "CesiumGeospatial/Cartographic.h" +#include "CesiumGlobeAnchorComponent.h" #include "CesiumOriginShiftComponent.h" #include "CesiumRuntime.h" #include "CesiumSubLevelComponent.h" #include "CesiumSubLevelSwitcherComponent.h" +#include "CesiumSunSky.h" #include "CesiumTransforms.h" #include "CesiumUtility/Math.h" -#include "CesiumWgs84Ellipsoid.h" #include "Engine/LevelStreaming.h" #include "Engine/World.h" #include "Engine/WorldComposition.h" #include "EngineUtils.h" #include "GameFramework/PlayerController.h" #include "GeoTransforms.h" +#include "Kismet/GameplayStatics.h" #include "LevelInstance/LevelInstanceActor.h" #include "Math/Matrix.h" #include "Math/RotationTranslationMatrix.h" @@ -48,17 +51,6 @@ using namespace CesiumGeospatial; namespace { -LocalHorizontalCoordinateSystem -createCoordinateSystem(const FVector& center, double scale) { - return LocalHorizontalCoordinateSystem( - VecMath::createVector3D(center), - LocalDirection::East, - LocalDirection::South, - LocalDirection::Up, - 1.0 / scale, - Ellipsoid::WGS84); -} - ACesiumGeoreference* FindGeoreferenceAncestor(AActor* Actor) { AActor* Current = Actor; @@ -179,6 +171,18 @@ ACesiumGeoreference::GetDefaultGeoreferenceForActor(AActor* Actor) { return ACesiumGeoreference::GetDefaultGeoreference(Actor); } +UCesiumEllipsoid* ACesiumGeoreference::GetEllipsoid() const { + if (!IsValid(this->Ellipsoid)) { + UE_LOG( + LogCesium, + Error, + TEXT( + "ACesiumGeoreference needs a valid Ellipsoid asset. Calculations will use a unit ellipsoid as a placeholder.")); + return UCesiumEllipsoid::Create(FVector::OneVector); + } + return this->Ellipsoid; +} + FVector ACesiumGeoreference::GetOriginLongitudeLatitudeHeight() const { return FVector(OriginLongitude, OriginLatitude, OriginHeight); } @@ -192,16 +196,17 @@ void ACesiumGeoreference::SetOriginLongitudeLatitudeHeight( } FVector ACesiumGeoreference::GetOriginEarthCenteredEarthFixed() const { - return UCesiumWgs84Ellipsoid:: - LongitudeLatitudeHeightToEarthCenteredEarthFixed( + return this->GetEllipsoid() + ->LongitudeLatitudeHeightToEllipsoidCenteredEllipsoidFixed( this->GetOriginLongitudeLatitudeHeight()); } void ACesiumGeoreference::SetOriginEarthCenteredEarthFixed( const FVector& TargetEarthCenteredEarthFixed) { this->SetOriginLongitudeLatitudeHeight( - UCesiumWgs84Ellipsoid::EarthCenteredEarthFixedToLongitudeLatitudeHeight( - TargetEarthCenteredEarthFixed)); + this->GetEllipsoid() + ->EllipsoidCenteredEllipsoidFixedToLongitudeLatitudeHeight( + TargetEarthCenteredEarthFixed)); } EOriginPlacement ACesiumGeoreference::GetOriginPlacement() const { @@ -259,6 +264,13 @@ void ACesiumGeoreference::SetSubLevelCamera(APlayerCameraManager* NewValue) { this->SubLevelCamera_DEPRECATED = NewValue; } +void ACesiumGeoreference::SetEllipsoid(UCesiumEllipsoid* NewEllipsoid) { + UCesiumEllipsoid* OldEllipsoid = this->Ellipsoid; + this->Ellipsoid = NewEllipsoid; + this->OnEllipsoidChanged.Broadcast(OldEllipsoid, NewEllipsoid); + this->UpdateGeoreference(); +} + #if WITH_EDITOR bool ACesiumGeoreference::GetShowLoadRadii() const { return this->ShowLoadRadii; @@ -272,14 +284,15 @@ void ACesiumGeoreference::SetShowLoadRadii(bool NewValue) { FVector ACesiumGeoreference::TransformLongitudeLatitudeHeightPositionToUnreal( const FVector& LongitudeLatitudeHeight) const { return this->TransformEarthCenteredEarthFixedPositionToUnreal( - UCesiumWgs84Ellipsoid::LongitudeLatitudeHeightToEarthCenteredEarthFixed( - LongitudeLatitudeHeight)); + this->GetEllipsoid() + ->LongitudeLatitudeHeightToEllipsoidCenteredEllipsoidFixed( + LongitudeLatitudeHeight)); } FVector ACesiumGeoreference::TransformUnrealPositionToLongitudeLatitudeHeight( const FVector& UnrealPosition) const { - return UCesiumWgs84Ellipsoid:: - EarthCenteredEarthFixedToLongitudeLatitudeHeight( + return this->GetEllipsoid() + ->EllipsoidCenteredEllipsoidFixedToLongitudeLatitudeHeight( this->TransformUnrealPositionToEarthCenteredEarthFixed( UnrealPosition)); } @@ -351,7 +364,9 @@ FMatrix ACesiumGeoreference:: ComputeEastSouthUpAtEarthCenteredEarthFixedPositionToUnrealTransformation( const FVector& EarthCenteredEarthFixedPosition) const { LocalHorizontalCoordinateSystem newLocal = - createCoordinateSystem(EarthCenteredEarthFixedPosition, this->GetScale()); + this->GetEllipsoid()->CreateCoordinateSystem( + EarthCenteredEarthFixedPosition, + this->GetScale()); return VecMath::createMatrix( newLocal.computeTransformationToAnotherLocal(this->_coordinateSystem)); } @@ -413,6 +428,24 @@ void ACesiumGeoreference::PlaceGeoreferenceOriginHere() { .Rotator()); pEditorViewportClient->SetViewLocation( this->GetActorTransform().TransformPosition(FVector::ZeroVector)); + + const double NewLongitude = this->GetOriginLongitude(); + + // The georeference origin may have moved to a location across the world + // where it is nighttime in the currently set time zone. To improve user + // experience, we update the timezones of all the CesiumSunSky instances using + // this georeference so that the view is not completely dark. + for (TActorIterator It(pWorld); It; ++It) { + if (!IsValid(It->GlobeAnchor)) { + continue; + } + + ACesiumGeoreference* ResolvedGeoreference = + It->GlobeAnchor->GetResolvedGeoreference(); + if (IsValid(ResolvedGeoreference) && ResolvedGeoreference == this) { + It->EstimateTimeZoneForLongitude(NewLongitude); + } + } } void ACesiumGeoreference::CreateSubLevelHere() { @@ -684,6 +717,7 @@ void ACesiumGeoreference::PostEditChangeProperty(FPropertyChangedEvent& event) { CESIUM_POST_EDIT_CHANGE(propertyName, ACesiumGeoreference, OriginLatitude); CESIUM_POST_EDIT_CHANGE(propertyName, ACesiumGeoreference, OriginHeight); CESIUM_POST_EDIT_CHANGE(propertyName, ACesiumGeoreference, Scale); + CESIUM_POST_EDIT_CHANGE(propertyName, ACesiumGeoreference, Ellipsoid); } namespace { @@ -810,22 +844,37 @@ PRAGMA_ENABLE_DEPRECATION_WARNINGS FVector ACesiumGeoreference::TransformLongitudeLatitudeHeightToEcef( const FVector& longitudeLatitudeHeight) const { - return UCesiumWgs84Ellipsoid:: - LongitudeLatitudeHeightToEarthCenteredEarthFixed(longitudeLatitudeHeight); + return this->GetEllipsoid() + ->LongitudeLatitudeHeightToEllipsoidCenteredEllipsoidFixed( + longitudeLatitudeHeight); } FVector ACesiumGeoreference::TransformEcefToLongitudeLatitudeHeight( const FVector& ecef) const { - return UCesiumWgs84Ellipsoid:: - EarthCenteredEarthFixedToLongitudeLatitudeHeight(ecef); + return this->GetEllipsoid() + ->EllipsoidCenteredEllipsoidFixedToLongitudeLatitudeHeight(ecef); } FMatrix ACesiumGeoreference::ComputeEastNorthUpToEcef(const FVector& ecef) const { - return UCesiumWgs84Ellipsoid::EastNorthUpToEarthCenteredEarthFixed(ecef); + return this->GetEllipsoid()->EastNorthUpToEllipsoidCenteredEllipsoidFixed( + ecef); } ACesiumGeoreference::ACesiumGeoreference() : AActor() { + struct FConstructorStatics { + ConstructorHelpers::FObjectFinder DefaultEllipsoid; + + FConstructorStatics() + : DefaultEllipsoid(TEXT( + "/Script/CesiumRuntime.CesiumEllipsoid'/CesiumForUnreal/WGS84.WGS84'")) { + + } + }; + + static FConstructorStatics ConstructorStatics; + this->Ellipsoid = ConstructorStatics.DefaultEllipsoid.Object; + PrimaryActorTick.bCanEverTick = true; this->Root = CreateDefaultSubobject(TEXT("Root")); @@ -871,7 +920,7 @@ void ACesiumGeoreference::UpdateGeoreference() { GeoTransforms ACesiumGeoreference::GetGeoTransforms() const noexcept { // Because GeoTransforms is deprecated, we only lazily update it. return GeoTransforms( - Ellipsoid::WGS84, + this->GetEllipsoid()->GetNativeEllipsoid(), glm::dvec3(this->_coordinateSystem.getLocalToEcefTransformation()[3]), this->GetScale() / 100.0); } @@ -882,7 +931,7 @@ FName ACesiumGeoreference::DEFAULT_GEOREFERENCE_TAG = void ACesiumGeoreference::_updateCoordinateSystem() { if (this->OriginPlacement == EOriginPlacement::CartographicOrigin) { FVector origin = this->GetOriginLongitudeLatitudeHeight(); - this->_coordinateSystem = createCoordinateSystem( + this->_coordinateSystem = this->GetEllipsoid()->CreateCoordinateSystem( this->GetOriginEarthCenteredEarthFixed(), this->GetScale()); } else { diff --git a/Source/CesiumRuntime/Private/CesiumGlobeAnchorComponent.cpp b/Source/CesiumRuntime/Private/CesiumGlobeAnchorComponent.cpp index fe39cc884..3ad84b02c 100644 --- a/Source/CesiumRuntime/Private/CesiumGlobeAnchorComponent.cpp +++ b/Source/CesiumRuntime/Private/CesiumGlobeAnchorComponent.cpp @@ -9,7 +9,14 @@ #include "Components/SceneComponent.h" #include "GameFramework/Actor.h" #include "VecMath.h" -#include +#include + +// quick macro for ellipsoid existence check +#define ELLIPSOID_CHECK(thiz, ret) \ + if (!IsValid(thiz->GetEllipsoid())) { \ + UE_LOG(LogCesium, Error, TEXT("Expected ellipsoid but got nullptr")); \ + return ret; \ + } // These are the "changes" that can happen to this component, how it detects // them, and what it does about them: @@ -173,11 +180,15 @@ void UCesiumGlobeAnchorComponent::SnapLocalUpToEllipsoidNormal() { return; } + ELLIPSOID_CHECK(this->ResolveGeoreference(), ); + + UCesiumEllipsoid* ellipsoid = this->ResolveGeoreference()->GetEllipsoid(); + // Compute the current local up axis of the actor (the +Z axis) in ECEF FVector up = this->ActorToEarthCenteredEarthFixedMatrix.GetUnitAxis(EAxis::Z); // Compute the surface normal of the ellipsoid - FVector ellipsoidNormal = UCesiumWgs84Ellipsoid::GeodeticSurfaceNormal( + FVector ellipsoidNormal = ellipsoid->GeodeticSurfaceNormal( this->GetEarthCenteredEarthFixedPosition()); // Find the shortest rotation to align local up with the ellipsoid normal @@ -268,27 +279,50 @@ UCesiumGlobeAnchorComponent::ResolveGeoreference(bool bForceReresolve) { return this->ResolvedGeoreference; } +UCesiumEllipsoid* UCesiumGlobeAnchorComponent::GetEllipsoid() const { + ACesiumGeoreference* Georeference = this->GetResolvedGeoreference(); + if (!IsValid(Georeference)) { + Georeference = + ACesiumGeoreference::GetDefaultGeoreferenceForActor(this->GetOwner()); + } + + if (!IsValid(Georeference)) { + UE_LOG( + LogCesium, + Error, + TEXT( + "Unable to find UCesiumGeoreference for UCesiumGlobeAnchorComponent - returning unit ellipsoid.")); + return UCesiumEllipsoid::Create(FVector::OneVector); + } + + return Georeference->GetEllipsoid(); +} + void UCesiumGlobeAnchorComponent::InvalidateResolvedGeoreference() { // This method is deprecated and no longer does anything. } FVector UCesiumGlobeAnchorComponent::GetLongitudeLatitudeHeight() const { - return UCesiumWgs84Ellipsoid:: - EarthCenteredEarthFixedToLongitudeLatitudeHeight( + ELLIPSOID_CHECK(this, FVector::ZeroVector); + return this->GetEllipsoid() + ->EllipsoidCenteredEllipsoidFixedToLongitudeLatitudeHeight( this->GetEarthCenteredEarthFixedPosition()); } void UCesiumGlobeAnchorComponent::MoveToLongitudeLatitudeHeight( const FVector& TargetLongitudeLatitudeHeight) { + ELLIPSOID_CHECK(this, ); this->MoveToEarthCenteredEarthFixedPosition( - UCesiumWgs84Ellipsoid::LongitudeLatitudeHeightToEarthCenteredEarthFixed( - TargetLongitudeLatitudeHeight)); + this->GetEllipsoid() + ->LongitudeLatitudeHeightToEllipsoidCenteredEllipsoidFixed( + TargetLongitudeLatitudeHeight)); } namespace { -CesiumGeospatial::LocalHorizontalCoordinateSystem -createEastSouthUp(const CesiumGeospatial::GlobeAnchor& anchor) { +CesiumGeospatial::LocalHorizontalCoordinateSystem createEastSouthUp( + const CesiumGeospatial::GlobeAnchor& anchor, + const CesiumGeospatial::Ellipsoid& ellipsoid) { glm::dvec3 ecefPosition; CesiumGeometry::Transforms::computeTranslationRotationScaleFromMatrix( anchor.getAnchorToFixedTransform(), @@ -301,7 +335,8 @@ createEastSouthUp(const CesiumGeospatial::GlobeAnchor& anchor) { CesiumGeospatial::LocalDirection::East, CesiumGeospatial::LocalDirection::South, CesiumGeospatial::LocalDirection::Up, - 1.0); + 1.0, + ellipsoid); } } // namespace @@ -321,11 +356,13 @@ FQuat UCesiumGlobeAnchorComponent::GetEastSouthUpRotation() const { return FQuat::Identity; } + ELLIPSOID_CHECK(this, FQuat::Identity); + CesiumGeospatial::GlobeAnchor anchor( VecMath::createMatrix4D(this->ActorToEarthCenteredEarthFixedMatrix)); CesiumGeospatial::LocalHorizontalCoordinateSystem eastSouthUp = - createEastSouthUp(anchor); + createEastSouthUp(anchor, this->GetEllipsoid()->GetNativeEllipsoid()); glm::dmat4 modelToEastSouthUp = anchor.getAnchorToLocalTransform(eastSouthUp); @@ -350,11 +387,13 @@ void UCesiumGlobeAnchorComponent::SetEastSouthUpRotation( return; } + ELLIPSOID_CHECK(this, ); + CesiumGeospatial::GlobeAnchor anchor( VecMath::createMatrix4D(this->ActorToEarthCenteredEarthFixedMatrix)); CesiumGeospatial::LocalHorizontalCoordinateSystem eastSouthUp = - createEastSouthUp(anchor); + createEastSouthUp(anchor, this->GetEllipsoid()->GetNativeEllipsoid()); glm::dmat4 modelToEastSouthUp = anchor.getAnchorToLocalTransform(eastSouthUp); @@ -372,7 +411,14 @@ void UCesiumGlobeAnchorComponent::SetEastSouthUpRotation( VecMath::createQuaternion(EastSouthUpRotation), scale); - anchor.setAnchorToLocalTransform(eastSouthUp, newModelToEastSouthUp, false); + const CesiumGeospatial::Ellipsoid& ellipsoid = + this->ResolveGeoreference()->GetEllipsoid()->GetNativeEllipsoid(); + + anchor.setAnchorToLocalTransform( + eastSouthUp, + newModelToEastSouthUp, + false, + ellipsoid); this->_updateFromNativeGlobeAnchor(anchor); } @@ -641,12 +687,14 @@ CesiumGeospatial::GlobeAnchor UCesiumGlobeAnchorComponent:: local, newModelToLocal); } else { + assert(this->GetEllipsoid() != nullptr); // Create an anchor at the old position and move it to the new one. CesiumGeospatial::GlobeAnchor cppAnchor = this->_createNativeGlobeAnchor(); cppAnchor.setAnchorToLocalTransform( local, newModelToLocal, - this->AdjustOrientationForGlobeWhenMoving); + this->AdjustOrientationForGlobeWhenMoving, + this->GetEllipsoid()->GetNativeEllipsoid()); return cppAnchor; } } @@ -660,12 +708,14 @@ UCesiumGlobeAnchorComponent::_createOrUpdateNativeGlobeAnchorFromECEF( return CesiumGeospatial::GlobeAnchor( VecMath::createMatrix4D(newActorToECEFMatrix)); } else { + assert(this->GetEllipsoid() != nullptr); // Create an anchor at the old position and move it to the new one. CesiumGeospatial::GlobeAnchor cppAnchor( VecMath::createMatrix4D(this->ActorToEarthCenteredEarthFixedMatrix)); cppAnchor.setAnchorToFixedTransform( VecMath::createMatrix4D(newActorToECEFMatrix), - this->AdjustOrientationForGlobeWhenMoving); + this->AdjustOrientationForGlobeWhenMoving, + this->GetEllipsoid()->GetNativeEllipsoid()); return cppAnchor; } } @@ -682,8 +732,7 @@ void UCesiumGlobeAnchorComponent::_updateFromNativeGlobeAnchor( glm::dmat4 anchorToLocal = nativeAnchor.getAnchorToLocalTransform( pGeoreference->GetCoordinateSystem()); - this->_setCurrentRelativeTransform( - FTransform(VecMath::createMatrix(anchorToLocal))); + this->_setCurrentRelativeTransform(VecMath::createTransform(anchorToLocal)); } else { this->_lastRelativeTransformIsValid = false; } diff --git a/Source/CesiumRuntime/Private/CesiumGltfComponent.cpp b/Source/CesiumRuntime/Private/CesiumGltfComponent.cpp index 85be812e6..5522f8136 100644 --- a/Source/CesiumRuntime/Private/CesiumGltfComponent.cpp +++ b/Source/CesiumRuntime/Private/CesiumGltfComponent.cpp @@ -8,6 +8,7 @@ #include "CesiumFeatureIdSet.h" #include "CesiumGltfPointsComponent.h" #include "CesiumGltfPrimitiveComponent.h" +#include "CesiumGltfTextures.h" #include "CesiumMaterialUserData.h" #include "CesiumRasterOverlays.h" #include "CesiumRuntime.h" @@ -40,6 +41,7 @@ #include #include #include +#include #include #include #include @@ -66,7 +68,6 @@ #include "ScopedTransaction.h" #endif -using namespace CesiumGltf; using namespace CesiumTextureUtility; using namespace CreateGltfOptions; using namespace LoadGltfResult; @@ -90,7 +91,7 @@ static uint32_t nextMaterialId = 0; namespace { class HalfConstructedReal : public UCesiumGltfComponent::HalfConstructed { public: - LoadModelResult loadModelResult{}; + LoadedModelResult loadModelResult{}; }; } // namespace @@ -98,12 +99,13 @@ template struct IsAccessorView; template struct IsAccessorView : std::false_type {}; -template struct IsAccessorView> : std::true_type {}; +template +struct IsAccessorView> : std::true_type {}; template static uint32_t updateTextureCoordinates( - const Model& model, - const MeshPrimitive& primitive, + const CesiumGltf::Model& model, + const CesiumGltf::MeshPrimitive& primitive, bool duplicateVertices, TArray& vertices, const TArray& indices, @@ -124,8 +126,8 @@ static uint32_t updateTextureCoordinates( } uint32_t updateTextureCoordinates( - const Model& model, - const MeshPrimitive& primitive, + const CesiumGltf::Model& model, + const CesiumGltf::MeshPrimitive& primitive, bool duplicateVertices, TArray& vertices, const TArray& indices, @@ -147,8 +149,8 @@ uint32_t updateTextureCoordinates( size_t textureCoordinateIndex = gltfToUnrealTexCoordMap.size(); gltfToUnrealTexCoordMap[uvAccessorID] = textureCoordinateIndex; - AccessorView uvAccessor(model, uvAccessorID); - if (uvAccessor.status() != AccessorViewStatus::Valid) { + CesiumGltf::AccessorView uvAccessor(model, uvAccessorID); + if (uvAccessor.status() != CesiumGltf::AccessorViewStatus::Valid) { return 0; } @@ -268,13 +270,23 @@ static void computeTangentSpace(TArray& vertices) { genTangSpaceDefault(&MikkTContext); } -static void setUniformNormals( +static void setUnlitNormals( TArray& vertices, - TMeshVector3 normal) { + const CesiumGeospatial::Ellipsoid& ellipsoid, + const glm::dmat4& vertexToEllipsoidFixed) { + glm::dmat4 ellipsoidFixedToVertex = + glm::affineInverse(vertexToEllipsoidFixed); + for (int i = 0; i < vertices.Num(); i++) { FStaticMeshBuildVertex& v = vertices[i]; v.TangentX = v.TangentY = TMeshVector3(0.0f); - v.TangentZ = normal; + + glm::dvec3 positionFixed = glm::dvec3( + vertexToEllipsoidFixed * + glm::dvec4(VecMath::createVector3D(FVector(v.Position)), 1.0)); + glm::dvec3 normal = ellipsoid.geodeticSurfaceNormal(positionFixed); + v.TangentZ = FVector3f(VecMath::createVector( + glm::normalize(ellipsoidFixedToVertex * glm::dvec4(normal, 0.0)))); } } @@ -313,18 +325,21 @@ BuildChaosTriangleMeshes( const TArray& vertexData, const TArray& indices); -static const Material defaultMaterial; -static const MaterialPBRMetallicRoughness defaultPbrMetallicRoughness; +static const CesiumGltf::Material defaultMaterial; +static const CesiumGltf::MaterialPBRMetallicRoughness + defaultPbrMetallicRoughness; struct ColorVisitor { bool duplicateVertices; TArray& StaticMeshBuildVertices; const TArray& indices; - bool operator()(AccessorView&& invalidView) { return false; } + bool operator()(CesiumGltf::AccessorView&& invalidView) { + return false; + } template bool operator()(TColorView&& colorView) { - if (colorView.status() != AccessorViewStatus::Valid) { + if (colorView.status() != CesiumGltf::AccessorViewStatus::Valid) { return false; } @@ -355,8 +370,9 @@ struct ColorVisitor { } template - static bool - convertColor(const AccessorTypes::VEC3& color, FColor& out) { + static bool convertColor( + const CesiumGltf::AccessorTypes::VEC3& color, + FColor& out) { out.A = 255; return convertElement(color.value[0], out.R) && convertElement(color.value[1], out.G) && @@ -364,8 +380,9 @@ struct ColorVisitor { } template - static bool - convertColor(const AccessorTypes::VEC4& color, FColor& out) { + static bool convertColor( + const CesiumGltf::AccessorTypes::VEC4& color, + FColor& out) { return convertElement(color.value[0], out.R) && convertElement(color.value[1], out.G) && convertElement(color.value[2], out.B) && @@ -400,36 +417,30 @@ struct ColorVisitor { template static TUniquePtr loadTexture( CesiumGltf::Model& model, - const std::optional& gltfTexture, - bool sRGB, - std::vector& textureResources) { - if (!gltfTexture || gltfTexture.value().index < 0 || - gltfTexture.value().index >= model.textures.size()) { - if (gltfTexture && gltfTexture.value().index >= 0) { + const std::optional& gltfTextureInfo, + bool sRGB) { + if (!gltfTextureInfo || gltfTextureInfo.value().index < 0 || + gltfTextureInfo.value().index >= model.textures.size()) { + if (gltfTextureInfo && gltfTextureInfo.value().index >= 0) { UE_LOG( LogCesium, Warning, TEXT("Texture index must be less than %d, but is %d"), model.textures.size(), - gltfTexture.value().index); + gltfTextureInfo.value().index); } return nullptr; } - int32_t textureIndex = gltfTexture.value().index; + int32_t textureIndex = gltfTextureInfo.value().index; CesiumGltf::Texture& texture = model.textures[textureIndex]; - return loadTextureFromModelAnyThreadPart( - model, - texture, - sRGB, - textureResources); + return loadTextureFromModelAnyThreadPart(model, texture, sRGB); } static void applyWaterMask( - Model& model, - const MeshPrimitive& primitive, - LoadPrimitiveResult& primitiveResult, - std::vector& textureResources) { + CesiumGltf::Model& model, + const CesiumGltf::MeshPrimitive& primitive, + LoadedPrimitiveResult& primitiveResult) { // Initialize water mask if needed. auto onlyWaterIt = primitive.extras.find("OnlyWater"); auto onlyLandIt = primitive.extras.find("OnlyLand"); @@ -447,15 +458,12 @@ static void applyWaterMask( waterMaskTextureIdIt->second.isInt64()) { int32_t waterMaskTextureId = static_cast( waterMaskTextureIdIt->second.getInt64OrDefault(-1)); - TextureInfo waterMaskInfo; + CesiumGltf::TextureInfo waterMaskInfo; waterMaskInfo.index = waterMaskTextureId; if (waterMaskTextureId >= 0 && waterMaskTextureId < model.textures.size()) { - primitiveResult.waterMaskTexture = loadTexture( - model, - std::make_optional(waterMaskInfo), - false, - textureResources); + primitiveResult.waterMaskTexture = + loadTexture(model, std::make_optional(waterMaskInfo), false); } } } @@ -502,7 +510,7 @@ static bool hasMaterialTextureConflicts( const CesiumGltf::Material& material, int32_t imageIndex) { if (material.pbrMetallicRoughness) { - const std::optional& maybeBaseColorTexture = + const std::optional& maybeBaseColorTexture = material.pbrMetallicRoughness->baseColorTexture; if (maybeBaseColorTexture && textureUsesSpecifiedImage( model, @@ -511,8 +519,9 @@ static bool hasMaterialTextureConflicts( return true; } - const std::optional& maybeMetallicRoughnessTexture = - material.pbrMetallicRoughness->metallicRoughnessTexture; + const std::optional& + maybeMetallicRoughnessTexture = + material.pbrMetallicRoughness->metallicRoughnessTexture; if (maybeMetallicRoughnessTexture && textureUsesSpecifiedImage( model, @@ -552,8 +561,8 @@ static bool hasMaterialTextureConflicts( * without requiring UVs in the physics bodies. */ static void createTexCoordAccessorsForFeaturesMetadata( - const Model& model, - const MeshPrimitive& primitive, + const CesiumGltf::Model& model, + const CesiumGltf::MeshPrimitive& primitive, const FCesiumPrimitiveFeatures& primitiveFeatures, const FCesiumPrimitiveMetadata& primitiveMetadata, const FCesiumModelMetadata& modelMetadata, @@ -624,8 +633,8 @@ static void createTexCoordAccessorsForFeaturesMetadata( * coordinates for attribute and implicit feature ID sets. */ static void updateTextureCoordinatesForFeaturesMetadata( - const Model& model, - const MeshPrimitive& primitive, + const CesiumGltf::Model& model, + const CesiumGltf::MeshPrimitive& primitive, bool duplicateVertices, TArray& vertices, const TArray& indices, @@ -710,9 +719,10 @@ static void updateTextureCoordinatesForFeaturesMetadata( UCesiumFeatureIdSetBlueprintLibrary::GetAsFeatureIDAttribute( featureIDSet); - int64 vertexCount = - UCesiumFeatureIdAttributeBlueprintLibrary::GetVertexCount( - featureIDAttribute); + // Each feature ID corresponds to a vertex, so the vertex count is just + // the length of the attribute. + int64 vertexCount = UCesiumFeatureIdAttributeBlueprintLibrary::GetCount( + featureIDAttribute); // We encode unsigned integer feature ids as floats in the u-channel of // a texture coordinate slot. @@ -722,8 +732,9 @@ static void updateTextureCoordinatesForFeaturesMetadata( uint32 vertexIndex = indices[i]; if (vertexIndex >= 0 && vertexIndex < vertexCount) { float featureId = static_cast( - UCesiumFeatureIdAttributeBlueprintLibrary:: - GetFeatureIDForVertex(featureIDAttribute, vertexIndex)); + UCesiumFeatureIdAttributeBlueprintLibrary::GetFeatureID( + featureIDAttribute, + vertexIndex)); vertex.UVs[textureCoordinateIndex] = TMeshVector2(featureId, 0.0f); } else { vertex.UVs[textureCoordinateIndex] = TMeshVector2(0.0f, 0.0f); @@ -734,8 +745,9 @@ static void updateTextureCoordinatesForFeaturesMetadata( FStaticMeshBuildVertex& vertex = vertices[i]; if (i < vertexCount) { float featureId = static_cast( - UCesiumFeatureIdAttributeBlueprintLibrary:: - GetFeatureIDForVertex(featureIDAttribute, i)); + UCesiumFeatureIdAttributeBlueprintLibrary::GetFeatureID( + featureIDAttribute, + i)); vertex.UVs[textureCoordinateIndex] = TMeshVector2(featureId, 0.0f); } else { vertex.UVs[textureCoordinateIndex] = TMeshVector2(0.0f, 0.0f); @@ -787,8 +799,8 @@ static void updateTextureCoordinatesForFeaturesMetadata( PRAGMA_DISABLE_DEPRECATION_WARNINGS static void updateTextureCoordinatesForMetadata_DEPRECATED( - const Model& model, - const MeshPrimitive& primitive, + const CesiumGltf::Model& model, + const CesiumGltf::MeshPrimitive& primitive, bool duplicateVertices, TArray& vertices, const TArray& indices, @@ -841,8 +853,8 @@ static void updateTextureCoordinatesForMetadata_DEPRECATED( } } - const ExtensionExtMeshFeatures* pFeatures = - primitive.getExtension(); + const CesiumGltf::ExtensionExtMeshFeatures* pFeatures = + primitive.getExtension(); if (pFeatures) { for (const CesiumEncodedMetadataUtility::EncodedFeatureIdAttribute& @@ -867,9 +879,10 @@ static void updateTextureCoordinatesForMetadata_DEPRECATED( encodedFeatureIdAttribute.name, textureCoordinateIndex); - int64 vertexCount = - UCesiumFeatureIdAttributeBlueprintLibrary::GetVertexCount( - featureIdAttribute); + // Each feature ID corresponds to a vertex, so the vertex count is just + // the length of the attribute. + int64 vertexCount = UCesiumFeatureIdAttributeBlueprintLibrary::GetCount( + featureIdAttribute); // We encode unsigned integer feature ids as floats in the u-channel of // a texture coordinate slot. @@ -879,8 +892,9 @@ static void updateTextureCoordinatesForMetadata_DEPRECATED( uint32 vertexIndex = indices[i]; if (vertexIndex >= 0 && vertexIndex < vertexCount) { float featureId = static_cast( - UCesiumFeatureIdAttributeBlueprintLibrary:: - GetFeatureIDForVertex(featureIdAttribute, vertexIndex)); + UCesiumFeatureIdAttributeBlueprintLibrary::GetFeatureID( + featureIdAttribute, + vertexIndex)); vertex.UVs[textureCoordinateIndex] = TMeshVector2(featureId, 0.0f); } else { vertex.UVs[textureCoordinateIndex] = TMeshVector2(0.0f, 0.0f); @@ -891,8 +905,9 @@ static void updateTextureCoordinatesForMetadata_DEPRECATED( FStaticMeshBuildVertex& vertex = vertices[i]; if (i < vertexCount) { float featureId = static_cast( - UCesiumFeatureIdAttributeBlueprintLibrary:: - GetFeatureIDForVertex(featureIdAttribute, i)); + UCesiumFeatureIdAttributeBlueprintLibrary::GetFeatureID( + featureIdAttribute, + i)); vertex.UVs[textureCoordinateIndex] = TMeshVector2(featureId, 0.0f); } else { vertex.UVs[textureCoordinateIndex] = TMeshVector2(0.0f, 0.0f); @@ -905,17 +920,16 @@ static void updateTextureCoordinatesForMetadata_DEPRECATED( PRAGMA_ENABLE_DEPRECATION_WARNINGS static void loadPrimitiveFeaturesMetadata( - LoadPrimitiveResult& primitiveResult, + LoadedPrimitiveResult& primitiveResult, const CreatePrimitiveOptions& options, CesiumGltf::Model& model, CesiumGltf::MeshPrimitive& primitive, bool duplicateVertices, TArray& vertices, - const TArray& indices, - std::vector& textureResources) { + const TArray& indices) { - ExtensionExtMeshFeatures* pFeatures = - primitive.getExtension(); + CesiumGltf::ExtensionExtMeshFeatures* pFeatures = + primitive.getExtension(); if (pFeatures) { int32_t materialIndex = primitive.material; @@ -953,12 +967,13 @@ static void loadPrimitiveFeaturesMetadata( } } - const ExtensionMeshPrimitiveExtStructuralMetadata* pMetadata = - primitive.getExtension(); + const CesiumGltf::ExtensionMeshPrimitiveExtStructuralMetadata* pMetadata = + primitive.getExtension< + CesiumGltf::ExtensionMeshPrimitiveExtStructuralMetadata>(); const CreateGltfOptions::CreateModelOptions* pModelOptions = options.pMeshOptions->pNodeOptions->pModelOptions; - const LoadGltfResult::LoadModelResult* pModelResult = + const LoadGltfResult::LoadedModelResult* pModelResult = options.pMeshOptions->pNodeOptions->pHalfConstructedModelResult; primitiveResult.Features = @@ -1125,23 +1140,25 @@ constexpr glm::dmat4 yInvertMatrix = { template static void loadPrimitive( - LoadPrimitiveResult& primitiveResult, + LoadedPrimitiveResult& primitiveResult, const glm::dmat4x4& transform, const CreatePrimitiveOptions& options, - const Accessor& positionAccessor, - const AccessorView& positionView, + const CesiumGltf::Accessor& positionAccessor, + const CesiumGltf::AccessorView& positionView, const TIndexAccessor& indicesView, - std::vector& textureResources) { + const CesiumGeospatial::Ellipsoid& ellipsoid) { TRACE_CPUPROFILER_EVENT_SCOPE(Cesium::loadPrimitive) - Model& model = *options.pMeshOptions->pNodeOptions->pModelOptions->pModel; - Mesh& mesh = *options.pMeshOptions->pMesh; - MeshPrimitive& primitive = *options.pPrimitive; + CesiumGltf::Model& model = + *options.pMeshOptions->pNodeOptions->pModelOptions->pModel; + CesiumGltf::Mesh& mesh = model.meshes[options.pMeshOptions->meshIndex]; + CesiumGltf::MeshPrimitive& primitive = + mesh.primitives[options.primitiveIndex]; - if (primitive.mode != MeshPrimitive::Mode::TRIANGLES && - primitive.mode != MeshPrimitive::Mode::TRIANGLE_STRIP && - primitive.mode != MeshPrimitive::Mode::POINTS) { + if (primitive.mode != CesiumGltf::MeshPrimitive::Mode::TRIANGLES && + primitive.mode != CesiumGltf::MeshPrimitive::Mode::TRIANGLE_STRIP && + primitive.mode != CesiumGltf::MeshPrimitive::Mode::POINTS) { // TODO: add support for other primitive types. UE_LOG( LogCesium, @@ -1162,7 +1179,9 @@ static void loadPrimitive( auto meshIt = std::find_if( model.meshes.begin(), model.meshes.end(), - [&mesh](const Mesh& candidate) { return &candidate == &mesh; }); + [&mesh](const CesiumGltf::Mesh& candidate) { + return &candidate == &mesh; + }); if (meshIt != model.meshes.end()) { int64_t meshIndex = meshIt - model.meshes.begin(); name += " mesh " + std::to_string(meshIndex); @@ -1171,7 +1190,7 @@ static void loadPrimitive( auto primitiveIt = std::find_if( mesh.primitives.begin(), mesh.primitives.end(), - [&primitive](const MeshPrimitive& candidate) { + [&primitive](const CesiumGltf::MeshPrimitive& candidate) { return &candidate == &primitive; }); if (primitiveIt != mesh.primitives.end()) { @@ -1181,7 +1200,7 @@ static void loadPrimitive( primitiveResult.name = name; - if (positionView.status() != AccessorViewStatus::Valid) { + if (positionView.status() != CesiumGltf::AccessorViewStatus::Valid) { UE_LOG( LogCesium, Warning, @@ -1191,7 +1210,7 @@ static void loadPrimitive( } if constexpr (IsAccessorView::value) { - if (indicesView.status() != AccessorViewStatus::Valid) { + if (indicesView.status() != CesiumGltf::AccessorViewStatus::Valid) { UE_LOG( LogCesium, Warning, @@ -1202,12 +1221,14 @@ static void loadPrimitive( } auto normalAccessorIt = primitive.attributes.find("NORMAL"); - AccessorView normalAccessor; + CesiumGltf::AccessorView normalAccessor; bool hasNormals = false; if (normalAccessorIt != primitive.attributes.end()) { int normalAccessorID = normalAccessorIt->second; - normalAccessor = AccessorView(model, normalAccessorID); - hasNormals = normalAccessor.status() == AccessorViewStatus::Valid; + normalAccessor = + CesiumGltf::AccessorView(model, normalAccessorID); + hasNormals = + normalAccessor.status() == CesiumGltf::AccessorViewStatus::Valid; if (!hasNormals) { UE_LOG( LogCesium, @@ -1219,37 +1240,42 @@ static void loadPrimitive( } int materialID = primitive.material; - const Material& material = + const CesiumGltf::Material& material = materialID >= 0 && materialID < model.materials.size() ? model.materials[materialID] : defaultMaterial; + primitiveResult.materialIndex = materialID; + primitiveResult.isUnlit = - material.hasExtension() && + material.hasExtension() && !options.pMeshOptions->pNodeOptions->pModelOptions ->ignoreKhrMaterialsUnlit; // We can't calculate flat normals for points or lines, so we have to force // them to be unlit if no normals are specified. Otherwise this causes a // crash when attempting to calculate flat normals. - bool isTriangles = primitive.mode == MeshPrimitive::Mode::TRIANGLES || - primitive.mode == MeshPrimitive::Mode::TRIANGLE_FAN || - primitive.mode == MeshPrimitive::Mode::TRIANGLE_STRIP; + bool isTriangles = + primitive.mode == CesiumGltf::MeshPrimitive::Mode::TRIANGLES || + primitive.mode == CesiumGltf::MeshPrimitive::Mode::TRIANGLE_FAN || + primitive.mode == CesiumGltf::MeshPrimitive::Mode::TRIANGLE_STRIP; if (!isTriangles && !hasNormals) { primitiveResult.isUnlit = true; } - const MaterialPBRMetallicRoughness& pbrMetallicRoughness = + const CesiumGltf::MaterialPBRMetallicRoughness& pbrMetallicRoughness = material.pbrMetallicRoughness ? material.pbrMetallicRoughness.value() : defaultPbrMetallicRoughness; bool hasNormalMap = material.normalTexture.has_value(); if (hasNormalMap) { - const CesiumGltf::Texture* pTexture = - Model::getSafe(&model.textures, material.normalTexture->index); - hasNormalMap = pTexture != nullptr && - Model::getSafe(&model.images, pTexture->source) != nullptr; + const CesiumGltf::Texture* pTexture = CesiumGltf::Model::getSafe( + &model.textures, + material.normalTexture->index); + hasNormalMap = + pTexture != nullptr && + CesiumGltf::Model::getSafe(&model.images, pTexture->source) != nullptr; } bool needsTangents = @@ -1258,11 +1284,13 @@ static void loadPrimitive( bool hasTangents = false; auto tangentAccessorIt = primitive.attributes.find("TANGENT"); - AccessorView tangentAccessor; + CesiumGltf::AccessorView tangentAccessor; if (tangentAccessorIt != primitive.attributes.end()) { int tangentAccessorID = tangentAccessorIt->second; - tangentAccessor = AccessorView(model, tangentAccessorID); - hasTangents = tangentAccessor.status() == AccessorViewStatus::Valid; + tangentAccessor = + CesiumGltf::AccessorView(model, tangentAccessorID); + hasTangents = + tangentAccessor.status() == CesiumGltf::AccessorViewStatus::Valid; if (!hasTangents) { UE_LOG( LogCesium, @@ -1272,7 +1300,7 @@ static void loadPrimitive( } } - applyWaterMask(model, primitive, primitiveResult, textureResources); + applyWaterMask(model, primitive, primitiveResult); // The water effect works by animating the normal, and the normal is // expressed in tangent space. So if we have water, we need tangents. @@ -1294,7 +1322,7 @@ static void loadPrimitive( glm::dvec3 minPosition{std::numeric_limits::max()}; glm::dvec3 maxPosition{std::numeric_limits::lowest()}; if (min.size() != 3 || max.size() != 3) { - for (int32_t i = 0; i < positionView.size(); ++i) { + for (int64_t i = 0; i < positionView.size(); ++i) { minPosition.x = glm::min(minPosition.x, positionView[i].X); minPosition.y = glm::min(minPosition.y, positionView[i].Y); minPosition.z = glm::min(minPosition.z, positionView[i].Z); @@ -1308,6 +1336,9 @@ static void loadPrimitive( maxPosition = glm::dvec3(max[0], max[1], max[2]); } + minPosition *= CesiumPrimitiveData::positionScaleFactor; + maxPosition *= CesiumPrimitiveData::positionScaleFactor; + primitiveResult.dimensions = glm::vec3(transform * glm::dvec4(maxPosition - minPosition, 0)); @@ -1322,8 +1353,8 @@ static void loadPrimitive( } TArray indices; - if (primitive.mode == MeshPrimitive::Mode::TRIANGLES || - primitive.mode == MeshPrimitive::Mode::POINTS) { + if (primitive.mode == CesiumGltf::MeshPrimitive::Mode::TRIANGLES || + primitive.mode == CesiumGltf::MeshPrimitive::Mode::POINTS) { TRACE_CPUPROFILER_EVENT_SCOPE(Cesium::CopyIndices) indices.SetNum(static_cast::SizeType>(indicesView.size())); @@ -1353,9 +1384,12 @@ static void loadPrimitive( // vertices shared by multiple triangles. If we don't have tangents, but // need them, we need to use a tangent space generation algorithm which // requires duplicated vertices. - bool duplicateVertices = !hasNormals || (needsTangents && !hasTangents); - duplicateVertices = - duplicateVertices && primitive.mode != MeshPrimitive::Mode::POINTS; + bool normalsAreRequired = !primitiveResult.isUnlit; + bool needToGenerateFlatNormals = normalsAreRequired && !hasNormals; + bool needToGenerateTangents = needsTangents && !hasTangents; + bool duplicateVertices = needToGenerateFlatNormals || needToGenerateTangents; + duplicateVertices = duplicateVertices && + primitive.mode != CesiumGltf::MeshPrimitive::Mode::POINTS; TArray StaticMeshBuildVertices; StaticMeshBuildVertices.SetNum( @@ -1369,9 +1403,9 @@ static void loadPrimitive( FStaticMeshBuildVertex& vertex = StaticMeshBuildVertices[i]; uint32 vertexIndex = indices[i]; const TMeshVector3& pos = positionView[vertexIndex]; - vertex.Position.X = pos.X; - vertex.Position.Y = -pos.Y; - vertex.Position.Z = pos.Z; + vertex.Position.X = pos.X * CesiumPrimitiveData::positionScaleFactor; + vertex.Position.Y = -pos.Y * CesiumPrimitiveData::positionScaleFactor; + vertex.Position.Z = pos.Z * CesiumPrimitiveData::positionScaleFactor; vertex.UVs[0] = TMeshVector2(0.0f, 0.0f); vertex.UVs[2] = TMeshVector2(0.0f, 0.0f); RenderData->Bounds.SphereRadius = FMath::Max( @@ -1383,9 +1417,9 @@ static void loadPrimitive( for (int i = 0; i < StaticMeshBuildVertices.Num(); ++i) { FStaticMeshBuildVertex& vertex = StaticMeshBuildVertices[i]; const TMeshVector3& pos = positionView[i]; - vertex.Position.X = pos.X; - vertex.Position.Y = -pos.Y; - vertex.Position.Z = pos.Z; + vertex.Position.X = pos.X * CesiumPrimitiveData::positionScaleFactor; + vertex.Position.Y = -pos.Y * CesiumPrimitiveData::positionScaleFactor; + vertex.Position.Z = pos.Z * CesiumPrimitiveData::positionScaleFactor; vertex.UVs[0] = TMeshVector2(0.0f, 0.0f); vertex.UVs[2] = TMeshVector2(0.0f, 0.0f); RenderData->Bounds.SphereRadius = FMath::Max( @@ -1424,27 +1458,22 @@ static void loadPrimitive( primitive, duplicateVertices, StaticMeshBuildVertices, - indices, - textureResources); + indices); { TRACE_CPUPROFILER_EVENT_SCOPE(Cesium::loadTextures) - primitiveResult.baseColorTexture = loadTexture( - model, - pbrMetallicRoughness.baseColorTexture, - true, - textureResources); + primitiveResult.baseColorTexture = + loadTexture(model, pbrMetallicRoughness.baseColorTexture, true); primitiveResult.metallicRoughnessTexture = loadTexture( model, pbrMetallicRoughness.metallicRoughnessTexture, - false, - textureResources); + false); primitiveResult.normalTexture = - loadTexture(model, material.normalTexture, false, textureResources); + loadTexture(model, material.normalTexture, false); primitiveResult.occlusionTexture = - loadTexture(model, material.occlusionTexture, false, textureResources); + loadTexture(model, material.occlusionTexture, false); primitiveResult.emissiveTexture = - loadTexture(model, material.emissiveTexture, true, textureResources); + loadTexture(model, material.emissiveTexture, true); } { @@ -1521,6 +1550,13 @@ static void loadPrimitive( } } + double scale = 1.0 / CesiumPrimitiveData::positionScaleFactor; + glm::dmat4 scaleMatrix = glm::dmat4( + glm::dvec4(scale, 0.0, 0.0, 0.0), + glm::dvec4(0.0, scale, 0.0, 0.0), + glm::dvec4(0.0, 0.0, scale, 0.0), + glm::dvec4(0.0, 0.0, 0.0, 1.0)); + // TangentX: Tangent // TangentY: Bi-tangent // TangentZ: Normal @@ -1552,17 +1588,10 @@ static void loadPrimitive( } } else { if (primitiveResult.isUnlit) { - glm::dvec3 ecefCenter = glm::dvec3( - transform * - glm::dvec4(VecMath::createVector3D(RenderData->Bounds.Origin), 1.0)); - TMeshVector3 upDir = TMeshVector3(VecMath::createVector( - glm::affineInverse(transform) * - glm::dvec4( - CesiumGeospatial::Ellipsoid::WGS84.geodeticSurfaceNormal( - glm::dvec3(ecefCenter)), - 0.0))); - upDir.Y *= -1; - setUniformNormals(StaticMeshBuildVertices, upDir); + setUnlitNormals( + StaticMeshBuildVertices, + ellipsoid, + transform * yInvertMatrix * scaleMatrix); } else { TRACE_CPUPROFILER_EVENT_SCOPE(Cesium::ComputeFlatNormals) computeFlatNormals(StaticMeshBuildVertices); @@ -1625,11 +1654,40 @@ static void loadPrimitive( ColorVertexBuffer.Init(StaticMeshBuildVertices, false); } - LODResources.VertexBuffers.StaticMeshVertexBuffer.Init( - StaticMeshBuildVertices, - gltfToUnrealTexCoordMap.size() == 0 ? 1 - : gltfToUnrealTexCoordMap.size(), + uint32 numberOfTextureCoordinates = + gltfToUnrealTexCoordMap.size() == 0 + ? 1 + : uint32(gltfToUnrealTexCoordMap.size()); + + FStaticMeshVertexBuffer& vertexBuffer = + LODResources.VertexBuffers.StaticMeshVertexBuffer; + vertexBuffer.Init( + StaticMeshBuildVertices.Num(), + numberOfTextureCoordinates, false); + + // Manually copy the vertices into the buffer. We do this because UE 5.3 + // and 5.4 have a bug where the overload of `FStaticMeshVertexBuffer::Init` + // taking an array of `FStaticMeshBuildVertex` will create a mesh with all 8 + // sets of texture coordinates, even when we usually only need one or two. + // See https://github.com/CesiumGS/cesium-unreal/issues/1513 + for (uint32 vertexIndex = 0; + vertexIndex < uint32(StaticMeshBuildVertices.Num()); + ++vertexIndex) { + const FStaticMeshBuildVertex& source = + StaticMeshBuildVertices[vertexIndex]; + + vertexBuffer.SetVertexTangents( + vertexIndex, + source.TangentX, + source.TangentY, + source.TangentZ); + for (uint32 uvIndex = 0; uvIndex < numberOfTextureCoordinates; + uvIndex++) { + vertexBuffer + .SetVertexUV(vertexIndex, uvIndex, source.UVs[uvIndex], false); + } + } } FStaticMeshSectionArray& Sections = LODResources.Sections; @@ -1639,7 +1697,8 @@ static void loadPrimitive( section.FirstIndex = 0; section.MinVertexIndex = 0; section.MaxVertexIndex = StaticMeshBuildVertices.Num() - 1; - section.bEnableCollision = primitive.mode != MeshPrimitive::Mode::POINTS; + section.bEnableCollision = + primitive.mode != CesiumGltf::MeshPrimitive::Mode::POINTS; section.bCastShadow = true; section.MaterialIndex = 0; @@ -1663,15 +1722,20 @@ static void loadPrimitive( LODResources.bHasReversedIndices = false; LODResources.bHasReversedDepthOnlyIndices = false; - primitiveResult.pModel = &model; - primitiveResult.pMeshPrimitive = &primitive; +#if ENGINE_VERSION_5_5_OR_HIGHER + // UE 5.5 requires that we do this in order to avoid a crash when ray tracing + // is enabled. + RenderData->InitializeRayTracingRepresentationFromRenderingLODs(); +#endif + + primitiveResult.meshIndex = options.pMeshOptions->meshIndex; + primitiveResult.primitiveIndex = options.primitiveIndex; primitiveResult.RenderData = std::move(RenderData); - primitiveResult.pMaterial = &material; primitiveResult.pCollisionMesh = nullptr; - primitiveResult.transform = transform * yInvertMatrix; + primitiveResult.transform = transform * yInvertMatrix * scaleMatrix; - if (primitive.mode != MeshPrimitive::Mode::POINTS && + if (primitive.mode != CesiumGltf::MeshPrimitive::Mode::POINTS && options.pMeshOptions->pNodeOptions->pModelOptions->createPhysicsMeshes) { if (StaticMeshBuildVertices.Num() != 0 && indices.Num() != 0) { TRACE_CPUPROFILER_EVENT_SCOPE(Cesium::ChaosCook) @@ -1688,20 +1752,23 @@ static void loadPrimitive( } static void loadIndexedPrimitive( - LoadPrimitiveResult& primitiveResult, + LoadedPrimitiveResult& primitiveResult, const glm::dmat4x4& transform, const CreatePrimitiveOptions& options, - const Accessor& positionAccessor, - const AccessorView& positionView, - std::vector& textureResources) { - const Model& model = + const CesiumGltf::Accessor& positionAccessor, + const CesiumGltf::AccessorView& positionView, + const CesiumGeospatial::Ellipsoid& ellipsoid) { + const CesiumGltf::Model& model = *options.pMeshOptions->pNodeOptions->pModelOptions->pModel; - const MeshPrimitive& primitive = *options.pPrimitive; + const CesiumGltf::MeshPrimitive& primitive = + model.meshes[options.pMeshOptions->meshIndex] + .primitives[options.primitiveIndex]; - const Accessor& indexAccessorGltf = model.accessors[primitive.indices]; + const CesiumGltf::Accessor& indexAccessorGltf = + model.accessors[primitive.indices]; if (indexAccessorGltf.componentType == - Accessor::ComponentType::UNSIGNED_BYTE) { - AccessorView indexAccessor(model, primitive.indices); + CesiumGltf::Accessor::ComponentType::UNSIGNED_BYTE) { + CesiumGltf::AccessorView indexAccessor(model, primitive.indices); loadPrimitive( primitiveResult, transform, @@ -1709,12 +1776,12 @@ static void loadIndexedPrimitive( positionAccessor, positionView, indexAccessor, - textureResources); + ellipsoid); primitiveResult.IndexAccessor = indexAccessor; } else if ( indexAccessorGltf.componentType == - Accessor::ComponentType::UNSIGNED_SHORT) { - AccessorView indexAccessor(model, primitive.indices); + CesiumGltf::Accessor::ComponentType::UNSIGNED_SHORT) { + CesiumGltf::AccessorView indexAccessor(model, primitive.indices); loadPrimitive( primitiveResult, transform, @@ -1722,12 +1789,12 @@ static void loadIndexedPrimitive( positionAccessor, positionView, indexAccessor, - textureResources); + ellipsoid); primitiveResult.IndexAccessor = indexAccessor; } else if ( indexAccessorGltf.componentType == - Accessor::ComponentType::UNSIGNED_INT) { - AccessorView indexAccessor(model, primitive.indices); + CesiumGltf::Accessor::ComponentType::UNSIGNED_INT) { + CesiumGltf::AccessorView indexAccessor(model, primitive.indices); loadPrimitive( primitiveResult, transform, @@ -1735,27 +1802,30 @@ static void loadIndexedPrimitive( positionAccessor, positionView, indexAccessor, - textureResources); + ellipsoid); primitiveResult.IndexAccessor = indexAccessor; } else { UE_LOG( LogCesium, - VeryVerbose, + Warning, TEXT( - "Skip loading primitive due to invalid component type in its index accessor.")); + "Ignoring a glTF primitive because the componentType (%d) of its indices is not supported."), + indexAccessorGltf.componentType); } } static void loadPrimitive( - LoadPrimitiveResult& result, + LoadedPrimitiveResult& result, const glm::dmat4x4& transform, const CreatePrimitiveOptions& options, - std::vector& textureResources) { + const CesiumGeospatial::Ellipsoid& ellipsoid) { TRACE_CPUPROFILER_EVENT_SCOPE(Cesium::loadPrimitive) - const Model& model = + const CesiumGltf::Model& model = *options.pMeshOptions->pNodeOptions->pModelOptions->pModel; - const MeshPrimitive& primitive = *options.pPrimitive; + const CesiumGltf::MeshPrimitive& primitive = + model.meshes[options.pMeshOptions->meshIndex] + .primitives[options.primitiveIndex]; auto positionAccessorIt = primitive.attributes.find("POSITION"); if (positionAccessorIt == primitive.attributes.end()) { @@ -1764,14 +1834,16 @@ static void loadPrimitive( } int positionAccessorID = positionAccessorIt->second; - const Accessor* pPositionAccessor = - Model::getSafe(&model.accessors, positionAccessorID); + const CesiumGltf::Accessor* pPositionAccessor = + CesiumGltf::Model::getSafe(&model.accessors, positionAccessorID); if (!pPositionAccessor) { // Position accessor does not exist, so ignore this primitive. return; } - AccessorView positionView(model, *pPositionAccessor); + CesiumGltf::AccessorView positionView( + model, + *pPositionAccessor); if (primitive.indices < 0 || primitive.indices >= model.accessors.size()) { std::vector syntheticIndexBuffer(positionView.size()); @@ -1786,7 +1858,7 @@ static void loadPrimitive( *pPositionAccessor, positionView, syntheticIndexBuffer, - textureResources); + ellipsoid); } else { loadIndexedPrimitive( result, @@ -1794,32 +1866,28 @@ static void loadPrimitive( options, *pPositionAccessor, positionView, - textureResources); + ellipsoid); } result.PositionAccessor = std::move(positionView); } static void loadMesh( - std::optional& result, + std::optional& result, const glm::dmat4x4& transform, - const CreateMeshOptions& options, - std::vector& textureResources) { + CreateMeshOptions& options, + const CesiumGeospatial::Ellipsoid& ellipsoid) { TRACE_CPUPROFILER_EVENT_SCOPE(Cesium::loadMesh) - const Model& model = *options.pNodeOptions->pModelOptions->pModel; - Mesh& mesh = *options.pMesh; + CesiumGltf::Model& model = *options.pNodeOptions->pModelOptions->pModel; + CesiumGltf::Mesh& mesh = model.meshes[options.meshIndex]; - result = LoadMeshResult(); + result = LoadedMeshResult(); result->primitiveResults.reserve(mesh.primitives.size()); - for (CesiumGltf::MeshPrimitive& primitive : mesh.primitives) { - CreatePrimitiveOptions primitiveOptions = {&options, &*result, &primitive}; + for (size_t i = 0; i < mesh.primitives.size(); i++) { + CreatePrimitiveOptions primitiveOptions = {&options, &*result, i}; auto& primitiveResult = result->primitiveResults.emplace_back(); - loadPrimitive( - primitiveResult, - transform, - primitiveOptions, - textureResources); + loadPrimitive(primitiveResult, transform, primitiveOptions, ellipsoid); // if it doesn't have render data, then it can't be loaded if (!primitiveResult.RenderData) { @@ -1851,19 +1919,22 @@ inline constexpr bool is_int_quat_v = is_int_quat::value; } // namespace static void loadInstancingData( - const Model& model, - LoadNodeResult& result, - const ExtensionExtMeshGpuInstancing* pGpuInstancing) { - auto getInstanceAccessor = [&](const char* name) -> const Accessor* { + const CesiumGltf::Model& model, + const CesiumGltf::Node& node, + LoadedNodeResult& result, + const CesiumGltf::ExtensionExtMeshGpuInstancing* pGpuInstancing, + const CesiumGltf::ExtensionExtInstanceFeatures* pInstanceFeatures) { + auto getInstanceAccessor = + [&](const char* name) -> const CesiumGltf::Accessor* { if (auto accessorItr = pGpuInstancing->attributes.find(name); accessorItr != pGpuInstancing->attributes.end()) { - return Model::getSafe(&model.accessors, accessorItr->second); + return CesiumGltf::Model::getSafe(&model.accessors, accessorItr->second); } return nullptr; }; - const Accessor* translations = getInstanceAccessor("TRANSLATION"); - const Accessor* rotations = getInstanceAccessor("ROTATION"); - const Accessor* scales = getInstanceAccessor("SCALE"); + const CesiumGltf::Accessor* translations = getInstanceAccessor("TRANSLATION"); + const CesiumGltf::Accessor* rotations = getInstanceAccessor("ROTATION"); + const CesiumGltf::Accessor* scales = getInstanceAccessor("SCALE"); int64_t count = 0; if (translations) { @@ -1914,12 +1985,15 @@ static void loadInstancingData( // argument by the new transform. E.g., translate() does *not* translate the // matrix. if (translations) { - AccessorView translationAccessor(model, *translations); - if (translationAccessor.status() == AccessorViewStatus::Valid) { + CesiumGltf::AccessorView translationAccessor( + model, + *translations); + if (translationAccessor.status() == CesiumGltf::AccessorViewStatus::Valid) { for (int64_t i = 0; i < count; ++i) { glm::dvec3 translation(translationAccessor[i]); - instanceTransforms[i] = - glm::translate(instanceTransforms[i], translation); + instanceTransforms[i] = glm::translate( + instanceTransforms[i], + translation * CesiumPrimitiveData::positionScaleFactor); } } } else { @@ -1939,7 +2013,7 @@ static void loadInstancingData( quatView[i].value[0], quatView[i].value[1], quatView[i].value[2]); - instanceTransforms[i] = instanceTransforms[i] * glm::toMat4(quat); + instanceTransforms[i] = instanceTransforms[i] * glm::mat4_cast(quat); } } else if constexpr (is_int_quat_v) { for (int64_t i = 0; i < count; ++i) { @@ -1948,13 +2022,13 @@ static void loadInstancingData( val[j] = GltfNormalized(quatView[i].value[j]); } glm::dquat quat(val[3], val[0], val[1], val[2]); - instanceTransforms[i] = instanceTransforms[i] * glm::toMat4(quat); + instanceTransforms[i] = instanceTransforms[i] * glm::mat4_cast(quat); } } }); } if (scales) { - AccessorView scaleAccessor(model, *scales); + CesiumGltf::AccessorView scaleAccessor(model, *scales); for (int64_t i = 0; i < count; ++i) { glm::dvec3 scaleFactors(scaleAccessor[i]); instanceTransforms[i] = glm::scale(instanceTransforms[i], scaleFactors); @@ -1966,16 +2040,19 @@ static void loadInstancingData( for (int64_t i = 0; i < count; ++i) { glm::dmat4 unrealMat = yInvertMatrix * instanceTransforms[i] * yInvertMatrix; - auto unrealFMatrix = VecMath::createMatrix(unrealMat); - result.InstanceTransforms[i].SetFromMatrix(unrealFMatrix); + result.InstanceTransforms[i] = VecMath::createTransform(unrealMat); + } + if (pInstanceFeatures) { + result.pInstanceFeatures = + MakeShared(model, node, *pInstanceFeatures); } } static void loadNode( - std::vector& loadNodeResults, + std::vector& loadNodeResults, const glm::dmat4x4& transform, - const CreateNodeOptions& options, - std::vector& textureResources) { + CreateNodeOptions& options, + const CesiumGeospatial::Ellipsoid& ellipsoid) { TRACE_CPUPROFILER_EVENT_SCOPE(Cesium::loadNode) @@ -1997,10 +2074,10 @@ static void loadNode( 0.0, 1.0}; - Model& model = *options.pModelOptions->pModel; - const Node& node = *options.pNode; + CesiumGltf::Model& model = *options.pModelOptions->pModel; + const CesiumGltf::Node& node = *options.pNode; - LoadNodeResult& result = loadNodeResults.emplace_back(); + LoadedNodeResult& result = loadNodeResults.emplace_back(); glm::dmat4x4 nodeTransform = transform; @@ -2051,11 +2128,16 @@ static void loadNode( int meshId = node.mesh; if (meshId >= 0 && meshId < model.meshes.size()) { if (const auto* pGpuInstancingExtension = - node.getExtension()) { - loadInstancingData(model, result, pGpuInstancingExtension); + node.getExtension()) { + loadInstancingData( + model, + node, + result, + pGpuInstancingExtension, + node.getExtension()); } - CreateMeshOptions meshOptions = {&options, &result, &model.meshes[meshId]}; - loadMesh(result.meshResult, nodeTransform, meshOptions, textureResources); + CreateMeshOptions meshOptions = {&options, &result, meshId}; + loadMesh(result.meshResult, nodeTransform, meshOptions, ellipsoid); } for (int childNodeId : node.children) { @@ -2064,11 +2146,7 @@ static void loadNode( options.pModelOptions, options.pHalfConstructedModelResult, &model.nodes[childNodeId]}; - loadNode( - loadNodeResults, - nodeTransform, - childNodeOptions, - textureResources); + loadNode(loadNodeResults, nodeTransform, childNodeOptions, ellipsoid); } } } @@ -2091,7 +2169,9 @@ namespace { * @param model The glTF model * @param rootTransform The matrix that will be multiplied with the transform */ -void applyGltfUpAxisTransform(const Model& model, glm::dmat4x4& rootTransform) { +void applyGltfUpAxisTransform( + const CesiumGltf::Model& model, + glm::dmat4x4& rootTransform) { auto gltfUpAxisIt = model.extras.find("gltfUpAxis"); if (gltfUpAxisIt == model.extras.end()) { @@ -2112,20 +2192,21 @@ void applyGltfUpAxisTransform(const Model& model, glm::dmat4x4& rootTransform) { } else { UE_LOG( LogCesium, - VeryVerbose, - TEXT("Unknown gltfUpAxis value: {}"), + Warning, + TEXT("Ignoring unknown gltfUpAxis value: {}"), gltfUpAxisValue); } } } // namespace -static void -loadModelMetadata(LoadModelResult& result, const CreateModelOptions& options) { - Model& model = *options.pModel; +static void loadModelMetadata( + LoadedModelResult& result, + const CreateModelOptions& options) { + CesiumGltf::Model& model = *options.pModel; - ExtensionModelExtStructuralMetadata* pModelMetadata = - model.getExtension(); + CesiumGltf::ExtensionModelExtStructuralMetadata* pModelMetadata = + model.getExtension(); if (!pModelMetadata) { return; } @@ -2138,9 +2219,9 @@ loadModelMetadata(LoadModelResult& result, const CreateModelOptions& options) { CesiumGltf::Mesh& /*mesh*/, CesiumGltf::MeshPrimitive& primitive, const glm::dmat4& /*nodeTransform*/) { - const ExtensionMeshPrimitiveExtStructuralMetadata* pPrimitiveMetadata = - primitive - .getExtension(); + const CesiumGltf::ExtensionMeshPrimitiveExtStructuralMetadata* + pPrimitiveMetadata = primitive.getExtension< + CesiumGltf::ExtensionMeshPrimitiveExtStructuralMetadata>(); if (!pPrimitiveMetadata) { return; } @@ -2211,110 +2292,99 @@ loadModelMetadata(LoadModelResult& result, const CreateModelOptions& options) { PRAGMA_ENABLE_DEPRECATION_WARNINGS } -static void loadModelAnyThreadPart( - LoadModelResult& result, +static CesiumAsync::Future +loadModelAnyThreadPart( + const CesiumAsync::AsyncSystem& asyncSystem, const glm::dmat4x4& transform, - const CreateModelOptions& options, - std::vector& textureResources) { + CreateModelOptions&& options, + const CesiumGeospatial::Ellipsoid& ellipsoid) { TRACE_CPUPROFILER_EVENT_SCOPE(Cesium::loadModelAnyThreadPart) - Model& model = *options.pModel; - - // Generate mipmaps if needed. - // An image needs mipmaps generated for it if: - // 1. It is used by a Texture that has a Sampler with a mipmap filtering - // mode, and - // 2. It does not already have mipmaps. - // It's ok if an image has mipmaps even if not all textures will use them. - // There's no reason to have two RHI textures, one with and one without - // mips. - for (const Texture& texture : model.textures) { - const Sampler& sampler = model.getSafe(model.samplers, texture.sampler); - - bool needsMipmaps; - switch (sampler.minFilter.value_or( - CesiumGltf::Sampler::MinFilter::LINEAR_MIPMAP_LINEAR)) { - case CesiumGltf::Sampler::MinFilter::LINEAR_MIPMAP_LINEAR: - case CesiumGltf::Sampler::MinFilter::LINEAR_MIPMAP_NEAREST: - case CesiumGltf::Sampler::MinFilter::NEAREST_MIPMAP_LINEAR: - case CesiumGltf::Sampler::MinFilter::NEAREST_MIPMAP_NEAREST: - needsMipmaps = true; - break; - default: // LINEAR and NEAREST - needsMipmaps = false; - break; - } + return CesiumGltfTextures::createInWorkerThread(asyncSystem, *options.pModel) + .thenInWorkerThread( + [transform, ellipsoid, options = std::move(options)]() mutable + -> UCesiumGltfComponent::CreateOffGameThreadResult { + auto pHalf = MakeUnique(); - if (!needsMipmaps) - continue; + loadModelMetadata(pHalf->loadModelResult, options); - Image* pImage = model.getSafe(&model.images, texture.source); - if (!pImage || pImage->cesium.pixelData.empty()) - continue; + glm::dmat4x4 rootTransform = transform; - std::optional errorMessage = - CesiumGltfReader::GltfReader::generateMipMaps(pImage->cesium); - if (errorMessage) { - UE_LOG( - LogCesium, - Warning, - TEXT("%s"), - UTF8_TO_TCHAR(errorMessage->c_str())); - } - } + CesiumGltf::Model& model = *options.pModel; - loadModelMetadata(result, options); + { + rootTransform = CesiumGltfContent::GltfUtilities::applyRtcCenter( + model, + rootTransform); + applyGltfUpAxisTransform(model, rootTransform); + } - glm::dmat4x4 rootTransform = transform; + if (model.scene >= 0 && model.scene < model.scenes.size()) { + // Show the default scene + const CesiumGltf::Scene& defaultScene = model.scenes[model.scene]; + for (int nodeId : defaultScene.nodes) { + CreateNodeOptions nodeOptions = { + &options, + &pHalf->loadModelResult, + &model.nodes[nodeId]}; + loadNode( + pHalf->loadModelResult.nodeResults, + rootTransform, + nodeOptions, + ellipsoid); + } + } else if (model.scenes.size() > 0) { + // There's no default, so show the first scene + const CesiumGltf::Scene& defaultScene = model.scenes[0]; + for (int nodeId : defaultScene.nodes) { + CreateNodeOptions nodeOptions = { + &options, + &pHalf->loadModelResult, + &model.nodes[nodeId]}; + loadNode( + pHalf->loadModelResult.nodeResults, + rootTransform, + nodeOptions, + ellipsoid); + } + } else if (model.nodes.size() > 0) { + // No scenes at all, use the first node as the root node. + CreateNodeOptions nodeOptions = { + &options, + &pHalf->loadModelResult, + &model.nodes[0]}; + loadNode( + pHalf->loadModelResult.nodeResults, + rootTransform, + nodeOptions, + ellipsoid); + } else if (model.meshes.size() > 0) { + // No nodes either, show all the meshes. + for (size_t i = 0; i < model.meshes.size(); i++) { + CreateNodeOptions dummyNodeOptions = { + &options, + &pHalf->loadModelResult, + nullptr}; + LoadedNodeResult& dummyNodeResult = + pHalf->loadModelResult.nodeResults.emplace_back(); + CreateMeshOptions meshOptions = { + &dummyNodeOptions, + &dummyNodeResult, + i}; + loadMesh( + dummyNodeResult.meshResult, + rootTransform, + meshOptions, + ellipsoid); + } + } - { - rootTransform = - CesiumGltfContent::GltfUtilities::applyRtcCenter(model, rootTransform); - applyGltfUpAxisTransform(model, rootTransform); - } - - if (model.scene >= 0 && model.scene < model.scenes.size()) { - // Show the default scene - const Scene& defaultScene = model.scenes[model.scene]; - for (int nodeId : defaultScene.nodes) { - CreateNodeOptions nodeOptions = {&options, &result, &model.nodes[nodeId]}; - loadNode( - result.nodeResults, - rootTransform, - nodeOptions, - textureResources); - } - } else if (model.scenes.size() > 0) { - // There's no default, so show the first scene - const Scene& defaultScene = model.scenes[0]; - for (int nodeId : defaultScene.nodes) { - CreateNodeOptions nodeOptions = {&options, &result, &model.nodes[nodeId]}; - loadNode( - result.nodeResults, - rootTransform, - nodeOptions, - textureResources); - } - } else if (model.nodes.size() > 0) { - // No scenes at all, use the first node as the root node. - CreateNodeOptions nodeOptions = {&options, &result, &model.nodes[0]}; - loadNode(result.nodeResults, rootTransform, nodeOptions, textureResources); - } else if (model.meshes.size() > 0) { - // No nodes either, show all the meshes. - for (Mesh& mesh : model.meshes) { - CreateNodeOptions dummyNodeOptions = {&options, &result, nullptr}; - LoadNodeResult& dummyNodeResult = result.nodeResults.emplace_back(); - CreateMeshOptions meshOptions = { - &dummyNodeOptions, - &dummyNodeResult, - &mesh}; - loadMesh( - dummyNodeResult.meshResult, - rootTransform, - meshOptions, - textureResources); - } - } + UCesiumGltfComponent::CreateOffGameThreadResult result; + result.HalfConstructed = std::move(pHalf); + result.TileLoadResult = std::move(options.tileLoadResult); + + return result; + }); } bool applyTexture( @@ -2340,9 +2410,9 @@ bool applyTexture( static void SetGltfParameterValues( CesiumGltf::Model& model, - LoadPrimitiveResult& loadResult, - const Material& material, - const MaterialPBRMetallicRoughness& pbr, + LoadedPrimitiveResult& loadResult, + const CesiumGltf::Material& material, + const CesiumGltf::MaterialPBRMetallicRoughness& pbr, UMaterialInstanceDynamic* pMaterial, EMaterialParameterAssociation association, int32 index) { @@ -2412,16 +2482,19 @@ static void SetGltfParameterValues( FMaterialParameterInfo("occlusionTexture", association, index), loadResult.occlusionTexture.Get()); - KhrTextureTransform textureTransform; + CesiumGltf::KhrTextureTransform textureTransform; FLinearColor baseColorMetallicRoughnessRotation(0.0f, 1.0f, 0.0f, 1.0f); - const ExtensionKhrTextureTransform* pBaseColorTextureTransform = + const CesiumGltf::ExtensionKhrTextureTransform* pBaseColorTextureTransform = pbr.baseColorTexture - ? pbr.baseColorTexture->getExtension() + ? pbr.baseColorTexture + ->getExtension() : nullptr; if (pBaseColorTextureTransform) { - textureTransform = KhrTextureTransform(*pBaseColorTextureTransform); - if (textureTransform.status() == KhrTextureTransformStatus::Valid) { + textureTransform = + CesiumGltf::KhrTextureTransform(*pBaseColorTextureTransform); + if (textureTransform.status() == + CesiumGltf::KhrTextureTransformStatus::Valid) { const glm::dvec2& scale = textureTransform.scale(); const glm::dvec2& offset = textureTransform.offset(); pMaterial->SetVectorParameterValueByInfo( @@ -2435,15 +2508,18 @@ static void SetGltfParameterValues( } } - const ExtensionKhrTextureTransform* pMetallicRoughnessTextureTransform = - pbr.metallicRoughnessTexture - ? pbr.metallicRoughnessTexture - ->getExtension() - : nullptr; + const CesiumGltf::ExtensionKhrTextureTransform* + pMetallicRoughnessTextureTransform = + pbr.metallicRoughnessTexture + ? pbr.metallicRoughnessTexture + ->getExtension() + : nullptr; if (pMetallicRoughnessTextureTransform) { - textureTransform = KhrTextureTransform(*pMetallicRoughnessTextureTransform); - if (textureTransform.status() == KhrTextureTransformStatus::Valid) { + textureTransform = + CesiumGltf::KhrTextureTransform(*pMetallicRoughnessTextureTransform); + if (textureTransform.status() == + CesiumGltf::KhrTextureTransformStatus::Valid) { const glm::dvec2& scale = textureTransform.scale(); const glm::dvec2& offset = textureTransform.offset(); pMaterial->SetVectorParameterValueByInfo( @@ -2471,14 +2547,15 @@ static void SetGltfParameterValues( FLinearColor emissiveNormalRotation(0.0f, 1.0f, 0.0f, 1.0f); - const ExtensionKhrTextureTransform* pEmissiveTextureTransform = + const CesiumGltf::ExtensionKhrTextureTransform* pEmissiveTextureTransform = material.emissiveTexture ? material.emissiveTexture - ->getExtension() + ->getExtension() : nullptr; if (pEmissiveTextureTransform) { - textureTransform = KhrTextureTransform(*pEmissiveTextureTransform); + textureTransform = + CesiumGltf::KhrTextureTransform(*pEmissiveTextureTransform); const glm::dvec2& scale = textureTransform.scale(); const glm::dvec2& offset = textureTransform.offset(); pMaterial->SetVectorParameterValueByInfo( @@ -2491,13 +2568,15 @@ static void SetGltfParameterValues( emissiveNormalRotation.G = rotationSineCosine[1]; } - const ExtensionKhrTextureTransform* pNormalTextureTransform = + const CesiumGltf::ExtensionKhrTextureTransform* pNormalTextureTransform = material.normalTexture - ? material.normalTexture->getExtension() + ? material.normalTexture + ->getExtension() : nullptr; if (pNormalTextureTransform) { - textureTransform = KhrTextureTransform(*pNormalTextureTransform); + textureTransform = + CesiumGltf::KhrTextureTransform(*pNormalTextureTransform); const glm::dvec2& scale = textureTransform.scale(); const glm::dvec2& offset = textureTransform.offset(); pMaterial->SetVectorParameterValueByInfo( @@ -2515,14 +2594,14 @@ static void SetGltfParameterValues( emissiveNormalRotation); } - const ExtensionKhrTextureTransform* pOcclusionTransform = + const CesiumGltf::ExtensionKhrTextureTransform* pOcclusionTransform = material.occlusionTexture ? material.occlusionTexture - ->getExtension() + ->getExtension() : nullptr; if (pOcclusionTransform) { - textureTransform = KhrTextureTransform(*pOcclusionTransform); + textureTransform = CesiumGltf::KhrTextureTransform(*pOcclusionTransform); const glm::dvec2& scale = textureTransform.scale(); const glm::dvec2& offset = textureTransform.offset(); pMaterial->SetVectorParameterValueByInfo( @@ -2559,7 +2638,7 @@ static void SetGltfParameterValues( void SetWaterParameterValues( CesiumGltf::Model& model, - LoadPrimitiveResult& loadResult, + LoadedPrimitiveResult& loadResult, UMaterialInstanceDynamic* pMaterial, EMaterialParameterAssociation association, int32 index) { @@ -2586,323 +2665,10 @@ void SetWaterParameterValues( loadResult.waterMaskScale)); } -static void SetFeatureIdTextureParameterValues( - const CesiumEncodedFeaturesMetadata::EncodedFeatureIdTexture& - encodedFeatureIdTexture, - const FString& name, - UMaterialInstanceDynamic* pMaterial, - EMaterialParameterAssociation association, - int32 index) { - pMaterial->SetTextureParameterValueByInfo( - FMaterialParameterInfo( - FName(name + CesiumEncodedFeaturesMetadata::MaterialTextureSuffix), - association, - index), - encodedFeatureIdTexture.pTexture->pTexture->getUnrealTexture()); - - size_t numChannels = encodedFeatureIdTexture.channels.size(); - pMaterial->SetScalarParameterValueByInfo( - FMaterialParameterInfo( - FName( - name + CesiumEncodedFeaturesMetadata::MaterialNumChannelsSuffix), - association, - index), - static_cast(numChannels)); - - std::vector channelsAsFloats{0.0f, 0.0f, 0.0f, 0.0f}; - for (size_t i = 0; i < numChannels; i++) { - channelsAsFloats[i] = - static_cast(encodedFeatureIdTexture.channels[i]); - } - - FLinearColor channels{ - channelsAsFloats[0], - channelsAsFloats[1], - channelsAsFloats[2], - channelsAsFloats[3], - }; - - pMaterial->SetVectorParameterValueByInfo( - FMaterialParameterInfo( - FName(name + CesiumEncodedFeaturesMetadata::MaterialChannelsSuffix), - association, - index), - channels); - - if (!encodedFeatureIdTexture.textureTransform) { - return; - } - - glm::dvec2 scale = encodedFeatureIdTexture.textureTransform->scale(); - glm::dvec2 offset = encodedFeatureIdTexture.textureTransform->offset(); - - pMaterial->SetVectorParameterValueByInfo( - FMaterialParameterInfo( - FName( - name + - CesiumEncodedFeaturesMetadata::MaterialTextureScaleOffsetSuffix), - association, - index), - FLinearColor(scale[0], scale[1], offset[0], offset[1])); - - glm::dvec2 rotation = - encodedFeatureIdTexture.textureTransform->rotationSineCosine(); - pMaterial->SetVectorParameterValueByInfo( - FMaterialParameterInfo( - FName( - name + - CesiumEncodedFeaturesMetadata::MaterialTextureRotationSuffix), - association, - index), - FLinearColor(rotation[0], rotation[1], 0.0f, 1.0f)); -} - -static void SetPropertyParameterValue( - const FString& name, - ECesiumEncodedMetadataType type, - const FCesiumMetadataValue& value, - const float defaultValue, - UMaterialInstanceDynamic* pMaterial, - EMaterialParameterAssociation association, - int32 index) { - if (type == ECesiumEncodedMetadataType::Scalar) { - pMaterial->SetScalarParameterValueByInfo( - FMaterialParameterInfo(FName(name), association, index), - UCesiumMetadataValueBlueprintLibrary::GetFloat(value, defaultValue)); - } else if ( - type == ECesiumEncodedMetadataType::Vec2 || - type == ECesiumEncodedMetadataType::Vec3 || - type == ECesiumEncodedMetadataType::Vec4) { - FVector4 vector4Value = UCesiumMetadataValueBlueprintLibrary::GetVector4( - value, - FVector4(defaultValue, defaultValue, defaultValue, defaultValue)); - - pMaterial->SetVectorParameterValueByInfo( - FMaterialParameterInfo(FName(name), association, index), - FLinearColor( - static_cast(vector4Value.X), - static_cast(vector4Value.Y), - static_cast(vector4Value.Z), - static_cast(vector4Value.W))); - } -} - -static void SetPropertyTableParameterValues( - const CesiumEncodedFeaturesMetadata::EncodedPropertyTable& - encodedPropertyTable, - UMaterialInstanceDynamic* pMaterial, - EMaterialParameterAssociation association, - int32 index) { - for (const CesiumEncodedFeaturesMetadata::EncodedPropertyTableProperty& - encodedProperty : encodedPropertyTable.properties) { - FString fullPropertyName = - CesiumEncodedFeaturesMetadata::getMaterialNameForPropertyTableProperty( - encodedPropertyTable.name, - encodedProperty.name); - - if (encodedProperty.pTexture) { - pMaterial->SetTextureParameterValueByInfo( - FMaterialParameterInfo(FName(fullPropertyName), association, index), - encodedProperty.pTexture->pTexture->getUnrealTexture()); - } - - if (!UCesiumMetadataValueBlueprintLibrary::IsEmpty( - encodedProperty.offset)) { - FString parameterName = - fullPropertyName + - CesiumEncodedFeaturesMetadata::MaterialPropertyOffsetSuffix; - SetPropertyParameterValue( - parameterName, - encodedProperty.type, - encodedProperty.offset, - 0.0f, - pMaterial, - association, - index); - } - - if (!UCesiumMetadataValueBlueprintLibrary::IsEmpty(encodedProperty.scale)) { - FString parameterName = - fullPropertyName + - CesiumEncodedFeaturesMetadata::MaterialPropertyScaleSuffix; - SetPropertyParameterValue( - parameterName, - encodedProperty.type, - encodedProperty.offset, - 1.0f, - pMaterial, - association, - index); - } - - if (!UCesiumMetadataValueBlueprintLibrary::IsEmpty( - encodedProperty.noData)) { - FString parameterName = - fullPropertyName + - CesiumEncodedFeaturesMetadata::MaterialPropertyNoDataSuffix; - SetPropertyParameterValue( - parameterName, - encodedProperty.type, - encodedProperty.offset, - 0.0f, - pMaterial, - association, - index); - } - - if (!UCesiumMetadataValueBlueprintLibrary::IsEmpty( - encodedProperty.defaultValue)) { - FString parameterName = - fullPropertyName + - CesiumEncodedFeaturesMetadata::MaterialPropertyDefaultValueSuffix; - SetPropertyParameterValue( - parameterName, - encodedProperty.type, - encodedProperty.offset, - 0.0f, - pMaterial, - association, - index); - - FString hasValueName = fullPropertyName = - CesiumEncodedFeaturesMetadata::MaterialPropertyHasValueSuffix; - pMaterial->SetScalarParameterValueByInfo( - FMaterialParameterInfo(FName(hasValueName), association, index), - encodedProperty.pTexture ? 1.0 : 0.0); - } - } -} - -static void SetPropertyTextureParameterValues( - const CesiumEncodedFeaturesMetadata::EncodedPropertyTexture& - encodedPropertyTexture, - UMaterialInstanceDynamic* pMaterial, - EMaterialParameterAssociation association, - int32 index) { - for (const CesiumEncodedFeaturesMetadata::EncodedPropertyTextureProperty& - encodedProperty : encodedPropertyTexture.properties) { - FString fullPropertyName = CesiumEncodedFeaturesMetadata:: - getMaterialNameForPropertyTextureProperty( - encodedPropertyTexture.name, - encodedProperty.name); - - if (encodedProperty.pTexture) { - pMaterial->SetTextureParameterValueByInfo( - FMaterialParameterInfo(FName(fullPropertyName), association, index), - encodedProperty.pTexture->pTexture->getUnrealTexture()); - } - - pMaterial->SetVectorParameterValueByInfo( - FMaterialParameterInfo( - FName( - fullPropertyName + - CesiumEncodedFeaturesMetadata::MaterialChannelsSuffix), - association, - index), - FLinearColor( - encodedProperty.channels[0], - encodedProperty.channels[1], - encodedProperty.channels[2], - encodedProperty.channels[3])); - - if (!UCesiumMetadataValueBlueprintLibrary::IsEmpty( - encodedProperty.offset)) { - FString parameterName = - fullPropertyName + - CesiumEncodedFeaturesMetadata::MaterialPropertyOffsetSuffix; - SetPropertyParameterValue( - parameterName, - encodedProperty.type, - encodedProperty.offset, - 0.0f, - pMaterial, - association, - index); - } - - if (!UCesiumMetadataValueBlueprintLibrary::IsEmpty(encodedProperty.scale)) { - FString parameterName = - fullPropertyName + - CesiumEncodedFeaturesMetadata::MaterialPropertyScaleSuffix; - SetPropertyParameterValue( - parameterName, - encodedProperty.type, - encodedProperty.offset, - 1.0f, - pMaterial, - association, - index); - } - - if (!UCesiumMetadataValueBlueprintLibrary::IsEmpty( - encodedProperty.noData)) { - FString parameterName = - fullPropertyName + - CesiumEncodedFeaturesMetadata::MaterialPropertyNoDataSuffix; - SetPropertyParameterValue( - parameterName, - encodedProperty.type, - encodedProperty.offset, - 0.0f, - pMaterial, - association, - index); - } - - if (!UCesiumMetadataValueBlueprintLibrary::IsEmpty( - encodedProperty.defaultValue)) { - FString parameterName = - fullPropertyName + - CesiumEncodedFeaturesMetadata::MaterialPropertyDefaultValueSuffix; - SetPropertyParameterValue( - parameterName, - encodedProperty.type, - encodedProperty.offset, - 0.0f, - pMaterial, - association, - index); - - FString hasValueName = fullPropertyName = - CesiumEncodedFeaturesMetadata::MaterialPropertyHasValueSuffix; - pMaterial->SetScalarParameterValueByInfo( - FMaterialParameterInfo(FName(hasValueName), association, index), - encodedProperty.pTexture ? 1.0 : 0.0); - } - - if (!encodedProperty.textureTransform) { - continue; - } - - glm::dvec2 scale = encodedProperty.textureTransform->scale(); - glm::dvec2 offset = encodedProperty.textureTransform->offset(); - - pMaterial->SetVectorParameterValueByInfo( - FMaterialParameterInfo( - FName( - fullPropertyName + CesiumEncodedFeaturesMetadata:: - MaterialTextureScaleOffsetSuffix), - association, - index), - FLinearColor(scale[0], scale[1], offset[0], offset[1])); - - glm::dvec2 rotation = - encodedProperty.textureTransform->rotationSineCosine(); - pMaterial->SetVectorParameterValueByInfo( - FMaterialParameterInfo( - FName( - fullPropertyName + - CesiumEncodedFeaturesMetadata::MaterialTextureRotationSuffix), - association, - index), - FLinearColor(rotation[0], rotation[1], 0.0f, 1.0f)); - } -} - static void SetFeaturesMetadataParameterValues( const CesiumGltf::Model& model, UCesiumGltfComponent& gltfComponent, - LoadPrimitiveResult& loadResult, + LoadedPrimitiveResult& loadResult, UMaterialInstanceDynamic* pMaterial, EMaterialParameterAssociation association, int32 index) { @@ -2935,31 +2701,31 @@ static void SetFeaturesMetadataParameterValues( } if (encodedFeatureIdSet.texture) { - SetFeatureIdTextureParameterValues( - *encodedFeatureIdSet.texture, - SafeName, + CesiumEncodedFeaturesMetadata::SetFeatureIdTextureParameterValues( pMaterial, association, - index); + index, + SafeName, + *encodedFeatureIdSet.texture); } } for (const CesiumEncodedFeaturesMetadata::EncodedPropertyTexture& propertyTexture : gltfComponent.EncodedMetadata.propertyTextures) { - SetPropertyTextureParameterValues( - propertyTexture, + CesiumEncodedFeaturesMetadata::SetPropertyTextureParameterValues( pMaterial, association, - index); + index, + propertyTexture); } for (const CesiumEncodedFeaturesMetadata::EncodedPropertyTable& propertyTable : gltfComponent.EncodedMetadata.propertyTables) { - SetPropertyTableParameterValues( - propertyTable, + CesiumEncodedFeaturesMetadata::SetPropertyTableParameterValues( pMaterial, association, - index); + index, + propertyTable); } } } @@ -2983,7 +2749,7 @@ PRAGMA_DISABLE_DEPRECATION_WARNINGS static void SetMetadataParameterValues_DEPRECATED( const CesiumGltf::Model& model, UCesiumGltfComponent& gltfComponent, - LoadPrimitiveResult& loadResult, + LoadedPrimitiveResult& loadResult, UMaterialInstanceDynamic* pMaterial, EMaterialParameterAssociation association, int32 index) { @@ -3123,15 +2889,77 @@ static void SetMetadataParameterValues_DEPRECATED( PRAGMA_ENABLE_DEPRECATION_WARNINGS #pragma endregion +namespace { +void addInstanceFeatureIds( + UCesiumGltfInstancedComponent* pInstancedComponent, + const FCesiumFeaturesMetadataDescription& featuresDescription) { + const TSharedPtr& pInstanceFeatures = + pInstancedComponent->pInstanceFeatures; + if (!pInstanceFeatures) { + return; + } + const TArray& allFeatureIdSets = + UCesiumPrimitiveFeaturesBlueprintLibrary::GetFeatureIDSets( + *pInstanceFeatures); + + const TArray& featureIDSetDescriptions = + featuresDescription.Features.FeatureIdSets; + + int32_t featureIdTextureCounter = 0; + + TArray activeFeatureIdSets; + + for (int32 i = 0; i < allFeatureIdSets.Num(); ++i) { + FString name = CesiumEncodedFeaturesMetadata::getNameForFeatureIDSet( + allFeatureIdSets[i], + featureIdTextureCounter); + + const FCesiumFeatureIdSetDescription* pDescription = + featureIDSetDescriptions.FindByPredicate( + [&name]( + const FCesiumFeatureIdSetDescription& existingFeatureIDSet) { + return existingFeatureIDSet.Name == name; + }); + + if (pDescription) { + activeFeatureIdSets.Emplace(i); + } + } + + int32 featureSetCount = activeFeatureIdSets.Num(); + if (featureSetCount == 0) { + return; + } + pInstancedComponent->SetNumCustomDataFloats(featureSetCount); + int32 numInstances = pInstancedComponent->GetInstanceCount(); + pInstancedComponent->PerInstanceSMCustomData.SetNum( + featureSetCount * numInstances); + for (int32 j = 0; j < featureSetCount; ++j) { + int64_t setIndex = activeFeatureIdSets[j]; + + for (int32 i = 0; i < numInstances; ++i) { + int64 featureId = + UCesiumPrimitiveFeaturesBlueprintLibrary::GetFeatureIDFromInstance( + *pInstanceFeatures, + i, + setIndex); + pInstancedComponent + ->SetCustomDataValue(i, j, static_cast(featureId), true); + } + } +} +} // namespace + static void loadPrimitiveGameThreadPart( CesiumGltf::Model& model, UCesiumGltfComponent* pGltf, - LoadPrimitiveResult& loadResult, + LoadedPrimitiveResult& loadResult, const glm::dmat4x4& cesiumToUnrealTransform, const Cesium3DTilesSelection::Tile& tile, bool createNavCollision, ACesium3DTileset* pTilesetActor, - const std::vector& instanceTransforms) { + const std::vector& instanceTransforms, + const TSharedPtr& pInstanceFeatures) { TRACE_CPUPROFILER_EVENT_SCOPE(Cesium::LoadPrimitive) #if DEBUG_GLTF_ASSET_NAMES @@ -3143,9 +2971,12 @@ static void loadPrimitiveGameThreadPart( const Cesium3DTilesSelection::BoundingVolume& boundingVolume = tile.getContentBoundingVolume().value_or(tile.getBoundingVolume()); + CesiumGltf::MeshPrimitive& meshPrimitive = + model.meshes[loadResult.meshIndex].primitives[loadResult.primitiveIndex]; + UStaticMeshComponent* pMesh = nullptr; ICesiumPrimitive* pCesiumPrimitive = nullptr; - if (loadResult.pMeshPrimitive->mode == MeshPrimitive::Mode::POINTS) { + if (meshPrimitive.mode == CesiumGltf::MeshPrimitive::Mode::POINTS) { UCesiumGltfPointsComponent* pPointMesh = NewObject(pGltf, componentName); pPointMesh->UsesAdditiveRefinement = @@ -3161,6 +2992,15 @@ static void loadPrimitiveGameThreadPart( for (const FTransform& transform : instanceTransforms) { pInstancedComponent->AddInstance(transform, false); } + pInstancedComponent->pInstanceFeatures = pInstanceFeatures; + + const std::optional& + maybeFeaturesDescription = + pTilesetActor->getFeaturesMetadataDescription(); + if (maybeFeaturesDescription) { + addInstanceFeatureIds(pInstancedComponent, *maybeFeaturesDescription); + } + pCesiumPrimitive = pInstancedComponent; } else { auto* pComponent = @@ -3187,8 +3027,8 @@ static void loadPrimitiveGameThreadPart( pMesh->SetCollisionObjectType(ECollisionChannel::ECC_WorldStatic); pMesh->SetFlags( RF_Transient | RF_DuplicateTransient | RF_TextExportTransient); - primData.pModel = loadResult.pModel; - primData.pMeshPrimitive = loadResult.pMeshPrimitive; + primData.pModel = &model; + primData.pMeshPrimitive = &meshPrimitive; primData.boundingVolume = boundingVolume; pMesh->SetRenderCustomDepth(pGltf->CustomDepthParameters.RenderCustomDepth); pMesh->SetCustomDepthStencilWriteMask( @@ -3209,19 +3049,21 @@ static void loadPrimitiveGameThreadPart( pStaticMesh->SetRenderData(std::move(loadResult.RenderData)); } - const Material& material = - loadResult.pMaterial ? *loadResult.pMaterial : defaultMaterial; + const CesiumGltf::Material& material = + loadResult.materialIndex != -1 ? model.materials[loadResult.materialIndex] + : defaultMaterial; - const MaterialPBRMetallicRoughness& pbr = + const CesiumGltf::MaterialPBRMetallicRoughness& pbr = material.pbrMetallicRoughness ? material.pbrMetallicRoughness.value() : defaultPbrMetallicRoughness; const FName ImportedSlotName( *(TEXT("CesiumMaterial") + FString::FromInt(nextMaterialId++))); - const auto is_in_blend_mode = [](auto& result) { - return !!result.pMaterial && result.pMaterial->alphaMode == - CesiumGltf::Material::AlphaMode::BLEND; + const auto is_in_blend_mode = [&model](auto& result) { + return result.materialIndex != -1 && + model.materials[result.materialIndex].alphaMode == + CesiumGltf::Material::AlphaMode::BLEND; }; #if PLATFORM_MAC @@ -3442,21 +3284,17 @@ static void loadPrimitiveGameThreadPart( } } -/*static*/ TUniquePtr +/*static*/ CesiumAsync::Future UCesiumGltfComponent::CreateOffGameThread( + const CesiumAsync::AsyncSystem& AsyncSystem, const glm::dmat4x4& Transform, - const CreateModelOptions& Options) { - std::vector textureResources; - textureResources.resize(Options.pModel->images.size(), nullptr); - - auto pResult = MakeUnique(); - loadModelAnyThreadPart( - pResult->loadModelResult, + CreateModelOptions&& Options, + const CesiumGeospatial::Ellipsoid& Ellipsoid) { + return loadModelAnyThreadPart( + AsyncSystem, Transform, - Options, - textureResources); - - return pResult; + std::move(Options), + Ellipsoid); } /*static*/ UCesiumGltfComponent* UCesiumGltfComponent::CreateOnGameThread( @@ -3510,9 +3348,10 @@ UCesiumGltfComponent::CreateOffGameThread( encodeMetadataGameThreadPart(*Gltf->EncodedMetadata_DEPRECATED); } - for (LoadNodeResult& node : pReal->loadModelResult.nodeResults) { + for (LoadedNodeResult& node : pReal->loadModelResult.nodeResults) { if (node.meshResult) { - for (LoadPrimitiveResult& primitive : node.meshResult->primitiveResults) { + for (LoadedPrimitiveResult& primitive : + node.meshResult->primitiveResults) { loadPrimitiveGameThreadPart( model, Gltf, @@ -3521,7 +3360,8 @@ UCesiumGltfComponent::CreateOffGameThread( tile, createNavCollision, pTilesetActor, - node.InstanceTransforms); + node.InstanceTransforms, + node.pInstanceFeatures); } } } @@ -3561,10 +3401,6 @@ UCesiumGltfComponent::UCesiumGltfComponent() : USceneComponent() { PrimaryComponentTick.bCanEverTick = false; } -UCesiumGltfComponent::~UCesiumGltfComponent() { - UE_LOG(LogCesium, VeryVerbose, TEXT("~UCesiumGltfComponent")); -} - void UCesiumGltfComponent::UpdateTransformFromCesium( const glm::dmat4& cesiumToUnrealTransform) { for (USceneComponent* pSceneComponent : this->GetAttachChildren()) { @@ -3648,6 +3484,10 @@ void UCesiumGltfComponent::AttachRasterTile( EMaterialParameterAssociation::LayerParameter, i), translationAndScale); + check( + textureCoordinateID >= 0 && + textureCoordinateID < + primData.overlayTextureCoordinateIDToUVIndex.size()); pMaterial->SetScalarParameterValueByInfo( FMaterialParameterInfo( "TextureCoordinateIndex", @@ -3783,17 +3623,6 @@ void UCesiumGltfComponent::UpdateFade(float fadePercentage, bool fadingIn) { } } -static bool isTriangleDegenerate( - const Chaos::FTriangleMeshImplicitObject::ParticleVecType& A, - const Chaos::FTriangleMeshImplicitObject::ParticleVecType& B, - const Chaos::FTriangleMeshImplicitObject::ParticleVecType& C) { - Chaos::FTriangleMeshImplicitObject::ParticleVecType AB = B - A; - Chaos::FTriangleMeshImplicitObject::ParticleVecType AC = C - A; - Chaos::FTriangleMeshImplicitObject::ParticleVecType Normal = - Chaos::FTriangleMeshImplicitObject::ParticleVecType::CrossProduct(AB, AC); - return (Normal.SafeNormalize() < 1.e-8f); -} - template #if ENGINE_VERSION_5_4_OR_HIGHER static Chaos::FTriangleMeshImplicitObjectPtr @@ -3822,13 +3651,8 @@ BuildChaosTriangleMeshes( int32 vIndex1 = indices[index0]; int32 vIndex2 = indices[index0 + 2]; - if (!isTriangleDegenerate( - vertices.X(vIndex0), - vertices.X(vIndex1), - vertices.X(vIndex2))) { - triangles.Add(Chaos::TVector(vIndex0, vIndex1, vIndex2)); - faceRemap.Add(i); - } + triangles.Add(Chaos::TVector(vIndex0, vIndex1, vIndex2)); + faceRemap.Add(i); } TUniquePtr> pFaceRemap = MakeUnique>(faceRemap); diff --git a/Source/CesiumRuntime/Private/CesiumGltfComponent.h b/Source/CesiumRuntime/Private/CesiumGltfComponent.h index fae2400a0..e78b2d273 100644 --- a/Source/CesiumRuntime/Private/CesiumGltfComponent.h +++ b/Source/CesiumRuntime/Private/CesiumGltfComponent.h @@ -12,6 +12,7 @@ #include "CoreMinimal.h" #include "CustomDepthParameters.h" #include "Interfaces/IHttpRequest.h" +#include #include #include #include "CesiumGltfComponent.generated.h" @@ -64,9 +65,18 @@ class UCesiumGltfComponent : public USceneComponent { virtual ~HalfConstructed() = default; }; - static TUniquePtr CreateOffGameThread( + class CreateOffGameThreadResult { + public: + TUniquePtr HalfConstructed; + Cesium3DTilesSelection::TileLoadResult TileLoadResult; + }; + + static CesiumAsync::Future CreateOffGameThread( + const CesiumAsync::AsyncSystem& AsyncSystem, const glm::dmat4x4& Transform, - const CreateGltfOptions::CreateModelOptions& Options); + CreateGltfOptions::CreateModelOptions&& Options, + const CesiumGeospatial::Ellipsoid& Ellipsoid = + CesiumGeospatial::Ellipsoid::WGS84); static UCesiumGltfComponent* CreateOnGameThread( CesiumGltf::Model& model, @@ -81,7 +91,6 @@ class UCesiumGltfComponent : public USceneComponent { bool createNavCollision); UCesiumGltfComponent(); - virtual ~UCesiumGltfComponent(); UPROPERTY(EditAnywhere, Category = "Cesium") UMaterialInterface* BaseMaterial = nullptr; diff --git a/Source/CesiumRuntime/Private/CesiumGltfPointsSceneProxy.cpp b/Source/CesiumRuntime/Private/CesiumGltfPointsSceneProxy.cpp index fdcb8f26a..e4cc050de 100644 --- a/Source/CesiumRuntime/Private/CesiumGltfPointsSceneProxy.cpp +++ b/Source/CesiumRuntime/Private/CesiumGltfPointsSceneProxy.cpp @@ -56,17 +56,12 @@ void FCesiumGltfPointsSceneProxy::CreateRenderThreadResources( AttenuationVertexFactory.InitResource(RHICmdList); AttenuationIndexBuffer.InitResource(RHICmdList); } -#elif ENGINE_VERSION_5_3_OR_HIGHER +#else void FCesiumGltfPointsSceneProxy::CreateRenderThreadResources() { FRHICommandListBase& RHICmdList = FRHICommandListImmediate::Get(); AttenuationVertexFactory.InitResource(RHICmdList); AttenuationIndexBuffer.InitResource(RHICmdList); } -#else -void FCesiumGltfPointsSceneProxy::CreateRenderThreadResources() { - AttenuationVertexFactory.InitResource(); - AttenuationIndexBuffer.InitResource(); -} #endif void FCesiumGltfPointsSceneProxy::DestroyRenderThreadResources() { diff --git a/Source/CesiumRuntime/Private/CesiumGltfPrimitiveComponent.cpp b/Source/CesiumRuntime/Private/CesiumGltfPrimitiveComponent.cpp index ddcd89caa..68951e5f9 100644 --- a/Source/CesiumRuntime/Private/CesiumGltfPrimitiveComponent.cpp +++ b/Source/CesiumRuntime/Private/CesiumGltfPrimitiveComponent.cpp @@ -107,8 +107,8 @@ bool UpdateTransformFromCesiumAux( const glm::dmat4& CesiumToUnrealTransform, CesiumComponent* cesiumComponent) { const CesiumPrimitiveData& primData = cesiumComponent->getPrimitiveData(); - const FTransform transform = FTransform(VecMath::createMatrix( - CesiumToUnrealTransform * primData.HighPrecisionNodeTransform)); + const FTransform transform = VecMath::createTransform( + CesiumToUnrealTransform * primData.HighPrecisionNodeTransform); if (cesiumComponent->Mobility == EComponentMobility::Movable) { // For movable objects, move the component in the normal way, but don't diff --git a/Source/CesiumRuntime/Private/CesiumGltfPrimitiveComponent.h b/Source/CesiumRuntime/Private/CesiumGltfPrimitiveComponent.h index 7dc589973..081fe682c 100644 --- a/Source/CesiumRuntime/Private/CesiumGltfPrimitiveComponent.h +++ b/Source/CesiumRuntime/Private/CesiumGltfPrimitiveComponent.h @@ -4,9 +4,11 @@ #include "Cesium3DTilesSelection/BoundingVolume.h" #include "CesiumPrimitive.h" +#include "CesiumPrimitiveFeatures.h" #include "Components/InstancedStaticMeshComponent.h" #include "Components/StaticMeshComponent.h" #include "CoreMinimal.h" +#include "Engine/StaticMesh.h" #include "Materials/MaterialInstanceDynamic.h" #include "PhysicsEngine/BodySetup.h" #include "VecMath.h" @@ -61,6 +63,8 @@ class UCesiumGltfInstancedComponent : public UInstancedStaticMeshComponent, CesiumPrimitiveData& getPrimitiveData() override; const CesiumPrimitiveData& getPrimitiveData() const override; + TSharedPtr pInstanceFeatures; + private: CesiumPrimitiveData _cesiumData; }; diff --git a/Source/CesiumRuntime/Private/CesiumGltfTextures.cpp b/Source/CesiumRuntime/Private/CesiumGltfTextures.cpp new file mode 100644 index 000000000..2e563a987 --- /dev/null +++ b/Source/CesiumRuntime/Private/CesiumGltfTextures.cpp @@ -0,0 +1,258 @@ +// Copyright 2020-2024 CesiumGS, Inc. and Contributors + +#include "CesiumGltfTextures.h" +#include "CesiumRuntime.h" +#include "CesiumTextureResource.h" +#include "CesiumTextureUtility.h" +#include "ExtensionImageAssetUnreal.h" +#include +#include +#include +#include + +using namespace CesiumAsync; + +namespace { + +// Determines if a glTF primitive is usable for our purposes. +bool isValidPrimitive( + const CesiumGltf::Model& gltf, + const CesiumGltf::MeshPrimitive& primitive); + +// Determines if an Accessor's componentType is valid for an index buffer. +bool isSupportedIndexComponentType(int32_t componentType); + +// Determines if the given Primitive mode is one that we support. +bool isSupportedPrimitiveMode(int32_t primitiveMode); + +// Determines if the given texture uses mipmaps. +bool doesTextureUseMipmaps( + const CesiumGltf::Model& gltf, + const CesiumGltf::Texture& texture); + +// Creates a single texture in the load thread. +SharedFuture createTextureInLoadThread( + const AsyncSystem& asyncSystem, + CesiumGltf::Model& gltf, + CesiumGltf::TextureInfo& textureInfo, + bool sRGB, + const std::vector& imageNeedsMipmaps); + +} // namespace + +/*static*/ CesiumAsync::Future CesiumGltfTextures::createInWorkerThread( + const CesiumAsync::AsyncSystem& asyncSystem, + CesiumGltf::Model& model) { + // This array is parallel to model.images and indicates whether each image + // requires mipmaps. An image requires mipmaps if any of its textures have a + // sampler that will use them. + std::vector imageNeedsMipmaps(model.images.size(), false); + for (const CesiumGltf::Texture& texture : model.textures) { + int32_t imageIndex = texture.source; + if (imageIndex < 0 || imageIndex >= model.images.size()) { + continue; + } + + if (!imageNeedsMipmaps[imageIndex]) { + imageNeedsMipmaps[imageIndex] = doesTextureUseMipmaps(model, texture); + } + } + + std::vector> futures; + + model.forEachPrimitiveInScene( + -1, + [&imageNeedsMipmaps, &asyncSystem, &futures]( + CesiumGltf::Model& gltf, + CesiumGltf::Node& node, + CesiumGltf::Mesh& mesh, + CesiumGltf::MeshPrimitive& primitive, + const glm::dmat4& transform) { + if (!isValidPrimitive(gltf, primitive)) { + return; + } + + CesiumGltf::Material* pMaterial = + CesiumGltf::Model::getSafe(&gltf.materials, primitive.material); + if (!pMaterial) { + // A primitive using the default material will not have any textures. + return; + } + + if (pMaterial->pbrMetallicRoughness) { + if (pMaterial->pbrMetallicRoughness->baseColorTexture) { + futures.emplace_back(createTextureInLoadThread( + asyncSystem, + gltf, + *pMaterial->pbrMetallicRoughness->baseColorTexture, + true, + imageNeedsMipmaps)); + } + if (pMaterial->pbrMetallicRoughness->metallicRoughnessTexture) { + futures.emplace_back(createTextureInLoadThread( + asyncSystem, + gltf, + *pMaterial->pbrMetallicRoughness->metallicRoughnessTexture, + false, + imageNeedsMipmaps)); + } + } + + if (pMaterial->emissiveTexture) + futures.emplace_back(createTextureInLoadThread( + asyncSystem, + gltf, + *pMaterial->emissiveTexture, + true, + imageNeedsMipmaps)); + if (pMaterial->normalTexture) + futures.emplace_back(createTextureInLoadThread( + asyncSystem, + gltf, + *pMaterial->normalTexture, + false, + imageNeedsMipmaps)); + if (pMaterial->occlusionTexture) + futures.emplace_back(createTextureInLoadThread( + asyncSystem, + gltf, + *pMaterial->occlusionTexture, + false, + imageNeedsMipmaps)); + + // Initialize water mask if needed. + auto onlyWaterIt = primitive.extras.find("OnlyWater"); + auto onlyLandIt = primitive.extras.find("OnlyLand"); + if (onlyWaterIt != primitive.extras.end() && + onlyWaterIt->second.isBool() && + onlyLandIt != primitive.extras.end() && + onlyLandIt->second.isBool()) { + bool onlyWater = onlyWaterIt->second.getBoolOrDefault(false); + bool onlyLand = onlyLandIt->second.getBoolOrDefault(true); + + if (!onlyWater && !onlyLand) { + // We have to use the water mask + auto waterMaskTextureIdIt = primitive.extras.find("WaterMaskTex"); + if (waterMaskTextureIdIt != primitive.extras.end() && + waterMaskTextureIdIt->second.isInt64()) { + int32_t waterMaskTextureId = static_cast( + waterMaskTextureIdIt->second.getInt64OrDefault(-1)); + CesiumGltf::TextureInfo waterMaskInfo; + waterMaskInfo.index = waterMaskTextureId; + if (waterMaskTextureId >= 0 && + waterMaskTextureId < gltf.textures.size()) { + futures.emplace_back(createTextureInLoadThread( + asyncSystem, + gltf, + waterMaskInfo, + false, + imageNeedsMipmaps)); + } + } + } + } + }); + + return asyncSystem.all(std::move(futures)); +} + +namespace { + +bool isSupportedIndexComponentType(int32_t componentType) { + return componentType == CesiumGltf::Accessor::ComponentType::UNSIGNED_BYTE || + componentType == CesiumGltf::Accessor::ComponentType::UNSIGNED_SHORT || + componentType == CesiumGltf::Accessor::ComponentType::UNSIGNED_INT; +} + +bool isSupportedPrimitiveMode(int32_t primitiveMode) { + return primitiveMode == CesiumGltf::MeshPrimitive::Mode::TRIANGLES || + primitiveMode == CesiumGltf::MeshPrimitive::Mode::TRIANGLE_STRIP || + primitiveMode == CesiumGltf::MeshPrimitive::Mode::POINTS; +} + +// Determines if a glTF primitive is usable for our purposes. +bool isValidPrimitive( + const CesiumGltf::Model& gltf, + const CesiumGltf::MeshPrimitive& primitive) { + if (!isSupportedPrimitiveMode(primitive.mode)) { + // This primitive's mode is not supported. + return false; + } + + auto positionAccessorIt = + primitive.attributes.find(CesiumGltf::VertexAttributeSemantics::POSITION); + if (positionAccessorIt == primitive.attributes.end()) { + // This primitive doesn't have a POSITION semantic, so it's not valid. + return false; + } + + CesiumGltf::AccessorView positionView( + gltf, + positionAccessorIt->second); + if (positionView.status() != CesiumGltf::AccessorViewStatus::Valid) { + // This primitive's POSITION accessor is invalid, so the primitive is not + // valid. + return false; + } + + const CesiumGltf::Accessor* pIndexAccessor = + CesiumGltf::Model::getSafe(&gltf.accessors, primitive.indices); + if (pIndexAccessor && + !isSupportedIndexComponentType(pIndexAccessor->componentType)) { + // This primitive's indices are not a supported type, so the primitive is + // not valid. + return false; + } + + return true; +} + +bool doesTextureUseMipmaps( + const CesiumGltf::Model& gltf, + const CesiumGltf::Texture& texture) { + const CesiumGltf::Sampler& sampler = + CesiumGltf::Model::getSafe(gltf.samplers, texture.sampler); + + switch (sampler.minFilter.value_or( + CesiumGltf::Sampler::MinFilter::LINEAR_MIPMAP_LINEAR)) { + case CesiumGltf::Sampler::MinFilter::LINEAR_MIPMAP_LINEAR: + case CesiumGltf::Sampler::MinFilter::LINEAR_MIPMAP_NEAREST: + case CesiumGltf::Sampler::MinFilter::NEAREST_MIPMAP_LINEAR: + case CesiumGltf::Sampler::MinFilter::NEAREST_MIPMAP_NEAREST: + return true; + default: // LINEAR and NEAREST + return false; + } +} + +SharedFuture createTextureInLoadThread( + const AsyncSystem& asyncSystem, + CesiumGltf::Model& gltf, + CesiumGltf::TextureInfo& textureInfo, + bool sRGB, + const std::vector& imageNeedsMipmaps) { + CesiumGltf::Texture* pTexture = + CesiumGltf::Model::getSafe(&gltf.textures, textureInfo.index); + if (pTexture == nullptr) + return asyncSystem.createResolvedFuture().share(); + + CesiumGltf::Image* pImage = + CesiumGltf::Model::getSafe(&gltf.images, pTexture->source); + if (pImage == nullptr || pImage->pAsset == nullptr) + return asyncSystem.createResolvedFuture().share(); + + check(pTexture->source >= 0 && pTexture->source < imageNeedsMipmaps.size()); + bool needsMips = imageNeedsMipmaps[pTexture->source]; + + const ExtensionImageAssetUnreal& extension = + ExtensionImageAssetUnreal::getOrCreate( + asyncSystem, + *pImage->pAsset, + sRGB, + needsMips, + std::nullopt); + + return extension.getFuture(); +} + +} // namespace diff --git a/Source/CesiumRuntime/Private/CesiumGltfTextures.h b/Source/CesiumRuntime/Private/CesiumGltfTextures.h new file mode 100644 index 000000000..64540f7e9 --- /dev/null +++ b/Source/CesiumRuntime/Private/CesiumGltfTextures.h @@ -0,0 +1,25 @@ +// Copyright 2020-2024 CesiumGS, Inc. and Contributors + +#pragma once + +#include + +namespace CesiumAsync { +class AsyncSystem; +} + +namespace CesiumGltf { +struct Model; +} + +class CesiumGltfTextures { +public: + /** + * Creates all of the texture resources that are required by the given glTF, + * and adds `ExtensionImageCesiumUnreal` to each. This is intended to be + * called from a worker thread. + */ + static CesiumAsync::Future createInWorkerThread( + const CesiumAsync::AsyncSystem& asyncSystem, + CesiumGltf::Model& model); +}; diff --git a/Source/CesiumRuntime/Private/CesiumIonServer.cpp b/Source/CesiumRuntime/Private/CesiumIonServer.cpp index 2cb67f241..d7d803ed5 100644 --- a/Source/CesiumRuntime/Private/CesiumIonServer.cpp +++ b/Source/CesiumRuntime/Private/CesiumIonServer.cpp @@ -15,6 +15,11 @@ #include "FileHelpers.h" #endif +const FString DISPLAY_NAME = TEXT("ion.cesium.com"); +const FString SERVER_URL = TEXT("https://ion.cesium.com"); +const FString API_URL = TEXT("https://api.cesium.com"); +const int64 OAUTH_APP_ID = 190; + /*static*/ UCesiumIonServer* UCesiumIonServer::_pDefaultForNewObjects = nullptr; /*static*/ UCesiumIonServer* UCesiumIonServer::GetDefaultServer() { @@ -35,10 +40,10 @@ nullptr, GWarn)); - Server->DisplayName = TEXT("ion.cesium.com"); - Server->ServerUrl = TEXT("https://ion.cesium.com"); - Server->ApiUrl = TEXT("https://api.cesium.com"); - Server->OAuth2ApplicationID = 190; + Server->DisplayName = DISPLAY_NAME; + Server->ServerUrl = SERVER_URL; + Server->ApiUrl = API_URL; + Server->OAuth2ApplicationID = OAUTH_APP_ID; FAssetRegistryModule::AssetCreated(Server); @@ -46,6 +51,18 @@ Package->SetDirtyFlag(true); UEditorLoadingAndSavingUtils::SavePackages({Package}, true); } +#else + if (!IsValid(Server)) { + Server = NewObject( + UCesiumIonServer::StaticClass(), + "CesiumIonSaaS", + RF_Public | RF_Standalone | RF_Transactional); + + Server->DisplayName = DISPLAY_NAME; + Server->ServerUrl = SERVER_URL; + Server->ApiUrl = API_URL; + Server->OAuth2ApplicationID = OAUTH_APP_ID; + } #endif return Server; diff --git a/Source/CesiumRuntime/Private/CesiumLifetime.cpp b/Source/CesiumRuntime/Private/CesiumLifetime.cpp index f2ec767aa..6ea2c2a21 100644 --- a/Source/CesiumRuntime/Private/CesiumLifetime.cpp +++ b/Source/CesiumRuntime/Private/CesiumLifetime.cpp @@ -129,6 +129,7 @@ void AmortizedDestructor::finalizeDestroy(UObject* pObject) const { UTexture2D* pTexture2D = Cast(pObject); if (pTexture2D) { + pTexture2D->ReleaseResource(); FTexturePlatformData* pPlatformData = pTexture2D->GetPlatformData(); pTexture2D->SetPlatformData(nullptr); delete pPlatformData; diff --git a/Source/CesiumRuntime/Private/CesiumMetadataPickingBlueprintLibrary.cpp b/Source/CesiumRuntime/Private/CesiumMetadataPickingBlueprintLibrary.cpp index 465e185be..8a8e0af69 100644 --- a/Source/CesiumRuntime/Private/CesiumMetadataPickingBlueprintLibrary.cpp +++ b/Source/CesiumRuntime/Private/CesiumMetadataPickingBlueprintLibrary.cpp @@ -5,6 +5,8 @@ #include "CesiumGltfPrimitiveComponent.h" #include "CesiumMetadataValue.h" +#include + static TMap EmptyCesiumMetadataValueMap; TMap @@ -127,8 +129,10 @@ bool UCesiumMetadataPickingBlueprintLibrary::FindUVFromHit( std::array Positions; for (size_t i = 0; i < Positions.size(); i++) { auto& Position = primData.PositionAccessor[VertexIndices[i]]; - // The Y-component of glTF positions must be inverted - Positions[i] = FVector(Position[0], -Position[1], Position[2]); + // The Y-component of glTF positions must be inverted, and the positions + // must be scaled to match the UE meshes. + Positions[i] = FVector(Position[0], -Position[1], Position[2]) * + CesiumPrimitiveData::positionScaleFactor; } const FVector Location = @@ -146,23 +150,92 @@ bool UCesiumMetadataPickingBlueprintLibrary::FindUVFromHit( return true; } +namespace { +/* + * Returns std:nullopt if the component isn't an instanced static mesh or + * if it doesn't have instance feature IDs. This will prompt + * GetPropertyTableValuesFromHit() to search for feature IDs in the primitive's + * attributes. + */ +std::optional> +getInstancePropertyTableValues( + const FHitResult& Hit, + const UCesiumGltfComponent* pModel, + int64 FeatureIDSetIndex) { + const auto* pInstancedComponent = + Cast(Hit.Component); + if (!IsValid(pInstancedComponent)) { + return std::nullopt; + } + const TSharedPtr& pInstanceFeatures = + pInstancedComponent->pInstanceFeatures; + if (!pInstanceFeatures) { + return std::nullopt; + } + + const TArray& featureIDSets = + UCesiumPrimitiveFeaturesBlueprintLibrary::GetFeatureIDSets( + *pInstanceFeatures); + if (FeatureIDSetIndex < 0 || FeatureIDSetIndex >= featureIDSets.Num()) { + return TMap(); + } + + const FCesiumFeatureIdSet& featureIDSet = featureIDSets[FeatureIDSetIndex]; + const int64 propertyTableIndex = + UCesiumFeatureIdSetBlueprintLibrary::GetPropertyTableIndex(featureIDSet); + + const TArray& propertyTables = + UCesiumModelMetadataBlueprintLibrary::GetPropertyTables(pModel->Metadata); + if (propertyTableIndex < 0 || propertyTableIndex >= propertyTables.Num()) { + return TMap(); + } + const FCesiumPropertyTable& propertyTable = + propertyTables[propertyTableIndex]; + int64 featureID = + UCesiumPrimitiveFeaturesBlueprintLibrary::GetFeatureIDFromInstance( + *pInstanceFeatures, + Hit.Item, + FeatureIDSetIndex); + if (featureID < 0) { + return TMap(); + } + return UCesiumPropertyTableBlueprintLibrary::GetMetadataValuesForFeature( + propertyTable, + featureID); +} +} // namespace + TMap UCesiumMetadataPickingBlueprintLibrary::GetPropertyTableValuesFromHit( const FHitResult& Hit, int64 FeatureIDSetIndex) { - const UCesiumGltfPrimitiveComponent* pGltfComponent = - Cast(Hit.Component); - if (!IsValid(pGltfComponent)) { + const UCesiumGltfComponent* pModel = nullptr; + + if (const auto* pPrimComponent = Cast(Hit.Component); + !IsValid(pPrimComponent)) { return TMap(); + } else { + pModel = Cast(pPrimComponent->GetOuter()); } - const UCesiumGltfComponent* pModel = - Cast(pGltfComponent->GetOuter()); if (!IsValid(pModel)) { return TMap(); } - const CesiumPrimitiveData& primData = pGltfComponent->getPrimitiveData(); + // Query for instance-level metadata first. (EXT_instance_features) + std::optional> maybeProperties = + getInstancePropertyTableValues(Hit, pModel, FeatureIDSetIndex); + if (maybeProperties) { + return *maybeProperties; + } + + const auto* pCesiumPrimitive = Cast(Hit.Component); + if (!pCesiumPrimitive) { + return TMap(); + } + + // Query for primitive-level metadata. (EXT_mesh_features) + const CesiumPrimitiveData& primData = pCesiumPrimitive->getPrimitiveData(); const FCesiumPrimitiveFeatures& features = primData.Features; const TArray& featureIDSets = UCesiumPrimitiveFeaturesBlueprintLibrary::GetFeatureIDSets(features); diff --git a/Source/CesiumRuntime/Private/CesiumMetadataPrimitive.cpp b/Source/CesiumRuntime/Private/CesiumMetadataPrimitive.cpp index 521c1b66f..38aad2253 100644 --- a/Source/CesiumRuntime/Private/CesiumMetadataPrimitive.cpp +++ b/Source/CesiumRuntime/Private/CesiumMetadataPrimitive.cpp @@ -1,10 +1,10 @@ // Copyright 2020-2024 CesiumGS, Inc. and Contributors -PRAGMA_DISABLE_DEPRECATION_WARNINGS - #include "CesiumMetadataPrimitive.h" #include "CesiumGltf/Model.h" +PRAGMA_DISABLE_DEPRECATION_WARNINGS + FCesiumMetadataPrimitive::FCesiumMetadataPrimitive( const FCesiumPrimitiveFeatures& PrimitiveFeatures, const FCesiumPrimitiveMetadata& PrimitiveMetadata, diff --git a/Source/CesiumRuntime/Private/CesiumMetadataUtilityBlueprintLibrary.cpp b/Source/CesiumRuntime/Private/CesiumMetadataUtilityBlueprintLibrary.cpp index d9a5db2f8..a4df00533 100644 --- a/Source/CesiumRuntime/Private/CesiumMetadataUtilityBlueprintLibrary.cpp +++ b/Source/CesiumRuntime/Private/CesiumMetadataUtilityBlueprintLibrary.cpp @@ -100,7 +100,7 @@ int64 UCesiumMetadataUtilityBlueprintLibrary::GetFeatureIDFromFaceID( UPARAM(ref) const FCesiumMetadataPrimitive& Primitive, UPARAM(ref) const FCesiumFeatureIdAttribute& FeatureIDAttribute, int64 FaceID) { - return UCesiumFeatureIdAttributeBlueprintLibrary::GetFeatureIDForVertex( + return UCesiumFeatureIdAttributeBlueprintLibrary::GetFeatureID( FeatureIDAttribute, UCesiumMetadataPrimitiveBlueprintLibrary::GetFirstVertexIDFromFaceID( Primitive, diff --git a/Source/CesiumRuntime/Private/CesiumMetadataValue.cpp b/Source/CesiumRuntime/Private/CesiumMetadataValue.cpp index 44580b035..8fac58f33 100644 --- a/Source/CesiumRuntime/Private/CesiumMetadataValue.cpp +++ b/Source/CesiumRuntime/Private/CesiumMetadataValue.cpp @@ -6,7 +6,34 @@ #include #include -using namespace CesiumGltf; +FCesiumMetadataValue::FCesiumMetadataValue(FCesiumMetadataValue&& rhs) = + default; + +FCesiumMetadataValue& +FCesiumMetadataValue::operator=(FCesiumMetadataValue&& rhs) = default; + +FCesiumMetadataValue::FCesiumMetadataValue(const FCesiumMetadataValue& rhs) + : _value(), _valueType(rhs._valueType), _storage(rhs._storage) { + swl::visit( + [this](const auto& value) { + if constexpr (CesiumGltf::IsMetadataArray::value) { + if (!this->_storage.empty()) { + this->_value = decltype(value)(this->_storage); + } else { + this->_value = value; + } + } else { + this->_value = value; + } + }, + rhs._value); +} + +FCesiumMetadataValue& +FCesiumMetadataValue::operator=(const FCesiumMetadataValue& rhs) { + *this = FCesiumMetadataValue(rhs); + return *this; +} ECesiumMetadataBlueprintType UCesiumMetadataValueBlueprintLibrary::GetBlueprintType( @@ -51,7 +78,7 @@ UCesiumMetadataValueBlueprintLibrary::GetTrueComponentType( bool UCesiumMetadataValueBlueprintLibrary::GetBoolean( UPARAM(ref) const FCesiumMetadataValue& Value, bool DefaultValue) { - return std::visit( + return swl::visit( [DefaultValue](auto value) -> bool { return CesiumGltf::MetadataConversions::convert( value) @@ -65,7 +92,7 @@ PRAGMA_ENABLE_DEPRECATION_WARNINGS uint8 UCesiumMetadataValueBlueprintLibrary::GetByte( UPARAM(ref) const FCesiumMetadataValue& Value, uint8 DefaultValue) { - return std::visit( + return swl::visit( [DefaultValue](auto value) -> uint8 { return CesiumGltf::MetadataConversions::convert( value) @@ -77,7 +104,7 @@ uint8 UCesiumMetadataValueBlueprintLibrary::GetByte( int32 UCesiumMetadataValueBlueprintLibrary::GetInteger( UPARAM(ref) const FCesiumMetadataValue& Value, int32 DefaultValue) { - return std::visit( + return swl::visit( [DefaultValue](auto value) { return CesiumGltf::MetadataConversions::convert( value) @@ -89,11 +116,11 @@ int32 UCesiumMetadataValueBlueprintLibrary::GetInteger( int64 UCesiumMetadataValueBlueprintLibrary::GetInteger64( UPARAM(ref) const FCesiumMetadataValue& Value, int64 DefaultValue) { - return std::visit( + return swl::visit( [DefaultValue](auto value) -> int64 { - return CesiumGltf::MetadataConversions::convert( - value) - .value_or(DefaultValue); + return CesiumGltf::MetadataConversions:: + convert(value) + .value_or(DefaultValue); }, Value._value); } @@ -101,7 +128,7 @@ int64 UCesiumMetadataValueBlueprintLibrary::GetInteger64( float UCesiumMetadataValueBlueprintLibrary::GetFloat( UPARAM(ref) const FCesiumMetadataValue& Value, float DefaultValue) { - return std::visit( + return swl::visit( [DefaultValue](auto value) -> float { return CesiumGltf::MetadataConversions::convert( value) @@ -113,7 +140,7 @@ float UCesiumMetadataValueBlueprintLibrary::GetFloat( double UCesiumMetadataValueBlueprintLibrary::GetFloat64( UPARAM(ref) const FCesiumMetadataValue& Value, double DefaultValue) { - return std::visit( + return swl::visit( [DefaultValue](auto value) -> double { return CesiumGltf::MetadataConversions:: convert(value) @@ -125,7 +152,7 @@ double UCesiumMetadataValueBlueprintLibrary::GetFloat64( FIntPoint UCesiumMetadataValueBlueprintLibrary::GetIntPoint( UPARAM(ref) const FCesiumMetadataValue& Value, const FIntPoint& DefaultValue) { - return std::visit( + return swl::visit( [&DefaultValue](auto value) -> FIntPoint { if constexpr (CesiumGltf::IsMetadataString::value) { return UnrealMetadataConversions::toIntPoint(value, DefaultValue); @@ -142,7 +169,7 @@ FIntPoint UCesiumMetadataValueBlueprintLibrary::GetIntPoint( FVector2D UCesiumMetadataValueBlueprintLibrary::GetVector2D( UPARAM(ref) const FCesiumMetadataValue& Value, const FVector2D& DefaultValue) { - return std::visit( + return swl::visit( [&DefaultValue](auto value) -> FVector2D { if constexpr (CesiumGltf::IsMetadataString::value) { return UnrealMetadataConversions::toVector2D(value, DefaultValue); @@ -159,7 +186,7 @@ FVector2D UCesiumMetadataValueBlueprintLibrary::GetVector2D( FIntVector UCesiumMetadataValueBlueprintLibrary::GetIntVector( UPARAM(ref) const FCesiumMetadataValue& Value, const FIntVector& DefaultValue) { - return std::visit( + return swl::visit( [&DefaultValue](auto value) -> FIntVector { if constexpr (CesiumGltf::IsMetadataString::value) { return UnrealMetadataConversions::toIntVector(value, DefaultValue); @@ -176,7 +203,7 @@ FIntVector UCesiumMetadataValueBlueprintLibrary::GetIntVector( FVector3f UCesiumMetadataValueBlueprintLibrary::GetVector3f( UPARAM(ref) const FCesiumMetadataValue& Value, const FVector3f& DefaultValue) { - return std::visit( + return swl::visit( [&DefaultValue](auto value) -> FVector3f { if constexpr (CesiumGltf::IsMetadataString::value) { return UnrealMetadataConversions::toVector3f(value, DefaultValue); @@ -193,7 +220,7 @@ FVector3f UCesiumMetadataValueBlueprintLibrary::GetVector3f( FVector UCesiumMetadataValueBlueprintLibrary::GetVector( UPARAM(ref) const FCesiumMetadataValue& Value, const FVector& DefaultValue) { - return std::visit( + return swl::visit( [&DefaultValue](auto value) -> FVector { if constexpr (CesiumGltf::IsMetadataString::value) { return UnrealMetadataConversions::toVector(value, DefaultValue); @@ -210,7 +237,7 @@ FVector UCesiumMetadataValueBlueprintLibrary::GetVector( FVector4 UCesiumMetadataValueBlueprintLibrary::GetVector4( UPARAM(ref) const FCesiumMetadataValue& Value, const FVector4& DefaultValue) { - return std::visit( + return swl::visit( [&DefaultValue](auto value) -> FVector4 { if constexpr (CesiumGltf::IsMetadataString::value) { return UnrealMetadataConversions::toVector4(value, DefaultValue); @@ -227,7 +254,7 @@ FVector4 UCesiumMetadataValueBlueprintLibrary::GetVector4( FMatrix UCesiumMetadataValueBlueprintLibrary::GetMatrix( UPARAM(ref) const FCesiumMetadataValue& Value, const FMatrix& DefaultValue) { - auto maybeMat4 = std::visit( + auto maybeMat4 = swl::visit( [&DefaultValue](auto value) -> std::optional { return CesiumGltf::MetadataConversions:: convert(value); @@ -241,13 +268,13 @@ FMatrix UCesiumMetadataValueBlueprintLibrary::GetMatrix( FString UCesiumMetadataValueBlueprintLibrary::GetString( UPARAM(ref) const FCesiumMetadataValue& Value, const FString& DefaultValue) { - return std::visit( + return swl::visit( [&DefaultValue](auto value) -> FString { using ValueType = decltype(value); if constexpr ( - IsMetadataVecN::value || - IsMetadataMatN::value || - IsMetadataString::value) { + CesiumGltf::IsMetadataVecN::value || + CesiumGltf::IsMetadataMatN::value || + CesiumGltf::IsMetadataString::value) { return UnrealMetadataConversions::toString(value); } else { auto maybeString = CesiumGltf:: @@ -262,7 +289,7 @@ FString UCesiumMetadataValueBlueprintLibrary::GetString( FCesiumPropertyArray UCesiumMetadataValueBlueprintLibrary::GetArray( UPARAM(ref) const FCesiumMetadataValue& Value) { - return std::visit( + return swl::visit( [](auto value) -> FCesiumPropertyArray { if constexpr (CesiumGltf::IsMetadataArray::value) { return FCesiumPropertyArray(value); @@ -274,7 +301,7 @@ FCesiumPropertyArray UCesiumMetadataValueBlueprintLibrary::GetArray( bool UCesiumMetadataValueBlueprintLibrary::IsEmpty( UPARAM(ref) const FCesiumMetadataValue& Value) { - return std::holds_alternative(Value._value); + return swl::holds_alternative(Value._value); } TMap UCesiumMetadataValueBlueprintLibrary::GetValuesAsStrings( diff --git a/Source/CesiumRuntime/Private/CesiumModelMetadata.cpp b/Source/CesiumRuntime/Private/CesiumModelMetadata.cpp index 63866a624..4deb6615b 100644 --- a/Source/CesiumRuntime/Private/CesiumModelMetadata.cpp +++ b/Source/CesiumRuntime/Private/CesiumModelMetadata.cpp @@ -6,16 +6,14 @@ #include "CesiumGltfComponent.h" #include "CesiumGltfPrimitiveComponent.h" -using namespace CesiumGltf; - static FCesiumModelMetadata EmptyModelMetadata; static FCesiumPropertyTable EmptyPropertyTable; static FCesiumPropertyTexture EmptyPropertyTexture; FCesiumModelMetadata::FCesiumModelMetadata( - const Model& InModel, - const ExtensionModelExtStructuralMetadata& Metadata) { + const CesiumGltf::Model& InModel, + const CesiumGltf::ExtensionModelExtStructuralMetadata& Metadata) { this->_propertyTables.Reserve(Metadata.propertyTables.size()); for (const auto& propertyTable : Metadata.propertyTables) { this->_propertyTables.Emplace(FCesiumPropertyTable(InModel, propertyTable)); diff --git a/Source/CesiumRuntime/Private/CesiumOriginShiftComponent.cpp b/Source/CesiumRuntime/Private/CesiumOriginShiftComponent.cpp index 1213cdbe9..8a5fa3c43 100644 --- a/Source/CesiumRuntime/Private/CesiumOriginShiftComponent.cpp +++ b/Source/CesiumRuntime/Private/CesiumOriginShiftComponent.cpp @@ -76,6 +76,10 @@ void UCesiumOriginShiftComponent::TickComponent( if (!IsValid(Georeference)) return; + UCesiumEllipsoid* Ellipsoid = Georeference->GetEllipsoid(); + + check(IsValid(Ellipsoid)); + UCesiumSubLevelSwitcherComponent* Switcher = Georeference->GetSubLevelSwitcher(); if (!Switcher) @@ -110,7 +114,7 @@ void UCesiumOriginShiftComponent::TickComponent( continue; FVector LevelEcef = - UCesiumWgs84Ellipsoid::LongitudeLatitudeHeightToEarthCenteredEarthFixed( + Ellipsoid->LongitudeLatitudeHeightToEllipsoidCenteredEllipsoidFixed( FVector( SubLevelComponent->GetOriginLongitude(), SubLevelComponent->GetOriginLatitude(), diff --git a/Source/CesiumRuntime/Private/CesiumPointAttenuationVertexFactory.cpp b/Source/CesiumRuntime/Private/CesiumPointAttenuationVertexFactory.cpp index dcf34fcbc..6453a5889 100644 --- a/Source/CesiumRuntime/Private/CesiumPointAttenuationVertexFactory.cpp +++ b/Source/CesiumRuntime/Private/CesiumPointAttenuationVertexFactory.cpp @@ -10,17 +10,8 @@ #include "RenderCommandFence.h" #include "Runtime/Launch/Resources/Version.h" -#if ENGINE_VERSION_5_3_OR_HIGHER -#define RHI_CREATE_BUFFER RHICmdList.CreateBuffer -#define RHI_LOCK_BUFFER RHICmdList.LockBuffer -#define RHI_UNLOCK_BUFFER RHICmdList.UnlockBuffer -#else -#define RHI_CREATE_BUFFER RHICreateBuffer -#define RHI_LOCK_BUFFER RHILockBuffer -#define RHI_UNLOCK_BUFFER RHIUnlockBuffer -#endif - -void FCesiumPointAttenuationIndexBuffer::INIT_RHI_SIGNATURE { +void FCesiumPointAttenuationIndexBuffer::InitRHI( + FRHICommandListBase& RHICmdList) { if (!bAttenuationSupported) { return; } @@ -32,7 +23,7 @@ void FCesiumPointAttenuationIndexBuffer::INIT_RHI_SIGNATURE { const uint32 NumIndices = NumPoints * 6; const uint32 Size = NumIndices * sizeof(uint32); - IndexBufferRHI = RHI_CREATE_BUFFER( + IndexBufferRHI = RHICmdList.CreateBuffer( Size, BUF_Static | BUF_IndexBuffer, sizeof(uint32), @@ -40,7 +31,7 @@ void FCesiumPointAttenuationIndexBuffer::INIT_RHI_SIGNATURE { CreateInfo); uint32* Data = - (uint32*)RHI_LOCK_BUFFER(IndexBufferRHI, 0, Size, RLM_WriteOnly); + (uint32*)RHICmdList.LockBuffer(IndexBufferRHI, 0, Size, RLM_WriteOnly); for (uint32 index = 0, bufferIndex = 0; bufferIndex < NumIndices; index += 4) { @@ -54,7 +45,7 @@ void FCesiumPointAttenuationIndexBuffer::INIT_RHI_SIGNATURE { Data[bufferIndex++] = index + 3; } - RHI_UNLOCK_BUFFER(IndexBufferRHI); + RHICmdList.UnlockBuffer(IndexBufferRHI); } class FCesiumPointAttenuationVertexFactoryShaderParameters @@ -129,25 +120,29 @@ class FCesiumPointAttenuationVertexFactoryShaderParameters */ class FCesiumPointAttenuationDummyVertexBuffer : public FVertexBuffer { public: - virtual void INIT_RHI_SIGNATURE override; + virtual void InitRHI(FRHICommandListBase& RHICmdList) override; }; -void FCesiumPointAttenuationDummyVertexBuffer::INIT_RHI_SIGNATURE { +void FCesiumPointAttenuationDummyVertexBuffer::InitRHI( + FRHICommandListBase& RHICmdList) { FRHIResourceCreateInfo CreateInfo( TEXT("FCesiumPointAttenuationDummyVertexBuffer")); - VertexBufferRHI = RHI_CREATE_BUFFER( + VertexBufferRHI = RHICmdList.CreateBuffer( sizeof(FVector3f) * 4, BUF_Static | BUF_VertexBuffer, 0, ERHIAccess::VertexOrIndexBuffer, CreateInfo); - FVector3f* DummyContents = (FVector3f*) - RHI_LOCK_BUFFER(VertexBufferRHI, 0, sizeof(FVector3f) * 4, RLM_WriteOnly); + FVector3f* DummyContents = (FVector3f*)RHICmdList.LockBuffer( + VertexBufferRHI, + 0, + sizeof(FVector3f) * 4, + RLM_WriteOnly); DummyContents[0] = FVector3f(0.0f, 0.0f, 0.0f); DummyContents[1] = FVector3f(1.0f, 0.0f, 0.0f); DummyContents[2] = FVector3f(0.0f, 1.0f, 0.0f); DummyContents[3] = FVector3f(1.0f, 1.0f, 0.0f); - RHI_UNLOCK_BUFFER(VertexBufferRHI); + RHICmdList.UnlockBuffer(VertexBufferRHI); } TGlobalResource @@ -171,7 +166,21 @@ bool FCesiumPointAttenuationVertexFactory::ShouldCompilePermutation( Parameters.MaterialParameters.bIsSpecialEngineMaterial; } -void FCesiumPointAttenuationVertexFactory::INIT_RHI_SIGNATURE { +void FCesiumPointAttenuationVertexFactory::ModifyCompilationEnvironment( + const FVertexFactoryShaderPermutationParameters& Parameters, + FShaderCompilerEnvironment& OutEnvironment) { + FLocalVertexFactory::ModifyCompilationEnvironment(Parameters, OutEnvironment); +#if ENGINE_VERSION_5_4_OR_HIGHER + OutEnvironment.SetDefine(TEXT("ENGINE_VERSION_5_4_OR_HIGHER"), TEXT("1")); +#endif + +#if ENGINE_VERSION_5_5_OR_HIGHER + OutEnvironment.SetDefine(TEXT("ENGINE_VERSION_5_5_OR_HIGHER"), TEXT("1")); +#endif +} + +void FCesiumPointAttenuationVertexFactory::InitRHI( + FRHICommandListBase& RHICmdList) { FVertexDeclarationElementList Elements; Elements.Add(AccessStreamComponent( FVertexStreamComponent( diff --git a/Source/CesiumRuntime/Private/CesiumPointAttenuationVertexFactory.h b/Source/CesiumRuntime/Private/CesiumPointAttenuationVertexFactory.h index 2afe0cab6..6b8f16c8d 100644 --- a/Source/CesiumRuntime/Private/CesiumPointAttenuationVertexFactory.h +++ b/Source/CesiumRuntime/Private/CesiumPointAttenuationVertexFactory.h @@ -11,12 +11,6 @@ #include "Runtime/Launch/Resources/Version.h" #include "SceneManagement.h" -#if ENGINE_VERSION_5_3_OR_HIGHER -#define INIT_RHI_SIGNATURE InitRHI(FRHICommandListBase& RHICmdList) -#else -#define INIT_RHI_SIGNATURE InitRHI() -#endif - /** * This generates the indices necessary for point attenuation in a * FCesiumGltfPointsComponent. @@ -28,7 +22,7 @@ class FCesiumPointAttenuationIndexBuffer : public FIndexBuffer { const bool bAttenuationSupported) : NumPoints(NumPoints), bAttenuationSupported(bAttenuationSupported) {} - virtual void INIT_RHI_SIGNATURE override; + virtual void InitRHI(FRHICommandListBase& RHICmdList) override; private: // The number of points in the original point mesh. Not to be confused with @@ -70,7 +64,11 @@ class FCesiumPointAttenuationVertexFactory : public FLocalVertexFactory { static bool ShouldCompilePermutation( const FVertexFactoryShaderPermutationParameters& Parameters); + static void ModifyCompilationEnvironment( + const FVertexFactoryShaderPermutationParameters& Parameters, + FShaderCompilerEnvironment& OutEnvironment); + private: - virtual void INIT_RHI_SIGNATURE override; + virtual void InitRHI(FRHICommandListBase& RHICmdList) override; virtual void ReleaseRHI() override; }; diff --git a/Source/CesiumRuntime/Private/CesiumPolygonRasterOverlay.cpp b/Source/CesiumRuntime/Private/CesiumPolygonRasterOverlay.cpp index e29d78f92..3f8a7ba6d 100644 --- a/Source/CesiumRuntime/Private/CesiumPolygonRasterOverlay.cpp +++ b/Source/CesiumRuntime/Private/CesiumPolygonRasterOverlay.cpp @@ -28,7 +28,7 @@ UCesiumPolygonRasterOverlay::CreateOverlay( std::vector polygons; polygons.reserve(this->Polygons.Num()); - for (ACesiumCartographicPolygon* pPolygon : this->Polygons) { + for (auto& pPolygon : this->Polygons) { if (!pPolygon) { continue; } @@ -38,12 +38,15 @@ UCesiumPolygonRasterOverlay::CreateOverlay( polygons.emplace_back(std::move(polygon)); } + UCesiumEllipsoid* Ellipsoid = pTileset->ResolveGeoreference()->GetEllipsoid(); + check(IsValid(Ellipsoid)); + return std::make_unique( TCHAR_TO_UTF8(*this->MaterialLayerKey), polygons, this->InvertSelection, - CesiumGeospatial::Ellipsoid::WGS84, - CesiumGeospatial::GeographicProjection(), + Ellipsoid->GetNativeEllipsoid(), + CesiumGeospatial::GeographicProjection(Ellipsoid->GetNativeEllipsoid()), options); } diff --git a/Source/CesiumRuntime/Private/CesiumPrimitive.h b/Source/CesiumRuntime/Private/CesiumPrimitive.h index 00e324a76..c8a65c7c4 100644 --- a/Source/CesiumRuntime/Private/CesiumPrimitive.h +++ b/Source/CesiumRuntime/Private/CesiumPrimitive.h @@ -101,6 +101,23 @@ class CesiumPrimitiveData { std::optional boundingVolume; + /** + * The factor by which the positions in the glTF primitive is scaled up when + * the Unreal mesh is populated. + * + * We scale up the meshes because Chaos has a degenerate triangle epsilon test + * in `TriangleMeshImplicitObject.cpp` that is almost laughably too eager. + * Perhaps it would be fine if our meshes actually used units of centimeters + * like UE, but they usually use meters instead. With a factor of 1.0, UE will + * consider a right triangle that is slightly less than ~10cm on each side to + * be degenerate. + * + * This value should be a power-of-two so the the scale affects only the + * exponent of coordinate values, not the mantissa, in order to reduce the + * chances of losing precision. + */ + static constexpr double positionScaleFactor = 1024.0; + void destroy(); }; diff --git a/Source/CesiumRuntime/Private/CesiumPrimitiveFeatures.cpp b/Source/CesiumRuntime/Private/CesiumPrimitiveFeatures.cpp index ee31b4e58..0abb7a933 100644 --- a/Source/CesiumRuntime/Private/CesiumPrimitiveFeatures.cpp +++ b/Source/CesiumRuntime/Private/CesiumPrimitiveFeatures.cpp @@ -1,24 +1,24 @@ // Copyright 2020-2024 CesiumGS, Inc. and Contributors #include "CesiumPrimitiveFeatures.h" +#include "CesiumGltf/ExtensionExtInstanceFeatures.h" #include "CesiumGltf/ExtensionExtMeshFeatures.h" +#include "CesiumGltf/ExtensionExtMeshGpuInstancing.h" #include "CesiumGltf/Model.h" #include "CesiumGltfPrimitiveComponent.h" -using namespace CesiumGltf; - static FCesiumPrimitiveFeatures EmptyPrimitiveFeatures; FCesiumPrimitiveFeatures::FCesiumPrimitiveFeatures( - const Model& Model, - const MeshPrimitive& Primitive, - const ExtensionExtMeshFeatures& Features) + const CesiumGltf::Model& Model, + const CesiumGltf::MeshPrimitive& Primitive, + const CesiumGltf::ExtensionExtMeshFeatures& Features) : _vertexCount(0), _primitiveMode(Primitive.mode) { this->_indexAccessor = CesiumGltf::getIndexAccessorView(Model, Primitive); auto positionIt = Primitive.attributes.find("POSITION"); if (positionIt != Primitive.attributes.end()) { - const Accessor& positionAccessor = + const CesiumGltf::Accessor& positionAccessor = Model.getSafe(Model.accessors, positionIt->second); _vertexCount = positionAccessor.count; } @@ -28,6 +28,19 @@ FCesiumPrimitiveFeatures::FCesiumPrimitiveFeatures( } } +FCesiumPrimitiveFeatures::FCesiumPrimitiveFeatures( + const CesiumGltf::Model& Model, + const CesiumGltf::Node& Node, + const CesiumGltf::ExtensionExtInstanceFeatures& InstanceFeatures) + : _vertexCount(0), _primitiveMode(-1) { + if (Node.mesh < 0 || Node.mesh >= Model.meshes.size()) { + return; + } + for (const auto& featureId : InstanceFeatures.featureIds) { + this->_featureIdSets.Emplace(Model, Node, featureId); + } +} + const FCesiumPrimitiveFeatures& UCesiumPrimitiveFeaturesBlueprintLibrary::GetPrimitiveFeatures( const UPrimitiveComponent* component) { @@ -100,6 +113,20 @@ int64 UCesiumPrimitiveFeaturesBlueprintLibrary::GetFeatureIDFromFace( FaceIndex)); } +int64 UCesiumPrimitiveFeaturesBlueprintLibrary::GetFeatureIDFromInstance( + const FCesiumPrimitiveFeatures& InstanceFeatures, + int64 InstanceIndex, + int64 FeatureIDSetIndex) { + if (FeatureIDSetIndex < 0 || + FeatureIDSetIndex >= InstanceFeatures._featureIdSets.Num()) { + return -1; + } + const auto& featureIDSet = InstanceFeatures._featureIdSets[FeatureIDSetIndex]; + return UCesiumFeatureIdSetBlueprintLibrary::GetFeatureIDForInstance( + featureIDSet, + InstanceIndex); +} + int64 UCesiumPrimitiveFeaturesBlueprintLibrary::GetFeatureIDFromHit( UPARAM(ref) const FCesiumPrimitiveFeatures& PrimitiveFeatures, const FHitResult& Hit, diff --git a/Source/CesiumRuntime/Private/CesiumPropertyArray.cpp b/Source/CesiumRuntime/Private/CesiumPropertyArray.cpp new file mode 100644 index 000000000..9003116c3 --- /dev/null +++ b/Source/CesiumRuntime/Private/CesiumPropertyArray.cpp @@ -0,0 +1,33 @@ +// Copyright 2020-2024 CesiumGS, Inc. and Contributors + +#include "CesiumPropertyArray.h" +#include + +FCesiumPropertyArray::FCesiumPropertyArray(FCesiumPropertyArray&& rhs) = + default; + +FCesiumPropertyArray& +FCesiumPropertyArray::operator=(FCesiumPropertyArray&& rhs) = default; + +FCesiumPropertyArray::FCesiumPropertyArray(const FCesiumPropertyArray& rhs) + : _value(), _elementType(rhs._elementType), _storage(rhs._storage) { + swl::visit( + [this](const auto& value) { + if constexpr (CesiumGltf::IsMetadataArray::value) { + if (!this->_storage.empty()) { + this->_value = decltype(value)(this->_storage); + } else { + this->_value = value; + } + } else { + this->_value = value; + } + }, + rhs._value); +} + +FCesiumPropertyArray& +FCesiumPropertyArray::operator=(const FCesiumPropertyArray& rhs) { + *this = FCesiumPropertyArray(rhs); + return *this; +} diff --git a/Source/CesiumRuntime/Private/CesiumPropertyArrayBlueprintLibrary.cpp b/Source/CesiumRuntime/Private/CesiumPropertyArrayBlueprintLibrary.cpp index f96fa4181..341a1fd5e 100644 --- a/Source/CesiumRuntime/Private/CesiumPropertyArrayBlueprintLibrary.cpp +++ b/Source/CesiumRuntime/Private/CesiumPropertyArrayBlueprintLibrary.cpp @@ -24,18 +24,18 @@ UCesiumPropertyArrayBlueprintLibrary::GetElementValueType( int64 UCesiumPropertyArrayBlueprintLibrary::GetArraySize( UPARAM(ref) const FCesiumPropertyArray& array) { - return std::visit([](const auto& view) { return view.size(); }, array._value); + return swl::visit([](const auto& view) { return view.size(); }, array._value); } int64 UCesiumPropertyArrayBlueprintLibrary::GetSize( UPARAM(ref) const FCesiumPropertyArray& array) { - return std::visit([](const auto& view) { return view.size(); }, array._value); + return swl::visit([](const auto& view) { return view.size(); }, array._value); } FCesiumMetadataValue UCesiumPropertyArrayBlueprintLibrary::GetValue( UPARAM(ref) const FCesiumPropertyArray& array, int64 index) { - return std::visit( + return swl::visit( [index](const auto& v) -> FCesiumMetadataValue { if (index < 0 || index >= v.size()) { FFrame::KismetExecutionMessage( @@ -63,7 +63,7 @@ bool UCesiumPropertyArrayBlueprintLibrary::GetBoolean( UPARAM(ref) const FCesiumPropertyArray& array, int64 index, bool defaultValue) { - return std::visit( + return swl::visit( [index, defaultValue](const auto& v) -> bool { if (index < 0 || index >= v.size()) { return defaultValue; @@ -80,7 +80,7 @@ uint8 UCesiumPropertyArrayBlueprintLibrary::GetByte( UPARAM(ref) const FCesiumPropertyArray& array, int64 index, uint8 defaultValue) { - return std::visit( + return swl::visit( [index, defaultValue](const auto& v) -> uint8 { if (index < 0 || index >= v.size()) { return defaultValue; @@ -97,7 +97,7 @@ int32 UCesiumPropertyArrayBlueprintLibrary::GetInteger( UPARAM(ref) const FCesiumPropertyArray& array, int64 index, int32 defaultValue) { - return std::visit( + return swl::visit( [index, defaultValue](const auto& v) -> int32 { if (index < 0 || index >= v.size()) { return defaultValue; @@ -114,15 +114,15 @@ int64 UCesiumPropertyArrayBlueprintLibrary::GetInteger64( UPARAM(ref) const FCesiumPropertyArray& array, int64 index, int64 defaultValue) { - return std::visit( + return swl::visit( [index, defaultValue](const auto& v) -> int64 { if (index < 0 || index >= v.size()) { return defaultValue; } auto value = v[index]; - return CesiumGltf::MetadataConversions::convert( - value) - .value_or(defaultValue); + return CesiumGltf::MetadataConversions:: + convert(value) + .value_or(defaultValue); }, array._value); } @@ -131,7 +131,7 @@ float UCesiumPropertyArrayBlueprintLibrary::GetFloat( UPARAM(ref) const FCesiumPropertyArray& array, int64 index, float defaultValue) { - return std::visit( + return swl::visit( [index, defaultValue](const auto& v) -> float { if (index < 0 || index >= v.size()) { return defaultValue; @@ -148,7 +148,7 @@ double UCesiumPropertyArrayBlueprintLibrary::GetFloat64( UPARAM(ref) const FCesiumPropertyArray& array, int64 index, double defaultValue) { - return std::visit( + return swl::visit( [index, defaultValue](const auto& v) -> double { auto value = v[index]; return CesiumGltf::MetadataConversions:: @@ -162,7 +162,7 @@ FString UCesiumPropertyArrayBlueprintLibrary::GetString( UPARAM(ref) const FCesiumPropertyArray& array, int64 index, const FString& defaultValue) { - return std::visit( + return swl::visit( [index, defaultValue](const auto& v) -> FString { if (index < 0 || index >= v.size()) { return defaultValue; diff --git a/Source/CesiumRuntime/Private/CesiumPropertyTable.cpp b/Source/CesiumRuntime/Private/CesiumPropertyTable.cpp index 9f803e9f6..83a16af47 100644 --- a/Source/CesiumRuntime/Private/CesiumPropertyTable.cpp +++ b/Source/CesiumRuntime/Private/CesiumPropertyTable.cpp @@ -3,21 +3,19 @@ #include "CesiumPropertyTable.h" #include "CesiumGltf/PropertyTableView.h" -using namespace CesiumGltf; - static FCesiumPropertyTableProperty EmptyPropertyTableProperty; FCesiumPropertyTable::FCesiumPropertyTable( - const Model& Model, - const PropertyTable& PropertyTable) + const CesiumGltf::Model& Model, + const CesiumGltf::PropertyTable& PropertyTable) : _status(ECesiumPropertyTableStatus::ErrorInvalidPropertyTableClass), _name(PropertyTable.name.value_or("").c_str()), _className(PropertyTable.classProperty.c_str()), _count(PropertyTable.count), _properties() { - PropertyTableView propertyTableView{Model, PropertyTable}; + CesiumGltf::PropertyTableView propertyTableView{Model, PropertyTable}; switch (propertyTableView.status()) { - case PropertyTableViewStatus::Valid: + case CesiumGltf::PropertyTableViewStatus::Valid: _status = ECesiumPropertyTableStatus::Valid; break; default: diff --git a/Source/CesiumRuntime/Private/CesiumPropertyTableProperty.cpp b/Source/CesiumRuntime/Private/CesiumPropertyTableProperty.cpp index a3aba9f56..dda61f6f2 100644 --- a/Source/CesiumRuntime/Private/CesiumPropertyTableProperty.cpp +++ b/Source/CesiumRuntime/Private/CesiumPropertyTableProperty.cpp @@ -6,8 +6,6 @@ #include "UnrealMetadataConversions.h" #include -using namespace CesiumGltf; - namespace { /** * Callback on a std::any, assuming that it contains a PropertyTablePropertyView @@ -29,14 +27,15 @@ template < typename Callback> TResult propertyTablePropertyCallback(const std::any& property, Callback&& callback) { - const PropertyTablePropertyView* pProperty = - std::any_cast>( + const CesiumGltf::PropertyTablePropertyView* + pProperty = std::any_cast< + CesiumGltf::PropertyTablePropertyView>( &property); if (pProperty) { return callback(*pProperty); } - return callback(PropertyTablePropertyView()); + return callback(CesiumGltf::PropertyTablePropertyView()); } /** @@ -113,7 +112,7 @@ TResult scalarPropertyTablePropertyCallback( property, std::forward(callback)); default: - return callback(PropertyTablePropertyView()); + return callback(CesiumGltf::PropertyTablePropertyView()); } } @@ -139,66 +138,66 @@ TResult scalarArrayPropertyTablePropertyCallback( switch (valueType.ComponentType) { case ECesiumMetadataComponentType::Int8: return propertyTablePropertyCallback< - PropertyArrayView, + CesiumGltf::PropertyArrayView, Normalized, TResult, Callback>(property, std::forward(callback)); case ECesiumMetadataComponentType::Uint8: return propertyTablePropertyCallback< - PropertyArrayView, + CesiumGltf::PropertyArrayView, Normalized, TResult, Callback>(property, std::forward(callback)); case ECesiumMetadataComponentType::Int16: return propertyTablePropertyCallback< - PropertyArrayView, + CesiumGltf::PropertyArrayView, Normalized, TResult, Callback>(property, std::forward(callback)); case ECesiumMetadataComponentType::Uint16: return propertyTablePropertyCallback< - PropertyArrayView, + CesiumGltf::PropertyArrayView, Normalized, TResult, Callback>(property, std::forward(callback)); case ECesiumMetadataComponentType::Int32: return propertyTablePropertyCallback< - PropertyArrayView, + CesiumGltf::PropertyArrayView, Normalized, TResult, Callback>(property, std::forward(callback)); case ECesiumMetadataComponentType::Uint32: return propertyTablePropertyCallback< - PropertyArrayView, + CesiumGltf::PropertyArrayView, Normalized, TResult, Callback>(property, std::forward(callback)); case ECesiumMetadataComponentType::Int64: return propertyTablePropertyCallback< - PropertyArrayView, + CesiumGltf::PropertyArrayView, Normalized, TResult, Callback>(property, std::forward(callback)); case ECesiumMetadataComponentType::Uint64: return propertyTablePropertyCallback< - PropertyArrayView, + CesiumGltf::PropertyArrayView, Normalized, TResult, Callback>(property, std::forward(callback)); case ECesiumMetadataComponentType::Float32: return propertyTablePropertyCallback< - PropertyArrayView, + CesiumGltf::PropertyArrayView, false, TResult, Callback>(property, std::forward(callback)); case ECesiumMetadataComponentType::Float64: return propertyTablePropertyCallback< - PropertyArrayView, + CesiumGltf::PropertyArrayView, false, TResult, Callback>(property, std::forward(callback)); default: - return callback(PropertyTablePropertyView()); + return callback(CesiumGltf::PropertyTablePropertyView()); } } @@ -283,7 +282,7 @@ TResult vecNPropertyTablePropertyCallback( TResult, Callback>(property, std::forward(callback)); default: - return callback(PropertyTablePropertyView()); + return callback(CesiumGltf::PropertyTablePropertyView()); } } @@ -326,7 +325,7 @@ TResult vecNPropertyTablePropertyCallback( std::forward(callback)); } - return callback(PropertyTablePropertyView()); + return callback(CesiumGltf::PropertyTablePropertyView()); } /** @@ -352,66 +351,66 @@ TResult vecNArrayPropertyTablePropertyCallback( switch (valueType.ComponentType) { case ECesiumMetadataComponentType::Int8: return propertyTablePropertyCallback< - PropertyArrayView>, + CesiumGltf::PropertyArrayView>, Normalized, TResult, Callback>(property, std::forward(callback)); case ECesiumMetadataComponentType::Uint8: return propertyTablePropertyCallback< - PropertyArrayView>, + CesiumGltf::PropertyArrayView>, Normalized, TResult, Callback>(property, std::forward(callback)); case ECesiumMetadataComponentType::Int16: return propertyTablePropertyCallback< - PropertyArrayView>, + CesiumGltf::PropertyArrayView>, Normalized, TResult, Callback>(property, std::forward(callback)); case ECesiumMetadataComponentType::Uint16: return propertyTablePropertyCallback< - PropertyArrayView>, + CesiumGltf::PropertyArrayView>, Normalized, TResult, Callback>(property, std::forward(callback)); case ECesiumMetadataComponentType::Int32: return propertyTablePropertyCallback< - PropertyArrayView>, + CesiumGltf::PropertyArrayView>, Normalized, TResult, Callback>(property, std::forward(callback)); case ECesiumMetadataComponentType::Uint32: return propertyTablePropertyCallback< - PropertyArrayView>, + CesiumGltf::PropertyArrayView>, Normalized, TResult, Callback>(property, std::forward(callback)); case ECesiumMetadataComponentType::Int64: return propertyTablePropertyCallback< - PropertyArrayView>, + CesiumGltf::PropertyArrayView>, Normalized, TResult, Callback>(property, std::forward(callback)); case ECesiumMetadataComponentType::Uint64: return propertyTablePropertyCallback< - PropertyArrayView>, + CesiumGltf::PropertyArrayView>, Normalized, TResult, Callback>(property, std::forward(callback)); case ECesiumMetadataComponentType::Float32: return propertyTablePropertyCallback< - PropertyArrayView>, + CesiumGltf::PropertyArrayView>, false, TResult, Callback>(property, std::forward(callback)); case ECesiumMetadataComponentType::Float64: return propertyTablePropertyCallback< - PropertyArrayView>, + CesiumGltf::PropertyArrayView>, false, TResult, Callback>(property, std::forward(callback)); default: - return callback(PropertyTablePropertyView()); + return callback(CesiumGltf::PropertyTablePropertyView()); } } @@ -458,7 +457,7 @@ TResult vecNArrayPropertyTablePropertyCallback( Callback>(property, valueType, std::forward(callback)); } - return callback(PropertyTablePropertyView()); + return callback(CesiumGltf::PropertyTablePropertyView()); } /** @@ -542,7 +541,7 @@ TResult matNPropertyTablePropertyCallback( TResult, Callback>(property, std::forward(callback)); default: - return callback(PropertyTablePropertyView()); + return callback(CesiumGltf::PropertyTablePropertyView()); } } @@ -585,7 +584,7 @@ TResult matNPropertyTablePropertyCallback( std::forward(callback)); } - return callback(PropertyTablePropertyView()); + return callback(CesiumGltf::PropertyTablePropertyView()); } /** @@ -611,66 +610,66 @@ TResult matNArrayPropertyTablePropertyCallback( switch (valueType.ComponentType) { case ECesiumMetadataComponentType::Int8: return propertyTablePropertyCallback< - PropertyArrayView>, + CesiumGltf::PropertyArrayView>, Normalized, TResult, Callback>(property, std::forward(callback)); case ECesiumMetadataComponentType::Uint8: return propertyTablePropertyCallback< - PropertyArrayView>, + CesiumGltf::PropertyArrayView>, Normalized, TResult, Callback>(property, std::forward(callback)); case ECesiumMetadataComponentType::Int16: return propertyTablePropertyCallback< - PropertyArrayView>, + CesiumGltf::PropertyArrayView>, Normalized, TResult, Callback>(property, std::forward(callback)); case ECesiumMetadataComponentType::Uint16: return propertyTablePropertyCallback< - PropertyArrayView>, + CesiumGltf::PropertyArrayView>, Normalized, TResult, Callback>(property, std::forward(callback)); case ECesiumMetadataComponentType::Int32: return propertyTablePropertyCallback< - PropertyArrayView>, + CesiumGltf::PropertyArrayView>, Normalized, TResult, Callback>(property, std::forward(callback)); case ECesiumMetadataComponentType::Uint32: return propertyTablePropertyCallback< - PropertyArrayView>, + CesiumGltf::PropertyArrayView>, Normalized, TResult, Callback>(property, std::forward(callback)); case ECesiumMetadataComponentType::Int64: return propertyTablePropertyCallback< - PropertyArrayView>, + CesiumGltf::PropertyArrayView>, Normalized, TResult, Callback>(property, std::forward(callback)); case ECesiumMetadataComponentType::Uint64: return propertyTablePropertyCallback< - PropertyArrayView>, + CesiumGltf::PropertyArrayView>, Normalized, TResult, Callback>(property, std::forward(callback)); case ECesiumMetadataComponentType::Float32: return propertyTablePropertyCallback< - PropertyArrayView>, + CesiumGltf::PropertyArrayView>, false, TResult, Callback>(property, std::forward(callback)); case ECesiumMetadataComponentType::Float64: return propertyTablePropertyCallback< - PropertyArrayView>, + CesiumGltf::PropertyArrayView>, false, TResult, Callback>(property, std::forward(callback)); default: - return callback(PropertyTablePropertyView()); + return callback(CesiumGltf::PropertyTablePropertyView()); } } @@ -717,7 +716,7 @@ TResult matNArrayPropertyTablePropertyCallback( Callback>(property, valueType, std::forward(callback)); } - return callback(PropertyTablePropertyView()); + return callback(CesiumGltf::PropertyTablePropertyView()); } template @@ -747,18 +746,18 @@ TResult arrayPropertyTablePropertyCallback( Callback>(property, valueType, std::forward(callback)); case ECesiumMetadataType::Boolean: return propertyTablePropertyCallback< - PropertyArrayView, + CesiumGltf::PropertyArrayView, false, TResult, Callback>(property, std::forward(callback)); case ECesiumMetadataType::String: return propertyTablePropertyCallback< - PropertyArrayView, + CesiumGltf::PropertyArrayView, false, TResult, Callback>(property, std::forward(callback)); default: - return callback(PropertyTablePropertyView()); + return callback(CesiumGltf::PropertyTablePropertyView()); } } @@ -826,7 +825,7 @@ TResult propertyTablePropertyCallback( TResult, Callback>(property, std::forward(callback)); default: - return callback(PropertyTablePropertyView()); + return callback(CesiumGltf::PropertyTablePropertyView()); } } @@ -969,7 +968,7 @@ int64 UCesiumPropertyTablePropertyBlueprintLibrary::GetInteger64( auto maybeValue = v.get(FeatureID); if (maybeValue) { auto value = *maybeValue; - return CesiumGltf::MetadataConversions:: + return CesiumGltf::MetadataConversions:: convert(value) .value_or(DefaultValue); } @@ -1044,7 +1043,7 @@ FIntPoint UCesiumPropertyTablePropertyBlueprintLibrary::GetIntPoint( } auto value = *maybeValue; - if constexpr (IsMetadataString::value) { + if constexpr (CesiumGltf::IsMetadataString::value) { return UnrealMetadataConversions::toIntPoint(value, DefaultValue); } else { auto maybeVec2 = CesiumGltf:: @@ -1074,7 +1073,7 @@ FVector2D UCesiumPropertyTablePropertyBlueprintLibrary::GetVector2D( } auto value = *maybeValue; - if constexpr (IsMetadataString::value) { + if constexpr (CesiumGltf::IsMetadataString::value) { return UnrealMetadataConversions::toVector2D(value, DefaultValue); } else { auto maybeVec2 = CesiumGltf:: @@ -1104,7 +1103,7 @@ FIntVector UCesiumPropertyTablePropertyBlueprintLibrary::GetIntVector( } auto value = *maybeValue; - if constexpr (IsMetadataString::value) { + if constexpr (CesiumGltf::IsMetadataString::value) { return UnrealMetadataConversions::toIntVector(value, DefaultValue); } else { auto maybeVec3 = CesiumGltf:: @@ -1134,7 +1133,7 @@ FVector3f UCesiumPropertyTablePropertyBlueprintLibrary::GetVector3f( } auto value = *maybeValue; - if constexpr (IsMetadataString::value) { + if constexpr (CesiumGltf::IsMetadataString::value) { return UnrealMetadataConversions::toVector3f(value, DefaultValue); } else { auto maybeVec3 = CesiumGltf:: @@ -1164,7 +1163,7 @@ FVector UCesiumPropertyTablePropertyBlueprintLibrary::GetVector( } auto value = *maybeValue; - if constexpr (IsMetadataString::value) { + if constexpr (CesiumGltf::IsMetadataString::value) { return UnrealMetadataConversions::toVector(value, DefaultValue); } else { auto maybeVec3 = CesiumGltf:: @@ -1194,7 +1193,7 @@ FVector4 UCesiumPropertyTablePropertyBlueprintLibrary::GetVector4( } auto value = *maybeValue; - if constexpr (IsMetadataString::value) { + if constexpr (CesiumGltf::IsMetadataString::value) { return UnrealMetadataConversions::toVector4(value, DefaultValue); } else { auto maybeVec4 = CesiumGltf:: @@ -1254,9 +1253,9 @@ FString UCesiumPropertyTablePropertyBlueprintLibrary::GetString( using ValueType = decltype(value); if constexpr ( - IsMetadataVecN::value || - IsMetadataMatN::value || - IsMetadataString::value) { + CesiumGltf::IsMetadataVecN::value || + CesiumGltf::IsMetadataMatN::value || + CesiumGltf::IsMetadataString::value) { return UnrealMetadataConversions::toString(value); } else { auto maybeString = CesiumGltf:: @@ -1316,14 +1315,15 @@ FCesiumMetadataValue UCesiumPropertyTablePropertyBlueprintLibrary::GetRawValue( Property._normalized, [FeatureID](const auto& view) -> FCesiumMetadataValue { // Return an empty value if the property is empty. - if (view.status() == - PropertyTablePropertyViewStatus::EmptyPropertyWithDefault) { + if (view.status() == CesiumGltf::PropertyTablePropertyViewStatus:: + EmptyPropertyWithDefault) { return FCesiumMetadataValue(); } // size() returns zero if the view is invalid. if (FeatureID >= 0 && FeatureID < view.size()) { - return FCesiumMetadataValue(view.getRaw(FeatureID)); + return FCesiumMetadataValue( + CesiumGltf::propertyValueViewToCopy(view.getRaw(FeatureID))); } return FCesiumMetadataValue(); @@ -1343,7 +1343,8 @@ FCesiumMetadataValue UCesiumPropertyTablePropertyBlueprintLibrary::GetOffset( Property._normalized, [](const auto& view) -> FCesiumMetadataValue { // Returns an empty value if no offset is specified. - return FCesiumMetadataValue(view.offset()); + return FCesiumMetadataValue( + CesiumGltf::propertyValueViewToCopy(view.offset())); }); } @@ -1355,7 +1356,8 @@ FCesiumMetadataValue UCesiumPropertyTablePropertyBlueprintLibrary::GetScale( Property._normalized, [](const auto& view) -> FCesiumMetadataValue { // Returns an empty value if no scale is specified. - return FCesiumMetadataValue(view.scale()); + return FCesiumMetadataValue( + CesiumGltf::propertyValueViewToCopy(view.scale())); }); } @@ -1368,7 +1370,8 @@ UCesiumPropertyTablePropertyBlueprintLibrary::GetMinimumValue( Property._normalized, [](const auto& view) -> FCesiumMetadataValue { // Returns an empty value if no min is specified. - return FCesiumMetadataValue(view.min()); + return FCesiumMetadataValue( + CesiumGltf::propertyValueViewToCopy(view.min())); }); } @@ -1381,7 +1384,8 @@ UCesiumPropertyTablePropertyBlueprintLibrary::GetMaximumValue( Property._normalized, [](const auto& view) -> FCesiumMetadataValue { // Returns an empty value if no max is specified. - return FCesiumMetadataValue(view.max()); + return FCesiumMetadataValue( + CesiumGltf::propertyValueViewToCopy(view.max())); }); } @@ -1394,7 +1398,8 @@ UCesiumPropertyTablePropertyBlueprintLibrary::GetNoDataValue( Property._normalized, [](const auto& view) -> FCesiumMetadataValue { // Returns an empty value if no "no data" value is specified. - return FCesiumMetadataValue(view.noData()); + return FCesiumMetadataValue( + CesiumGltf::propertyValueViewToCopy(view.noData())); }); } @@ -1407,7 +1412,8 @@ UCesiumPropertyTablePropertyBlueprintLibrary::GetDefaultValue( Property._normalized, [](const auto& view) -> FCesiumMetadataValue { // Returns an empty value if no default value is specified. - return FCesiumMetadataValue(view.defaultValue()); + return FCesiumMetadataValue( + CesiumGltf::propertyValueViewToCopy(view.defaultValue())); }); } diff --git a/Source/CesiumRuntime/Private/CesiumPropertyTexture.cpp b/Source/CesiumRuntime/Private/CesiumPropertyTexture.cpp index e69be7349..ffefd3e3b 100644 --- a/Source/CesiumRuntime/Private/CesiumPropertyTexture.cpp +++ b/Source/CesiumRuntime/Private/CesiumPropertyTexture.cpp @@ -6,8 +6,6 @@ #include "CesiumGltf/PropertyTextureView.h" #include "CesiumMetadataPickingBlueprintLibrary.h" -using namespace CesiumGltf; - static FCesiumPropertyTextureProperty EmptyPropertyTextureProperty; FCesiumPropertyTexture::FCesiumPropertyTexture( @@ -16,9 +14,9 @@ FCesiumPropertyTexture::FCesiumPropertyTexture( : _status(ECesiumPropertyTextureStatus::ErrorInvalidPropertyTextureClass), _name(PropertyTexture.name.value_or("").c_str()), _className(PropertyTexture.classProperty.c_str()) { - PropertyTextureView propertyTextureView(Model, PropertyTexture); + CesiumGltf::PropertyTextureView propertyTextureView(Model, PropertyTexture); switch (propertyTextureView.status()) { - case PropertyTextureViewStatus::Valid: + case CesiumGltf::PropertyTextureViewStatus::Valid: _status = ECesiumPropertyTextureStatus::Valid; break; default: @@ -35,7 +33,7 @@ FCesiumPropertyTexture::FCesiumPropertyTexture( continue; } - TextureViewOptions options; + CesiumGltf::TextureViewOptions options; options.applyKhrTextureTransformExtension = true; if (propertyPair->second.extras.find("makeImageCopy") != diff --git a/Source/CesiumRuntime/Private/CesiumPropertyTextureProperty.cpp b/Source/CesiumRuntime/Private/CesiumPropertyTextureProperty.cpp index 399805414..082e2ffb1 100644 --- a/Source/CesiumRuntime/Private/CesiumPropertyTextureProperty.cpp +++ b/Source/CesiumRuntime/Private/CesiumPropertyTextureProperty.cpp @@ -8,8 +8,6 @@ #include #include -using namespace CesiumGltf; - namespace { /** * Callback on a std::any, assuming that it contains a @@ -32,14 +30,15 @@ template < typename Callback> TResult propertyTexturePropertyCallback(const std::any& property, Callback&& callback) { - const PropertyTexturePropertyView* pProperty = - std::any_cast>( + const CesiumGltf::PropertyTexturePropertyView* + pProperty = std::any_cast< + CesiumGltf::PropertyTexturePropertyView>( &property); if (pProperty) { return callback(*pProperty); } - return callback(PropertyTexturePropertyView()); + return callback(CesiumGltf::PropertyTexturePropertyView()); } /** @@ -103,7 +102,7 @@ TResult scalarPropertyTexturePropertyCallback( property, std::forward(callback)); default: - return callback(PropertyTexturePropertyView()); + return callback(CesiumGltf::PropertyTexturePropertyView()); } } @@ -129,30 +128,30 @@ TResult scalarArrayPropertyTexturePropertyCallback( switch (valueType.ComponentType) { case ECesiumMetadataComponentType::Int8: return propertyTexturePropertyCallback< - PropertyArrayView, + CesiumGltf::PropertyArrayView, Normalized, TResult, Callback>(property, std::forward(callback)); case ECesiumMetadataComponentType::Uint8: return propertyTexturePropertyCallback< - PropertyArrayView, + CesiumGltf::PropertyArrayView, Normalized, TResult, Callback>(property, std::forward(callback)); case ECesiumMetadataComponentType::Int16: return propertyTexturePropertyCallback< - PropertyArrayView, + CesiumGltf::PropertyArrayView, Normalized, TResult, Callback>(property, std::forward(callback)); case ECesiumMetadataComponentType::Uint16: return propertyTexturePropertyCallback< - PropertyArrayView, + CesiumGltf::PropertyArrayView, Normalized, TResult, Callback>(property, std::forward(callback)); default: - return callback(PropertyTexturePropertyView()); + return callback(CesiumGltf::PropertyTexturePropertyView()); } } @@ -202,7 +201,7 @@ TResult vecNPropertyTexturePropertyCallback( TResult, Callback>(property, std::forward(callback)); default: - return callback(PropertyTexturePropertyView()); + return callback(CesiumGltf::PropertyTexturePropertyView()); } } @@ -249,7 +248,7 @@ TResult vecNPropertyTexturePropertyCallback( Callback>(property, valueType, std::forward(callback)); } - return callback(PropertyTexturePropertyView()); + return callback(CesiumGltf::PropertyTexturePropertyView()); } template @@ -262,7 +261,7 @@ TResult propertyTexturePropertyCallback( if (valueType.bIsArray && valueType.Type != ECesiumMetadataType::Scalar) { // Only scalar property arrays are supported. - return callback(PropertyTexturePropertyView()); + return callback(CesiumGltf::PropertyTexturePropertyView()); } if (valueType.bIsArray) { @@ -309,7 +308,7 @@ TResult propertyTexturePropertyCallback( valueType, std::forward(callback)); default: - return callback(PropertyTexturePropertyView()); + return callback(CesiumGltf::PropertyTexturePropertyView()); } } @@ -333,13 +332,12 @@ const CesiumGltf::Sampler* FCesiumPropertyTextureProperty::getSampler() const { }); } -const CesiumGltf::ImageCesium* -FCesiumPropertyTextureProperty::getImage() const { - return propertyTexturePropertyCallback( +const CesiumGltf::ImageAsset* FCesiumPropertyTextureProperty::getImage() const { + return propertyTexturePropertyCallback( this->_property, this->_valueType, this->_normalized, - [](const auto& view) -> const CesiumGltf::ImageCesium* { + [](const auto& view) -> const CesiumGltf::ImageAsset* { return view.getImage(); }); } @@ -475,7 +473,8 @@ uint8 UCesiumPropertyTexturePropertyBlueprintLibrary::GetByte( Property._valueType, Property._normalized, [&UV, DefaultValue](const auto& view) -> uint8 { - if (view.status() != PropertyTexturePropertyViewStatus::Valid) { + if (view.status() != + CesiumGltf::PropertyTexturePropertyViewStatus::Valid) { return DefaultValue; } auto maybeValue = view.get(UV.X, UV.Y); @@ -498,7 +497,8 @@ int32 UCesiumPropertyTexturePropertyBlueprintLibrary::GetInteger( Property._valueType, Property._normalized, [&UV, DefaultValue](const auto& view) -> int32 { - if (view.status() != PropertyTexturePropertyViewStatus::Valid) { + if (view.status() != + CesiumGltf::PropertyTexturePropertyViewStatus::Valid) { return DefaultValue; } auto maybeValue = view.get(UV.X, UV.Y); @@ -521,7 +521,8 @@ float UCesiumPropertyTexturePropertyBlueprintLibrary::GetFloat( Property._valueType, Property._normalized, [&UV, DefaultValue](const auto& view) -> float { - if (view.status() != PropertyTexturePropertyViewStatus::Valid) { + if (view.status() != + CesiumGltf::PropertyTexturePropertyViewStatus::Valid) { return DefaultValue; } auto maybeValue = view.get(UV.X, UV.Y); @@ -544,7 +545,8 @@ double UCesiumPropertyTexturePropertyBlueprintLibrary::GetFloat64( Property._valueType, Property._normalized, [&UV, DefaultValue](const auto& view) -> double { - if (view.status() != PropertyTexturePropertyViewStatus::Valid) { + if (view.status() != + CesiumGltf::PropertyTexturePropertyViewStatus::Valid) { return DefaultValue; } auto maybeValue = view.get(UV.X, UV.Y); @@ -567,7 +569,8 @@ FIntPoint UCesiumPropertyTexturePropertyBlueprintLibrary::GetIntPoint( Property._valueType, Property._normalized, [&UV, &DefaultValue](const auto& view) -> FIntPoint { - if (view.status() != PropertyTexturePropertyViewStatus::Valid) { + if (view.status() != + CesiumGltf::PropertyTexturePropertyViewStatus::Valid) { return DefaultValue; } auto maybeValue = view.get(UV.X, UV.Y); @@ -575,7 +578,7 @@ FIntPoint UCesiumPropertyTexturePropertyBlueprintLibrary::GetIntPoint( return DefaultValue; } auto value = *maybeValue; - if constexpr (IsMetadataString::value) { + if constexpr (CesiumGltf::IsMetadataString::value) { return UnrealMetadataConversions::toIntPoint( *maybeValue, DefaultValue); @@ -597,7 +600,8 @@ FVector2D UCesiumPropertyTexturePropertyBlueprintLibrary::GetVector2D( Property._valueType, Property._normalized, [&UV, &DefaultValue](const auto& view) -> FVector2D { - if (view.status() != PropertyTexturePropertyViewStatus::Valid) { + if (view.status() != + CesiumGltf::PropertyTexturePropertyViewStatus::Valid) { return DefaultValue; } auto maybeValue = view.get(UV.X, UV.Y); @@ -605,7 +609,7 @@ FVector2D UCesiumPropertyTexturePropertyBlueprintLibrary::GetVector2D( return DefaultValue; } auto value = *maybeValue; - if constexpr (IsMetadataString::value) { + if constexpr (CesiumGltf::IsMetadataString::value) { return UnrealMetadataConversions::toVector2D(value, DefaultValue); } else { auto maybeVec2 = CesiumGltf:: @@ -625,7 +629,8 @@ FIntVector UCesiumPropertyTexturePropertyBlueprintLibrary::GetIntVector( Property._valueType, Property._normalized, [&UV, &DefaultValue](const auto& view) -> FIntVector { - if (view.status() != PropertyTexturePropertyViewStatus::Valid) { + if (view.status() != + CesiumGltf::PropertyTexturePropertyViewStatus::Valid) { return DefaultValue; } auto maybeValue = view.get(UV.X, UV.Y); @@ -633,7 +638,7 @@ FIntVector UCesiumPropertyTexturePropertyBlueprintLibrary::GetIntVector( return DefaultValue; } auto value = *maybeValue; - if constexpr (IsMetadataString::value) { + if constexpr (CesiumGltf::IsMetadataString::value) { return UnrealMetadataConversions::toIntVector(value, DefaultValue); } else { auto maybeVec3 = CesiumGltf:: @@ -653,7 +658,8 @@ FVector UCesiumPropertyTexturePropertyBlueprintLibrary::GetVector( Property._valueType, Property._normalized, [&UV, &DefaultValue](const auto& view) -> FVector { - if (view.status() != PropertyTexturePropertyViewStatus::Valid) { + if (view.status() != + CesiumGltf::PropertyTexturePropertyViewStatus::Valid) { return DefaultValue; } auto maybeValue = view.get(UV.X, UV.Y); @@ -661,7 +667,7 @@ FVector UCesiumPropertyTexturePropertyBlueprintLibrary::GetVector( return DefaultValue; } auto value = *maybeValue; - if constexpr (IsMetadataString::value) { + if constexpr (CesiumGltf::IsMetadataString::value) { return UnrealMetadataConversions::toVector(value, DefaultValue); } else { auto maybeVec3 = CesiumGltf:: @@ -681,7 +687,8 @@ FVector4 UCesiumPropertyTexturePropertyBlueprintLibrary::GetVector4( Property._valueType, Property._normalized, [&UV, &DefaultValue](const auto& view) -> FVector4 { - if (view.status() != PropertyTexturePropertyViewStatus::Valid) { + if (view.status() != + CesiumGltf::PropertyTexturePropertyViewStatus::Valid) { return DefaultValue; } auto maybeValue = view.get(UV.X, UV.Y); @@ -689,7 +696,7 @@ FVector4 UCesiumPropertyTexturePropertyBlueprintLibrary::GetVector4( return DefaultValue; } auto value = *maybeValue; - if constexpr (IsMetadataString::value) { + if constexpr (CesiumGltf::IsMetadataString::value) { return UnrealMetadataConversions::toVector(value, DefaultValue); } else { auto maybeVec4 = CesiumGltf:: @@ -708,7 +715,8 @@ FCesiumPropertyArray UCesiumPropertyTexturePropertyBlueprintLibrary::GetArray( Property._valueType, Property._normalized, [&UV](const auto& view) -> FCesiumPropertyArray { - if (view.status() != PropertyTexturePropertyViewStatus::Valid) { + if (view.status() != + CesiumGltf::PropertyTexturePropertyViewStatus::Valid) { return FCesiumPropertyArray(); } auto maybeValue = view.get(UV.X, UV.Y); @@ -730,9 +738,10 @@ FCesiumMetadataValue UCesiumPropertyTexturePropertyBlueprintLibrary::GetValue( Property._valueType, Property._normalized, [&UV](const auto& view) -> FCesiumMetadataValue { - if (view.status() != PropertyTexturePropertyViewStatus::Valid && - view.status() != - PropertyTexturePropertyViewStatus::EmptyPropertyWithDefault) { + if (view.status() != + CesiumGltf::PropertyTexturePropertyViewStatus::Valid && + view.status() != CesiumGltf::PropertyTexturePropertyViewStatus:: + EmptyPropertyWithDefault) { return FCesiumMetadataValue(); } @@ -749,7 +758,8 @@ UCesiumPropertyTexturePropertyBlueprintLibrary::GetRawValue( Property._valueType, Property._normalized, [&UV](const auto& view) -> FCesiumMetadataValue { - if (view.status() != PropertyTexturePropertyViewStatus::Valid) { + if (view.status() != + CesiumGltf::PropertyTexturePropertyViewStatus::Valid) { return FCesiumMetadataValue(); } @@ -770,7 +780,8 @@ FCesiumMetadataValue UCesiumPropertyTexturePropertyBlueprintLibrary::GetOffset( Property._normalized, [](const auto& view) -> FCesiumMetadataValue { // Returns an empty value if no offset is specified. - return FCesiumMetadataValue(view.offset()); + return FCesiumMetadataValue( + CesiumGltf::propertyValueViewToCopy(view.offset())); }); } @@ -782,7 +793,8 @@ FCesiumMetadataValue UCesiumPropertyTexturePropertyBlueprintLibrary::GetScale( Property._normalized, [](const auto& view) -> FCesiumMetadataValue { // Returns an empty value if no scale is specified. - return FCesiumMetadataValue(view.scale()); + return FCesiumMetadataValue( + CesiumGltf::propertyValueViewToCopy(view.scale())); }); } @@ -795,7 +807,8 @@ UCesiumPropertyTexturePropertyBlueprintLibrary::GetMinimumValue( Property._normalized, [](const auto& view) -> FCesiumMetadataValue { // Returns an empty value if no min is specified. - return FCesiumMetadataValue(view.min()); + return FCesiumMetadataValue( + CesiumGltf::propertyValueViewToCopy(view.min())); }); } @@ -808,7 +821,8 @@ UCesiumPropertyTexturePropertyBlueprintLibrary::GetMaximumValue( Property._normalized, [](const auto& view) -> FCesiumMetadataValue { // Returns an empty value if no max is specified. - return FCesiumMetadataValue(view.max()); + return FCesiumMetadataValue( + CesiumGltf::propertyValueViewToCopy(view.max())); }); } @@ -821,7 +835,8 @@ UCesiumPropertyTexturePropertyBlueprintLibrary::GetNoDataValue( Property._normalized, [](const auto& view) -> FCesiumMetadataValue { // Returns an empty value if no "no data" value is specified. - return FCesiumMetadataValue(view.noData()); + return FCesiumMetadataValue( + CesiumGltf::propertyValueViewToCopy(view.noData())); }); } @@ -834,6 +849,7 @@ UCesiumPropertyTexturePropertyBlueprintLibrary::GetDefaultValue( Property._normalized, [](const auto& view) -> FCesiumMetadataValue { // Returns an empty value if no default value is specified. - return FCesiumMetadataValue(view.defaultValue()); + return FCesiumMetadataValue( + CesiumGltf::propertyValueViewToCopy(view.defaultValue())); }); } diff --git a/Source/CesiumRuntime/Private/CesiumRasterOverlay.cpp b/Source/CesiumRuntime/Private/CesiumRasterOverlay.cpp index a837469d0..1df30d070 100644 --- a/Source/CesiumRuntime/Private/CesiumRasterOverlay.cpp +++ b/Source/CesiumRuntime/Private/CesiumRasterOverlay.cpp @@ -20,7 +20,11 @@ UCesiumRasterOverlay::UCesiumRasterOverlay() // don't need them. PrimaryComponentTick.bCanEverTick = false; - // ... + // Allow DestroyComponent to be called from Blueprints by anyone. Without + // this, only the Actor (Cesium3DTileset) itself can destroy raster overlays. + // That's really annoying because it's fairly common to dynamically add/remove + // overlays at runtime. + bAllowAnyoneToDestroyMe = true; } #if WITH_EDITOR @@ -44,6 +48,7 @@ void UCesiumRasterOverlay::AddToTileset() { } CesiumRasterOverlays::RasterOverlayOptions options{}; + options.ellipsoid = pTileset->getOptions().ellipsoid; options.maximumScreenSpaceError = this->MaximumScreenSpaceError; options.maximumSimultaneousTileLoads = this->MaximumSimultaneousTileLoads; options.maximumTextureSize = this->MaximumTextureSize; @@ -126,7 +131,9 @@ void UCesiumRasterOverlay::RemoveFromTileset() { void UCesiumRasterOverlay::Refresh() { this->RemoveFromTileset(); - this->AddToTileset(); + if (this->IsActive()) { + this->AddToTileset(); + } } double UCesiumRasterOverlay::GetMaximumScreenSpaceError() const { diff --git a/Source/CesiumRuntime/Private/CesiumSampleHeightMostDetailedAsyncAction.cpp b/Source/CesiumRuntime/Private/CesiumSampleHeightMostDetailedAsyncAction.cpp new file mode 100644 index 000000000..5f1ad933f --- /dev/null +++ b/Source/CesiumRuntime/Private/CesiumSampleHeightMostDetailedAsyncAction.cpp @@ -0,0 +1,46 @@ +// Copyright 2020-2024 CesiumGS, Inc. and Contributors +#include "CesiumSampleHeightMostDetailedAsyncAction.h" +#include "Cesium3DTileset.h" +#include "CesiumRuntime.h" + +/*static*/ UCesiumSampleHeightMostDetailedAsyncAction* +UCesiumSampleHeightMostDetailedAsyncAction::SampleHeightMostDetailed( + ACesium3DTileset* Tileset, + const TArray& LongitudeLatitudeHeightArray) { + UCesiumSampleHeightMostDetailedAsyncAction* pAsyncAction = + NewObject(); + pAsyncAction->_pTileset = Tileset; + pAsyncAction->_longitudeLatitudeHeightArray = LongitudeLatitudeHeightArray; + + return pAsyncAction; +} + +void UCesiumSampleHeightMostDetailedAsyncAction::Activate() { + if (!IsValid(this->_pTileset)) { + TArray Warnings; + Warnings.Push(TEXT( + "Invalid Tileset parameter passed to UCesiumSampleHeightMostDetailedAsyncAction, returning no results")); + + this->RaiseOnHeightsSampled( + this->_pTileset, + TArray(), + Warnings); + } else { + this->RegisterWithGameInstance(this->_pTileset); + + this->_pTileset->SampleHeightMostDetailed( + this->_longitudeLatitudeHeightArray, + FCesiumSampleHeightMostDetailedCallback::CreateUObject( + this, + &UCesiumSampleHeightMostDetailedAsyncAction:: + RaiseOnHeightsSampled)); + } +} + +void UCesiumSampleHeightMostDetailedAsyncAction::RaiseOnHeightsSampled( + ACesium3DTileset* Tileset, + const TArray& Result, + const TArray& Warnings) { + this->OnHeightsSampled.Broadcast(Result, Warnings); + this->SetReadyToDestroy(); +} diff --git a/Source/CesiumRuntime/Private/CesiumSubLevelComponent.cpp b/Source/CesiumRuntime/Private/CesiumSubLevelComponent.cpp index 8f43cffa5..c74f2959b 100644 --- a/Source/CesiumRuntime/Private/CesiumSubLevelComponent.cpp +++ b/Source/CesiumRuntime/Private/CesiumSubLevelComponent.cpp @@ -8,7 +8,6 @@ #include "CesiumRuntime.h" #include "CesiumSubLevelSwitcherComponent.h" #include "CesiumUtility/Math.h" -#include "CesiumWgs84Ellipsoid.h" #include "EngineUtils.h" #include "LevelInstance/LevelInstanceActor.h" #include "VecMath.h" @@ -234,23 +233,27 @@ void UCesiumSubLevelComponent::PlaceOriginAtEcef(const FVector& NewOriginEcef) { return; } + UCesiumEllipsoid* pEllipsoid = pGeoreference->GetEllipsoid(); + check(IsValid(pEllipsoid)); + + const Ellipsoid& pNativeEllipsoid = pEllipsoid->GetNativeEllipsoid(); + // Another sub-level might be active right now, so we construct the correct // GeoTransforms instead of using the CesiumGeoreference's. - const Ellipsoid& ellipsoid = CesiumGeospatial::Ellipsoid::WGS84; FVector CurrentOriginEcef = - UCesiumWgs84Ellipsoid::LongitudeLatitudeHeightToEarthCenteredEarthFixed( + pEllipsoid->LongitudeLatitudeHeightToEllipsoidCenteredEllipsoidFixed( FVector( this->OriginLongitude, this->OriginLatitude, this->OriginHeight)); GeoTransforms CurrentTransforms( - ellipsoid, + pNativeEllipsoid, VecMath::createVector3D(CurrentOriginEcef), pGeoreference->GetScale() / 100.0); // Construct new geotransforms at the new origin GeoTransforms NewTransforms( - ellipsoid, + pNativeEllipsoid, VecMath::createVector3D(NewOriginEcef), pGeoreference->GetScale() / 100.0); @@ -281,13 +284,12 @@ void UCesiumSubLevelComponent::PlaceOriginAtEcef(const FVector& NewOriginEcef) { } pOwner->Modify(); - pOwner->SetActorTransform( - FTransform(VecMath::createMatrix(NewLevelTransform))); + pOwner->SetActorTransform(VecMath::createTransform(NewLevelTransform)); // Set the new sub-level georeference origin. this->Modify(); this->SetOriginLongitudeLatitudeHeight( - UCesiumWgs84Ellipsoid::EarthCenteredEarthFixedToLongitudeLatitudeHeight( + pEllipsoid->EllipsoidCenteredEllipsoidFixedToLongitudeLatitudeHeight( NewOriginEcef)); // Also update the viewport so the level doesn't appear to shift. @@ -352,7 +354,7 @@ void UCesiumSubLevelComponent::PlaceOriginAtEcef(const FVector& NewOriginEcef) { Tileset->Modify(); Root->Modify(); Root->SetRelativeTransform( - FTransform(VecMath::createMatrix(RelativeTransformInNew)), + VecMath::createTransform(RelativeTransformInNew), false, nullptr, ETeleportType::TeleportPhysics); diff --git a/Source/CesiumRuntime/Private/CesiumSubLevelSwitcherComponent.cpp b/Source/CesiumRuntime/Private/CesiumSubLevelSwitcherComponent.cpp index 1c3759dbe..46a7ebdc2 100644 --- a/Source/CesiumRuntime/Private/CesiumSubLevelSwitcherComponent.cpp +++ b/Source/CesiumRuntime/Private/CesiumSubLevelSwitcherComponent.cpp @@ -144,12 +144,12 @@ void UCesiumSubLevelSwitcherComponent::TickComponent( case ELevelStreamingState::MakingVisible: anyLevelsStillLoaded = true; break; - case ELevelStreamingState::FailedToLoad: case ELevelStreamingState::LoadedNotVisible: case ELevelStreamingState::LoadedVisible: pSubLevel->UnloadLevelInstance(); anyLevelsStillLoaded = true; break; + case ELevelStreamingState::FailedToLoad: case ELevelStreamingState::Removed: case ELevelStreamingState::Unloaded: break; @@ -224,7 +224,6 @@ void UCesiumSubLevelSwitcherComponent::_updateSubLevelStateGame() { *GetActorLabel(this->_pCurrent.Get())); this->_isTransitioningSubLevels = true; break; - case ELevelStreamingState::FailedToLoad: case ELevelStreamingState::LoadedNotVisible: case ELevelStreamingState::LoadedVisible: UE_LOG( @@ -235,6 +234,7 @@ void UCesiumSubLevelSwitcherComponent::_updateSubLevelStateGame() { this->_isTransitioningSubLevels = true; this->_pCurrent->UnloadLevelInstance(); break; + case ELevelStreamingState::FailedToLoad: case ELevelStreamingState::Removed: case ELevelStreamingState::Unloaded: UE_LOG( diff --git a/Source/CesiumRuntime/Private/CesiumSunSky.cpp b/Source/CesiumRuntime/Private/CesiumSunSky.cpp index 77d6ab980..9015652e5 100644 --- a/Source/CesiumRuntime/Private/CesiumSunSky.cpp +++ b/Source/CesiumRuntime/Private/CesiumSunSky.cpp @@ -22,7 +22,7 @@ // spheroid, where the radius at the poles is ~21km less than the radius at the // equator. And on top of that, there's terrain, causing bumps of up to 8km or // so (Mount Everest). Mean Sea Level is nowhere more than 100 meters different -// from the WGS84 ellipsoid, and the lowest dry land point on Earth is the Dead +// from the ellipsoid, and the lowest dry land point on Earth is the Dead // Sea at about 432 meters below sea level. So all up, the worst case "ground // radius" for atmosphere purposes ranges from about 6356km to about 6387km // depending on where you are on Earth. That's a range of 31km, which definitely @@ -34,8 +34,8 @@ // large, or else there will be a gap between the bottom of the atmosphere and // the top of the terrain. To avoid that, we want to use a tight fitting globe // radius that approximates mean sea level at the camera's position and is -// guaranteed to be below it. Rather than actually calculate sea level, a WGS84 -// height of -100meters will be close enough. +// guaranteed to be below it. Rather than actually calculate sea level, an +// ellipsoid height of -100meters will be close enough. // * When far from the surface, we can see a lot of the Earth, and it's // essential that no bits of the surface extend outside the atmosphere, because // that creates a very distracting artifact. So we want to choose a globe @@ -224,6 +224,8 @@ void ACesiumSunSky::EndPlay(const EEndPlayReason::Type EndPlayReason) { this->_transformUpdatedSubscription); this->_transformUpdatedSubscription.Reset(); } + + Super::EndPlay(EndPlayReason); } void ACesiumSunSky::Serialize(FArchive& Ar) { @@ -527,12 +529,16 @@ void ACesiumSunSky::UpdateAtmosphereRadius() { return; } + UCesiumEllipsoid* pEllipsoid = pGeoreference->GetEllipsoid(); + check(IsValid(pEllipsoid)); + FVector location = transform.TransformPosition(getViewLocation(pWorld)); FVector llh = pGeoreference->TransformUnrealPositionToLongitudeLatitudeHeight(location); // An atmosphere of this radius should circumscribe all Earth terrain. - double maxRadius = 6387000.0; + double maxRadius = + pEllipsoid->GetMaximumRadius() + this->CircumscribedGroundHeight * 1000.0; if (llh.Z / 1000.0 > this->CircumscribedGroundThreshold) { this->SetSkyAtmosphereGroundRadius( @@ -541,9 +547,8 @@ void ACesiumSunSky::UpdateAtmosphereRadius() { } else { // Find the ellipsoid radius 100m below the surface at this location. See // the comment at the top of this file. - glm::dvec3 ecef = - CesiumGeospatial::Ellipsoid::WGS84.cartographicToCartesian( - CesiumGeospatial::Cartographic::fromDegrees(llh.X, llh.Y, -100.0)); + glm::dvec3 ecef = pEllipsoid->GetNativeEllipsoid().cartographicToCartesian( + CesiumGeospatial::Cartographic::fromDegrees(llh.X, llh.Y, -100.0)); double minRadius = glm::length(ecef); if (llh.Z / 1000.0 < this->InscribedGroundThreshold) { @@ -562,6 +567,11 @@ void ACesiumSunSky::UpdateAtmosphereRadius() { } } +void ACesiumSunSky::EstimateTimeZoneForLongitude(double InLongitude) { + this->TimeZone = FMath::Clamp(InLongitude, -180.0, 180.0) / 15.0; + this->UpdateSun(); +} + void ACesiumSunSky::GetHMSFromSolarTime( double InSolarTime, int32& Hour, diff --git a/Source/CesiumRuntime/Private/CesiumTextureResource.cpp b/Source/CesiumRuntime/Private/CesiumTextureResource.cpp index 1bbeb5a59..eadb74de7 100644 --- a/Source/CesiumRuntime/Private/CesiumTextureResource.cpp +++ b/Source/CesiumRuntime/Private/CesiumTextureResource.cpp @@ -1,11 +1,103 @@ // Copyright 2020-2024 CesiumGS, Inc. and Contributors #include "CesiumTextureResource.h" +#include "CesiumRuntime.h" +#include "CesiumTextureUtility.h" #include "Misc/CoreStats.h" #include "RenderUtils.h" +#include namespace { +/** + * A Cesium texture resource that uses an already-created `FRHITexture`. This is + * used when `GRHISupportsAsyncTextureCreation` is true and so we were already + * able to create the FRHITexture in a worker thread. + */ +class FCesiumPreCreatedRHITextureResource : public FCesiumTextureResource { +public: + FCesiumPreCreatedRHITextureResource( + FTextureRHIRef existingTexture, + TextureGroup textureGroup, + uint32 width, + uint32 height, + EPixelFormat format, + TextureFilter filter, + TextureAddress addressX, + TextureAddress addressY, + bool sRGB, + bool useMipsIfAvailable, + uint32 extData, + bool isPrimary); + +protected: + virtual FTextureRHIRef InitializeTextureRHI() override; +}; + +/** + * A Cesium texture resource that wraps an existing one and uses the same RHI + * texture resource. This allows a single glTF `Image` to be referenced by + * multiple glTF `Texture` instances. We only need one `FRHITexture` in this + * case, but we need multiple `FTextureResource` instances to support the + * different sampler settings that are likely used in the different textures. + */ +class FCesiumUseExistingTextureResource : public FCesiumTextureResource { +public: + FCesiumUseExistingTextureResource( + const TSharedPtr& pExistingTexture, + TextureGroup textureGroup, + uint32 width, + uint32 height, + EPixelFormat format, + TextureFilter filter, + TextureAddress addressX, + TextureAddress addressY, + bool sRGB, + bool useMipsIfAvailable, + uint32 extData, + bool isPrimary); + +protected: + virtual FTextureRHIRef InitializeTextureRHI() override; + +private: + TSharedPtr _pExistingTexture; +}; + +/** + * A Cesium texture resource that creates an `FRHITexture` from a glTF + * `ImageCesium` when `InitRHI` is called from the render thread. When + * `GRHISupportsAsyncTextureCreation` is false (everywhere but Direct3D), we can + * only create a `FRHITexture` on the render thread, so this is the code that + * does it. + * + * Upon passing an `ImageAsset` to this class's constructor, its `pixelData` and + * `mipPositions` fields are cleared. That is, this class takes ownership of + * that data. + */ +class FCesiumCreateNewTextureResource : public FCesiumTextureResource { +public: + FCesiumCreateNewTextureResource( + CesiumGltf::ImageAsset& image, + TextureGroup textureGroup, + uint32 width, + uint32 height, + EPixelFormat format, + TextureFilter filter, + TextureAddress addressX, + TextureAddress addressY, + bool sRGB, + bool useMipsIfAvailable, + uint32 extData); + +protected: + virtual FTextureRHIRef InitializeTextureRHI() override; + +private: + std::vector _mipPositions; + std::vector _pixelData; +}; + ESamplerFilter convertFilter(TextureFilter filter) { switch (filter) { case TF_Nearest: @@ -48,25 +140,27 @@ void CopyMip( void* pDest, uint32 destPitch, EPixelFormat format, - const CesiumGltf::ImageCesium& src, + int32_t width, + int32_t height, + const std::vector& srcPixelData, + const std::vector& srcMipPositions, uint32 mipIndex) { size_t byteOffset = 0; size_t byteSize = 0; - if (src.mipPositions.empty()) { + if (srcMipPositions.empty()) { byteOffset = 0; - byteSize = src.pixelData.size(); + byteSize = srcPixelData.size(); } else { - const CesiumGltf::ImageCesiumMipPosition& mipPos = - src.mipPositions[mipIndex]; + const CesiumGltf::ImageAssetMipPosition& mipPos = srcMipPositions[mipIndex]; byteOffset = mipPos.byteOffset; byteSize = mipPos.byteSize; } uint32 mipWidth = - FMath::Max(static_cast(src.width) >> mipIndex, 1); + FMath::Max(static_cast(width) >> mipIndex, 1); uint32 mipHeight = - FMath::Max(static_cast(src.height) >> mipIndex, 1); + FMath::Max(static_cast(height) >> mipIndex, 1); - const void* pSrcData = static_cast(&src.pixelData[byteOffset]); + const void* pSrcData = static_cast(&srcPixelData[byteOffset]); // for platforms that returned 0 pitch from Lock, we need to just use the bulk // data directly, never do runtime block size checking, conversion, or the @@ -98,9 +192,262 @@ void CopyMip( } } +FTexture2DRHIRef createAsyncTextureAndWait( + uint32 SizeX, + uint32 SizeY, + uint8 Format, + uint32 NumMips, + ETextureCreateFlags Flags, + void** InitialMipData, + uint32 NumInitialMips) { + +#if ENGINE_VERSION_5_4_OR_HIGHER + FGraphEventRef CompletionEvent; + + FTexture2DRHIRef result = RHIAsyncCreateTexture2D( + SizeX, + SizeY, + Format, + NumMips, + Flags, + ERHIAccess::Unknown, + InitialMipData, + NumInitialMips, + TEXT("CesiumTexture"), + CompletionEvent); + + if (CompletionEvent) { + CompletionEvent->Wait(); + } + + return result; +#else + FGraphEventRef CompletionEvent; + + FTexture2DRHIRef result = RHIAsyncCreateTexture2D( + SizeX, + SizeY, + Format, + NumMips, + Flags, + InitialMipData, + NumInitialMips, + CompletionEvent); + + if (CompletionEvent) { + CompletionEvent->Wait(); + } + + return result; +#endif +} + +/** + * @brief Create an RHI texture on this thread. This requires + * GRHISupportsAsyncTextureCreation to be true. + * + * @param image The CPU image to create on the GPU. + * @param format The pixel format of the image. + * @param Whether to use a sRGB color-space. + * @return The RHI texture reference. + */ +FTexture2DRHIRef CreateRHITexture2D_Async( + const CesiumGltf::ImageAsset& image, + EPixelFormat format, + bool sRGB) { + check(GRHISupportsAsyncTextureCreation); + + ETextureCreateFlags textureFlags = TexCreate_ShaderResource; + + // Just like in FCesiumCreateNewTextureResource, we're assuming here that we + // can create an FRHITexture as sRGB, and later create another + // UTexture2D / FTextureResource pointing to the same FRHITexture that is not + // sRGB (or vice-versa), and that Unreal will effectively ignore the flag on + // FRHITexture. + if (sRGB) { + textureFlags |= TexCreate_SRGB; + } + + if (!image.mipPositions.empty()) { + // Here 16 is a generously large (but arbitrary) hard limit for number of + // mips. + uint32 mipCount = static_cast(image.mipPositions.size()); + if (mipCount > 16) { + mipCount = 16; + } + + void* mipsData[16]; + for (size_t i = 0; i < mipCount; ++i) { + const CesiumGltf::ImageAssetMipPosition& mipPos = image.mipPositions[i]; + mipsData[i] = (void*)(&image.pixelData[mipPos.byteOffset]); + } + + return createAsyncTextureAndWait( + static_cast(image.width), + static_cast(image.height), + format, + mipCount, + textureFlags, + mipsData, + mipCount); + } else { + void* pTextureData = (void*)(image.pixelData.data()); + return createAsyncTextureAndWait( + static_cast(image.width), + static_cast(image.height), + format, + 1, + textureFlags, + &pTextureData, + 1); + } +} + } // namespace -FCesiumTextureResourceBase::FCesiumTextureResourceBase( +void FCesiumTextureResourceDeleter::operator()(FCesiumTextureResource* p) { + FCesiumTextureResource::Destroy(p); +} + +/*static*/ FCesiumTextureResourceUniquePtr FCesiumTextureResource::CreateNew( + CesiumGltf::ImageAsset& imageCesium, + TextureGroup textureGroup, + const std::optional& overridePixelFormat, + TextureFilter filter, + TextureAddress addressX, + TextureAddress addressY, + bool sRGB, + bool needsMipMaps) { + if (imageCesium.pixelData.empty()) { + return nullptr; + } + + if (needsMipMaps) { + std::optional errorMessage = + CesiumGltfReader::ImageDecoder::generateMipMaps(imageCesium); + if (errorMessage) { + UE_LOG( + LogCesium, + Warning, + TEXT("%s"), + UTF8_TO_TCHAR(errorMessage->c_str())); + } + } + + std::optional maybePixelFormat = + CesiumTextureUtility::getPixelFormatForImageAsset( + imageCesium, + overridePixelFormat); + if (!maybePixelFormat) { + UE_LOG( + LogCesium, + Warning, + TEXT( + "Image cannot be created because it has an unsupported compressed pixel format (%d)."), + imageCesium.compressedPixelFormat); + return nullptr; + } + + // Store the current size of the pixel data, because + // we're about to clear it but we still want to have + // an accurate estimation of the size of the image for + // caching purposes. + imageCesium.sizeBytes = int64_t(imageCesium.pixelData.size()); + + if (GRHISupportsAsyncTextureCreation) { + // Create RHI texture resource on this worker + // thread, and then hand it off to the renderer + // thread. + TRACE_CPUPROFILER_EVENT_SCOPE(Cesium::CreateRHITexture2D) + + FTexture2DRHIRef textureReference = + CreateRHITexture2D_Async(imageCesium, *maybePixelFormat, sRGB); + // textureReference->SetName( + // FName(UTF8_TO_TCHAR(imageCesium.getUniqueAssetId().c_str()))); + auto pResult = + FCesiumTextureResourceUniquePtr(new FCesiumPreCreatedRHITextureResource( + textureReference, + textureGroup, + imageCesium.width, + imageCesium.height, + *maybePixelFormat, + filter, + addressX, + addressY, + sRGB, + needsMipMaps, + 0, + true)); + + // Clear the now-unnecessary copy of the pixel data. + // Calling clear() isn't good enough because it + // won't actually release the memory. + std::vector pixelData; + imageCesium.pixelData.swap(pixelData); + + std::vector mipPositions; + imageCesium.mipPositions.swap(mipPositions); + + return pResult; + } else { + // The RHI texture will be created later on the + // render thread, directly from this texture source. + // We need valid pixelData here, though. + auto pResult = + FCesiumTextureResourceUniquePtr(new FCesiumCreateNewTextureResource( + imageCesium, + textureGroup, + imageCesium.width, + imageCesium.height, + *maybePixelFormat, + filter, + addressX, + addressY, + sRGB, + needsMipMaps, + 0)); + return pResult; + } +} + +FCesiumTextureResourceUniquePtr FCesiumTextureResource::CreateWrapped( + const TSharedPtr& pExistingResource, + TextureGroup textureGroup, + TextureFilter filter, + TextureAddress addressX, + TextureAddress addressY, + bool sRGB, + bool useMipMapsIfAvailable) { + if (pExistingResource == nullptr) + return nullptr; + + return FCesiumTextureResourceUniquePtr(new FCesiumUseExistingTextureResource( + pExistingResource, + textureGroup, + pExistingResource->_width, + pExistingResource->_height, + pExistingResource->_format, + filter, + addressX, + addressY, + sRGB, + useMipMapsIfAvailable, + 0, + false)); +} + +/*static*/ void FCesiumTextureResource::Destroy(FCesiumTextureResource* p) { + if (p == nullptr) + return; + + ENQUEUE_RENDER_COMMAND(DeleteResource) + ([p](FRHICommandListImmediate& RHICmdList) { + p->ReleaseResource(); + delete p; + }); +} + +FCesiumTextureResource::FCesiumTextureResource( TextureGroup textureGroup, uint32 width, uint32 height, @@ -110,7 +457,8 @@ FCesiumTextureResourceBase::FCesiumTextureResourceBase( TextureAddress addressY, bool sRGB, bool useMipsIfAvailable, - uint32 extData) + uint32 extData, + bool isPrimary) : _textureGroup(textureGroup), _width(width), _height(height), @@ -119,17 +467,14 @@ FCesiumTextureResourceBase::FCesiumTextureResourceBase( _addressX(convertAddressMode(addressX)), _addressY(convertAddressMode(addressY)), _useMipsIfAvailable(useMipsIfAvailable), - _platformExtData(extData) { + _platformExtData(extData), + _isPrimary(isPrimary) { this->bGreyScaleFormat = (_format == PF_G8) || (_format == PF_BC4); this->bSRGB = sRGB; STAT(this->_lodGroupStatName = TextureGroupStatFNames[this->_textureGroup]); } -#if ENGINE_VERSION_5_3_OR_HIGHER -void FCesiumTextureResourceBase::InitRHI(FRHICommandListBase& RHICmdList) { -#else -void FCesiumTextureResourceBase::InitRHI() { -#endif +void FCesiumTextureResource::InitRHI(FRHICommandListBase& RHICmdList) { FSamplerStateInitializerRHI samplerStateInitializer( this->_filter, this->_addressX, @@ -165,32 +510,40 @@ void FCesiumTextureResourceBase::InitRHI() { RHIUpdateTextureReference(TextureReferenceRHI, this->TextureRHI); #if STATS - ETextureCreateFlags textureFlags = TexCreate_ShaderResource; - if (this->bSRGB) { - textureFlags |= TexCreate_SRGB; - } - - const FIntPoint MipExtents = - CalcMipMapExtent(this->_width, this->_height, this->_format, 0); - uint32 alignment; - this->_textureSize = RHICalcTexture2DPlatformSize( - MipExtents.X, - MipExtents.Y, - this->_format, - this->GetCurrentMipCount(), - 1, - textureFlags, - FRHIResourceCreateInfo(this->_platformExtData), - alignment); + if (this->_isPrimary) { + ETextureCreateFlags textureFlags = TexCreate_ShaderResource; + if (this->bSRGB) { + textureFlags |= TexCreate_SRGB; + } - INC_DWORD_STAT_BY(STAT_TextureMemory, this->_textureSize); - INC_DWORD_STAT_FNAME_BY(this->_lodGroupStatName, this->_textureSize); + const FIntPoint MipExtents = + CalcMipMapExtent(this->_width, this->_height, this->_format, 0); + const FRHIResourceCreateInfo CreateInfo(this->_platformExtData); + + uint32 alignment; + this->_textureSize = RHICalcTexture2DPlatformSize( + MipExtents.X, + MipExtents.Y, + this->_format, + this->GetCurrentMipCount(), + 1, + textureFlags, + FRHIResourceCreateInfo(this->_platformExtData), + alignment); + + INC_DWORD_STAT_BY(STAT_TextureMemory, this->_textureSize); + INC_DWORD_STAT_FNAME_BY(this->_lodGroupStatName, this->_textureSize); + } #endif } -void FCesiumTextureResourceBase::ReleaseRHI() { - DEC_DWORD_STAT_BY(STAT_TextureMemory, this->_textureSize); - DEC_DWORD_STAT_FNAME_BY(this->_lodGroupStatName, this->_textureSize); +void FCesiumTextureResource::ReleaseRHI() { +#if STATS + if (this->_isPrimary) { + DEC_DWORD_STAT_BY(STAT_TextureMemory, this->_textureSize); + DEC_DWORD_STAT_FNAME_BY(this->_lodGroupStatName, this->_textureSize); + } +#endif RHIUpdateTextureReference(TextureReferenceRHI, nullptr); @@ -216,7 +569,7 @@ FOREACH_ENUM_TEXTUREGROUP(DECLARETEXTUREGROUPSTAT) #undef DECLARETEXTUREGROUPSTAT } // namespace -FName FCesiumTextureResourceBase::TextureGroupStatFNames[TEXTUREGROUP_MAX] = { +FName FCesiumTextureResource::TextureGroupStatFNames[TEXTUREGROUP_MAX] = { #define ASSIGNTEXTUREGROUPSTATNAME(Group) GET_STATFNAME(STAT_##Group), FOREACH_ENUM_TEXTUREGROUP(ASSIGNTEXTUREGROUPSTATNAME) #undef ASSIGNTEXTUREGROUPSTATNAME @@ -224,7 +577,7 @@ FName FCesiumTextureResourceBase::TextureGroupStatFNames[TEXTUREGROUP_MAX] = { #endif // #if STATS -FCesiumUseExistingTextureResource::FCesiumUseExistingTextureResource( +FCesiumPreCreatedRHITextureResource::FCesiumPreCreatedRHITextureResource( FTextureRHIRef existingTexture, TextureGroup textureGroup, uint32 width, @@ -235,8 +588,9 @@ FCesiumUseExistingTextureResource::FCesiumUseExistingTextureResource( TextureAddress addressY, bool sRGB, bool useMipsIfAvailable, - uint32 extData) - : FCesiumTextureResourceBase( + uint32 extData, + bool isPrimary) + : FCesiumTextureResource( textureGroup, width, height, @@ -246,13 +600,17 @@ FCesiumUseExistingTextureResource::FCesiumUseExistingTextureResource( addressY, sRGB, useMipsIfAvailable, - extData), - _pExistingTexture(nullptr) { + extData, + isPrimary) { this->TextureRHI = std::move(existingTexture); } +FTextureRHIRef FCesiumPreCreatedRHITextureResource::InitializeTextureRHI() { + return this->TextureRHI; +} + FCesiumUseExistingTextureResource::FCesiumUseExistingTextureResource( - FTextureResource* pExistingTexture, + const TSharedPtr& pExistingTexture, TextureGroup textureGroup, uint32 width, uint32 height, @@ -262,8 +620,9 @@ FCesiumUseExistingTextureResource::FCesiumUseExistingTextureResource( TextureAddress addressY, bool sRGB, bool useMipsIfAvailable, - uint32 extData) - : FCesiumTextureResourceBase( + uint32 extData, + bool isPrimary) + : FCesiumTextureResource( textureGroup, width, height, @@ -273,19 +632,16 @@ FCesiumUseExistingTextureResource::FCesiumUseExistingTextureResource( addressY, sRGB, useMipsIfAvailable, - extData), + extData, + isPrimary), _pExistingTexture(pExistingTexture) {} FTextureRHIRef FCesiumUseExistingTextureResource::InitializeTextureRHI() { - if (this->_pExistingTexture) { - return this->_pExistingTexture->TextureRHI; - } else { - return this->TextureRHI; - } + return this->_pExistingTexture->TextureRHI; } FCesiumCreateNewTextureResource::FCesiumCreateNewTextureResource( - CesiumGltf::ImageCesium&& image, + CesiumGltf::ImageAsset& image, TextureGroup textureGroup, uint32 width, uint32 height, @@ -296,7 +652,7 @@ FCesiumCreateNewTextureResource::FCesiumCreateNewTextureResource( bool sRGB, bool useMipsIfAvailable, uint32 extData) - : FCesiumTextureResourceBase( + : FCesiumTextureResource( textureGroup, width, height, @@ -306,11 +662,20 @@ FCesiumCreateNewTextureResource::FCesiumCreateNewTextureResource( addressY, sRGB, useMipsIfAvailable, - extData), - _image(std::move(image)) {} + extData, + true), + _mipPositions(std::move(image.mipPositions)), + _pixelData(std::move(image.pixelData)) {} FTextureRHIRef FCesiumCreateNewTextureResource::InitializeTextureRHI() { - FRHIResourceCreateInfo createInfo{TEXT("CesiumTextureUtility")}; + // Use the asset ID as the name of the texture so it will be visible in the + // Render Resource Viewer. + FString debugName = TEXT("CesiumTextureUtility"); + // if (!this->_image.getUniqueAssetId().empty()) { + // debugName = UTF8_TO_TCHAR(this->_image.getUniqueAssetId().c_str()); + // } + + FRHIResourceCreateInfo createInfo{*debugName}; createInfo.BulkData = nullptr; createInfo.ExtData = _platformExtData; @@ -333,7 +698,7 @@ FTextureRHIRef FCesiumCreateNewTextureResource::InitializeTextureRHI() { } uint32 mipCount = - FMath::Max(1, static_cast(this->_image.mipPositions.size())); + FMath::Max(1, static_cast(this->_mipPositions.size())); // Create a new RHI texture, initially empty. @@ -357,17 +722,25 @@ FTextureRHIRef FCesiumCreateNewTextureResource::InitializeTextureRHI() { uint32 DestPitch; void* pDestination = RHILockTexture2D(rhiTexture, i, RLM_WriteOnly, DestPitch, false); - CopyMip(pDestination, DestPitch, _format, this->_image, i); + CopyMip( + pDestination, + DestPitch, + this->_format, + this->_width, + this->_height, + this->_pixelData, + this->_mipPositions, + i); RHIUnlockTexture2D(rhiTexture, i, false); } // Clear the now-unnecessary copy of the pixel data. Calling clear() isn't // good enough because it won't actually release the memory. std::vector pixelData; - this->_image.pixelData.swap(pixelData); + this->_pixelData.swap(pixelData); - std::vector mipPositions; - this->_image.mipPositions.swap(mipPositions); + std::vector mipPositions; + this->_mipPositions.swap(mipPositions); return rhiTexture; } diff --git a/Source/CesiumRuntime/Private/CesiumTextureResource.h b/Source/CesiumRuntime/Private/CesiumTextureResource.h index 1ee0e5889..266acff39 100644 --- a/Source/CesiumRuntime/Private/CesiumTextureResource.h +++ b/Source/CesiumRuntime/Private/CesiumTextureResource.h @@ -5,16 +5,82 @@ #include "CesiumCommon.h" #include "Engine/Texture.h" #include "TextureResource.h" -#include +#include +#include + +class FCesiumTextureResource; + +struct FCesiumTextureResourceDeleter { + void operator()(FCesiumTextureResource* p); +}; + +using FCesiumTextureResourceUniquePtr = + TUniquePtr; /** * The base class for Cesium texture resources, making Cesium's texture data * available to Unreal's RHI. The actual creation of the RHI texture is deferred * to a pure virtual method, `InitializeTextureRHI`. */ -class FCesiumTextureResourceBase : public FTextureResource { +class FCesiumTextureResource : public FTextureResource { public: - FCesiumTextureResourceBase( + /** + * Create a new FCesiumTextureResource from an `ImageAsset` and the given + * sampling parameters. This method is intended to be called from a worker + * thread, not from the game or render thread. + * + * @param imageCesium The image data from which to create the texture + * resource. After this method returns, the `pixelData` will be empty, and + * `sizeBytes` will be set to its previous size. + * @param textureGroup The texture group in which to create this texture. + * @param overridePixelFormat Overrides the pixel format. If std::nullopt, the + * format is inferred from the `ImageAsset`. + * @param filter The texture filtering to use when sampling this texture. + * @param addressX The X texture addressing mode to use when sampling this + * texture. + * @param addressY The Y texture addressing mode to use when sampling this + * texture. + * @param sRGB True if the image data stored in this texture should be treated + * as sRGB. + * @param needsMipMaps True if this texture requires mipmaps. They will be + * generated if they don't already exist. + * @return The created texture resource, or nullptr if a texture could not be + * created. + */ + static FCesiumTextureResourceUniquePtr CreateNew( + CesiumGltf::ImageAsset& imageCesium, + TextureGroup textureGroup, + const std::optional& overridePixelFormat, + TextureFilter filter, + TextureAddress addressX, + TextureAddress addressY, + bool sRGB, + bool needsMipMaps); + + /** + * Create a new FCesiumTextureResource wrapping an existing one and providing + * new sampling parameters. This method is intended to be called from a worker + * thread, not from the game or render thread. + */ + static FCesiumTextureResourceUniquePtr CreateWrapped( + const TSharedPtr& pExistingResource, + TextureGroup textureGroup, + TextureFilter filter, + TextureAddress addressX, + TextureAddress addressY, + bool sRGB, + bool useMipMapsIfAvailable); + + /** + * Destroys an FCesiumTextureResource. Unreal TextureResources must be + * destroyed on the render thread, so it is important not to call `delete` + * directly. + * + * \param p + */ + static void Destroy(FCesiumTextureResource* p); + + FCesiumTextureResource( TextureGroup textureGroup, uint32 width, uint32 height, @@ -24,16 +90,13 @@ class FCesiumTextureResourceBase : public FTextureResource { TextureAddress addressY, bool sRGB, bool useMipsIfAvailable, - uint32 extData); + uint32 extData, + bool isPrimary); uint32 GetSizeX() const override { return this->_width; } uint32 GetSizeY() const override { return this->_height; } -#if ENGINE_VERSION_5_3_OR_HIGHER virtual void InitRHI(FRHICommandListBase& RHICmdList) override; -#else - virtual void InitRHI() override; -#endif virtual void ReleaseRHI() override; #if STATS @@ -54,77 +117,5 @@ class FCesiumTextureResourceBase : public FTextureResource { uint32 _platformExtData; FName _lodGroupStatName; uint64 _textureSize; -}; - -/** - * A Cesium texture resource that uses an already-created `FRHITexture`. This is - * used when `GRHISupportsAsyncTextureCreation` is true and so we were already - * able to create the FRHITexture in a worker thread. It is also used when a - * single glTF `Image` is referenced by multiple glTF `Texture` instances. We - * only need one `FRHITexture` is this case, but we need multiple - * `FTextureResource` instances to support the different sampler settings that - * are likely used in the different textures. - */ -class FCesiumUseExistingTextureResource : public FCesiumTextureResourceBase { -public: - FCesiumUseExistingTextureResource( - FTextureRHIRef existingTexture, - TextureGroup textureGroup, - uint32 width, - uint32 height, - EPixelFormat format, - TextureFilter filter, - TextureAddress addressX, - TextureAddress addressY, - bool sRGB, - bool useMipsIfAvailable, - uint32 extData); - - FCesiumUseExistingTextureResource( - FTextureResource* pExistingTexture, - TextureGroup textureGroup, - uint32 width, - uint32 height, - EPixelFormat format, - TextureFilter filter, - TextureAddress addressX, - TextureAddress addressY, - bool sRGB, - bool useMipsIfAvailable, - uint32 extData); - -protected: - virtual FTextureRHIRef InitializeTextureRHI() override; - -private: - FTextureResource* _pExistingTexture; -}; - -/** - * A Cesium texture resource that creates an `FRHITexture` from a glTF - * `ImageCesium` when `InitRHI` is called from the render thread. When - * `GRHISupportsAsyncTextureCreation` is false (everywhere but Direct3D), we can - * only create a `FRHITexture` on the render thread, so this is the code that - * does it. - */ -class FCesiumCreateNewTextureResource : public FCesiumTextureResourceBase { -public: - FCesiumCreateNewTextureResource( - CesiumGltf::ImageCesium&& image, - TextureGroup textureGroup, - uint32 width, - uint32 height, - EPixelFormat format, - TextureFilter filter, - TextureAddress addressX, - TextureAddress addressY, - bool sRGB, - bool useMipsIfAvailable, - uint32 extData); - -protected: - virtual FTextureRHIRef InitializeTextureRHI() override; - -private: - CesiumGltf::ImageCesium _image; + bool _isPrimary; }; diff --git a/Source/CesiumRuntime/Private/CesiumTextureUtility.cpp b/Source/CesiumRuntime/Private/CesiumTextureUtility.cpp index 5aceb4bb4..de72f0038 100644 --- a/Source/CesiumRuntime/Private/CesiumTextureUtility.cpp +++ b/Source/CesiumRuntime/Private/CesiumTextureUtility.cpp @@ -10,6 +10,7 @@ #include "CesiumTextureResource.h" #include "Containers/ResourceArray.h" #include "DynamicRHI.h" +#include "ExtensionImageAssetUnreal.h" #include "GenericPlatform/GenericPlatformProcess.h" #include "PixelFormat.h" #include "RHICommandList.h" @@ -22,121 +23,20 @@ #include "UObject/Package.h" #include #include -#include +#include #include #include #include -using namespace CesiumGltf; - namespace { -FTexture2DRHIRef createAsyncTextureAndWait( - uint32 SizeX, - uint32 SizeY, - uint8 Format, - uint32 NumMips, - ETextureCreateFlags Flags, - void** InitialMipData, - uint32 NumInitialMips) { -#if ENGINE_VERSION_5_3_OR_HIGHER - FGraphEventRef CompletionEvent; - - FTexture2DRHIRef result = RHIAsyncCreateTexture2D( - SizeX, - SizeY, - Format, - NumMips, - Flags, - InitialMipData, - NumInitialMips, - CompletionEvent); - - if (CompletionEvent) { - CompletionEvent->Wait(); - } - - return result; -#else - return RHIAsyncCreateTexture2D( - SizeX, - SizeY, - Format, - NumMips, - Flags, - InitialMipData, - NumInitialMips); -#endif -} - -/** - * @brief Create an RHI texture on this thread. This requires - * GRHISupportsAsyncTextureCreation to be true. - * - * @param image The CPU image to create on the GPU. - * @param format The pixel format of the image. - * @param Whether to use a sRGB color-space. - * @return The RHI texture reference. - */ -FTexture2DRHIRef CreateRHITexture2D_Async( - const CesiumGltf::ImageCesium& image, - EPixelFormat format, - bool sRGB) { - check(GRHISupportsAsyncTextureCreation); - - ETextureCreateFlags textureFlags = TexCreate_ShaderResource; - - // Just like in FCesiumCreateNewTextureResource, we're assuming here that we - // can create an FRHITexture as sRGB, and later create another - // UTexture2D / FTextureResource pointing to the same FRHITexture that is not - // sRGB (or vice-versa), and that Unreal will effectively ignore the flag on - // FRHITexture. - if (sRGB) { - textureFlags |= TexCreate_SRGB; - } - - if (!image.mipPositions.empty()) { - // Here 16 is a generously large (but arbitrary) hard limit for number of - // mips. - uint32 mipCount = static_cast(image.mipPositions.size()); - if (mipCount > 16) { - mipCount = 16; - } - - void* mipsData[16]; - for (size_t i = 0; i < mipCount; ++i) { - const CesiumGltf::ImageCesiumMipPosition& mipPos = image.mipPositions[i]; - mipsData[i] = (void*)(&image.pixelData[mipPos.byteOffset]); - } - - return createAsyncTextureAndWait( - static_cast(image.width), - static_cast(image.height), - format, - mipCount, - textureFlags, - mipsData, - mipCount); - } else { - void* pTextureData = (void*)(image.pixelData.data()); - return createAsyncTextureAndWait( - static_cast(image.width), - static_cast(image.height), - format, - 1, - textureFlags, - &pTextureData, - 1); - } -} - struct ExtensionUnrealTexture { static inline constexpr const char* TypeName = "ExtensionUnrealTexture"; static inline constexpr const char* ExtensionName = "PRIVATE_unreal_texture"; CesiumUtility::IntrusivePointer< CesiumTextureUtility::ReferenceCountedUnrealTexture> - pTexture; + pTexture = nullptr; }; } // namespace @@ -183,49 +83,24 @@ void ReferenceCountedUnrealTexture::setUnrealTexture( this->_pUnrealTexture = p; } -const TUniquePtr& +const FCesiumTextureResourceUniquePtr& ReferenceCountedUnrealTexture::getTextureResource() const { return this->_pTextureResource; } -TUniquePtr& +FCesiumTextureResourceUniquePtr& ReferenceCountedUnrealTexture::getTextureResource() { return this->_pTextureResource; } void ReferenceCountedUnrealTexture::setTextureResource( - TUniquePtr&& p) { + FCesiumTextureResourceUniquePtr&& p) { this->_pTextureResource = std::move(p); } -TUniquePtr loadTextureFromModelAnyThreadPart( - CesiumGltf::Model& model, - CesiumGltf::Texture& texture, - bool sRGB, - std::vector& textureResources) { - check(textureResources.size() == model.images.size()); - - int64_t textureIndex = - model.textures.empty() ? -1 : &texture - &model.textures[0]; - if (textureIndex < 0 || size_t(textureIndex) >= model.textures.size()) { - textureIndex = -1; - } - - ExtensionUnrealTexture& extension = - texture.addExtension(); - - if (extension.pTexture && (extension.pTexture->getUnrealTexture() || - extension.pTexture->getTextureResource())) { - // There's an existing Unreal texture for this glTF texture. This will - // happen if this texture is used by multiple primitives on the same model. - // It will also be the case when this model was upsampled from a parent - // tile. - TUniquePtr pResult = MakeUnique(); - pResult->pTexture = extension.pTexture; - pResult->textureIndex = textureIndex; - return pResult; - } - +std::optional getSourceIndexFromModelAndTexture( + const CesiumGltf::Model& model, + const CesiumGltf::Texture& texture) { const CesiumGltf::ExtensionKhrTextureBasisu* pKtxExtension = texture.getExtension(); const CesiumGltf::ExtensionTextureWebp* pWebpExtension = @@ -242,9 +117,9 @@ TUniquePtr loadTextureFromModelAnyThreadPart( "KTX texture source index must be non-negative and less than %d, but is %d"), model.images.size(), pKtxExtension->source); - return nullptr; + return std::nullopt; } - source = pKtxExtension->source; + return std::optional(pKtxExtension->source); } else if (pWebpExtension) { if (pWebpExtension->source < 0 || pWebpExtension->source >= model.images.size()) { @@ -255,9 +130,9 @@ TUniquePtr loadTextureFromModelAnyThreadPart( "WebP texture source index must be non-negative and less than %d, but is %d"), model.images.size(), pWebpExtension->source); - return nullptr; + return std::nullopt; } - source = pWebpExtension->source; + return std::optional(pWebpExtension->source); } else { if (texture.source < 0 || texture.source >= model.images.size()) { UE_LOG( @@ -267,56 +142,62 @@ TUniquePtr loadTextureFromModelAnyThreadPart( "Texture source index must be non-negative and less than %d, but is %d"), model.images.size(), texture.source); - return nullptr; + return std::nullopt; } - source = texture.source; + return std::optional(texture.source); } +} - CesiumGltf::Image& image = model.images[source]; - const CesiumGltf::ImageCesium& imageCesium = image.cesium; - const CesiumGltf::Sampler& sampler = - model.getSafe(model.samplers, texture.sampler); +TUniquePtr loadTextureFromModelAnyThreadPart( + CesiumGltf::Model& model, + CesiumGltf::Texture& texture, + bool sRGB) { + int64_t textureIndex = + model.textures.empty() ? -1 : &texture - &model.textures[0]; + if (textureIndex < 0 || size_t(textureIndex) >= model.textures.size()) { + textureIndex = -1; + } + + ExtensionUnrealTexture& extension = + texture.addExtension(); + if (extension.pTexture && (extension.pTexture->getUnrealTexture() || + extension.pTexture->getTextureResource())) { + // There's an existing Unreal texture for this glTF texture. This will + // happen if this texture is used by multiple primitives on the same + // model. It will also be the case when this model was upsampled from a + // parent tile. + TUniquePtr pResult = MakeUnique(); + pResult->pTexture = extension.pTexture; + pResult->textureIndex = textureIndex; + return pResult; + } - FCesiumTextureResourceBase* pExistingImageResource = nullptr; + std::optional optionalSourceIndex = + getSourceIndexFromModelAndTexture(model, texture); + if (!optionalSourceIndex.has_value()) { + return nullptr; + }; - if (image.cesium.pixelData.empty() && source >= 0 && - source < textureResources.size()) { - // An RHI texture has already been created for this image; reuse it. - pExistingImageResource = textureResources[source]; + CesiumGltf::Image& image = model.images[*optionalSourceIndex]; + if (image.pAsset == nullptr) { + return nullptr; } - TUniquePtr pResult = - loadTextureFromImageAndSamplerAnyThreadPart( - image, - sampler, - sRGB, - pExistingImageResource); - if (pResult) { - extension.pTexture = pResult->pTexture; + const CesiumGltf::Sampler& sampler = + model.getSafe(model.samplers, texture.sampler); - // Note the index of this texture within the glTF. - pResult->textureIndex = textureIndex; + TUniquePtr result = + loadTextureFromImageAndSamplerAnyThreadPart(*image.pAsset, sampler, sRGB); - if (source >= 0 && source < textureResources.size()) { - // Make the RHI resource known so it can be used by other textures that - // reference this same image. - textureResources[source] = pResult->pTexture->getTextureResource().Get(); - } + if (result) { + extension.pTexture = result->pTexture; + result->textureIndex = textureIndex; } - return pResult; -} - -TUniquePtr loadTextureFromImageAndSamplerAnyThreadPart( - CesiumGltf::Image& image, - const CesiumGltf::Sampler& sampler, - bool sRGB, - FCesiumTextureResourceBase* pExistingImageResource) { - TextureAddress addressX = convertGltfWrapSToUnreal(sampler.wrapS); - TextureAddress addressY = convertGltfWrapTToUnreal(sampler.wrapT); - TextureFilter filter = TextureFilter::TF_Default; - bool useMipMapsIfAvailable = false; + return result; +} +TextureFilter getTextureFilterFromSampler(const CesiumGltf::Sampler& sampler) { // Unreal Engine's available filtering modes are only nearest, bilinear, // trilinear, and "default". Default means "use the texture group settings", // and the texture group settings are defined in a config file and can @@ -332,54 +213,54 @@ TUniquePtr loadTextureFromImageAndSamplerAnyThreadPart( if (sampler.magFilter && !sampler.minFilter) { // Only a magnification filter is specified, so use it. - filter = - sampler.magFilter.value() == CesiumGltf::Sampler::MagFilter::NEAREST - ? TextureFilter::TF_Nearest - : TextureFilter::TF_Default; + return sampler.magFilter.value() == CesiumGltf::Sampler::MagFilter::NEAREST + ? TextureFilter::TF_Nearest + : TextureFilter::TF_Default; } else if (sampler.minFilter) { // Use specified minFilter. switch (sampler.minFilter.value()) { case CesiumGltf::Sampler::MinFilter::NEAREST: case CesiumGltf::Sampler::MinFilter::NEAREST_MIPMAP_NEAREST: - filter = TextureFilter::TF_Nearest; - break; + return TextureFilter::TF_Nearest; case CesiumGltf::Sampler::MinFilter::LINEAR: case CesiumGltf::Sampler::MinFilter::LINEAR_MIPMAP_NEAREST: - filter = TextureFilter::TF_Bilinear; - break; + return TextureFilter::TF_Bilinear; default: - filter = TextureFilter::TF_Default; - break; + return TextureFilter::TF_Default; } } else { // No filtering specified at all, let the texture group decide. - filter = TextureFilter::TF_Default; + return TextureFilter::TF_Default; } +} +bool getUseMipmapsIfAvailableFromSampler(const CesiumGltf::Sampler& sampler) { switch (sampler.minFilter.value_or( CesiumGltf::Sampler::MinFilter::LINEAR_MIPMAP_LINEAR)) { case CesiumGltf::Sampler::MinFilter::LINEAR_MIPMAP_LINEAR: case CesiumGltf::Sampler::MinFilter::LINEAR_MIPMAP_NEAREST: case CesiumGltf::Sampler::MinFilter::NEAREST_MIPMAP_LINEAR: case CesiumGltf::Sampler::MinFilter::NEAREST_MIPMAP_NEAREST: - useMipMapsIfAvailable = true; - break; + return true; default: // LINEAR and NEAREST - useMipMapsIfAvailable = false; - break; + return false; } +} +TUniquePtr loadTextureFromImageAndSamplerAnyThreadPart( + CesiumGltf::ImageAsset& image, + const CesiumGltf::Sampler& sampler, + bool sRGB) { return loadTextureAnyThreadPart( - image.cesium, - addressX, - addressY, - filter, - useMipMapsIfAvailable, + image, + convertGltfWrapSToUnreal(sampler.wrapS), + convertGltfWrapTToUnreal(sampler.wrapT), + getTextureFilterFromSampler(sampler), + getUseMipmapsIfAvailableFromSampler(sampler), // TODO: allow texture group to be configured on Cesium3DTileset. TEXTUREGROUP_World, sRGB, - std::nullopt, - pExistingImageResource); + std::nullopt); } static UTexture2D* CreateTexture2D(LoadedTextureResult* pHalfLoadedTexture) { @@ -412,72 +293,37 @@ static UTexture2D* CreateTexture2D(LoadedTextureResult* pHalfLoadedTexture) { } TUniquePtr loadTextureAnyThreadPart( - CesiumGltf::ImageCesium& imageCesium, + CesiumGltf::ImageAsset& image, TextureAddress addressX, TextureAddress addressY, TextureFilter filter, bool useMipMapsIfAvailable, TextureGroup group, bool sRGB, - std::optional overridePixelFormat, - FCesiumTextureResourceBase* pExistingImageResource) { - EPixelFormat pixelFormat; - if (imageCesium.compressedPixelFormat != GpuCompressedPixelFormat::NONE) { - switch (imageCesium.compressedPixelFormat) { - case GpuCompressedPixelFormat::ETC1_RGB: - pixelFormat = EPixelFormat::PF_ETC1; - break; - case GpuCompressedPixelFormat::ETC2_RGBA: - pixelFormat = EPixelFormat::PF_ETC2_RGBA; - break; - case GpuCompressedPixelFormat::BC1_RGB: - pixelFormat = EPixelFormat::PF_DXT1; - break; - case GpuCompressedPixelFormat::BC3_RGBA: - pixelFormat = EPixelFormat::PF_DXT5; - break; - case GpuCompressedPixelFormat::BC4_R: - pixelFormat = EPixelFormat::PF_BC4; - break; - case GpuCompressedPixelFormat::BC5_RG: - pixelFormat = EPixelFormat::PF_BC5; - break; - case GpuCompressedPixelFormat::BC7_RGBA: - pixelFormat = EPixelFormat::PF_BC7; - break; - case GpuCompressedPixelFormat::ASTC_4x4_RGBA: - pixelFormat = EPixelFormat::PF_ASTC_4x4; - break; - case GpuCompressedPixelFormat::PVRTC2_4_RGBA: - pixelFormat = EPixelFormat::PF_PVRTC2; - break; - case GpuCompressedPixelFormat::ETC2_EAC_R11: - pixelFormat = EPixelFormat::PF_ETC2_R11_EAC; - break; - case GpuCompressedPixelFormat::ETC2_EAC_RG11: - pixelFormat = EPixelFormat::PF_ETC2_RG11_EAC; - break; - default: - // Unsupported compressed texture format. - return nullptr; - }; - } else if (overridePixelFormat) { - pixelFormat = *overridePixelFormat; - } else { - switch (imageCesium.channels) { - case 1: - pixelFormat = PF_R8; - break; - case 2: - pixelFormat = PF_R8G8; - break; - case 3: - case 4: - default: - pixelFormat = PF_R8G8B8A8; - }; + std::optional overridePixelFormat) { + // The FCesiumTextureResource for the ImageAsset should already be created at + // this point, if it can be. + const ExtensionImageAssetUnreal& extension = + ExtensionImageAssetUnreal::getOrCreate( + CesiumAsync::AsyncSystem(nullptr), + image, + sRGB, + useMipMapsIfAvailable, + overridePixelFormat); + check(extension.getFuture().isReady()); + if (extension.getTextureResource() == nullptr) { + return nullptr; } + auto pResource = FCesiumTextureResource::CreateWrapped( + extension.getTextureResource(), + group, + filter, + addressX, + addressY, + sRGB, + useMipMapsIfAvailable); + TUniquePtr pResult = MakeUnique(); pResult->pTexture = new ReferenceCountedUnrealTexture(); @@ -486,78 +332,7 @@ TUniquePtr loadTextureAnyThreadPart( pResult->filter = filter; pResult->group = group; pResult->sRGB = sRGB; - - // Store the current size of the pixel data, because we're about to clear it - // but we still want to have an accurate estimation of the size of the image - // for caching purposes. - imageCesium.sizeBytes = int64_t(imageCesium.pixelData.size()); - - if (pExistingImageResource) { - pResult->pTexture->setTextureResource( - MakeUnique( - pExistingImageResource, - group, - imageCesium.width, - imageCesium.height, - pixelFormat, - filter, - addressX, - addressY, - sRGB, - useMipMapsIfAvailable, - 0)); - } else if ( - GRHISupportsAsyncTextureCreation && !imageCesium.pixelData.empty()) { - // Create RHI texture resource on this worker thread, and then hand it off - // to the renderer thread. - TRACE_CPUPROFILER_EVENT_SCOPE(Cesium::CreateRHITexture2D) - - FTexture2DRHIRef textureReference = - CreateRHITexture2D_Async(imageCesium, pixelFormat, sRGB); - pResult->pTexture->setTextureResource( - MakeUnique( - textureReference, - group, - imageCesium.width, - imageCesium.height, - pixelFormat, - filter, - addressX, - addressY, - sRGB, - useMipMapsIfAvailable, - 0)); - - // Clear the now-unnecessary copy of the pixel data. Calling clear() isn't - // good enough because it won't actually release the memory. - std::vector pixelData; - imageCesium.pixelData.swap(pixelData); - - std::vector mipPositions; - imageCesium.mipPositions.swap(mipPositions); - } else { - // The RHI texture will be created later on the render thread, directly - // from this texture source. We need valid pixelData here, though. - if (imageCesium.pixelData.empty()) { - return nullptr; - } - - pResult->pTexture->setTextureResource( - MakeUnique( - std::move(imageCesium), - group, - imageCesium.width, - imageCesium.height, - pixelFormat, - filter, - addressX, - addressY, - sRGB, - useMipMapsIfAvailable, - 0)); - } - - check(pResult->pTexture->getTextureResource() != nullptr); + pResult->pTexture->setTextureResource(MoveTemp(pResource)); return pResult; } @@ -588,7 +363,7 @@ CesiumUtility::IntrusivePointer loadTextureGameThreadPart(LoadedTextureResult* pHalfLoadedTexture) { TRACE_CPUPROFILER_EVENT_SCOPE(Cesium::LoadTexture) - TUniquePtr& pTextureResource = + FCesiumTextureResourceUniquePtr& pTextureResource = pHalfLoadedTexture->pTexture->getTextureResource(); if (pTextureResource == nullptr) { // Texture is already loaded (or unloadable). @@ -600,22 +375,18 @@ loadTextureGameThreadPart(LoadedTextureResult* pHalfLoadedTexture) { return nullptr; } - FCesiumTextureResourceBase* pCesiumTextureResource = - pTextureResource.Release(); - if (pCesiumTextureResource) { - pTexture->SetResource(pCesiumTextureResource); + if (pTextureResource) { + // Give the UTexture2D exclusive ownership of this FCesiumTextureResource. + pTexture->SetResource(pTextureResource.Release()); ENQUEUE_RENDER_COMMAND(Cesium_InitResource) - ([pTexture, pCesiumTextureResource](FRHICommandListImmediate& RHICmdList) { - pCesiumTextureResource->SetTextureReference( + ([pTexture, pTextureResource = pTexture->GetResource()]( + FRHICommandListImmediate& RHICmdList) { + pTextureResource->SetTextureReference( pTexture->TextureReference.TextureReferenceRHI); -#if ENGINE_VERSION_5_3_OR_HIGHER - pCesiumTextureResource->InitResource( + pTextureResource->InitResource( FRHICommandListImmediate::Get()); // Init Resource now requires a // command list. -#else - pCesiumTextureResource->InitResource(); -#endif }); } @@ -650,4 +421,67 @@ TextureAddress convertGltfWrapTToUnreal(int32_t wrapT) { } } +std::optional getPixelFormatForImageAsset( + const CesiumGltf::ImageAsset& imageCesium, + const std::optional overridePixelFormat) { + if (imageCesium.compressedPixelFormat != + CesiumGltf::GpuCompressedPixelFormat::NONE) { + switch (imageCesium.compressedPixelFormat) { + case CesiumGltf::GpuCompressedPixelFormat::ETC1_RGB: + return EPixelFormat::PF_ETC1; + break; + case CesiumGltf::GpuCompressedPixelFormat::ETC2_RGBA: + return EPixelFormat::PF_ETC2_RGBA; + break; + case CesiumGltf::GpuCompressedPixelFormat::BC1_RGB: + return EPixelFormat::PF_DXT1; + break; + case CesiumGltf::GpuCompressedPixelFormat::BC3_RGBA: + return EPixelFormat::PF_DXT5; + break; + case CesiumGltf::GpuCompressedPixelFormat::BC4_R: + return EPixelFormat::PF_BC4; + break; + case CesiumGltf::GpuCompressedPixelFormat::BC5_RG: + return EPixelFormat::PF_BC5; + break; + case CesiumGltf::GpuCompressedPixelFormat::BC7_RGBA: + return EPixelFormat::PF_BC7; + break; + case CesiumGltf::GpuCompressedPixelFormat::ASTC_4x4_RGBA: + return EPixelFormat::PF_ASTC_4x4; + break; + case CesiumGltf::GpuCompressedPixelFormat::PVRTC2_4_RGBA: + return EPixelFormat::PF_PVRTC2; + break; + case CesiumGltf::GpuCompressedPixelFormat::ETC2_EAC_R11: + return EPixelFormat::PF_ETC2_R11_EAC; + break; + case CesiumGltf::GpuCompressedPixelFormat::ETC2_EAC_RG11: + return EPixelFormat::PF_ETC2_RG11_EAC; + break; + default: + // Unsupported compressed texture format. + return std::nullopt; + }; + } else if (overridePixelFormat) { + return *overridePixelFormat; + } else { + switch (imageCesium.channels) { + case 1: + return PF_R8; + break; + case 2: + return PF_R8G8; + break; + case 3: + case 4: + default: + return PF_R8G8B8A8; + }; + } + + return std::nullopt; +} + } // namespace CesiumTextureUtility diff --git a/Source/CesiumRuntime/Private/CesiumTextureUtility.h b/Source/CesiumRuntime/Private/CesiumTextureUtility.h index 2592dabc3..a6989684b 100644 --- a/Source/CesiumRuntime/Private/CesiumTextureUtility.h +++ b/Source/CesiumRuntime/Private/CesiumTextureUtility.h @@ -2,7 +2,9 @@ #pragma once +#include "CesiumAsync/SharedAssetDepot.h" #include "CesiumGltf/Model.h" +#include "CesiumGltf/Texture.h" #include "CesiumMetadataValueType.h" #include "CesiumTextureResource.h" #include "Engine/Texture.h" @@ -15,7 +17,7 @@ #include namespace CesiumGltf { -struct ImageCesium; +struct ImageAsset; struct Texture; } // namespace CesiumGltf @@ -46,13 +48,13 @@ struct ReferenceCountedUnrealTexture void setUnrealTexture(const TObjectPtr& p); // The renderer / RHI FTextureResource holding the pixel data. - const TUniquePtr& getTextureResource() const; - TUniquePtr& getTextureResource(); - void setTextureResource(TUniquePtr&& p); + const FCesiumTextureResourceUniquePtr& getTextureResource() const; + FCesiumTextureResourceUniquePtr& getTextureResource(); + void setTextureResource(FCesiumTextureResourceUniquePtr&& p); private: TObjectPtr _pUnrealTexture; - TUniquePtr _pTextureResource; + FCesiumTextureResourceUniquePtr _pTextureResource; }; /** @@ -88,8 +90,6 @@ struct LoadedTextureResult { * associated Unreal texture. * @param sRGB True if the texture should be treated as sRGB; false if it should * be treated as linear. - * @param textureResources Unreal RHI texture resources that have already been - * created for this model. This array must have the same size as `model`'s * {@link CesiumGltf::Model::images}, and all pointers must be initialized to * nullptr before the first call to `loadTextureFromModelAnyThreadPart` during * the glTF load process. @@ -97,8 +97,7 @@ struct LoadedTextureResult { TUniquePtr loadTextureFromModelAnyThreadPart( CesiumGltf::Model& model, CesiumGltf::Texture& texture, - bool sRGB, - std::vector& textureResources); + bool sRGB); /** * Does the asynchronous part of renderer resource preparation for a glTF @@ -111,25 +110,20 @@ TUniquePtr loadTextureFromModelAnyThreadPart( * @param sampler The sampler settings to use with the texture. * @param sRGB True if the texture should be treated as sRGB; false if it should * be treated as linear. - * @param pExistingImageResource An existing RHI texture resource that has been - * created for this image, or nullptr if one hasn't been created yet. When this - * parameter is not nullptr, the provided image's `pixelData` is not required - * and can be empty. */ TUniquePtr loadTextureFromImageAndSamplerAnyThreadPart( - CesiumGltf::Image& image, + CesiumGltf::ImageAsset& image, const CesiumGltf::Sampler& sampler, - bool sRGB, - FCesiumTextureResourceBase* pExistingImageResource); + bool sRGB); /** * @brief Does the asynchronous part of renderer resource preparation for - * this image. Should be called in a background thread. - * - * The `pixelData` will be removed from the image so that it can be - * passed to Unreal's renderer thread without copying it. + * a texture.The given image _must_ be prepared before calling this method by + * calling {@link ExtensionImageAssetUnreal::getOrCreate} and then waiting + * for {@link ExtensionImageAssetUnreal::getFuture} to resolve. This method + * should be called in a background thread. * - * @param imageCesium The image. + * @param image The image. * @param addressX The X addressing mode. * @param addressY The Y addressing mode. * @param filter The sampler filtering to use for this texture. @@ -139,22 +133,17 @@ TUniquePtr loadTextureFromImageAndSamplerAnyThreadPart( * @param sRGB Whether this texture uses a sRGB color space. * @param overridePixelFormat The explicit pixel format to use. If std::nullopt, * the pixel format is inferred from the image. - * @param pExistingImageResource An existing RHI texture resource that has been - * created for this image, or nullptr if one hasn't been created yet. When this - * parameter is not nullptr, the provided image's `pixelData` is not required - * and can be empty. * @return The loaded texture. */ TUniquePtr loadTextureAnyThreadPart( - CesiumGltf::ImageCesium& imageCesium, + CesiumGltf::ImageAsset& image, TextureAddress addressX, TextureAddress addressY, TextureFilter filter, bool useMipMapsIfAvailable, TextureGroup group, bool sRGB, - std::optional overridePixelFormat, - FCesiumTextureResourceBase* pExistingImageResource); + std::optional overridePixelFormat); /** * @brief Does the main-thread part of render resource preparation for this @@ -203,4 +192,11 @@ TextureAddress convertGltfWrapSToUnreal(int32_t wrapS); */ TextureAddress convertGltfWrapTToUnreal(int32_t wrapT); +std::optional getPixelFormatForImageAsset( + const CesiumGltf::ImageAsset& imageCesium, + const std::optional overridePixelFormat); + +std::optional +getUnrealTextureFromGltfTexture(const CesiumGltf::Texture& texture); + } // namespace CesiumTextureUtility diff --git a/Source/CesiumRuntime/Private/CesiumTileMapServiceRasterOverlay.cpp b/Source/CesiumRuntime/Private/CesiumTileMapServiceRasterOverlay.cpp index 8f0f7b2e3..769f182a5 100644 --- a/Source/CesiumRuntime/Private/CesiumTileMapServiceRasterOverlay.cpp +++ b/Source/CesiumRuntime/Private/CesiumTileMapServiceRasterOverlay.cpp @@ -17,10 +17,19 @@ UCesiumTileMapServiceRasterOverlay::CreateOverlay( tmsOptions.minimumLevel = MinimumLevel; tmsOptions.maximumLevel = MaximumLevel; } + + std::vector headers; + + for (const auto& [Key, Value] : this->RequestHeaders) { + headers.push_back(CesiumAsync::IAssetAccessor::THeader{ + TCHAR_TO_UTF8(*Key), + TCHAR_TO_UTF8(*Value)}); + } + return std::make_unique( TCHAR_TO_UTF8(*this->MaterialLayerKey), TCHAR_TO_UTF8(*this->Url), - std::vector(), + headers, tmsOptions, options); } diff --git a/Source/CesiumRuntime/Private/CesiumUrlTemplateRasterOverlay.cpp b/Source/CesiumRuntime/Private/CesiumUrlTemplateRasterOverlay.cpp new file mode 100644 index 000000000..2bebfa044 --- /dev/null +++ b/Source/CesiumRuntime/Private/CesiumUrlTemplateRasterOverlay.cpp @@ -0,0 +1,72 @@ +// Copyright 2020-2024 CesiumGS, Inc. and Contributors + +#include "CesiumUrlTemplateRasterOverlay.h" + +#include "CesiumCustomVersion.h" +#include "CesiumGeometry/QuadtreeTilingScheme.h" +#include "CesiumGeospatial/GlobeRectangle.h" +#include "CesiumGeospatial/Projection.h" +#include "CesiumRasterOverlays/UrlTemplateRasterOverlay.h" + +#include "CesiumRuntime.h" + +std::unique_ptr +UCesiumUrlTemplateRasterOverlay::CreateOverlay( + const CesiumRasterOverlays::RasterOverlayOptions& options) { + if (this->TemplateUrl.IsEmpty()) { + // Don't create an overlay with an empty base URL. + return nullptr; + } + + CesiumRasterOverlays::UrlTemplateRasterOverlayOptions urlTemplateOptions; + + urlTemplateOptions.minimumLevel = MinimumLevel; + urlTemplateOptions.maximumLevel = MaximumLevel; + + urlTemplateOptions.tileWidth = this->TileWidth; + urlTemplateOptions.tileHeight = this->TileHeight; + + const CesiumGeospatial::Ellipsoid& ellipsoid = options.ellipsoid; + + if (this->Projection == + ECesiumUrlTemplateRasterOverlayProjection::Geographic) { + urlTemplateOptions.projection = + CesiumGeospatial::GeographicProjection(ellipsoid); + } else { + urlTemplateOptions.projection = + CesiumGeospatial::WebMercatorProjection(ellipsoid); + } + + if (bSpecifyTilingScheme) { + CesiumGeospatial::GlobeRectangle globeRectangle = + CesiumGeospatial::GlobeRectangle::fromDegrees( + RectangleWest, + RectangleSouth, + RectangleEast, + RectangleNorth); + CesiumGeometry::Rectangle coverageRectangle = + CesiumGeospatial::projectRectangleSimple( + *urlTemplateOptions.projection, + globeRectangle); + urlTemplateOptions.coverageRectangle = coverageRectangle; + urlTemplateOptions.tilingScheme = CesiumGeometry::QuadtreeTilingScheme( + coverageRectangle, + RootTilesX, + RootTilesY); + } + + std::vector headers; + + for (const auto& [Key, Value] : this->RequestHeaders) { + headers.push_back(CesiumAsync::IAssetAccessor::THeader{ + TCHAR_TO_UTF8(*Key), + TCHAR_TO_UTF8(*Value)}); + } + + return std::make_unique( + TCHAR_TO_UTF8(*this->MaterialLayerKey), + TCHAR_TO_UTF8(*this->TemplateUrl), + headers, + urlTemplateOptions, + options); +} diff --git a/Source/CesiumRuntime/Private/CesiumViewExtension.cpp b/Source/CesiumRuntime/Private/CesiumViewExtension.cpp index e91c860ce..04a8978d5 100644 --- a/Source/CesiumRuntime/Private/CesiumViewExtension.cpp +++ b/Source/CesiumRuntime/Private/CesiumViewExtension.cpp @@ -90,11 +90,7 @@ namespace { const TSet& getOcclusionHistorySet(const FSceneViewState* pViewState) { -#if ENGINE_VERSION_5_3_OR_HIGHER return pViewState->Occlusion.PrimitiveOcclusionHistorySet; -#else - return pViewState->PrimitiveOcclusionHistorySet; -#endif } } // namespace diff --git a/Source/CesiumRuntime/Private/CesiumWebMapServiceRasterOverlay.cpp b/Source/CesiumRuntime/Private/CesiumWebMapServiceRasterOverlay.cpp index 82da5dafa..2e5c53642 100644 --- a/Source/CesiumRuntime/Private/CesiumWebMapServiceRasterOverlay.cpp +++ b/Source/CesiumRuntime/Private/CesiumWebMapServiceRasterOverlay.cpp @@ -21,10 +21,19 @@ UCesiumWebMapServiceRasterOverlay::CreateOverlay( wmsOptions.layers = TCHAR_TO_UTF8(*Layers); wmsOptions.tileWidth = TileWidth; wmsOptions.tileHeight = TileHeight; + + std::vector headers; + + for (const auto& [Key, Value] : this->RequestHeaders) { + headers.push_back(CesiumAsync::IAssetAccessor::THeader{ + TCHAR_TO_UTF8(*Key), + TCHAR_TO_UTF8(*Value)}); + } + return std::make_unique( TCHAR_TO_UTF8(*this->MaterialLayerKey), TCHAR_TO_UTF8(*this->BaseUrl), - std::vector(), + headers, wmsOptions, options); } diff --git a/Source/CesiumRuntime/Private/CesiumWebMapTileServiceRasterOverlay.cpp b/Source/CesiumRuntime/Private/CesiumWebMapTileServiceRasterOverlay.cpp index 5640f5076..1126246c3 100644 --- a/Source/CesiumRuntime/Private/CesiumWebMapTileServiceRasterOverlay.cpp +++ b/Source/CesiumRuntime/Private/CesiumWebMapTileServiceRasterOverlay.cpp @@ -57,11 +57,13 @@ UCesiumWebMapTileServiceRasterOverlay::CreateOverlay( wmtsOptions.tileWidth = this->TileWidth; wmtsOptions.tileHeight = this->TileHeight; + const CesiumGeospatial::Ellipsoid& ellipsoid = options.ellipsoid; + if (this->Projection == ECesiumWebMapTileServiceRasterOverlayProjection::Geographic) { - wmtsOptions.projection = CesiumGeospatial::GeographicProjection(); + wmtsOptions.projection = CesiumGeospatial::GeographicProjection(ellipsoid); } else { - wmtsOptions.projection = CesiumGeospatial::WebMercatorProjection(); + wmtsOptions.projection = CesiumGeospatial::WebMercatorProjection(ellipsoid); } if (bSpecifyTilingScheme) { @@ -101,10 +103,19 @@ UCesiumWebMapTileServiceRasterOverlay::CreateOverlay( wmtsOptions.tileMatrixLabels = labels; } } + + std::vector headers; + + for (const auto& [Key, Value] : this->RequestHeaders) { + headers.push_back(CesiumAsync::IAssetAccessor::THeader{ + TCHAR_TO_UTF8(*Key), + TCHAR_TO_UTF8(*Value)}); + } + return std::make_unique( TCHAR_TO_UTF8(*this->MaterialLayerKey), TCHAR_TO_UTF8(*this->BaseUrl), - std::vector(), + headers, wmtsOptions, options); } diff --git a/Source/CesiumRuntime/Private/CesiumWgs84Ellipsoid.cpp b/Source/CesiumRuntime/Private/CesiumWgs84Ellipsoid.cpp index 5f59f7795..3ca1c0684 100644 --- a/Source/CesiumRuntime/Private/CesiumWgs84Ellipsoid.cpp +++ b/Source/CesiumRuntime/Private/CesiumWgs84Ellipsoid.cpp @@ -1,10 +1,9 @@ // Copyright 2020-2024 CesiumGS, Inc. and Contributors #include "CesiumWgs84Ellipsoid.h" +#include "CesiumEllipsoidFunctions.h" #include "VecMath.h" #include -#include -#include using namespace CesiumGeospatial; using namespace CesiumUtility; @@ -24,49 +23,37 @@ double UCesiumWgs84Ellipsoid::GetMinimumRadius() { FVector UCesiumWgs84Ellipsoid::ScaleToGeodeticSurface( const FVector& EarthCenteredEarthFixedPosition) { - std::optional result = Ellipsoid::WGS84.scaleToGeodeticSurface( - VecMath::createVector3D(EarthCenteredEarthFixedPosition)); - if (result) { - return VecMath::createVector(*result); - } else { - return FVector(0.0, 0.0, 0.0); - } + return CesiumEllipsoidFunctions::ScaleToGeodeticSurface( + Ellipsoid::WGS84, + EarthCenteredEarthFixedPosition); } FVector UCesiumWgs84Ellipsoid::GeodeticSurfaceNormal( const FVector& EarthCenteredEarthFixedPosition) { - return VecMath::createVector(Ellipsoid::WGS84.geodeticSurfaceNormal( - VecMath::createVector3D(EarthCenteredEarthFixedPosition))); + return CesiumEllipsoidFunctions::GeodeticSurfaceNormal( + Ellipsoid::WGS84, + EarthCenteredEarthFixedPosition); } FVector UCesiumWgs84Ellipsoid::LongitudeLatitudeHeightToEarthCenteredEarthFixed( const FVector& LongitudeLatitudeHeight) { - glm::dvec3 cartesian = - Ellipsoid::WGS84.cartographicToCartesian(Cartographic::fromDegrees( - LongitudeLatitudeHeight.X, - LongitudeLatitudeHeight.Y, - LongitudeLatitudeHeight.Z)); - return VecMath::createVector(cartesian); + return CesiumEllipsoidFunctions:: + LongitudeLatitudeHeightToEllipsoidCenteredEllipsoidFixed( + Ellipsoid::WGS84, + LongitudeLatitudeHeight); } FVector UCesiumWgs84Ellipsoid::EarthCenteredEarthFixedToLongitudeLatitudeHeight( const FVector& EarthCenteredEarthFixedPosition) { - std::optional result = Ellipsoid::WGS84.cartesianToCartographic( - VecMath::createVector3D(EarthCenteredEarthFixedPosition)); - if (result) { - return FVector( - Math::radiansToDegrees(result->longitude), - Math::radiansToDegrees(result->latitude), - result->height); - } else { - return FVector(0.0, 0.0, 0.0); - } + return CesiumEllipsoidFunctions:: + EllipsoidCenteredEllipsoidFixedToLongitudeLatitudeHeight( + Ellipsoid::WGS84, + EarthCenteredEarthFixedPosition); } FMatrix UCesiumWgs84Ellipsoid::EastNorthUpToEarthCenteredEarthFixed( const FVector& EarthCenteredEarthFixedPosition) { - return VecMath::createMatrix( - CesiumGeospatial::GlobeTransforms::eastNorthUpToFixedFrame( - VecMath::createVector3D(EarthCenteredEarthFixedPosition), - CesiumGeospatial::Ellipsoid::WGS84)); + return CesiumEllipsoidFunctions::EastNorthUpToEllipsoidCenteredEllipsoidFixed( + Ellipsoid::WGS84, + EarthCenteredEarthFixedPosition); } diff --git a/Source/CesiumRuntime/Private/CreateGltfOptions.h b/Source/CesiumRuntime/Private/CreateGltfOptions.h index a09d6914f..7af0e9e3f 100644 --- a/Source/CesiumRuntime/Private/CreateGltfOptions.h +++ b/Source/CesiumRuntime/Private/CreateGltfOptions.h @@ -12,35 +12,57 @@ // TODO: internal documentation namespace CreateGltfOptions { struct CreateModelOptions { - /** - * A pointer to the glTF model. - */ - CesiumGltf::Model* pModel = nullptr; const FCesiumFeaturesMetadataDescription* pFeaturesMetadataDescription = nullptr; + CesiumGltf::Model* pModel = nullptr; + PRAGMA_DISABLE_DEPRECATION_WARNINGS const FMetadataDescription* pEncodedMetadataDescription_DEPRECATED = nullptr; PRAGMA_ENABLE_DEPRECATION_WARNINGS bool alwaysIncludeTangents = false; bool createPhysicsMeshes = true; bool ignoreKhrMaterialsUnlit = false; + + Cesium3DTilesSelection::TileLoadResult tileLoadResult; + +public: + CreateModelOptions(Cesium3DTilesSelection::TileLoadResult&& tileLoadResult_) + : tileLoadResult(std::move(tileLoadResult_)) { + pModel = std::get_if(&this->tileLoadResult.contentKind); + } + + CreateModelOptions(CreateModelOptions&& other) + : pFeaturesMetadataDescription(other.pFeaturesMetadataDescription), + pEncodedMetadataDescription_DEPRECATED( + other.pEncodedMetadataDescription_DEPRECATED), + alwaysIncludeTangents(other.alwaysIncludeTangents), + createPhysicsMeshes(other.createPhysicsMeshes), + ignoreKhrMaterialsUnlit(other.ignoreKhrMaterialsUnlit), + tileLoadResult(std::move(other.tileLoadResult)) { + pModel = std::get_if(&this->tileLoadResult.contentKind); + } + + CreateModelOptions(const CreateModelOptions&) = delete; + CreateModelOptions& operator=(const CreateModelOptions&) = delete; + CreateModelOptions& operator=(CreateModelOptions&&) = delete; }; struct CreateNodeOptions { const CreateModelOptions* pModelOptions = nullptr; - const LoadGltfResult::LoadModelResult* pHalfConstructedModelResult = nullptr; + const LoadGltfResult::LoadedModelResult* pHalfConstructedModelResult = + nullptr; const CesiumGltf::Node* pNode = nullptr; }; struct CreateMeshOptions { const CreateNodeOptions* pNodeOptions = nullptr; - const LoadGltfResult::LoadNodeResult* pHalfConstructedNodeResult = nullptr; - CesiumGltf::Mesh* pMesh = nullptr; + const LoadGltfResult::LoadedNodeResult* pHalfConstructedNodeResult = nullptr; + int32_t meshIndex = -1; }; struct CreatePrimitiveOptions { const CreateMeshOptions* pMeshOptions = nullptr; - const LoadGltfResult::LoadMeshResult* pHalfConstructedMeshResult = nullptr; - CesiumGltf::MeshPrimitive* pPrimitive = nullptr; + const LoadGltfResult::LoadedMeshResult* pHalfConstructedMeshResult = nullptr; + int32_t primitiveIndex = -1; }; } // namespace CreateGltfOptions diff --git a/Source/CesiumRuntime/Private/ExtensionImageAssetUnreal.cpp b/Source/CesiumRuntime/Private/ExtensionImageAssetUnreal.cpp new file mode 100644 index 000000000..df3e402a7 --- /dev/null +++ b/Source/CesiumRuntime/Private/ExtensionImageAssetUnreal.cpp @@ -0,0 +1,114 @@ +#include "ExtensionImageAssetUnreal.h" +#include "CesiumRuntime.h" +#include "CesiumTextureUtility.h" +#include +#include + +using namespace CesiumAsync; +using namespace CesiumGltfReader; + +namespace { + +std::mutex createExtensionMutex; + +std::pair>> +getOrCreateImageFuture( + const AsyncSystem& asyncSystem, + CesiumGltf::ImageAsset& imageCesium); + +} // namespace + +/*static*/ const ExtensionImageAssetUnreal& +ExtensionImageAssetUnreal::getOrCreate( + const CesiumAsync::AsyncSystem& asyncSystem, + CesiumGltf::ImageAsset& imageCesium, + bool sRGB, + bool needsMipMaps, + const std::optional& overridePixelFormat) { + auto [extension, maybePromise] = + getOrCreateImageFuture(asyncSystem, imageCesium); + if (!maybePromise) { + // Another thread is already working on this image. + return extension; + } + + // Proceed to load the image in this thread. + TUniquePtr pResource = + FCesiumTextureResource::CreateNew( + imageCesium, + TextureGroup::TEXTUREGROUP_World, + overridePixelFormat, + TextureFilter::TF_Default, + TextureAddress::TA_Clamp, + TextureAddress::TA_Clamp, + sRGB, + needsMipMaps); + + extension._pTextureResource = + MakeShareable(pResource.Release(), [](FCesiumTextureResource* p) { + FCesiumTextureResource ::Destroy(p); + }); + + // For texture resources created from glTF _textures_, this will happen later + // (after we created the UTexture2D). But this texture resource, created for + // an ImageAsset, will never have a UTexture2D, so we initialize its resources + // here. + ENQUEUE_RENDER_COMMAND(Cesium_InitResource) + ([pResource = extension._pTextureResource]( + FRHICommandListImmediate& RHICmdList) mutable { + pResource->InitResource( + FRHICommandListImmediate::Get()); // Init Resource now requires a + // command list. + }); + + maybePromise->resolve(); + + return extension; +} + +ExtensionImageAssetUnreal::ExtensionImageAssetUnreal( + const CesiumAsync::SharedFuture& future) + : _pTextureResource(nullptr), _futureCreateResource(future) {} + +const TSharedPtr& +ExtensionImageAssetUnreal::getTextureResource() const { + return this->_pTextureResource; +} + +CesiumAsync::SharedFuture& ExtensionImageAssetUnreal::getFuture() { + return this->_futureCreateResource; +} + +const CesiumAsync::SharedFuture& +ExtensionImageAssetUnreal::getFuture() const { + return this->_futureCreateResource; +} + +namespace { + +// Returns the ExtensionImageAssetUnreal, which is created if it does not +// already exist. It _may_ also return a Promise, in which case the calling +// thread is responsible for doing the loading and should resolve the Promise +// when it's done. +std::pair>> +getOrCreateImageFuture( + const AsyncSystem& asyncSystem, + CesiumGltf::ImageAsset& imageCesium) { + std::scoped_lock lock(createExtensionMutex); + + ExtensionImageAssetUnreal* pExtension = + imageCesium.getExtension(); + if (!pExtension) { + // This thread will work on this image. + Promise promise = asyncSystem.createPromise(); + ExtensionImageAssetUnreal& extension = + imageCesium.addExtension( + promise.getFuture().share()); + return {extension, std::move(promise)}; + } else { + // Another thread is already working on this image. + return {*pExtension, std::nullopt}; + } +} + +} // namespace diff --git a/Source/CesiumRuntime/Private/ExtensionImageAssetUnreal.h b/Source/CesiumRuntime/Private/ExtensionImageAssetUnreal.h new file mode 100644 index 000000000..824bc4d27 --- /dev/null +++ b/Source/CesiumRuntime/Private/ExtensionImageAssetUnreal.h @@ -0,0 +1,90 @@ +// Copyright 2020-2024 CesiumGS, Inc. and Contributors + +#pragma once + +#include "CesiumTextureResource.h" +#include "PixelFormat.h" +#include "Templates/SharedPointer.h" +#include +#include + +namespace CesiumGltf { +struct ImageAsset; +} + +/** + * @brief An extension attached to an ImageAsset in order to hold + * Unreal-specific information about it. + * + * ImageAsset instances are shared between multiple textures on a single model, + * and even between models in some cases, but we strive to have only one copy of + * the image bytes in GPU memory. + * + * The Unreal / GPU resource is held in `pTextureResource`, which may be either + * a `FCesiumCreateNewTextureResource` or a `FCesiumUseExistingTextureResource` + * depending on how it was created. We'll never actually sample directly from + * this resource, however. Instead, a separate + * `FCesiumUseExistingTextureResource` will be created for each glTF Texture + * that references this image, and it will point to the instance managed by this + * extension. + * + * Because we'll never be sampling from this texture resource, the texture + * filtering and addressing parameters have default values. + */ +struct ExtensionImageAssetUnreal { + static inline constexpr const char* TypeName = "ExtensionImageAssetUnreal"; + static inline constexpr const char* ExtensionName = + "PRIVATE_ImageAsset_Unreal"; + + /** + * @brief Gets an Unreal texture resource from the given `ImageAsset`, + * creating it if necessary. + * + * When this function is called for the first time on a particular + * `ImageAsset`, the asynchronous process to create an Unreal + * `FTextureResource` from it is kicked off. On successive invocations + * (perhaps from other threads), the existing instance is returned. It is safe + * to call this method on the same `ImageAsset` instance from multiple + * threads simultaneously as long as no other thread is modifying the instance + * at the same time. + * + * To determine if the asynchronous `FTextureResource` creation process has + * completed, use {@link getFuture}. + */ + static const ExtensionImageAssetUnreal& getOrCreate( + const CesiumAsync::AsyncSystem& asyncSystem, + CesiumGltf::ImageAsset& imageCesium, + bool sRGB, + bool needsMipMaps, + const std::optional& overridePixelFormat); + + /** + * Constructs a new instance. + * + * @param future The future that will resolve when loading of the + * {@link getTextureResource} is complete. + */ + ExtensionImageAssetUnreal(const CesiumAsync::SharedFuture& future); + + /** + * Gets the created texture resource. This resource should not be accessed or + * used before the future returned by {@link getFuture} resolves. + */ + const TSharedPtr& getTextureResource() const; + + /** + * Gets the future that will resolve when loading of the + * {@link getTextureResource} is complete. This future will not reject. + */ + CesiumAsync::SharedFuture& getFuture(); + + /** + * Gets the future that will resolve when loading of the + * {@link getTextureResource} is complete. This future will not reject. + */ + const CesiumAsync::SharedFuture& getFuture() const; + +private: + TSharedPtr _pTextureResource; + CesiumAsync::SharedFuture _futureCreateResource; +}; diff --git a/Source/CesiumRuntime/Private/GeoTransforms.cpp b/Source/CesiumRuntime/Private/GeoTransforms.cpp index 5b75af9d2..80629c534 100644 --- a/Source/CesiumRuntime/Private/GeoTransforms.cpp +++ b/Source/CesiumRuntime/Private/GeoTransforms.cpp @@ -7,6 +7,7 @@ #include "CesiumTransforms.h" #include "VecMath.h" #include + #include using namespace CesiumGeospatial; @@ -34,7 +35,8 @@ GeoTransforms::GeoTransforms() LocalDirection::East, LocalDirection::North, LocalDirection::Up, - 1.0), + 1.0, + CesiumGeospatial::Ellipsoid::WGS84), _ellipsoid(CesiumGeospatial::Ellipsoid::WGS84), _center(0.0), _scale(1.0), @@ -54,7 +56,8 @@ GeoTransforms::GeoTransforms( LocalDirection::East, LocalDirection::North, LocalDirection::Up, - 1.0), + 1.0, + ellipsoid), _ellipsoid(ellipsoid), _center(center), _scale(scale), diff --git a/Source/CesiumRuntime/Private/GlobeAwareDefaultPawn.cpp b/Source/CesiumRuntime/Private/GlobeAwareDefaultPawn.cpp index 675e57640..558037de2 100644 --- a/Source/CesiumRuntime/Private/GlobeAwareDefaultPawn.cpp +++ b/Source/CesiumRuntime/Private/GlobeAwareDefaultPawn.cpp @@ -21,8 +21,7 @@ #include #include #include -#include -#include +#include #if WITH_EDITOR #include "Editor.h" @@ -76,7 +75,10 @@ void AGlobeAwareDefaultPawn::MoveUp_World(float Val) { return; } - FVector upEcef = UCesiumWgs84Ellipsoid::GeodeticSurfaceNormal( + UCesiumEllipsoid* pEllipsoid = pGeoreference->GetEllipsoid(); + check(IsValid(pEllipsoid)); + + FVector upEcef = pEllipsoid->GeodeticSurfaceNormal( this->GlobeAnchor->GetEarthCenteredEarthFixedPosition()); FVector up = pGeoreference->TransformEarthCenteredEarthFixedDirectionToUnreal(upEcef); diff --git a/Source/CesiumRuntime/Private/LoadGltfResult.h b/Source/CesiumRuntime/Private/LoadGltfResult.h index f9f55843a..85ebf2abf 100644 --- a/Source/CesiumRuntime/Private/LoadGltfResult.h +++ b/Source/CesiumRuntime/Private/LoadGltfResult.h @@ -34,10 +34,17 @@ namespace LoadGltfResult { * Temporarily holds render data that will be used in the Unreal material, as * well as any data that needs to be transferred to the corresponding * CesiumGltfPrimitiveComponent after it is created on the main thread. + * + * This type is move-only due to the use of TUniquePtr. */ -struct LoadPrimitiveResult { +struct LoadedPrimitiveResult { #pragma region Temporary render data + LoadedPrimitiveResult(const LoadedPrimitiveResult&) = delete; + + LoadedPrimitiveResult() {} + LoadedPrimitiveResult(LoadedPrimitiveResult&& other) = default; + /** * The render data. This is populated so it can be set on the static mesh * created on the main thread. @@ -45,9 +52,11 @@ struct LoadPrimitiveResult { TUniquePtr RenderData = nullptr; /** - * A pointer to the glTF material. + * The index of the material for this primitive within the parent model, or -1 + * if none. */ - const CesiumGltf::Material* pMaterial = nullptr; + int32_t materialIndex = -1; + glm::dmat4x4 transform{1.0}; #if ENGINE_VERSION_5_4_OR_HIGHER Chaos::FTriangleMeshImplicitObjectPtr pCollisionMesh = nullptr; @@ -89,8 +98,8 @@ struct LoadPrimitiveResult { #pragma endregion #pragma region CesiumGltfPrimitiveComponent data - const CesiumGltf::Model* pModel = nullptr; - const CesiumGltf::MeshPrimitive* pMeshPrimitive = nullptr; + int32_t meshIndex = -1; + int32_t primitiveIndex = -1; /** Parses EXT_mesh_features from a mesh primitive.*/ FCesiumPrimitiveFeatures Features{}; @@ -149,19 +158,36 @@ struct LoadPrimitiveResult { /** * Represents the result of loading a glTF mesh on a game thread. */ -struct LoadMeshResult { - std::vector primitiveResults{}; +struct LoadedMeshResult { + LoadedMeshResult() {} + + LoadedMeshResult(const LoadedMeshResult&) = delete; + LoadedMeshResult(LoadedMeshResult&& other) = default; + LoadedMeshResult& operator=(LoadedMeshResult&& other) = default; + + std::vector primitiveResults{}; }; /** * Represents the result of loading a glTF node on a game thread. */ -struct LoadNodeResult { - std::optional meshResult = std::nullopt; +struct LoadedNodeResult { + LoadedNodeResult() {} + + LoadedNodeResult(const LoadedNodeResult&) = delete; + LoadedNodeResult(LoadedNodeResult&& other) = default; + + std::optional meshResult = std::nullopt; /** * Array of instance transforms, if any. */ std::vector InstanceTransforms; + /** + * Features from EXT_instance_features. A pointer is used for shared ownership + * because there may be multiple primitives in the same mesh belonging to a + * single instance. + */ + TSharedPtr pInstanceFeatures = nullptr; }; /** @@ -169,8 +195,8 @@ struct LoadNodeResult { * Temporarily holds data that needs to be transferred to the corresponding * CesiumGltfComponent after it is created on the main thread. */ -struct LoadModelResult { - std::vector nodeResults{}; +struct LoadedModelResult { + std::vector nodeResults{}; // Parses the root EXT_structural_metadata extension. FCesiumModelMetadata Metadata{}; diff --git a/Source/CesiumRuntime/Private/PCH.h b/Source/CesiumRuntime/Private/PCH.h deleted file mode 100644 index 759d0b452..000000000 --- a/Source/CesiumRuntime/Private/PCH.h +++ /dev/null @@ -1,27 +0,0 @@ -// Copyright 2020-2024 CesiumGS, Inc. and Contributors - -#pragma once - -#define _SILENCE_CXX17_CODECVT_HEADER_DEPRECATION_WARNING -#include "CoreMinimal.h" - -// Workaround for an unhelpful warning (that gets treated as an error) in -// VS2017. See https://github.com/akrzemi1/Optional/issues/57 and -// https://answers.unrealengine.com/questions/607946/anonymous-union-with-none-trivial-type.html -#ifdef _MSC_VER -#if _MSC_VER < 1920 -#pragma warning(push) -#pragma warning(disable : 4583) -#pragma warning(disable : 4582) -#include -#include -#pragma warning(pop) -#endif -#endif - -#include "Components/MeshComponent.h" -#include "Components/PrimitiveComponent.h" -#include "Engine/Engine.h" -#include "Engine/World.h" -#include "Physics/PhysicsInterfaceCore.h" -#include "PhysicsEngine/BodyInstance.h" diff --git a/Source/CesiumRuntime/Private/Tests/Cesium3DTileset.spec.cpp b/Source/CesiumRuntime/Private/Tests/Cesium3DTileset.spec.cpp new file mode 100644 index 000000000..3b123524c --- /dev/null +++ b/Source/CesiumRuntime/Private/Tests/Cesium3DTileset.spec.cpp @@ -0,0 +1,92 @@ +// Copyright 2020-2024 CesiumGS, Inc. and Contributors + +#if WITH_EDITOR + +#include "Cesium3DTileset.h" +#include "CesiumGlobeAnchorComponent.h" +#include "CesiumGltfComponent.h" +#include "CesiumLoadTestCore.h" +#include "CesiumSceneGeneration.h" +#include "CesiumSunSky.h" +#include "CesiumTestHelpers.h" +#include "Engine/World.h" +#include "GlobeAwareDefaultPawn.h" +#include "Interfaces/IPluginManager.h" +#include "Misc/AutomationTest.h" +#include "Tests/AutomationCommon.h" +#include "Tests/AutomationTestSettings.h" +#include +#include + +#define TEST_SCREEN_WIDTH 1280 +#define TEST_SCREEN_HEIGHT 720 + +namespace Cesium { + +IMPLEMENT_SIMPLE_AUTOMATION_TEST( + FCesium3DTilesetSharedImages, + "Cesium.Unit.3DTileset.SharedImages", + EAutomationTestFlags::EditorContext | EAutomationTestFlags::ProductFilter); + +static void setupForSharedImages(SceneGenerationContext& context) { + context.setCommonProperties( + FVector(21.16677692, -67.38013505, -6375355.1944), + FVector(-12, -1300, -5), + FRotator(0, 90, 0), + 60.0f); + + context.georeference->SetOriginEarthCenteredEarthFixed(FVector(0, 0, 0)); + context.pawn->SetActorLocation(FVector(485.0, 2400.0, 520.0)); + context.pawn->SetActorRotation(FQuat::MakeFromEuler(FVector(0, 0, 270))); + + context.sunSky->TimeZone = 9.0f; + context.sunSky->UpdateSun(); + + ACesiumGeoreference* georeference = + context.world->SpawnActor(); + check(georeference != nullptr); + georeference->SetOriginPlacement(EOriginPlacement::TrueOrigin); + + ACesium3DTileset* tileset = context.world->SpawnActor(); + tileset->SetTilesetSource(ETilesetSource::FromCesiumIon); + tileset->SetIonAssetID(2757071); + tileset->SetIonAccessToken(SceneGenerationContext::testIonToken); + + tileset->SetActorLabel(TEXT("SharedImages")); + tileset->SetGeoreference(georeference); + tileset->SuspendUpdate = false; + tileset->LogSelectionStats = true; + context.tilesets.push_back(tileset); + + UCesiumGlobeAnchorComponent* GlobeAnchorComponent = + NewObject(tileset, TEXT("GlobeAnchor")); + tileset->AddInstanceComponent(GlobeAnchorComponent); + GlobeAnchorComponent->SetAdjustOrientationForGlobeWhenMoving(false); + GlobeAnchorComponent->SetGeoreference(georeference); + GlobeAnchorComponent->RegisterComponent(); + GlobeAnchorComponent->MoveToEarthCenteredEarthFixedPosition( + FVector(0.0, 0.0, 0.0)); + + ADirectionalLight* Light = context.world->SpawnActor(); + Light->SetActorRotation(FQuat::MakeFromEuler(FVector(0, 0, 270))); +} + +void tilesetPass( + SceneGenerationContext& context, + TestPass::TestingParameter parameter) {} + +bool FCesium3DTilesetSharedImages::RunTest(const FString& Parameters) { + std::vector testPasses; + testPasses.push_back(TestPass{"Refresh Pass", tilesetPass, nullptr}); + + return RunLoadTest( + GetBeautifiedTestName(), + setupForSharedImages, + testPasses, + TEST_SCREEN_WIDTH, + TEST_SCREEN_HEIGHT); +} + +} // namespace Cesium + +#endif diff --git a/Source/CesiumRuntime/Private/Tests/CesiumCameraManager.spec.cpp b/Source/CesiumRuntime/Private/Tests/CesiumCameraManager.spec.cpp index f1372ef20..a852d540c 100644 --- a/Source/CesiumRuntime/Private/Tests/CesiumCameraManager.spec.cpp +++ b/Source/CesiumRuntime/Private/Tests/CesiumCameraManager.spec.cpp @@ -8,7 +8,9 @@ BEGIN_DEFINE_SPEC( FCesiumCameraManagerSpec, "Cesium.Unit.CameraManager", - EAutomationTestFlags::ApplicationContextMask | + EAutomationTestFlags::EditorContext | EAutomationTestFlags::ClientContext | + EAutomationTestFlags::ServerContext | + EAutomationTestFlags::CommandletContext | EAutomationTestFlags::ProductFilter) END_DEFINE_SPEC(FCesiumCameraManagerSpec) diff --git a/Source/CesiumRuntime/Private/Tests/CesiumFeatureIdAttribute.spec.cpp b/Source/CesiumRuntime/Private/Tests/CesiumFeatureIdAttribute.spec.cpp index c2b283985..b517b4c1b 100644 --- a/Source/CesiumRuntime/Private/Tests/CesiumFeatureIdAttribute.spec.cpp +++ b/Source/CesiumRuntime/Private/Tests/CesiumFeatureIdAttribute.spec.cpp @@ -5,22 +5,22 @@ #include "CesiumGltfSpecUtility.h" #include "Misc/AutomationTest.h" -using namespace CesiumGltf; - BEGIN_DEFINE_SPEC( FCesiumFeatureIdAttributeSpec, "Cesium.Unit.FeatureIdAttribute", - EAutomationTestFlags::ApplicationContextMask | + EAutomationTestFlags::EditorContext | EAutomationTestFlags::ClientContext | + EAutomationTestFlags::ServerContext | + EAutomationTestFlags::CommandletContext | EAutomationTestFlags::ProductFilter) -Model model; -MeshPrimitive* pPrimitive; +CesiumGltf::Model model; +CesiumGltf::MeshPrimitive* pPrimitive; END_DEFINE_SPEC(FCesiumFeatureIdAttributeSpec) void FCesiumFeatureIdAttributeSpec::Define() { Describe("Constructor", [this]() { BeforeEach([this]() { - model = Model(); - Mesh& mesh = model.meshes.emplace_back(); + model = CesiumGltf::Model(); + CesiumGltf::Mesh& mesh = model.meshes.emplace_back(); pPrimitive = &mesh.primitives.emplace_back(); }); @@ -76,9 +76,10 @@ void FCesiumFeatureIdAttributeSpec::Define() { It("constructs invalid instance for attribute with invalid accessor", [this]() { - Accessor& accessor = model.accessors.emplace_back(); - accessor.type = AccessorSpec::Type::VEC2; - accessor.componentType = AccessorSpec::ComponentType::FLOAT; + CesiumGltf::Accessor& accessor = model.accessors.emplace_back(); + accessor.type = CesiumGltf::AccessorSpec::Type::VEC2; + accessor.componentType = + CesiumGltf::AccessorSpec::ComponentType::FLOAT; const int64 attributeIndex = 0; pPrimitive->attributes.insert({"_FEATURE_ID_0", 0}); @@ -125,10 +126,10 @@ void FCesiumFeatureIdAttributeSpec::Define() { }); }); - Describe("GetVertexCount", [this]() { + Describe("GetCount", [this]() { BeforeEach([this]() { - model = Model(); - Mesh& mesh = model.meshes.emplace_back(); + model = CesiumGltf::Model(); + CesiumGltf::Mesh& mesh = model.meshes.emplace_back(); pPrimitive = &mesh.primitives.emplace_back(); }); @@ -148,7 +149,7 @@ void FCesiumFeatureIdAttributeSpec::Define() { ECesiumFeatureIdAttributeStatus::ErrorInvalidAccessor); TestEqual( "VertexCount", - UCesiumFeatureIdAttributeBlueprintLibrary::GetVertexCount( + UCesiumFeatureIdAttributeBlueprintLibrary::GetCount( featureIDAttribute), 0); }); @@ -176,16 +177,16 @@ void FCesiumFeatureIdAttributeSpec::Define() { ECesiumFeatureIdAttributeStatus::Valid); TestEqual( "VertexCount", - UCesiumFeatureIdAttributeBlueprintLibrary::GetVertexCount( + UCesiumFeatureIdAttributeBlueprintLibrary::GetCount( featureIDAttribute), vertexCount); }); }); - Describe("GetFeatureIDForVertex", [this]() { + Describe("GetFeatureID", [this]() { BeforeEach([this]() { - model = Model(); - Mesh& mesh = model.meshes.emplace_back(); + model = CesiumGltf::Model(); + CesiumGltf::Mesh& mesh = model.meshes.emplace_back(); pPrimitive = &mesh.primitives.emplace_back(); }); @@ -205,7 +206,7 @@ void FCesiumFeatureIdAttributeSpec::Define() { ECesiumFeatureIdAttributeStatus::ErrorInvalidAccessor); TestEqual( "FeatureIDForVertex", - UCesiumFeatureIdAttributeBlueprintLibrary::GetFeatureIDForVertex( + UCesiumFeatureIdAttributeBlueprintLibrary::GetFeatureID( featureIDAttribute, 0), -1); @@ -233,13 +234,13 @@ void FCesiumFeatureIdAttributeSpec::Define() { ECesiumFeatureIdAttributeStatus::Valid); TestEqual( "FeatureIDForNegativeVertex", - UCesiumFeatureIdAttributeBlueprintLibrary::GetFeatureIDForVertex( + UCesiumFeatureIdAttributeBlueprintLibrary::GetFeatureID( featureIDAttribute, -1), -1); TestEqual( "FeatureIDForOutOfBoundsVertex", - UCesiumFeatureIdAttributeBlueprintLibrary::GetFeatureIDForVertex( + UCesiumFeatureIdAttributeBlueprintLibrary::GetFeatureID( featureIDAttribute, 10), -1); @@ -268,7 +269,7 @@ void FCesiumFeatureIdAttributeSpec::Define() { for (size_t i = 0; i < featureIDs.size(); i++) { TestEqual( "FeatureIDForVertex", - UCesiumFeatureIdAttributeBlueprintLibrary::GetFeatureIDForVertex( + UCesiumFeatureIdAttributeBlueprintLibrary::GetFeatureID( featureIDAttribute, static_cast(i)), featureIDs[i]); diff --git a/Source/CesiumRuntime/Private/Tests/CesiumFeatureIdSet.spec.cpp b/Source/CesiumRuntime/Private/Tests/CesiumFeatureIdSet.spec.cpp index f3616f5e3..7da2be043 100644 --- a/Source/CesiumRuntime/Private/Tests/CesiumFeatureIdSet.spec.cpp +++ b/Source/CesiumRuntime/Private/Tests/CesiumFeatureIdSet.spec.cpp @@ -7,31 +7,31 @@ #include "CesiumGltfSpecUtility.h" #include "Misc/AutomationTest.h" -using namespace CesiumGltf; - BEGIN_DEFINE_SPEC( FCesiumFeatureIdSetSpec, "Cesium.Unit.FeatureIdSet", - EAutomationTestFlags::ApplicationContextMask | + EAutomationTestFlags::EditorContext | EAutomationTestFlags::ClientContext | + EAutomationTestFlags::ServerContext | + EAutomationTestFlags::CommandletContext | EAutomationTestFlags::ProductFilter) -Model model; -MeshPrimitive* pPrimitive; +CesiumGltf::Model model; +CesiumGltf::MeshPrimitive* pPrimitive; TObjectPtr pPrimitiveComponent; END_DEFINE_SPEC(FCesiumFeatureIdSetSpec) void FCesiumFeatureIdSetSpec::Define() { Describe("Constructor", [this]() { BeforeEach([this]() { - model = Model(); - Mesh& mesh = model.meshes.emplace_back(); + model = CesiumGltf::Model(); + CesiumGltf::Mesh& mesh = model.meshes.emplace_back(); pPrimitive = &mesh.primitives.emplace_back(); - pPrimitive->addExtension(); + pPrimitive->addExtension(); }); It("constructs from empty feature ID set", [this]() { // This is technically disallowed by the spec, but just make sure it's // handled reasonably. - FeatureId featureId; + CesiumGltf::FeatureId featureId; FCesiumFeatureIdSet featureIDSet(model, *pPrimitive, featureId); TestEqual( @@ -46,7 +46,7 @@ void FCesiumFeatureIdSetSpec::Define() { }); It("constructs implicit feature ID set", [this]() { - FeatureId featureId; + CesiumGltf::FeatureId featureId; featureId.featureCount = 10; FCesiumFeatureIdSet featureIDSet(model, *pPrimitive, featureId); @@ -64,7 +64,7 @@ void FCesiumFeatureIdSetSpec::Define() { It("constructs set with feature ID attribute", [this]() { const int64 attributeIndex = 0; const std::vector featureIDs{0, 0, 0, 1, 1, 1}; - FeatureId& featureID = AddFeatureIDsAsAttributeToModel( + CesiumGltf::FeatureId& featureID = AddFeatureIDsAsAttributeToModel( model, *pPrimitive, featureIDs, @@ -91,7 +91,7 @@ void FCesiumFeatureIdSetSpec::Define() { glm::vec2(0, 0.5), glm::vec2(0.5, 0.5)}; - FeatureId& featureId = AddFeatureIDsAsTextureToModel( + CesiumGltf::FeatureId& featureId = AddFeatureIDsAsTextureToModel( model, *pPrimitive, featureIDs, @@ -114,7 +114,7 @@ void FCesiumFeatureIdSetSpec::Define() { }); It("constructs with null feature ID", [this]() { - FeatureId featureId; + CesiumGltf::FeatureId featureId; featureId.featureCount = 10; featureId.nullFeatureId = 0; @@ -135,7 +135,7 @@ void FCesiumFeatureIdSetSpec::Define() { }); It("constructs with property table index", [this]() { - FeatureId featureId; + CesiumGltf::FeatureId featureId; featureId.featureCount = 10; featureId.propertyTable = 1; @@ -159,13 +159,13 @@ void FCesiumFeatureIdSetSpec::Define() { Describe("GetAsFeatureIDAttribute", [this]() { BeforeEach([this]() { - model = Model(); - Mesh& mesh = model.meshes.emplace_back(); + model = CesiumGltf::Model(); + CesiumGltf::Mesh& mesh = model.meshes.emplace_back(); pPrimitive = &mesh.primitives.emplace_back(); }); It("returns empty instance for non-attribute feature ID set", [this]() { - FeatureId featureId; + CesiumGltf::FeatureId featureId; featureId.featureCount = 10; FCesiumFeatureIdSet featureIDSet(model, *pPrimitive, featureId); @@ -183,7 +183,7 @@ void FCesiumFeatureIdSetSpec::Define() { It("returns valid instance for attribute feature ID set", [this]() { const int64 attributeIndex = 0; const std::vector featureIDs{0, 0, 0, 1, 1, 1}; - FeatureId& featureID = AddFeatureIDsAsAttributeToModel( + CesiumGltf::FeatureId& featureID = AddFeatureIDsAsAttributeToModel( model, *pPrimitive, featureIDs, @@ -208,13 +208,13 @@ void FCesiumFeatureIdSetSpec::Define() { Describe("GetAsFeatureIDTexture", [this]() { BeforeEach([this]() { - model = Model(); - Mesh& mesh = model.meshes.emplace_back(); + model = CesiumGltf::Model(); + CesiumGltf::Mesh& mesh = model.meshes.emplace_back(); pPrimitive = &mesh.primitives.emplace_back(); }); It("returns empty instance for non-texture feature ID set", [this]() { - FeatureId featureId; + CesiumGltf::FeatureId featureId; featureId.featureCount = 10; FCesiumFeatureIdSet featureIDSet(model, *pPrimitive, featureId); @@ -231,7 +231,7 @@ void FCesiumFeatureIdSetSpec::Define() { TestEqual( "FeatureIDTextureViewStatus", featureIDTextureView.status(), - FeatureIdTextureViewStatus::ErrorUninitialized); + CesiumGltf::FeatureIdTextureViewStatus::ErrorUninitialized); }); It("returns valid instance for texture feature ID set", [this]() { @@ -242,7 +242,7 @@ void FCesiumFeatureIdSetSpec::Define() { glm::vec2(0, 0.5), glm::vec2(0.5, 0.5)}; - FeatureId& featureId = AddFeatureIDsAsTextureToModel( + CesiumGltf::FeatureId& featureId = AddFeatureIDsAsTextureToModel( model, *pPrimitive, featureIDs, @@ -266,14 +266,14 @@ void FCesiumFeatureIdSetSpec::Define() { TestEqual( "FeatureIDTextureViewStatus", featureIDTextureView.status(), - FeatureIdTextureViewStatus::Valid); + CesiumGltf::FeatureIdTextureViewStatus::Valid); }); }); Describe("GetFeatureIDForVertex", [this]() { BeforeEach([this]() { - model = Model(); - Mesh& mesh = model.meshes.emplace_back(); + model = CesiumGltf::Model(); + CesiumGltf::Mesh& mesh = model.meshes.emplace_back(); pPrimitive = &mesh.primitives.emplace_back(); }); @@ -288,7 +288,7 @@ void FCesiumFeatureIdSetSpec::Define() { }); It("returns -1 for out of bounds index", [this]() { - FeatureId featureId; + CesiumGltf::FeatureId featureId; featureId.featureCount = 10; FCesiumFeatureIdSet featureIDSet(model, *pPrimitive, featureId); @@ -307,7 +307,7 @@ void FCesiumFeatureIdSetSpec::Define() { }); It("returns correct value for implicit set", [this]() { - FeatureId featureId; + CesiumGltf::FeatureId featureId; featureId.featureCount = 10; FCesiumFeatureIdSet featureIDSet(model, *pPrimitive, featureId); @@ -324,7 +324,7 @@ void FCesiumFeatureIdSetSpec::Define() { It("returns correct value for attribute set", [this]() { const int64 attributeIndex = 0; const std::vector featureIDs{0, 0, 0, 1, 1, 1}; - FeatureId& featureID = AddFeatureIDsAsAttributeToModel( + CesiumGltf::FeatureId& featureID = AddFeatureIDsAsAttributeToModel( model, *pPrimitive, featureIDs, @@ -350,7 +350,7 @@ void FCesiumFeatureIdSetSpec::Define() { glm::vec2(0, 0.5), glm::vec2(0.5, 0.5)}; - FeatureId& featureID = AddFeatureIDsAsTextureToModel( + CesiumGltf::FeatureId& featureID = AddFeatureIDsAsTextureToModel( model, *pPrimitive, featureIDs, @@ -374,8 +374,8 @@ void FCesiumFeatureIdSetSpec::Define() { Describe("GetFeatureIDFromHit", [this]() { BeforeEach([this]() { - model = Model(); - Mesh& mesh = model.meshes.emplace_back(); + model = CesiumGltf::Model(); + CesiumGltf::Mesh& mesh = model.meshes.emplace_back(); pPrimitive = &mesh.primitives.emplace_back(); pPrimitive->mode = CesiumGltf::MeshPrimitive::Mode::TRIANGLES; pPrimitiveComponent = NewObject(); @@ -394,8 +394,8 @@ void FCesiumFeatureIdSetSpec::Define() { model, *pPrimitive, "POSITION", - AccessorSpec::Type::VEC3, - AccessorSpec::ComponentType::FLOAT, + CesiumGltf::AccessorSpec::Type::VEC3, + CesiumGltf::AccessorSpec::ComponentType::FLOAT, positions); }); @@ -410,7 +410,7 @@ void FCesiumFeatureIdSetSpec::Define() { }); It("returns -1 for invalid hit component", [this]() { - FeatureId featureId; + CesiumGltf::FeatureId featureId; featureId.featureCount = 6; CesiumPrimitiveData& primData = pPrimitiveComponent->getPrimitiveData(); primData.PositionAccessor = CesiumGltf::AccessorView( @@ -446,7 +446,7 @@ void FCesiumFeatureIdSetSpec::Define() { glm::vec2(0, 1), glm::vec2(1, 0)}; const std::vector featureIDs{0, 3, 1, 2}; - FeatureId& featureID = AddFeatureIDsAsTextureToModel( + CesiumGltf::FeatureId& featureID = AddFeatureIDsAsTextureToModel( model, *pPrimitive, featureIDs, @@ -461,7 +461,7 @@ void FCesiumFeatureIdSetSpec::Define() { CesiumGltf::AccessorView(model, positionAccessorIndex); primData.TexCoordAccessorMap.emplace( 0, - AccessorView>( + CesiumGltf::AccessorView>( model, static_cast(model.accessors.size() - 1))); @@ -478,7 +478,7 @@ void FCesiumFeatureIdSetSpec::Define() { std::array expected{3, 1, 0}; for (size_t i = 0; i < locations.size(); i++) { - Hit.Location = locations[i]; + Hit.Location = locations[i] * CesiumPrimitiveData::positionScaleFactor; TestEqual( "FeatureIDFromHit", UCesiumFeatureIdSetBlueprintLibrary::GetFeatureIDFromHit( @@ -489,7 +489,7 @@ void FCesiumFeatureIdSetSpec::Define() { }); It("returns correct value for implicit set", [this]() { - FeatureId featureId; + CesiumGltf::FeatureId featureId; featureId.featureCount = 6; CesiumPrimitiveData& primData = pPrimitiveComponent->getPrimitiveData(); @@ -511,7 +511,7 @@ void FCesiumFeatureIdSetSpec::Define() { std::array expected{0, 3, 0}; for (size_t i = 0; i < locations.size(); i++) { Hit.FaceIndex = faceIndices[i]; - Hit.Location = locations[i]; + Hit.Location = locations[i] * CesiumPrimitiveData::positionScaleFactor; TestEqual( "FeatureIDFromHit", UCesiumFeatureIdSetBlueprintLibrary::GetFeatureIDFromHit( @@ -526,7 +526,7 @@ void FCesiumFeatureIdSetSpec::Define() { static_cast(model.accessors.size() - 1); const int64 attributeIndex = 0; const std::vector featureIDs{0, 0, 0, 1, 1, 1}; - FeatureId& featureId = AddFeatureIDsAsAttributeToModel( + CesiumGltf::FeatureId& featureId = AddFeatureIDsAsAttributeToModel( model, *pPrimitive, featureIDs, @@ -542,7 +542,8 @@ void FCesiumFeatureIdSetSpec::Define() { FHitResult Hit; Hit.Component = pPrimitiveComponent; Hit.FaceIndex = 0; - Hit.Location = FVector_NetQuantize(0, -1, 0); + Hit.Location = FVector_NetQuantize(0, -1, 0) * + CesiumPrimitiveData::positionScaleFactor; TestEqual( "FeatureIDFromHit", UCesiumFeatureIdSetBlueprintLibrary::GetFeatureIDFromHit( @@ -551,7 +552,8 @@ void FCesiumFeatureIdSetSpec::Define() { 0); Hit.FaceIndex = 1; - Hit.Location = FVector_NetQuantize(0, -4, 0); + Hit.Location = FVector_NetQuantize(0, -4, 0) * + CesiumPrimitiveData::positionScaleFactor; TestEqual( "FeatureIDFromHit", UCesiumFeatureIdSetBlueprintLibrary::GetFeatureIDFromHit( @@ -563,8 +565,8 @@ void FCesiumFeatureIdSetSpec::Define() { Describe("Deprecated", [this]() { BeforeEach([this]() { - model = Model(); - Mesh& mesh = model.meshes.emplace_back(); + model = CesiumGltf::Model(); + CesiumGltf::Mesh& mesh = model.meshes.emplace_back(); pPrimitive = &mesh.primitives.emplace_back(); }); @@ -572,7 +574,7 @@ void FCesiumFeatureIdSetSpec::Define() { [this]() { const int64 attributeIndex = 0; const std::vector featureIDs{0, 0, 0, 1, 1, 1}; - FeatureId& featureID = AddFeatureIDsAsAttributeToModel( + CesiumGltf::FeatureId& featureID = AddFeatureIDsAsAttributeToModel( model, *pPrimitive, featureIDs, @@ -582,9 +584,10 @@ void FCesiumFeatureIdSetSpec::Define() { const std::string expectedName = "PropertyTableName"; - ExtensionModelExtStructuralMetadata& metadataExtension = - model.addExtension(); - PropertyTable& propertyTable = + CesiumGltf::ExtensionModelExtStructuralMetadata& metadataExtension = + model.addExtension< + CesiumGltf::ExtensionModelExtStructuralMetadata>(); + CesiumGltf::PropertyTable& propertyTable = metadataExtension.propertyTables.emplace_back(); propertyTable.name = expectedName; @@ -613,7 +616,7 @@ void FCesiumFeatureIdSetSpec::Define() { glm::vec2(0, 0.5), glm::vec2(0.5, 0.5)}; - FeatureId& featureID = AddFeatureIDsAsTextureToModel( + CesiumGltf::FeatureId& featureID = AddFeatureIDsAsTextureToModel( model, *pPrimitive, featureIDs, @@ -626,9 +629,10 @@ void FCesiumFeatureIdSetSpec::Define() { const std::string expectedName = "PropertyTableName"; - ExtensionModelExtStructuralMetadata& metadataExtension = - model.addExtension(); - PropertyTable& propertyTable = + CesiumGltf::ExtensionModelExtStructuralMetadata& metadataExtension = + model.addExtension< + CesiumGltf::ExtensionModelExtStructuralMetadata>(); + CesiumGltf::PropertyTable& propertyTable = metadataExtension.propertyTables.emplace_back(); propertyTable.name = expectedName; diff --git a/Source/CesiumRuntime/Private/Tests/CesiumFeatureIdTexture.spec.cpp b/Source/CesiumRuntime/Private/Tests/CesiumFeatureIdTexture.spec.cpp index 4daa30cda..982d475a6 100644 --- a/Source/CesiumRuntime/Private/Tests/CesiumFeatureIdTexture.spec.cpp +++ b/Source/CesiumRuntime/Private/Tests/CesiumFeatureIdTexture.spec.cpp @@ -8,15 +8,15 @@ #include #include -using namespace CesiumGltf; - BEGIN_DEFINE_SPEC( FCesiumFeatureIdTextureSpec, "Cesium.Unit.FeatureIdTexture", - EAutomationTestFlags::ApplicationContextMask | + EAutomationTestFlags::EditorContext | EAutomationTestFlags::ClientContext | + EAutomationTestFlags::ServerContext | + EAutomationTestFlags::CommandletContext | EAutomationTestFlags::ProductFilter) -Model model; -MeshPrimitive* pPrimitive; +CesiumGltf::Model model; +CesiumGltf::MeshPrimitive* pPrimitive; const std::vector texCoords{ glm::vec2(0, 0), glm::vec2(0.5, 0), @@ -28,8 +28,8 @@ END_DEFINE_SPEC(FCesiumFeatureIdTextureSpec) void FCesiumFeatureIdTextureSpec::Define() { Describe("Constructor", [this]() { BeforeEach([this]() { - model = Model(); - Mesh& mesh = model.meshes.emplace_back(); + model = CesiumGltf::Model(); + CesiumGltf::Mesh& mesh = model.meshes.emplace_back(); pPrimitive = &mesh.primitives.emplace_back(); }); @@ -45,11 +45,11 @@ void FCesiumFeatureIdTextureSpec::Define() { TestEqual( "FeatureIDTextureViewStatus", featureIDTextureView.status(), - FeatureIdTextureViewStatus::ErrorUninitialized); + CesiumGltf::FeatureIdTextureViewStatus::ErrorUninitialized); }); It("constructs invalid instance for nonexistent texture", [this]() { - FeatureIdTexture texture; + CesiumGltf::FeatureIdTexture texture; texture.index = -1; texture.texCoord = 0; texture.channels = {0}; @@ -70,14 +70,14 @@ void FCesiumFeatureIdTextureSpec::Define() { TestEqual( "FeatureIDTextureViewStatus", featureIDTextureView.status(), - FeatureIdTextureViewStatus::ErrorInvalidTexture); + CesiumGltf::FeatureIdTextureViewStatus::ErrorInvalidTexture); }); It("constructs invalid instance for texture with invalid image", [this]() { CesiumGltf::Texture& gltfTexture = model.textures.emplace_back(); gltfTexture.source = -1; - FeatureIdTexture texture; + CesiumGltf::FeatureIdTexture texture; texture.index = 0; texture.texCoord = 0; texture.channels = {0}; @@ -98,13 +98,13 @@ void FCesiumFeatureIdTextureSpec::Define() { TestEqual( "FeatureIDTextureViewStatus", featureIDTextureView.status(), - FeatureIdTextureViewStatus::ErrorInvalidImage); + CesiumGltf::FeatureIdTextureViewStatus::ErrorInvalidImage); }); It("constructs valid instance", [this]() { const std::vector featureIDs{0, 3, 1, 2}; - FeatureId& featureId = AddFeatureIDsAsTextureToModel( + CesiumGltf::FeatureId& featureId = AddFeatureIDsAsTextureToModel( model, *pPrimitive, featureIDs, @@ -130,25 +130,26 @@ void FCesiumFeatureIdTextureSpec::Define() { TestEqual( "FeatureIDTextureViewStatus", featureIDTextureView.status(), - FeatureIdTextureViewStatus::Valid); + CesiumGltf::FeatureIdTextureViewStatus::Valid); }); It("constructs valid instance for texture with nonexistent texcoord attribute", [this]() { - Image& image = model.images.emplace_back(); - image.cesium.width = image.cesium.height = 1; - image.cesium.channels = 1; - image.cesium.pixelData.push_back(std::byte(42)); + CesiumGltf::Image& image = model.images.emplace_back(); + image.pAsset.emplace(); + image.pAsset->width = image.pAsset->height = 1; + image.pAsset->channels = 1; + image.pAsset->pixelData.push_back(std::byte(42)); - Sampler& sampler = model.samplers.emplace_back(); - sampler.wrapS = Sampler::WrapS::CLAMP_TO_EDGE; - sampler.wrapT = Sampler::WrapT::CLAMP_TO_EDGE; + CesiumGltf::Sampler& sampler = model.samplers.emplace_back(); + sampler.wrapS = CesiumGltf::Sampler::WrapS::CLAMP_TO_EDGE; + sampler.wrapT = CesiumGltf::Sampler::WrapT::CLAMP_TO_EDGE; CesiumGltf::Texture& gltfTexture = model.textures.emplace_back(); gltfTexture.source = 0; gltfTexture.sampler = 0; - FeatureIdTexture texture; + CesiumGltf::FeatureIdTexture texture; texture.index = 0; texture.texCoord = 0; texture.channels = {0}; @@ -169,25 +170,26 @@ void FCesiumFeatureIdTextureSpec::Define() { TestEqual( "FeatureIDTextureViewStatus", featureIDTextureView.status(), - FeatureIdTextureViewStatus::Valid); + CesiumGltf::FeatureIdTextureViewStatus::Valid); }); It("constructs valid instance for texture with invalid texcoord accessor", [this]() { - Image& image = model.images.emplace_back(); - image.cesium.width = image.cesium.height = 1; - image.cesium.channels = 1; - image.cesium.pixelData.push_back(std::byte(42)); + CesiumGltf::Image& image = model.images.emplace_back(); + image.pAsset.emplace(); + image.pAsset->width = image.pAsset->height = 1; + image.pAsset->channels = 1; + image.pAsset->pixelData.push_back(std::byte(42)); - Sampler& sampler = model.samplers.emplace_back(); - sampler.wrapS = Sampler::WrapS::CLAMP_TO_EDGE; - sampler.wrapT = Sampler::WrapT::CLAMP_TO_EDGE; + CesiumGltf::Sampler& sampler = model.samplers.emplace_back(); + sampler.wrapS = CesiumGltf::Sampler::WrapS::CLAMP_TO_EDGE; + sampler.wrapT = CesiumGltf::Sampler::WrapT::CLAMP_TO_EDGE; CesiumGltf::Texture& gltfTexture = model.textures.emplace_back(); gltfTexture.source = 0; gltfTexture.sampler = 0; - FeatureIdTexture texture; + CesiumGltf::FeatureIdTexture texture; texture.index = 0; texture.texCoord = 0; texture.channels = {0}; @@ -210,14 +212,14 @@ void FCesiumFeatureIdTextureSpec::Define() { TestEqual( "FeatureIDTextureViewStatus", featureIDTextureView.status(), - FeatureIdTextureViewStatus::Valid); + CesiumGltf::FeatureIdTextureViewStatus::Valid); }); }); Describe("GetFeatureIDForUV", [this]() { BeforeEach([this]() { - model = Model(); - Mesh& mesh = model.meshes.emplace_back(); + model = CesiumGltf::Model(); + CesiumGltf::Mesh& mesh = model.meshes.emplace_back(); pPrimitive = &mesh.primitives.emplace_back(); }); @@ -225,7 +227,7 @@ void FCesiumFeatureIdTextureSpec::Define() { CesiumGltf::Texture& gltfTexture = model.textures.emplace_back(); gltfTexture.source = -1; - FeatureIdTexture texture; + CesiumGltf::FeatureIdTexture texture; texture.index = 0; texture.texCoord = 0; texture.channels = {0}; @@ -253,7 +255,7 @@ void FCesiumFeatureIdTextureSpec::Define() { It("returns correct value for valid attribute", [this]() { const std::vector featureIDs{0, 3, 1, 2}; - FeatureId& featureId = AddFeatureIDsAsTextureToModel( + CesiumGltf::FeatureId& featureId = AddFeatureIDsAsTextureToModel( model, *pPrimitive, featureIDs, @@ -293,7 +295,7 @@ void FCesiumFeatureIdTextureSpec::Define() { glm::vec2(0, 1), glm::vec2(1, 1)}; - FeatureId& featureId = AddFeatureIDsAsTextureToModel( + CesiumGltf::FeatureId& featureId = AddFeatureIDsAsTextureToModel( model, *pPrimitive, featureIDs, @@ -302,12 +304,13 @@ void FCesiumFeatureIdTextureSpec::Define() { 2, rawTexCoords, 0, - Sampler::WrapS::REPEAT, - Sampler::WrapT::REPEAT); + CesiumGltf::Sampler::WrapS::REPEAT, + CesiumGltf::Sampler::WrapT::REPEAT); assert(featureId.texture != std::nullopt); - ExtensionKhrTextureTransform& textureTransform = - featureId.texture->addExtension(); + CesiumGltf::ExtensionKhrTextureTransform& textureTransform = + featureId.texture + ->addExtension(); textureTransform.offset = {0.5, -0.5}; textureTransform.rotation = UE_DOUBLE_HALF_PI; textureTransform.scale = {0.5, 0.5}; @@ -343,13 +346,13 @@ void FCesiumFeatureIdTextureSpec::Define() { Describe("GetFeatureIDForVertex", [this]() { BeforeEach([this]() { - model = Model(); - Mesh& mesh = model.meshes.emplace_back(); + model = CesiumGltf::Model(); + CesiumGltf::Mesh& mesh = model.meshes.emplace_back(); pPrimitive = &mesh.primitives.emplace_back(); }); It("returns -1 for invalid texture", [this]() { - FeatureIdTexture texture; + CesiumGltf::FeatureIdTexture texture; texture.index = -1; texture.texCoord = 0; texture.channels = {0}; @@ -377,7 +380,7 @@ void FCesiumFeatureIdTextureSpec::Define() { It("returns -1 for out-of-bounds index", [this]() { const std::vector featureIDs{0, 3, 1, 2}; - FeatureId& featureId = AddFeatureIDsAsTextureToModel( + CesiumGltf::FeatureId& featureId = AddFeatureIDsAsTextureToModel( model, *pPrimitive, featureIDs, @@ -417,7 +420,7 @@ void FCesiumFeatureIdTextureSpec::Define() { It("returns correct value for valid texture", [this]() { const std::vector featureIDs{0, 3, 1, 2}; - FeatureId& featureId = AddFeatureIDsAsTextureToModel( + CesiumGltf::FeatureId& featureId = AddFeatureIDsAsTextureToModel( model, *pPrimitive, featureIDs, @@ -462,8 +465,8 @@ void FCesiumFeatureIdTextureSpec::Define() { model, *pPrimitive, "TEXCOORD_0", - AccessorSpec::Type::VEC2, - AccessorSpec::ComponentType::FLOAT, + CesiumGltf::AccessorSpec::Type::VEC2, + CesiumGltf::AccessorSpec::ComponentType::FLOAT, std::move(values)); const std::vector texCoord1{ @@ -473,7 +476,7 @@ void FCesiumFeatureIdTextureSpec::Define() { glm::vec2(0.0, 0.5)}; const std::vector featureIDs{0, 3, 1, 2}; - FeatureId& featureId = AddFeatureIDsAsTextureToModel( + CesiumGltf::FeatureId& featureId = AddFeatureIDsAsTextureToModel( model, *pPrimitive, featureIDs, @@ -508,8 +511,8 @@ void FCesiumFeatureIdTextureSpec::Define() { Describe("GetFeatureIDFromHit", [this]() { BeforeEach([this]() { - model = Model(); - Mesh& mesh = model.meshes.emplace_back(); + model = CesiumGltf::Model(); + CesiumGltf::Mesh& mesh = model.meshes.emplace_back(); pPrimitive = &mesh.primitives.emplace_back(); pPrimitive->mode = CesiumGltf::MeshPrimitive::Mode::TRIANGLES; pPrimitiveComponent = NewObject(); @@ -528,13 +531,13 @@ void FCesiumFeatureIdTextureSpec::Define() { model, *pPrimitive, "POSITION", - AccessorSpec::Type::VEC3, - AccessorSpec::ComponentType::FLOAT, + CesiumGltf::AccessorSpec::Type::VEC3, + CesiumGltf::AccessorSpec::ComponentType::FLOAT, positions); }); It("returns -1 for invalid texture", [this]() { - FeatureIdTexture texture; + CesiumGltf::FeatureIdTexture texture; texture.index = -1; texture.texCoord = 0; texture.channels = {0}; @@ -552,7 +555,8 @@ void FCesiumFeatureIdTextureSpec::Define() { ECesiumFeatureIdTextureStatus::Valid); FHitResult Hit; - Hit.Location = FVector_NetQuantize::Zero(); + Hit.Location = FVector_NetQuantize::Zero() * + CesiumPrimitiveData::positionScaleFactor; Hit.Component = pPrimitiveComponent; Hit.FaceIndex = 0; @@ -580,7 +584,7 @@ void FCesiumFeatureIdTextureSpec::Define() { glm::vec2(1, 0)}; const std::vector featureIDs{0, 3, 1, 2}; - FeatureId& featureId = AddFeatureIDsAsTextureToModel( + CesiumGltf::FeatureId& featureId = AddFeatureIDsAsTextureToModel( model, *pPrimitive, featureIDs, @@ -594,7 +598,7 @@ void FCesiumFeatureIdTextureSpec::Define() { CesiumGltf::AccessorView(model, positionAccessorIndex); primData.TexCoordAccessorMap.emplace( 0, - AccessorView>( + CesiumGltf::AccessorView>( model, static_cast(model.accessors.size() - 1))); @@ -611,7 +615,8 @@ void FCesiumFeatureIdTextureSpec::Define() { ECesiumFeatureIdTextureStatus::Valid); FHitResult Hit; - Hit.Location = FVector_NetQuantize(0, -1, 0); + Hit.Location = FVector_NetQuantize(0, -1, 0) * + CesiumPrimitiveData::positionScaleFactor; Hit.FaceIndex = 0; Hit.Component = nullptr; @@ -639,7 +644,7 @@ void FCesiumFeatureIdTextureSpec::Define() { glm::vec2(1, 0)}; const std::vector featureIDs{0, 3, 1, 2}; - FeatureId& featureId = AddFeatureIDsAsTextureToModel( + CesiumGltf::FeatureId& featureId = AddFeatureIDsAsTextureToModel( model, *pPrimitive, featureIDs, @@ -654,7 +659,7 @@ void FCesiumFeatureIdTextureSpec::Define() { CesiumGltf::AccessorView(model, positionAccessorIndex); primData.TexCoordAccessorMap.emplace( 1, - AccessorView>( + CesiumGltf::AccessorView>( model, static_cast(model.accessors.size() - 1))); @@ -671,7 +676,8 @@ void FCesiumFeatureIdTextureSpec::Define() { ECesiumFeatureIdTextureStatus::Valid); FHitResult Hit; - Hit.Location = FVector_NetQuantize(0, -1, 0); + Hit.Location = FVector_NetQuantize(0, -1, 0) * + CesiumPrimitiveData::positionScaleFactor; Hit.FaceIndex = 0; Hit.Component = pPrimitiveComponent; @@ -699,7 +705,7 @@ void FCesiumFeatureIdTextureSpec::Define() { glm::vec2(1, 0)}; const std::vector featureIDs{0, 3, 1, 2}; - FeatureId& featureId = AddFeatureIDsAsTextureToModel( + CesiumGltf::FeatureId& featureId = AddFeatureIDsAsTextureToModel( model, *pPrimitive, featureIDs, @@ -714,7 +720,7 @@ void FCesiumFeatureIdTextureSpec::Define() { CesiumGltf::AccessorView(model, positionAccessorIndex); primData.TexCoordAccessorMap.emplace( 0, - AccessorView>( + CesiumGltf::AccessorView>( model, static_cast(model.accessors.size() - 1))); @@ -741,7 +747,7 @@ void FCesiumFeatureIdTextureSpec::Define() { std::array expected{3, 1, 0}; for (size_t i = 0; i < locations.size(); i++) { - Hit.Location = locations[i]; + Hit.Location = locations[i] * CesiumPrimitiveData::positionScaleFactor; int64 featureID = UCesiumFeatureIdTextureBlueprintLibrary::GetFeatureIDFromHit( featureIDTexture, @@ -766,7 +772,7 @@ void FCesiumFeatureIdTextureSpec::Define() { glm::vec2(1, 0)}; const std::vector featureIDs{0, 3, 1, 2}; - FeatureId& featureId = AddFeatureIDsAsTextureToModel( + CesiumGltf::FeatureId& featureId = AddFeatureIDsAsTextureToModel( model, *pPrimitive, featureIDs, @@ -781,7 +787,7 @@ void FCesiumFeatureIdTextureSpec::Define() { CesiumGltf::AccessorView(model, positionAccessorIndex); primData.TexCoordAccessorMap.emplace( 0, - AccessorView>( + CesiumGltf::AccessorView>( model, static_cast(model.accessors.size() - 1))); @@ -808,7 +814,7 @@ void FCesiumFeatureIdTextureSpec::Define() { std::array expected{3, 1, 0}; for (size_t i = 0; i < locations.size(); i++) { - Hit.Location = locations[i]; + Hit.Location = locations[i] * CesiumPrimitiveData::positionScaleFactor; int64 featureID = UCesiumFeatureIdTextureBlueprintLibrary::GetFeatureIDFromHit( featureIDTexture, @@ -836,8 +842,8 @@ void FCesiumFeatureIdTextureSpec::Define() { model, *pPrimitive, "TEXCOORD_0", - AccessorSpec::Type::VEC2, - AccessorSpec::ComponentType::FLOAT, + CesiumGltf::AccessorSpec::Type::VEC2, + CesiumGltf::AccessorSpec::ComponentType::FLOAT, GetValuesAsBytes(texCoords0)); int32 texCoord0AccessorIndex = static_cast(model.accessors.size() - 1); @@ -851,7 +857,7 @@ void FCesiumFeatureIdTextureSpec::Define() { glm::vec2(1, 0), }; const std::vector featureIDs{0, 3, 1, 2}; - FeatureId& featureId = AddFeatureIDsAsTextureToModel( + CesiumGltf::FeatureId& featureId = AddFeatureIDsAsTextureToModel( model, *pPrimitive, featureIDs, @@ -872,15 +878,17 @@ void FCesiumFeatureIdTextureSpec::Define() { CesiumGltf::AccessorView(model, positionAccessorIndex); primData.TexCoordAccessorMap.emplace( 0, - AccessorView>( + CesiumGltf::AccessorView>( model, texCoord0AccessorIndex)); primData.TexCoordAccessorMap.emplace( 0, - AccessorView>(model, 1)); + CesiumGltf::AccessorView>( + model, + 1)); primData.TexCoordAccessorMap.emplace( 1, - AccessorView>( + CesiumGltf::AccessorView>( model, static_cast(model.accessors.size() - 1))); @@ -901,7 +909,7 @@ void FCesiumFeatureIdTextureSpec::Define() { std::array expected{3, 1, 2}; for (size_t i = 0; i < locations.size(); i++) { - Hit.Location = locations[i]; + Hit.Location = locations[i] * CesiumPrimitiveData::positionScaleFactor; int64 featureID = UCesiumFeatureIdTextureBlueprintLibrary::GetFeatureIDFromHit( featureIDTexture, diff --git a/Source/CesiumRuntime/Private/Tests/CesiumGeoreference.spec.cpp b/Source/CesiumRuntime/Private/Tests/CesiumGeoreference.spec.cpp index 779b24cb0..754b26e42 100644 --- a/Source/CesiumRuntime/Private/Tests/CesiumGeoreference.spec.cpp +++ b/Source/CesiumRuntime/Private/Tests/CesiumGeoreference.spec.cpp @@ -13,7 +13,9 @@ using namespace CesiumUtility; BEGIN_DEFINE_SPEC( FCesiumGeoreferenceSpec, "Cesium.Unit.Georeference", - EAutomationTestFlags::ApplicationContextMask | + EAutomationTestFlags::EditorContext | EAutomationTestFlags::ClientContext | + EAutomationTestFlags::ServerContext | + EAutomationTestFlags::CommandletContext | EAutomationTestFlags::ProductFilter) TObjectPtr pGeoreferenceNullIsland; diff --git a/Source/CesiumRuntime/Private/Tests/CesiumGlobeAnchor.spec.cpp b/Source/CesiumRuntime/Private/Tests/CesiumGlobeAnchor.spec.cpp index 1e6c35690..897ab41fb 100644 --- a/Source/CesiumRuntime/Private/Tests/CesiumGlobeAnchor.spec.cpp +++ b/Source/CesiumRuntime/Private/Tests/CesiumGlobeAnchor.spec.cpp @@ -9,11 +9,14 @@ BEGIN_DEFINE_SPEC( FCesiumGlobeAnchorSpec, "Cesium.Unit.GlobeAnchor", - EAutomationTestFlags::ApplicationContextMask | + EAutomationTestFlags::EditorContext | EAutomationTestFlags::ClientContext | + EAutomationTestFlags::ServerContext | + EAutomationTestFlags::CommandletContext | EAutomationTestFlags::ProductFilter) TObjectPtr pActor; TObjectPtr pGlobeAnchor; +TObjectPtr pEllipsoid; END_DEFINE_SPEC(FCesiumGlobeAnchorSpec) @@ -28,9 +31,13 @@ void FCesiumGlobeAnchorSpec::Define() { false); this->pActor->SetActorRelativeTransform(FTransform()); + this->pEllipsoid = NewObject(); + this->pEllipsoid->SetRadii(UCesiumWgs84Ellipsoid::GetRadii()); + ACesiumGeoreference* pGeoreference = ACesiumGeoreference::GetDefaultGeoreferenceForActor(pActor); pGeoreference->SetOriginLongitudeLatitudeHeight(FVector(1.0, 2.0, 3.0)); + pGeoreference->SetEllipsoid(this->pEllipsoid); this->pGlobeAnchor = Cast(pActor->AddComponentByClass( @@ -220,4 +227,40 @@ void FCesiumGlobeAnchorSpec::Define() { TestEqual("up", actualEcefUp, surfaceNormal); }); + + It("gives correct results for different ellipsoids", [this]() { + const FVector Position = FVector(-20.0, -10.0, 1000.0); + + // Check with WGS84 ellipsoid (the default) + this->pGlobeAnchor->MoveToLongitudeLatitudeHeight(Position); + + FVector wgs84EcefPos = + UCesiumWgs84Ellipsoid::LongitudeLatitudeHeightToEarthCenteredEarthFixed( + Position); + + TestEqual( + "ecef", + this->pGlobeAnchor->GetEarthCenteredEarthFixedPosition(), + wgs84EcefPos); + + // Check with unit ellipsoid + TObjectPtr pUnitEllipsoid = NewObject(); + pUnitEllipsoid->SetRadii(FVector::One()); + + ACesiumGeoreference* pGeoreference = + ACesiumGeoreference::GetDefaultGeoreferenceForActor(this->pActor); + pGeoreference->SetEllipsoid(pUnitEllipsoid); + + this->pGlobeAnchor->MoveToLongitudeLatitudeHeight(Position); + + FVector unitEcefPos = + pUnitEllipsoid + ->LongitudeLatitudeHeightToEllipsoidCenteredEllipsoidFixed( + Position); + + TestEqual( + "ecef", + this->pGlobeAnchor->GetEarthCenteredEarthFixedPosition(), + unitEcefPos); + }); } diff --git a/Source/CesiumRuntime/Private/Tests/CesiumGltfSpecUtility.cpp b/Source/CesiumRuntime/Private/Tests/CesiumGltfSpecUtility.cpp index 45c4d8149..3af0ffc69 100644 --- a/Source/CesiumRuntime/Private/Tests/CesiumGltfSpecUtility.cpp +++ b/Source/CesiumRuntime/Private/Tests/CesiumGltfSpecUtility.cpp @@ -1,7 +1,5 @@ #include "CesiumGltfSpecUtility.h" -using namespace CesiumGltf; - int32_t AddBufferToModel( CesiumGltf::Model& model, const std::string& type, @@ -22,8 +20,8 @@ int32_t AddBufferToModel( accessor.componentType = componentType; const int64_t elementByteSize = - Accessor::computeByteSizeOfComponent(componentType) * - Accessor::computeNumberOfComponents(type); + CesiumGltf::Accessor::computeByteSizeOfComponent(componentType) * + CesiumGltf::Accessor::computeNumberOfComponents(type); accessor.count = buffer.byteLength / elementByteSize; return static_cast(model.accessors.size() - 1); @@ -45,13 +43,14 @@ CesiumGltf::FeatureId& AddFeatureIDsAsAttributeToModel( CesiumGltf::AccessorSpec::ComponentType::UNSIGNED_BYTE, std::move(values)); - ExtensionExtMeshFeatures* pExtension = - primitive.getExtension(); + CesiumGltf::ExtensionExtMeshFeatures* pExtension = + primitive.getExtension(); if (pExtension == nullptr) { - pExtension = &primitive.addExtension(); + pExtension = + &primitive.addExtension(); } - FeatureId& featureID = pExtension->featureIds.emplace_back(); + CesiumGltf::FeatureId& featureID = pExtension->featureIds.emplace_back(); featureID.featureCount = featureCount; featureID.attribute = setIndex; @@ -70,16 +69,17 @@ CesiumGltf::FeatureId& AddFeatureIDsAsTextureToModel( const int32_t samplerWrapS, const int32_t samplerWrapT) { CesiumGltf::Image& image = model.images.emplace_back(); - image.cesium.bytesPerChannel = 1; - image.cesium.channels = 1; - image.cesium.width = imageWidth; - image.cesium.height = imageHeight; + image.pAsset.emplace(); + image.pAsset->bytesPerChannel = 1; + image.pAsset->channels = 1; + image.pAsset->width = imageWidth; + image.pAsset->height = imageHeight; - std::vector& data = image.cesium.pixelData; + std::vector& data = image.pAsset->pixelData; data.resize(imageWidth * imageHeight); std::memcpy(data.data(), featureIDs.data(), data.size()); - Sampler& sampler = model.samplers.emplace_back(); + CesiumGltf::Sampler& sampler = model.samplers.emplace_back(); sampler.wrapS = samplerWrapS; sampler.wrapT = samplerWrapT; @@ -96,16 +96,17 @@ CesiumGltf::FeatureId& AddFeatureIDsAsTextureToModel( CesiumGltf::AccessorSpec::ComponentType::FLOAT, std::move(values)); - ExtensionExtMeshFeatures* pExtension = - primitive.getExtension(); + CesiumGltf::ExtensionExtMeshFeatures* pExtension = + primitive.getExtension(); if (pExtension == nullptr) { - pExtension = &primitive.addExtension(); + pExtension = + &primitive.addExtension(); } - FeatureId& featureID = pExtension->featureIds.emplace_back(); + CesiumGltf::FeatureId& featureID = pExtension->featureIds.emplace_back(); featureID.featureCount = featureCount; - FeatureIdTexture featureIDTexture; + CesiumGltf::FeatureIdTexture featureIDTexture; featureIDTexture.channels = {0}; featureIDTexture.index = 0; featureIDTexture.texCoord = texcoordSetIndex; diff --git a/Source/CesiumRuntime/Private/Tests/CesiumGltfSpecUtility.h b/Source/CesiumRuntime/Private/Tests/CesiumGltfSpecUtility.h index b5dd72df8..a166f8d8c 100644 --- a/Source/CesiumRuntime/Private/Tests/CesiumGltfSpecUtility.h +++ b/Source/CesiumRuntime/Private/Tests/CesiumGltfSpecUtility.h @@ -200,15 +200,16 @@ CesiumGltf::PropertyTextureProperty& AddPropertyTexturePropertyToModel( classProperty.componentType = componentType; CesiumGltf::Image& image = model.images.emplace_back(); - image.cesium.width = 2; - image.cesium.height = 2; - image.cesium.channels = sizeof(T); - image.cesium.bytesPerChannel = 1; - image.cesium.pixelData.resize(values.size() * sizeof(T)); + image.pAsset.emplace(); + image.pAsset->width = 2; + image.pAsset->height = 2; + image.pAsset->channels = sizeof(T); + image.pAsset->bytesPerChannel = 1; + image.pAsset->pixelData.resize(values.size() * sizeof(T)); std::memcpy( - image.cesium.pixelData.data(), + image.pAsset->pixelData.data(), values.data(), - image.cesium.pixelData.size()); + image.pAsset->pixelData.size()); CesiumGltf::Sampler& sampler = model.samplers.emplace_back(); sampler.wrapS = CesiumGltf::Sampler::WrapS::CLAMP_TO_EDGE; diff --git a/Source/CesiumRuntime/Private/Tests/CesiumLoadTestCore.cpp b/Source/CesiumRuntime/Private/Tests/CesiumLoadTestCore.cpp index efdc27401..27143740d 100644 --- a/Source/CesiumRuntime/Private/Tests/CesiumLoadTestCore.cpp +++ b/Source/CesiumRuntime/Private/Tests/CesiumLoadTestCore.cpp @@ -15,35 +15,15 @@ namespace Cesium { -struct LoadTestContext { - FString testName; - std::vector testPasses; - - SceneGenerationContext creationContext; - SceneGenerationContext playContext; - - float cameraFieldOfView = 90.0f; - - ReportCallback reportStep; - - void reset() { - testName.Reset(); - testPasses.clear(); - creationContext = playContext = SceneGenerationContext(); - reportStep = nullptr; - } -}; +void LoadTestContext::reset() { + testName.Reset(); + testPasses.clear(); + creationContext = playContext = SceneGenerationContext(); + reportStep = nullptr; +} LoadTestContext gLoadTestContext; -DEFINE_LATENT_AUTOMATION_COMMAND_THREE_PARAMETER( - TimeLoadingCommand, - FString, - loggingName, - SceneGenerationContext&, - playContext, - TestPass&, - pass); bool TimeLoadingCommand::Update() { if (!pass.testInProgress) { @@ -75,41 +55,49 @@ bool TimeLoadingCommand::Update() { bool tilesetsloaded = playContext.areTilesetsDoneLoading(); bool timedOut = pass.elapsedTime >= testTimeout; - if (tilesetsloaded || timedOut) { - pass.endMark = timeMark; - UE_LOG(LogCesium, Display, TEXT("-- Load end mark -- %s"), *loggingName); + if (timedOut) { + UE_LOG( + LogCesium, + Error, + TEXT("TIMED OUT: Loading stopped after %.2f seconds"), + pass.elapsedTime); + // Command is done + pass.testInProgress = false; + return true; + } - if (timedOut) { - UE_LOG( - LogCesium, - Error, - TEXT("TIMED OUT: Loading stopped after %.2f seconds"), - pass.elapsedTime); - } else { + if (tilesetsloaded) { + // Run verify step as part of timing + // This is useful for running additional logic after a load, or if the step + // exists in the pass solely, timing very specific functionality (like + // terrain queries) + bool verifyComplete = true; + if (pass.verifyStep) + verifyComplete = + pass.verifyStep(creationContext, playContext, pass.optionalParameter); + + if (verifyComplete) { + pass.endMark = FPlatformTime::Seconds(); + UE_LOG(LogCesium, Display, TEXT("-- Load end mark -- %s"), *loggingName); + + pass.elapsedTime = pass.endMark - pass.startMark; UE_LOG( LogCesium, Display, - TEXT("Tileset load completed in %.2f seconds"), + TEXT("Pass completed in %.2f seconds"), pass.elapsedTime); - } - if (pass.verifyStep) - pass.verifyStep(playContext, pass.optionalParameter); + pass.testInProgress = false; - pass.testInProgress = false; - - // Command is done - return true; + // Command is done + return true; + } } // Let world tick, we'll come back to this command return false; } -DEFINE_LATENT_AUTOMATION_COMMAND_ONE_PARAMETER( - LoadTestScreenshotCommand, - FString, - screenshotName); bool LoadTestScreenshotCommand::Update() { UE_LOG( LogCesium, @@ -139,10 +127,6 @@ void defaultReportStep(const std::vector& testPasses) { UE_LOG(LogCesium, Display, TEXT("%s"), *reportStr); } -DEFINE_LATENT_AUTOMATION_COMMAND_ONE_PARAMETER( - TestCleanupCommand, - LoadTestContext&, - context); bool TestCleanupCommand::Update() { // Tag the fastest pass if (context.testPasses.size() > 0) { @@ -163,17 +147,9 @@ bool TestCleanupCommand::Update() { else defaultReportStep(context.testPasses); - // Turn on the editor tileset updates so we can see what we loaded - // gLoadTestContext.creationContext.setSuspendUpdate(false); return true; } -DEFINE_LATENT_AUTOMATION_COMMAND_TWO_PARAMETER( - InitForPlayWhenReady, - SceneGenerationContext&, - creationContext, - SceneGenerationContext&, - playContext); bool InitForPlayWhenReady::Update() { if (!GEditor || !GEditor->IsPlayingSessionInEditor()) return false; @@ -246,8 +222,11 @@ bool RunLoadTest( // Do our timing capture FString loggingName = testName + "-" + pass.name; - ADD_LATENT_AUTOMATION_COMMAND( - TimeLoadingCommand(loggingName, context.playContext, pass)); + ADD_LATENT_AUTOMATION_COMMAND(TimeLoadingCommand( + loggingName, + context.creationContext, + context.playContext, + pass)); ADD_LATENT_AUTOMATION_COMMAND(FWaitLatentCommand(1.0f)); diff --git a/Source/CesiumRuntime/Private/Tests/CesiumLoadTestCore.h b/Source/CesiumRuntime/Private/Tests/CesiumLoadTestCore.h index ee5188b0d..64f428426 100644 --- a/Source/CesiumRuntime/Private/Tests/CesiumLoadTestCore.h +++ b/Source/CesiumRuntime/Private/Tests/CesiumLoadTestCore.h @@ -5,31 +5,28 @@ #if WITH_EDITOR #include -#include +#include #include "CesiumSceneGeneration.h" +#include "CesiumTestPass.h" +#include "Tests/AutomationCommon.h" namespace Cesium { +typedef std::function&)> ReportCallback; -struct TestPass { - typedef std::variant TestingParameter; - typedef std::function - PassCallback; +struct LoadTestContext { + FString testName; + std::vector testPasses; - FString name; - PassCallback setupStep; - PassCallback verifyStep; - TestingParameter optionalParameter; + SceneGenerationContext creationContext; + SceneGenerationContext playContext; - bool testInProgress = false; - double startMark = 0; - double endMark = 0; - double elapsedTime = 0; + float cameraFieldOfView = 90.0f; - bool isFastest = false; -}; + ReportCallback reportStep; -typedef std::function&)> ReportCallback; + void reset(); +}; bool RunLoadTest( const FString& testName, @@ -39,6 +36,34 @@ bool RunLoadTest( int viewportHeight, ReportCallback optionalReportStep = nullptr); +DEFINE_LATENT_AUTOMATION_COMMAND_FOUR_PARAMETER( + TimeLoadingCommand, + FString, + loggingName, + SceneGenerationContext&, + creationContext, + SceneGenerationContext&, + playContext, + TestPass&, + pass); + +DEFINE_LATENT_AUTOMATION_COMMAND_ONE_PARAMETER( + LoadTestScreenshotCommand, + FString, + screenshotName); + +DEFINE_LATENT_AUTOMATION_COMMAND_ONE_PARAMETER( + TestCleanupCommand, + LoadTestContext&, + context); + +DEFINE_LATENT_AUTOMATION_COMMAND_TWO_PARAMETER( + InitForPlayWhenReady, + SceneGenerationContext&, + creationContext, + SceneGenerationContext&, + playContext); + }; // namespace Cesium #endif diff --git a/Source/CesiumRuntime/Private/Tests/CesiumMetadataPickingBlueprintLibrary.spec.cpp b/Source/CesiumRuntime/Private/Tests/CesiumMetadataPickingBlueprintLibrary.spec.cpp index a63f57194..099c59381 100644 --- a/Source/CesiumRuntime/Private/Tests/CesiumMetadataPickingBlueprintLibrary.spec.cpp +++ b/Source/CesiumRuntime/Private/Tests/CesiumMetadataPickingBlueprintLibrary.spec.cpp @@ -1,5 +1,6 @@ // Copyright 2020-2024 CesiumGS, Inc. and Contributors +#include "CesiumMetadataPickingBlueprintLibrary.h" #include "CesiumGltf/ExtensionExtMeshFeatures.h" #include "CesiumGltf/ExtensionMeshPrimitiveExtStructuralMetadata.h" #include "CesiumGltf/ExtensionModelExtStructuralMetadata.h" @@ -7,23 +8,22 @@ #include "CesiumGltfComponent.h" #include "CesiumGltfPrimitiveComponent.h" #include "CesiumGltfSpecUtility.h" -#include "CesiumMetadataPickingBlueprintLibrary.h" #include "Misc/AutomationTest.h" -using namespace CesiumGltf; - BEGIN_DEFINE_SPEC( FCesiumMetadataPickingSpec, "Cesium.Unit.MetadataPicking", - EAutomationTestFlags::ApplicationContextMask | + EAutomationTestFlags::EditorContext | EAutomationTestFlags::ClientContext | + EAutomationTestFlags::ServerContext | + EAutomationTestFlags::CommandletContext | EAutomationTestFlags::ProductFilter) -Model model; -MeshPrimitive* pPrimitive; -ExtensionExtMeshFeatures* pMeshFeatures; -ExtensionModelExtStructuralMetadata* pModelMetadata; -ExtensionMeshPrimitiveExtStructuralMetadata* pPrimitiveMetadata; -PropertyTable* pPropertyTable; -PropertyTexture* pPropertyTexture; +CesiumGltf::Model model; +CesiumGltf::MeshPrimitive* pPrimitive; +CesiumGltf::ExtensionExtMeshFeatures* pMeshFeatures; +CesiumGltf::ExtensionModelExtStructuralMetadata* pModelMetadata; +CesiumGltf::ExtensionMeshPrimitiveExtStructuralMetadata* pPrimitiveMetadata; +CesiumGltf::PropertyTable* pPropertyTable; +CesiumGltf::PropertyTexture* pPropertyTexture; TObjectPtr pModelComponent; TObjectPtr pPrimitiveComponent; END_DEFINE_SPEC(FCesiumMetadataPickingSpec) @@ -31,8 +31,8 @@ END_DEFINE_SPEC(FCesiumMetadataPickingSpec) void FCesiumMetadataPickingSpec::Define() { Describe("FindUVFromHit", [this]() { BeforeEach([this]() { - model = Model(); - Mesh& mesh = model.meshes.emplace_back(); + model = CesiumGltf::Model(); + CesiumGltf::Mesh& mesh = model.meshes.emplace_back(); pPrimitive = &mesh.primitives.emplace_back(); pPrimitive->mode = CesiumGltf::MeshPrimitive::Mode::TRIANGLES; pPrimitiveComponent = NewObject(); @@ -50,8 +50,8 @@ void FCesiumMetadataPickingSpec::Define() { model, *pPrimitive, "POSITION", - AccessorSpec::Type::VEC3, - AccessorSpec::ComponentType::FLOAT, + CesiumGltf::AccessorSpec::Type::VEC3, + CesiumGltf::AccessorSpec::ComponentType::FLOAT, positions); int32_t positionAccessorIndex = static_cast(model.accessors.size() - 1); @@ -70,23 +70,24 @@ void FCesiumMetadataPickingSpec::Define() { model, *pPrimitive, "TEXCOORD_0", - AccessorSpec::Type::VEC2, - AccessorSpec::ComponentType::FLOAT, + CesiumGltf::AccessorSpec::Type::VEC2, + CesiumGltf::AccessorSpec::ComponentType::FLOAT, texCoords); CesiumPrimitiveData& primData = pPrimitiveComponent->getPrimitiveData(); primData.PositionAccessor = - AccessorView(model, positionAccessorIndex); + CesiumGltf::AccessorView(model, positionAccessorIndex); primData.TexCoordAccessorMap.emplace( 0, - AccessorView>( + CesiumGltf::AccessorView>( model, static_cast(model.accessors.size() - 1))); }); It("returns false if hit has no valid component", [this]() { FHitResult Hit; - Hit.Location = FVector_NetQuantize(0, -1, 0); + Hit.Location = FVector_NetQuantize(0, -1, 0) * + CesiumPrimitiveData::positionScaleFactor; Hit.FaceIndex = 0; Hit.Component = nullptr; @@ -98,7 +99,8 @@ void FCesiumMetadataPickingSpec::Define() { It("returns false if specified texcoord set does not exist", [this]() { FHitResult Hit; - Hit.Location = FVector_NetQuantize(0, -1, 0); + Hit.Location = FVector_NetQuantize(0, -1, 0) * + CesiumPrimitiveData::positionScaleFactor; Hit.FaceIndex = 0; Hit.Component = pPrimitiveComponent; @@ -110,7 +112,8 @@ void FCesiumMetadataPickingSpec::Define() { It("gets hit for primitive without indices", [this]() { FHitResult Hit; - Hit.Location = FVector_NetQuantize(0, -1, 0); + Hit.Location = FVector_NetQuantize(0, -1, 0) * + CesiumPrimitiveData::positionScaleFactor; Hit.FaceIndex = 0; Hit.Component = pPrimitiveComponent; @@ -121,7 +124,8 @@ void FCesiumMetadataPickingSpec::Define() { TestTrue("UV at point (X)", FMath::IsNearlyEqual(UV[0], 0.0)); TestTrue("UV at point (Y)", FMath::IsNearlyEqual(UV[1], 1.0)); - Hit.Location = FVector_NetQuantize(0, -0.5, 0); + Hit.Location = FVector_NetQuantize(0, -0.5, 0) * + CesiumPrimitiveData::positionScaleFactor; TestTrue( "found hit", UCesiumMetadataPickingBlueprintLibrary::FindUVFromHit(Hit, 0, UV)); @@ -133,7 +137,8 @@ void FCesiumMetadataPickingSpec::Define() { FMath::IsNearlyEqual(UV[1], 0.5)); Hit.FaceIndex = 1; - Hit.Location = FVector_NetQuantize(0, -4, 0); + Hit.Location = FVector_NetQuantize(0, -4, 0) * + CesiumPrimitiveData::positionScaleFactor; TestTrue( "found hit", UCesiumMetadataPickingBlueprintLibrary::FindUVFromHit(Hit, 0, UV)); @@ -147,16 +152,17 @@ void FCesiumMetadataPickingSpec::Define() { CreateIndicesForPrimitive( model, *pPrimitive, - AccessorSpec::ComponentType::UNSIGNED_BYTE, + CesiumGltf::AccessorSpec::ComponentType::UNSIGNED_BYTE, indices); CesiumPrimitiveData& primData = pPrimitiveComponent->getPrimitiveData(); - primData.IndexAccessor = AccessorView( + primData.IndexAccessor = CesiumGltf::AccessorView( model, static_cast(model.accessors.size() - 1)); FHitResult Hit; - Hit.Location = FVector_NetQuantize(0, -4, 0); + Hit.Location = FVector_NetQuantize(0, -4, 0) * + CesiumPrimitiveData::positionScaleFactor; Hit.FaceIndex = 0; Hit.Component = pPrimitiveComponent; @@ -168,7 +174,8 @@ void FCesiumMetadataPickingSpec::Define() { TestTrue("UV at point (X)", FMath::IsNearlyEqual(UV[0], 0.0)); TestTrue("UV at point (Y)", FMath::IsNearlyEqual(UV[1], 1.0)); - Hit.Location = FVector_NetQuantize(0, -3.5, 0); + Hit.Location = FVector_NetQuantize(0, -3.5, 0) * + CesiumPrimitiveData::positionScaleFactor; TestTrue( "found hit", UCesiumMetadataPickingBlueprintLibrary::FindUVFromHit(Hit, 0, UV)); @@ -180,7 +187,8 @@ void FCesiumMetadataPickingSpec::Define() { FMath::IsNearlyEqual(UV[1], 0.5)); Hit.FaceIndex = 1; - Hit.Location = FVector_NetQuantize(0, -1, 0); + Hit.Location = FVector_NetQuantize(0, -1, 0) * + CesiumPrimitiveData::positionScaleFactor; TestTrue( "found hit", UCesiumMetadataPickingBlueprintLibrary::FindUVFromHit(Hit, 0, UV)); @@ -191,10 +199,10 @@ void FCesiumMetadataPickingSpec::Define() { Describe("GetPropertyTableValuesFromHit", [this]() { BeforeEach([this]() { - model = Model(); - Mesh& mesh = model.meshes.emplace_back(); + model = CesiumGltf::Model(); + CesiumGltf::Mesh& mesh = model.meshes.emplace_back(); pPrimitive = &mesh.primitives.emplace_back(); - pPrimitive->mode = MeshPrimitive::Mode::TRIANGLES; + pPrimitive->mode = CesiumGltf::MeshPrimitive::Mode::TRIANGLES; // Two disconnected triangles. std::vector positions{ @@ -211,13 +219,15 @@ void FCesiumMetadataPickingSpec::Define() { model, *pPrimitive, "POSITION", - AccessorSpec::Type::VEC3, - AccessorSpec::ComponentType::FLOAT, + CesiumGltf::AccessorSpec::Type::VEC3, + CesiumGltf::AccessorSpec::ComponentType::FLOAT, std::move(positionData)); - pMeshFeatures = &pPrimitive->addExtension(); + pMeshFeatures = + &pPrimitive->addExtension(); pModelMetadata = - &model.addExtension(); + &model + .addExtension(); std::string className = "testClass"; pModelMetadata->schema.emplace(); @@ -240,13 +250,13 @@ void FCesiumMetadataPickingSpec::Define() { static_cast(model.accessors.size() - 1); std::vector featureIDs{0, 0, 0, 1, 1, 1}; - FeatureId& featureId = + CesiumGltf::FeatureId& featureId = AddFeatureIDsAsAttributeToModel(model, *pPrimitive, featureIDs, 2, 0); featureId.propertyTable = static_cast(pModelMetadata->propertyTables.size() - 1); CesiumPrimitiveData& primData = pPrimitiveComponent->getPrimitiveData(); primData.PositionAccessor = - AccessorView(model, positionAccessorIndex); + CesiumGltf::AccessorView(model, positionAccessorIndex); std::vector scalarValues{1, 2}; pPropertyTable->count = static_cast(scalarValues.size()); @@ -255,8 +265,8 @@ void FCesiumMetadataPickingSpec::Define() { model, *pPropertyTable, scalarPropertyName, - ClassProperty::Type::SCALAR, - ClassProperty::ComponentType::INT32, + CesiumGltf::ClassProperty::Type::SCALAR, + CesiumGltf::ClassProperty::ComponentType::INT32, scalarValues); pModelComponent->Metadata = FCesiumModelMetadata(model, *pModelMetadata); @@ -278,14 +288,14 @@ void FCesiumMetadataPickingSpec::Define() { static_cast(model.accessors.size() - 1); std::vector featureIDs{0, 0, 0, 1, 1, 1}; - FeatureId& featureId = + CesiumGltf::FeatureId& featureId = AddFeatureIDsAsAttributeToModel(model, *pPrimitive, featureIDs, 2, 0); featureId.propertyTable = static_cast(pModelMetadata->propertyTables.size() - 1); CesiumPrimitiveData& primData = pPrimitiveComponent->getPrimitiveData(); primData.PositionAccessor = - AccessorView(model, positionAccessorIndex); + CesiumGltf::AccessorView(model, positionAccessorIndex); std::vector scalarValues{1, 2}; pPropertyTable->count = static_cast(scalarValues.size()); @@ -294,8 +304,8 @@ void FCesiumMetadataPickingSpec::Define() { model, *pPropertyTable, scalarPropertyName, - ClassProperty::Type::SCALAR, - ClassProperty::ComponentType::INT32, + CesiumGltf::ClassProperty::Type::SCALAR, + CesiumGltf::ClassProperty::ComponentType::INT32, scalarValues); pModelComponent->Metadata = FCesiumModelMetadata(model, *pModelMetadata); @@ -332,7 +342,7 @@ void FCesiumMetadataPickingSpec::Define() { CesiumPrimitiveData& primData = pPrimitiveComponent->getPrimitiveData(); primData.PositionAccessor = - AccessorView(model, positionAccessorIndex); + CesiumGltf::AccessorView(model, positionAccessorIndex); std::vector scalarValues{1, 2}; pPropertyTable->count = static_cast(scalarValues.size()); @@ -341,8 +351,8 @@ void FCesiumMetadataPickingSpec::Define() { model, *pPropertyTable, scalarPropertyName, - ClassProperty::Type::SCALAR, - ClassProperty::ComponentType::INT32, + CesiumGltf::ClassProperty::Type::SCALAR, + CesiumGltf::ClassProperty::ComponentType::INT32, scalarValues); std::vector vec2Values{ @@ -353,8 +363,8 @@ void FCesiumMetadataPickingSpec::Define() { model, *pPropertyTable, vec2PropertyName, - ClassProperty::Type::VEC2, - ClassProperty::ComponentType::FLOAT32, + CesiumGltf::ClassProperty::Type::VEC2, + CesiumGltf::ClassProperty::ComponentType::FLOAT32, vec2Values); pModelComponent->Metadata = @@ -376,14 +386,14 @@ void FCesiumMetadataPickingSpec::Define() { static_cast(model.accessors.size() - 1); std::vector featureIDs{0, 0, 0, 1, 1, 1}; - FeatureId& featureId = + CesiumGltf::FeatureId& featureId = AddFeatureIDsAsAttributeToModel(model, *pPrimitive, featureIDs, 2, 0); featureId.propertyTable = static_cast(pModelMetadata->propertyTables.size() - 1); CesiumPrimitiveData& primData = pPrimitiveComponent->getPrimitiveData(); primData.PositionAccessor = - AccessorView(model, positionAccessorIndex); + CesiumGltf::AccessorView(model, positionAccessorIndex); std::vector scalarValues{1, 2}; pPropertyTable->count = static_cast(scalarValues.size()); @@ -392,8 +402,8 @@ void FCesiumMetadataPickingSpec::Define() { model, *pPropertyTable, scalarPropertyName, - ClassProperty::Type::SCALAR, - ClassProperty::ComponentType::INT32, + CesiumGltf::ClassProperty::Type::SCALAR, + CesiumGltf::ClassProperty::ComponentType::INT32, scalarValues); std::vector vec2Values{ @@ -404,8 +414,8 @@ void FCesiumMetadataPickingSpec::Define() { model, *pPropertyTable, vec2PropertyName, - ClassProperty::Type::VEC2, - ClassProperty::ComponentType::FLOAT32, + CesiumGltf::ClassProperty::Type::VEC2, + CesiumGltf::ClassProperty::ComponentType::FLOAT32, vec2Values); pModelComponent->Metadata = FCesiumModelMetadata(model, *pModelMetadata); @@ -461,14 +471,14 @@ void FCesiumMetadataPickingSpec::Define() { static_cast(model.accessors.size() - 1); std::vector featureIDs0{1, 1, 1, 0, 0, 0}; - FeatureId& featureId0 = AddFeatureIDsAsAttributeToModel( + CesiumGltf::FeatureId& featureId0 = AddFeatureIDsAsAttributeToModel( model, *pPrimitive, featureIDs0, 2, 0); std::vector featureIDs1{0, 0, 0, 1, 1, 1}; - FeatureId& featureId1 = AddFeatureIDsAsAttributeToModel( + CesiumGltf::FeatureId& featureId1 = AddFeatureIDsAsAttributeToModel( model, *pPrimitive, featureIDs1, @@ -479,7 +489,7 @@ void FCesiumMetadataPickingSpec::Define() { CesiumPrimitiveData& primData = pPrimitiveComponent->getPrimitiveData(); primData.PositionAccessor = - AccessorView(model, positionAccessorIndex); + CesiumGltf::AccessorView(model, positionAccessorIndex); std::vector scalarValues{1, 2}; pPropertyTable->count = static_cast(scalarValues.size()); @@ -488,8 +498,8 @@ void FCesiumMetadataPickingSpec::Define() { model, *pPropertyTable, scalarPropertyName, - ClassProperty::Type::SCALAR, - ClassProperty::ComponentType::INT32, + CesiumGltf::ClassProperty::Type::SCALAR, + CesiumGltf::ClassProperty::ComponentType::INT32, scalarValues); std::vector vec2Values{ @@ -500,8 +510,8 @@ void FCesiumMetadataPickingSpec::Define() { model, *pPropertyTable, vec2PropertyName, - ClassProperty::Type::VEC2, - ClassProperty::ComponentType::FLOAT32, + CesiumGltf::ClassProperty::Type::VEC2, + CesiumGltf::ClassProperty::ComponentType::FLOAT32, vec2Values); pModelComponent->Metadata = FCesiumModelMetadata(model, *pModelMetadata); @@ -554,10 +564,10 @@ void FCesiumMetadataPickingSpec::Define() { Describe("GetPropertyTextureValuesFromHit", [this]() { BeforeEach([this]() { - model = Model(); - Mesh& mesh = model.meshes.emplace_back(); + model = CesiumGltf::Model(); + CesiumGltf::Mesh& mesh = model.meshes.emplace_back(); pPrimitive = &mesh.primitives.emplace_back(); - pPrimitive->mode = MeshPrimitive::Mode::TRIANGLES; + pPrimitive->mode = CesiumGltf::MeshPrimitive::Mode::TRIANGLES; std::vector positions{ glm::vec3(-1, 0, 0), @@ -572,8 +582,8 @@ void FCesiumMetadataPickingSpec::Define() { model, *pPrimitive, "POSITION", - AccessorSpec::Type::VEC3, - AccessorSpec::ComponentType::FLOAT, + CesiumGltf::AccessorSpec::Type::VEC3, + CesiumGltf::AccessorSpec::ComponentType::FLOAT, GetValuesAsBytes(positions)); int32_t positionAccessorIndex = @@ -594,12 +604,13 @@ void FCesiumMetadataPickingSpec::Define() { model, *pPrimitive, "TEXCOORD_0", - AccessorSpec::Type::VEC2, - AccessorSpec::ComponentType::FLOAT, + CesiumGltf::AccessorSpec::Type::VEC2, + CesiumGltf::AccessorSpec::ComponentType::FLOAT, texCoords0); pModelMetadata = - &model.addExtension(); + &model + .addExtension(); std::string className = "testClass"; pModelMetadata->schema.emplace(); @@ -608,9 +619,8 @@ void FCesiumMetadataPickingSpec::Define() { pPropertyTexture = &pModelMetadata->propertyTextures.emplace_back(); pPropertyTexture->classProperty = className; - pPrimitiveMetadata = - &pPrimitive - ->addExtension(); + pPrimitiveMetadata = &pPrimitive->addExtension< + CesiumGltf::ExtensionMeshPrimitiveExtStructuralMetadata>(); pPrimitiveMetadata->propertyTextures.push_back(0); pModelComponent = NewObject(); @@ -624,10 +634,10 @@ void FCesiumMetadataPickingSpec::Define() { CesiumPrimitiveData& primData = pPrimitiveComponent->getPrimitiveData(); primData.pMeshPrimitive = pPrimitive; primData.PositionAccessor = - AccessorView(model, positionAccessorIndex); + CesiumGltf::AccessorView(model, positionAccessorIndex); primData.TexCoordAccessorMap.emplace( 0, - AccessorView>( + CesiumGltf::AccessorView>( model, static_cast(model.accessors.size() - 1))); }); @@ -639,8 +649,8 @@ void FCesiumMetadataPickingSpec::Define() { model, *pPropertyTexture, scalarPropertyName, - ClassProperty::Type::SCALAR, - ClassProperty::ComponentType::INT8, + CesiumGltf::ClassProperty::Type::SCALAR, + CesiumGltf::ClassProperty::ComponentType::INT8, scalarValues, {0}); @@ -667,8 +677,8 @@ void FCesiumMetadataPickingSpec::Define() { model, *pPropertyTexture, scalarPropertyName, - ClassProperty::Type::SCALAR, - ClassProperty::ComponentType::INT8, + CesiumGltf::ClassProperty::Type::SCALAR, + CesiumGltf::ClassProperty::ComponentType::INT8, scalarValues, {0}); @@ -702,8 +712,8 @@ void FCesiumMetadataPickingSpec::Define() { model, *pPropertyTexture, scalarPropertyName, - ClassProperty::Type::SCALAR, - ClassProperty::ComponentType::INT8, + CesiumGltf::ClassProperty::Type::SCALAR, + CesiumGltf::ClassProperty::ComponentType::INT8, scalarValues, {0}); @@ -733,8 +743,8 @@ void FCesiumMetadataPickingSpec::Define() { model, *pPropertyTexture, scalarPropertyName, - ClassProperty::Type::SCALAR, - ClassProperty::ComponentType::INT8, + CesiumGltf::ClassProperty::Type::SCALAR, + CesiumGltf::ClassProperty::ComponentType::INT8, scalarValues, {0}); @@ -748,8 +758,8 @@ void FCesiumMetadataPickingSpec::Define() { model, *pPropertyTexture, vec2PropertyName, - ClassProperty::Type::VEC2, - ClassProperty::ComponentType::UINT8, + CesiumGltf::ClassProperty::Type::VEC2, + CesiumGltf::ClassProperty::ComponentType::UINT8, vec2Values, {0, 1}); @@ -778,7 +788,8 @@ void FCesiumMetadataPickingSpec::Define() { FVector2D(vec2Values[0][0], vec2Values[0][1])}; for (size_t i = 0; i < locations.size(); i++) { - Hit.Location = locations[i]; + Hit.Location = + locations[i] * CesiumPrimitiveData::positionScaleFactor; const auto values = UCesiumMetadataPickingBlueprintLibrary:: GetPropertyTextureValuesFromHit(Hit); @@ -822,13 +833,13 @@ void FCesiumMetadataPickingSpec::Define() { model, *pPropertyTexture, scalarPropertyName, - ClassProperty::Type::SCALAR, - ClassProperty::ComponentType::INT8, + CesiumGltf::ClassProperty::Type::SCALAR, + CesiumGltf::ClassProperty::ComponentType::INT8, scalarValues, {0}); // Make another property texture - PropertyTexture& propertyTexture = + CesiumGltf::PropertyTexture& propertyTexture = pModelMetadata->propertyTextures.emplace_back(); propertyTexture.classProperty = "testClass"; std::array newScalarValues = {100, -20, 33, -4}; @@ -836,8 +847,8 @@ void FCesiumMetadataPickingSpec::Define() { model, propertyTexture, scalarPropertyName, - ClassProperty::Type::SCALAR, - ClassProperty::ComponentType::INT8, + CesiumGltf::ClassProperty::Type::SCALAR, + CesiumGltf::ClassProperty::ComponentType::INT8, newScalarValues, {0}); @@ -861,7 +872,7 @@ void FCesiumMetadataPickingSpec::Define() { newScalarValues[2], newScalarValues[0]}; for (size_t i = 0; i < locations.size(); i++) { - Hit.Location = locations[i]; + Hit.Location = locations[i] * CesiumPrimitiveData::positionScaleFactor; const auto values = UCesiumMetadataPickingBlueprintLibrary:: GetPropertyTextureValuesFromHit(Hit, 1); @@ -888,8 +899,8 @@ void FCesiumMetadataPickingSpec::Define() { Describe("Deprecated", [this]() { Describe("GetMetadataValuesForFace", [this]() { BeforeEach([this]() { - model = Model(); - Mesh& mesh = model.meshes.emplace_back(); + model = CesiumGltf::Model(); + CesiumGltf::Mesh& mesh = model.meshes.emplace_back(); pPrimitive = &mesh.primitives.emplace_back(); // Two disconnected triangles. @@ -908,13 +919,14 @@ void FCesiumMetadataPickingSpec::Define() { model, *pPrimitive, "POSITION", - AccessorSpec::Type::VEC3, - AccessorSpec::ComponentType::FLOAT, + CesiumGltf::AccessorSpec::Type::VEC3, + CesiumGltf::AccessorSpec::ComponentType::FLOAT, std::move(positionData)); - pMeshFeatures = &pPrimitive->addExtension(); - pModelMetadata = - &model.addExtension(); + pMeshFeatures = + &pPrimitive->addExtension(); + pModelMetadata = &model.addExtension< + CesiumGltf::ExtensionModelExtStructuralMetadata>(); std::string className = "testClass"; pModelMetadata->schema.emplace(); @@ -935,7 +947,7 @@ void FCesiumMetadataPickingSpec::Define() { It("returns empty map for invalid face index", [this]() { std::vector featureIDs{0, 0, 0, 1, 1, 1}; - FeatureId& featureId = AddFeatureIDsAsAttributeToModel( + CesiumGltf::FeatureId& featureId = AddFeatureIDsAsAttributeToModel( model, *pPrimitive, featureIDs, @@ -951,8 +963,8 @@ void FCesiumMetadataPickingSpec::Define() { model, *pPropertyTable, scalarPropertyName, - ClassProperty::Type::SCALAR, - ClassProperty::ComponentType::INT32, + CesiumGltf::ClassProperty::Type::SCALAR, + CesiumGltf::ClassProperty::ComponentType::INT32, scalarValues); pModelComponent->Metadata = @@ -978,7 +990,7 @@ void FCesiumMetadataPickingSpec::Define() { It("returns empty map for invalid feature ID set index", [this]() { std::vector featureIDs{0, 0, 0, 1, 1, 1}; - FeatureId& featureId = AddFeatureIDsAsAttributeToModel( + CesiumGltf::FeatureId& featureId = AddFeatureIDsAsAttributeToModel( model, *pPrimitive, featureIDs, @@ -994,8 +1006,8 @@ void FCesiumMetadataPickingSpec::Define() { model, *pPropertyTable, scalarPropertyName, - ClassProperty::Type::SCALAR, - ClassProperty::ComponentType::INT32, + CesiumGltf::ClassProperty::Type::SCALAR, + CesiumGltf::ClassProperty::ComponentType::INT32, scalarValues); pModelComponent->Metadata = @@ -1038,8 +1050,8 @@ void FCesiumMetadataPickingSpec::Define() { model, *pPropertyTable, scalarPropertyName, - ClassProperty::Type::SCALAR, - ClassProperty::ComponentType::INT32, + CesiumGltf::ClassProperty::Type::SCALAR, + CesiumGltf::ClassProperty::ComponentType::INT32, scalarValues); std::vector vec2Values{ @@ -1050,8 +1062,8 @@ void FCesiumMetadataPickingSpec::Define() { model, *pPropertyTable, vec2PropertyName, - ClassProperty::Type::VEC2, - ClassProperty::ComponentType::FLOAT32, + CesiumGltf::ClassProperty::Type::VEC2, + CesiumGltf::ClassProperty::ComponentType::FLOAT32, vec2Values); pModelComponent->Metadata = @@ -1070,7 +1082,7 @@ void FCesiumMetadataPickingSpec::Define() { It("returns values for first feature ID set by default", [this]() { std::vector featureIDs{0, 0, 0, 1, 1, 1}; - FeatureId& featureId = AddFeatureIDsAsAttributeToModel( + CesiumGltf::FeatureId& featureId = AddFeatureIDsAsAttributeToModel( model, *pPrimitive, featureIDs, @@ -1086,8 +1098,8 @@ void FCesiumMetadataPickingSpec::Define() { model, *pPropertyTable, scalarPropertyName, - ClassProperty::Type::SCALAR, - ClassProperty::ComponentType::INT32, + CesiumGltf::ClassProperty::Type::SCALAR, + CesiumGltf::ClassProperty::ComponentType::INT32, scalarValues); std::vector vec2Values{ @@ -1098,8 +1110,8 @@ void FCesiumMetadataPickingSpec::Define() { model, *pPropertyTable, vec2PropertyName, - ClassProperty::Type::VEC2, - ClassProperty::ComponentType::FLOAT32, + CesiumGltf::ClassProperty::Type::VEC2, + CesiumGltf::ClassProperty::ComponentType::FLOAT32, vec2Values); pModelComponent->Metadata = @@ -1150,14 +1162,14 @@ void FCesiumMetadataPickingSpec::Define() { It("returns values for specified feature ID set", [this]() { std::vector featureIDs0{1, 1, 1, 0, 0, 0}; - FeatureId& featureId0 = AddFeatureIDsAsAttributeToModel( + CesiumGltf::FeatureId& featureId0 = AddFeatureIDsAsAttributeToModel( model, *pPrimitive, featureIDs0, 2, 0); std::vector featureIDs1{0, 0, 0, 1, 1, 1}; - FeatureId& featureId1 = AddFeatureIDsAsAttributeToModel( + CesiumGltf::FeatureId& featureId1 = AddFeatureIDsAsAttributeToModel( model, *pPrimitive, featureIDs1, @@ -1173,8 +1185,8 @@ void FCesiumMetadataPickingSpec::Define() { model, *pPropertyTable, scalarPropertyName, - ClassProperty::Type::SCALAR, - ClassProperty::ComponentType::INT32, + CesiumGltf::ClassProperty::Type::SCALAR, + CesiumGltf::ClassProperty::ComponentType::INT32, scalarValues); std::vector vec2Values{ @@ -1185,8 +1197,8 @@ void FCesiumMetadataPickingSpec::Define() { model, *pPropertyTable, vec2PropertyName, - ClassProperty::Type::VEC2, - ClassProperty::ComponentType::FLOAT32, + CesiumGltf::ClassProperty::Type::VEC2, + CesiumGltf::ClassProperty::ComponentType::FLOAT32, vec2Values); pModelComponent->Metadata = @@ -1233,8 +1245,8 @@ void FCesiumMetadataPickingSpec::Define() { Describe("GetMetadataValuesForFaceAsStrings", [this]() { BeforeEach([this]() { - model = Model(); - Mesh& mesh = model.meshes.emplace_back(); + model = CesiumGltf::Model(); + CesiumGltf::Mesh& mesh = model.meshes.emplace_back(); pPrimitive = &mesh.primitives.emplace_back(); // Two disconnected triangles. @@ -1253,13 +1265,14 @@ void FCesiumMetadataPickingSpec::Define() { model, *pPrimitive, "POSITION", - AccessorSpec::Type::VEC3, - AccessorSpec::ComponentType::FLOAT, + CesiumGltf::AccessorSpec::Type::VEC3, + CesiumGltf::AccessorSpec::ComponentType::FLOAT, std::move(positionData)); - pMeshFeatures = &pPrimitive->addExtension(); - pModelMetadata = - &model.addExtension(); + pMeshFeatures = + &pPrimitive->addExtension(); + pModelMetadata = &model.addExtension< + CesiumGltf::ExtensionModelExtStructuralMetadata>(); std::string className = "testClass"; pModelMetadata->schema.emplace(); @@ -1280,7 +1293,7 @@ void FCesiumMetadataPickingSpec::Define() { It("returns values for first feature ID set by default", [this]() { std::vector featureIDs{0, 0, 0, 1, 1, 1}; - FeatureId& featureId = AddFeatureIDsAsAttributeToModel( + CesiumGltf::FeatureId& featureId = AddFeatureIDsAsAttributeToModel( model, *pPrimitive, featureIDs, @@ -1296,8 +1309,8 @@ void FCesiumMetadataPickingSpec::Define() { model, *pPropertyTable, scalarPropertyName, - ClassProperty::Type::SCALAR, - ClassProperty::ComponentType::INT32, + CesiumGltf::ClassProperty::Type::SCALAR, + CesiumGltf::ClassProperty::ComponentType::INT32, scalarValues); std::vector vec2Values{ @@ -1308,8 +1321,8 @@ void FCesiumMetadataPickingSpec::Define() { model, *pPropertyTable, vec2PropertyName, - ClassProperty::Type::VEC2, - ClassProperty::ComponentType::FLOAT32, + CesiumGltf::ClassProperty::Type::VEC2, + CesiumGltf::ClassProperty::ComponentType::FLOAT32, vec2Values); pModelComponent->Metadata = diff --git a/Source/CesiumRuntime/Private/Tests/CesiumMetadataValue.spec.cpp b/Source/CesiumRuntime/Private/Tests/CesiumMetadataValue.spec.cpp index 69a1ea31d..be829c7e3 100644 --- a/Source/CesiumRuntime/Private/Tests/CesiumMetadataValue.spec.cpp +++ b/Source/CesiumRuntime/Private/Tests/CesiumMetadataValue.spec.cpp @@ -6,12 +6,12 @@ #include -using namespace CesiumGltf; - BEGIN_DEFINE_SPEC( FCesiumMetadataValueSpec, "Cesium.Unit.MetadataValue", - EAutomationTestFlags::ApplicationContextMask | + EAutomationTestFlags::EditorContext | EAutomationTestFlags::ClientContext | + EAutomationTestFlags::ServerContext | + EAutomationTestFlags::CommandletContext | EAutomationTestFlags::ProductFilter) END_DEFINE_SPEC(FCesiumMetadataValueSpec) @@ -90,7 +90,7 @@ void FCesiumMetadataValueSpec::Define() { }); It("constructs array value with correct type", [this]() { - PropertyArrayView arrayView; + CesiumGltf::PropertyArrayCopy arrayView; FCesiumMetadataValue value(arrayView); FCesiumMetadataValueType valueType = UCesiumMetadataValueBlueprintLibrary::GetValueType(value); @@ -1131,7 +1131,8 @@ void FCesiumMetadataValueSpec::Define() { It("gets array from array value", [this]() { std::vector arrayValues{1, 2}; - PropertyArrayView arrayView(std::move(arrayValues)); + CesiumGltf::PropertyArrayCopy arrayView = + std::vector(arrayValues); FCesiumMetadataValue value(arrayView); FCesiumPropertyArray array = @@ -1196,7 +1197,7 @@ void FCesiumMetadataValueSpec::Define() { }); It("returns false for array value", [this]() { - PropertyArrayView arrayView; + CesiumGltf::PropertyArrayCopy arrayView; FCesiumMetadataValue value(arrayView); TestFalse( "IsEmpty", @@ -1217,7 +1218,9 @@ void FCesiumMetadataValueSpec::Define() { values.Add({"scalar", FCesiumMetadataValue(-1)}); values.Add({"vec2", FCesiumMetadataValue(glm::u8vec2(2, 3))}); values.Add( - {"array", FCesiumMetadataValue(PropertyArrayView({1, 2, 3}))}); + {"array", + FCesiumMetadataValue( + CesiumGltf::PropertyArrayCopy({1, 2, 3}))}); const auto strings = UCesiumMetadataValueBlueprintLibrary::GetValuesAsStrings(values); diff --git a/Source/CesiumRuntime/Private/Tests/CesiumOriginShiftComponent.spec.cpp b/Source/CesiumRuntime/Private/Tests/CesiumOriginShiftComponent.spec.cpp index 5f76fd5ed..1b6e4be11 100644 --- a/Source/CesiumRuntime/Private/Tests/CesiumOriginShiftComponent.spec.cpp +++ b/Source/CesiumRuntime/Private/Tests/CesiumOriginShiftComponent.spec.cpp @@ -2,9 +2,9 @@ #if WITH_EDITOR +#include "CesiumOriginShiftComponent.h" #include "CesiumGeoreference.h" #include "CesiumGlobeAnchorComponent.h" -#include "CesiumOriginShiftComponent.h" #include "CesiumSubLevelComponent.h" #include "CesiumTestHelpers.h" #include "Editor.h" @@ -18,7 +18,9 @@ BEGIN_DEFINE_SPEC( FCesiumOriginShiftComponentSpec, "Cesium.Unit.OriginShiftComponent", - EAutomationTestFlags::ApplicationContextMask | + EAutomationTestFlags::EditorContext | EAutomationTestFlags::ClientContext | + EAutomationTestFlags::ServerContext | + EAutomationTestFlags::CommandletContext | EAutomationTestFlags::ProductFilter) TObjectPtr pWorld; diff --git a/Source/CesiumRuntime/Private/Tests/CesiumPrimitiveFeatures.spec.cpp b/Source/CesiumRuntime/Private/Tests/CesiumPrimitiveFeatures.spec.cpp index bdd3741db..7dd21d9f1 100644 --- a/Source/CesiumRuntime/Private/Tests/CesiumPrimitiveFeatures.spec.cpp +++ b/Source/CesiumRuntime/Private/Tests/CesiumPrimitiveFeatures.spec.cpp @@ -1,29 +1,30 @@ // Copyright 2020-2024 CesiumGS, Inc. and Contributors +#include "CesiumPrimitiveFeatures.h" #include "CesiumGltf/ExtensionExtMeshFeatures.h" #include "CesiumGltfSpecUtility.h" -#include "CesiumPrimitiveFeatures.h" #include "Misc/AutomationTest.h" -using namespace CesiumGltf; - BEGIN_DEFINE_SPEC( FCesiumPrimitiveFeaturesSpec, "Cesium.Unit.PrimitiveFeatures", - EAutomationTestFlags::ApplicationContextMask | + EAutomationTestFlags::EditorContext | EAutomationTestFlags::ClientContext | + EAutomationTestFlags::ServerContext | + EAutomationTestFlags::CommandletContext | EAutomationTestFlags::ProductFilter) -Model model; -MeshPrimitive* pPrimitive; -ExtensionExtMeshFeatures* pExtension; +CesiumGltf::Model model; +CesiumGltf::MeshPrimitive* pPrimitive; +CesiumGltf::ExtensionExtMeshFeatures* pExtension; END_DEFINE_SPEC(FCesiumPrimitiveFeaturesSpec) void FCesiumPrimitiveFeaturesSpec::Define() { Describe("Constructor", [this]() { BeforeEach([this]() { - model = Model(); - Mesh& mesh = model.meshes.emplace_back(); + model = CesiumGltf::Model(); + CesiumGltf::Mesh& mesh = model.meshes.emplace_back(); pPrimitive = &mesh.primitives.emplace_back(); - pExtension = &pPrimitive->addExtension(); + pExtension = + &pPrimitive->addExtension(); }); It("constructs with no feature ID sets", [this]() { @@ -39,7 +40,7 @@ void FCesiumPrimitiveFeaturesSpec::Define() { }); It("constructs with single feature ID set", [this]() { - FeatureId& featureID = pExtension->featureIds.emplace_back(); + CesiumGltf::FeatureId& featureID = pExtension->featureIds.emplace_back(); featureID.featureCount = 10; FCesiumPrimitiveFeatures primitiveFeatures = @@ -81,7 +82,8 @@ void FCesiumPrimitiveFeaturesSpec::Define() { texCoords, 0); - FeatureId& implicitIDs = pExtension->featureIds.emplace_back(); + CesiumGltf::FeatureId& implicitIDs = + pExtension->featureIds.emplace_back(); implicitIDs.featureCount = 3; FCesiumPrimitiveFeatures primitiveFeatures = @@ -100,7 +102,7 @@ void FCesiumPrimitiveFeaturesSpec::Define() { for (size_t i = 0; i < featureIDSets.Num(); i++) { const FCesiumFeatureIdSet& featureIDSet = featureIDSets[static_cast(i)]; - const FeatureId& gltfFeatureID = pExtension->featureIds[i]; + const CesiumGltf::FeatureId& gltfFeatureID = pExtension->featureIds[i]; TestEqual( "Feature Count", UCesiumFeatureIdSetBlueprintLibrary::GetFeatureCount(featureIDSet), @@ -116,10 +118,11 @@ void FCesiumPrimitiveFeaturesSpec::Define() { Describe("GetFeatureIDSetsOfType", [this]() { BeforeEach([this]() { - model = Model(); - Mesh& mesh = model.meshes.emplace_back(); + model = CesiumGltf::Model(); + CesiumGltf::Mesh& mesh = model.meshes.emplace_back(); pPrimitive = &mesh.primitives.emplace_back(); - pExtension = &pPrimitive->addExtension(); + pExtension = + &pPrimitive->addExtension(); const std::vector attributeIDs{0, 0, 0}; AddFeatureIDsAsAttributeToModel(model, *pPrimitive, attributeIDs, 1, 0); @@ -139,7 +142,8 @@ void FCesiumPrimitiveFeaturesSpec::Define() { texCoords, 0); - FeatureId& implicitIDs = pExtension->featureIds.emplace_back(); + CesiumGltf::FeatureId& implicitIDs = + pExtension->featureIds.emplace_back(); implicitIDs.featureCount = 3; }); @@ -218,10 +222,11 @@ void FCesiumPrimitiveFeaturesSpec::Define() { Describe("GetFirstVertexFromFace", [this]() { BeforeEach([this]() { - model = Model(); - Mesh& mesh = model.meshes.emplace_back(); + model = CesiumGltf::Model(); + CesiumGltf::Mesh& mesh = model.meshes.emplace_back(); pPrimitive = &mesh.primitives.emplace_back(); - pExtension = &pPrimitive->addExtension(); + pExtension = + &pPrimitive->addExtension(); }); It("returns -1 for out-of-bounds face index", [this]() { @@ -229,7 +234,7 @@ void FCesiumPrimitiveFeaturesSpec::Define() { CreateIndicesForPrimitive( model, *pPrimitive, - AccessorSpec::ComponentType::UNSIGNED_BYTE, + CesiumGltf::AccessorSpec::ComponentType::UNSIGNED_BYTE, indices); FCesiumPrimitiveFeatures primitiveFeatures = @@ -249,7 +254,7 @@ void FCesiumPrimitiveFeaturesSpec::Define() { }); It("returns correct value for primitive without indices", [this]() { - Accessor& accessor = model.accessors.emplace_back(); + CesiumGltf::Accessor& accessor = model.accessors.emplace_back(); accessor.count = 9; const int64 numFaces = accessor.count / 3; @@ -273,10 +278,10 @@ void FCesiumPrimitiveFeaturesSpec::Define() { CreateIndicesForPrimitive( model, *pPrimitive, - AccessorSpec::ComponentType::UNSIGNED_BYTE, + CesiumGltf::AccessorSpec::ComponentType::UNSIGNED_BYTE, indices); - Accessor& accessor = model.accessors.emplace_back(); + CesiumGltf::Accessor& accessor = model.accessors.emplace_back(); accessor.count = 7; pPrimitive->attributes.insert( {"POSITION", static_cast(model.accessors.size() - 1)}); @@ -298,10 +303,11 @@ void FCesiumPrimitiveFeaturesSpec::Define() { Describe("GetFeatureIDFromFace", [this]() { BeforeEach([this]() { - model = Model(); - Mesh& mesh = model.meshes.emplace_back(); + model = CesiumGltf::Model(); + CesiumGltf::Mesh& mesh = model.meshes.emplace_back(); pPrimitive = &mesh.primitives.emplace_back(); - pExtension = &pPrimitive->addExtension(); + pExtension = + &pPrimitive->addExtension(); }); It("returns -1 for primitive with empty feature ID sets", [this]() { @@ -309,10 +315,10 @@ void FCesiumPrimitiveFeaturesSpec::Define() { CreateIndicesForPrimitive( model, *pPrimitive, - AccessorSpec::ComponentType::UNSIGNED_BYTE, + CesiumGltf::AccessorSpec::ComponentType::UNSIGNED_BYTE, indices); - Accessor& accessor = model.accessors.emplace_back(); + CesiumGltf::Accessor& accessor = model.accessors.emplace_back(); accessor.count = 6; pPrimitive->attributes.insert( {"POSITION", static_cast(model.accessors.size() - 1)}); @@ -342,10 +348,10 @@ void FCesiumPrimitiveFeaturesSpec::Define() { CreateIndicesForPrimitive( model, *pPrimitive, - AccessorSpec::ComponentType::UNSIGNED_BYTE, + CesiumGltf::AccessorSpec::ComponentType::UNSIGNED_BYTE, indices); - Accessor& accessor = model.accessors.emplace_back(); + CesiumGltf::Accessor& accessor = model.accessors.emplace_back(); accessor.count = 7; pPrimitive->attributes.insert( {"POSITION", static_cast(model.accessors.size() - 1)}); @@ -381,10 +387,10 @@ void FCesiumPrimitiveFeaturesSpec::Define() { CreateIndicesForPrimitive( model, *pPrimitive, - AccessorSpec::ComponentType::UNSIGNED_BYTE, + CesiumGltf::AccessorSpec::ComponentType::UNSIGNED_BYTE, indices); - Accessor& accessor = model.accessors.emplace_back(); + CesiumGltf::Accessor& accessor = model.accessors.emplace_back(); accessor.count = 3; pPrimitive->attributes.insert( {"POSITION", static_cast(model.accessors.size() - 1)}); @@ -410,7 +416,7 @@ void FCesiumPrimitiveFeaturesSpec::Define() { std::vector attributeIDs{1, 1, 1, 2, 2, 2, 0, 0, 0}; AddFeatureIDsAsAttributeToModel(model, *pPrimitive, attributeIDs, 3, 0); - Accessor& accessor = model.accessors.emplace_back(); + CesiumGltf::Accessor& accessor = model.accessors.emplace_back(); accessor.count = 9; pPrimitive->attributes.insert( {"POSITION", static_cast(model.accessors.size() - 1)}); @@ -437,10 +443,10 @@ void FCesiumPrimitiveFeaturesSpec::Define() { CreateIndicesForPrimitive( model, *pPrimitive, - AccessorSpec::ComponentType::UNSIGNED_BYTE, + CesiumGltf::AccessorSpec::ComponentType::UNSIGNED_BYTE, indices); - Accessor& accessor = model.accessors.emplace_back(); + CesiumGltf::Accessor& accessor = model.accessors.emplace_back(); accessor.count = 7; pPrimitive->attributes.insert( {"POSITION", static_cast(model.accessors.size() - 1)}); @@ -481,10 +487,10 @@ void FCesiumPrimitiveFeaturesSpec::Define() { CreateIndicesForPrimitive( model, *pPrimitive, - AccessorSpec::ComponentType::UNSIGNED_BYTE, + CesiumGltf::AccessorSpec::ComponentType::UNSIGNED_BYTE, indices); - Accessor& accessor = model.accessors.emplace_back(); + CesiumGltf::Accessor& accessor = model.accessors.emplace_back(); accessor.count = 3; pPrimitive->attributes.insert( {"POSITION", static_cast(model.accessors.size() - 1)}); @@ -525,7 +531,7 @@ void FCesiumPrimitiveFeaturesSpec::Define() { texCoords, 0); - Accessor& accessor = model.accessors.emplace_back(); + CesiumGltf::Accessor& accessor = model.accessors.emplace_back(); accessor.count = 6; pPrimitive->attributes.insert( {"POSITION", static_cast(model.accessors.size() - 1)}); @@ -568,10 +574,10 @@ void FCesiumPrimitiveFeaturesSpec::Define() { CreateIndicesForPrimitive( model, *pPrimitive, - AccessorSpec::ComponentType::UNSIGNED_BYTE, + CesiumGltf::AccessorSpec::ComponentType::UNSIGNED_BYTE, indices); - Accessor& accessor = model.accessors.emplace_back(); + CesiumGltf::Accessor& accessor = model.accessors.emplace_back(); accessor.count = 4; pPrimitive->attributes.insert( {"POSITION", static_cast(model.accessors.size() - 1)}); @@ -596,12 +602,13 @@ void FCesiumPrimitiveFeaturesSpec::Define() { Describe("ImplicitFeatureIDs", [this]() { BeforeEach([this]() { - FeatureId& implicitIDs = pExtension->featureIds.emplace_back(); + CesiumGltf::FeatureId& implicitIDs = + pExtension->featureIds.emplace_back(); implicitIDs.featureCount = 6; }); It("returns -1 for out-of-bounds face index", [this]() { - Accessor& accessor = model.accessors.emplace_back(); + CesiumGltf::Accessor& accessor = model.accessors.emplace_back(); accessor.count = 6; pPrimitive->attributes.insert( {"POSITION", static_cast(model.accessors.size() - 1)}); @@ -624,7 +631,7 @@ void FCesiumPrimitiveFeaturesSpec::Define() { }); It("returns correct values for primitive without indices", [this]() { - Accessor& accessor = model.accessors.emplace_back(); + CesiumGltf::Accessor& accessor = model.accessors.emplace_back(); accessor.count = 6; pPrimitive->attributes.insert( {"POSITION", static_cast(model.accessors.size() - 1)}); @@ -651,10 +658,10 @@ void FCesiumPrimitiveFeaturesSpec::Define() { CreateIndicesForPrimitive( model, *pPrimitive, - AccessorSpec::ComponentType::UNSIGNED_BYTE, + CesiumGltf::AccessorSpec::ComponentType::UNSIGNED_BYTE, indices); - Accessor& accessor = model.accessors.emplace_back(); + CesiumGltf::Accessor& accessor = model.accessors.emplace_back(); accessor.count = 4; pPrimitive->attributes.insert( {"POSITION", static_cast(model.accessors.size() - 1)}); @@ -692,16 +699,17 @@ void FCesiumPrimitiveFeaturesSpec::Define() { CreateIndicesForPrimitive( model, *pPrimitive, - AccessorSpec::ComponentType::UNSIGNED_BYTE, + CesiumGltf::AccessorSpec::ComponentType::UNSIGNED_BYTE, indices); - Accessor& accessor = model.accessors.emplace_back(); + CesiumGltf::Accessor& accessor = model.accessors.emplace_back(); accessor.count = 7; pPrimitive->attributes.insert( {"POSITION", static_cast(model.accessors.size() - 1)}); // Second feature ID set is implicit - FeatureId& implicitIDs = pExtension->featureIds.emplace_back(); + CesiumGltf::FeatureId& implicitIDs = + pExtension->featureIds.emplace_back(); implicitIDs.featureCount = 7; FCesiumPrimitiveFeatures primitiveFeatures = diff --git a/Source/CesiumRuntime/Private/Tests/CesiumPropertyArray.spec.cpp b/Source/CesiumRuntime/Private/Tests/CesiumPropertyArray.spec.cpp index ef07d6eb5..1c5e51b02 100644 --- a/Source/CesiumRuntime/Private/Tests/CesiumPropertyArray.spec.cpp +++ b/Source/CesiumRuntime/Private/Tests/CesiumPropertyArray.spec.cpp @@ -4,12 +4,12 @@ #include "CesiumPropertyArrayBlueprintLibrary.h" #include "Misc/AutomationTest.h" -using namespace CesiumGltf; - BEGIN_DEFINE_SPEC( FCesiumPropertyArraySpec, "Cesium.Unit.PropertyArray", - EAutomationTestFlags::ApplicationContextMask | + EAutomationTestFlags::EditorContext | EAutomationTestFlags::ClientContext | + EAutomationTestFlags::ServerContext | + EAutomationTestFlags::CommandletContext | EAutomationTestFlags::ProductFilter) END_DEFINE_SPEC(FCesiumPropertyArraySpec) @@ -37,7 +37,7 @@ void FCesiumPropertyArraySpec::Define() { }); It("constructs empty array from empty view", [this]() { - PropertyArrayView arrayView; + CesiumGltf::PropertyArrayCopy arrayView; FCesiumPropertyArray array(arrayView); TestEqual( "size", @@ -60,7 +60,7 @@ void FCesiumPropertyArraySpec::Define() { It("constructs non-empty array", [this]() { std::vector values{1, 2, 3, 4}; - PropertyArrayView arrayView(std::move(values)); + CesiumGltf::PropertyArrayCopy arrayView = std::vector(values); FCesiumPropertyArray array(arrayView); TestEqual( "size", @@ -85,7 +85,7 @@ void FCesiumPropertyArraySpec::Define() { Describe("GetValue", [this]() { It("gets bogus value for out-of-bounds index", [this]() { std::vector values{1}; - PropertyArrayView arrayView(std::move(values)); + CesiumGltf::PropertyArrayCopy arrayView = std::vector(values); FCesiumPropertyArray array(arrayView); TestEqual( "size", @@ -114,7 +114,7 @@ void FCesiumPropertyArraySpec::Define() { It("gets value for valid index", [this]() { std::vector values{1, 2, 3, 4}; - PropertyArrayView arrayView(std::move(values)); + CesiumGltf::PropertyArrayCopy arrayView = std::vector(values); FCesiumPropertyArray array(arrayView); TestEqual( "size", diff --git a/Source/CesiumRuntime/Private/Tests/CesiumPropertyTable.spec.cpp b/Source/CesiumRuntime/Private/Tests/CesiumPropertyTable.spec.cpp index b196ec3ea..d04e56a61 100644 --- a/Source/CesiumRuntime/Private/Tests/CesiumPropertyTable.spec.cpp +++ b/Source/CesiumRuntime/Private/Tests/CesiumPropertyTable.spec.cpp @@ -1,29 +1,30 @@ // Copyright 2020-2024 CesiumGS, Inc. and Contributors +#include "CesiumPropertyTable.h" #include "CesiumGltf/ExtensionModelExtStructuralMetadata.h" #include "CesiumGltf/Model.h" #include "CesiumGltfSpecUtility.h" -#include "CesiumPropertyTable.h" #include "Misc/AutomationTest.h" #include -using namespace CesiumGltf; - BEGIN_DEFINE_SPEC( FCesiumPropertyTableSpec, "Cesium.Unit.PropertyTable", - EAutomationTestFlags::ApplicationContextMask | + EAutomationTestFlags::EditorContext | EAutomationTestFlags::ClientContext | + EAutomationTestFlags::ServerContext | + EAutomationTestFlags::CommandletContext | EAutomationTestFlags::ProductFilter) -Model model; -ExtensionModelExtStructuralMetadata* pExtension; -PropertyTable* pPropertyTable; +CesiumGltf::Model model; +CesiumGltf::ExtensionModelExtStructuralMetadata* pExtension; +CesiumGltf::PropertyTable* pPropertyTable; END_DEFINE_SPEC(FCesiumPropertyTableSpec) void FCesiumPropertyTableSpec::Define() { BeforeEach([this]() { - model = Model(); - pExtension = &model.addExtension(); - pExtension->schema = Schema(); + model = CesiumGltf::Model(); + pExtension = + &model.addExtension(); + pExtension->schema.emplace(); pPropertyTable = &pExtension->propertyTables.emplace_back(); }); @@ -43,7 +44,7 @@ void FCesiumPropertyTableSpec::Define() { }); It("constructs invalid instance for missing schema", [this]() { - pExtension->schema = std::nullopt; + pExtension->schema.reset(); FCesiumPropertyTable propertyTable(model, *pPropertyTable); TestEqual( @@ -83,8 +84,8 @@ void FCesiumPropertyTableSpec::Define() { model, *pPropertyTable, propertyName, - ClassProperty::Type::SCALAR, - ClassProperty::ComponentType::INT32, + CesiumGltf::ClassProperty::Type::SCALAR, + CesiumGltf::ClassProperty::ComponentType::INT32, values); FCesiumPropertyTable propertyTable(model, *pPropertyTable); @@ -111,8 +112,9 @@ void FCesiumPropertyTableSpec::Define() { model, *pPropertyTable, propertyName, - ClassProperty::Type::SCALAR, - ClassProperty::ComponentType::INT32, // Incorrect component type + CesiumGltf::ClassProperty::Type::SCALAR, + CesiumGltf::ClassProperty::ComponentType::INT32, // Incorrect + // component type values); FCesiumPropertyTable propertyTable(model, *pPropertyTable); @@ -152,8 +154,8 @@ void FCesiumPropertyTableSpec::Define() { model, *pPropertyTable, scalarPropertyName, - ClassProperty::Type::SCALAR, - ClassProperty::ComponentType::INT32, + CesiumGltf::ClassProperty::Type::SCALAR, + CesiumGltf::ClassProperty::ComponentType::INT32, scalarValues); std::string vec2PropertyName("vec2Property"); @@ -167,8 +169,8 @@ void FCesiumPropertyTableSpec::Define() { model, *pPropertyTable, vec2PropertyName, - ClassProperty::Type::VEC2, - ClassProperty::ComponentType::FLOAT32, + CesiumGltf::ClassProperty::Type::VEC2, + CesiumGltf::ClassProperty::ComponentType::FLOAT32, vec2Values); FCesiumPropertyTable propertyTable(model, *pPropertyTable); @@ -251,8 +253,8 @@ void FCesiumPropertyTableSpec::Define() { model, *pPropertyTable, propertyName, - ClassProperty::Type::SCALAR, - ClassProperty::ComponentType::INT32, + CesiumGltf::ClassProperty::Type::SCALAR, + CesiumGltf::ClassProperty::ComponentType::INT32, values); FCesiumPropertyTable propertyTable(model, *pPropertyTable); @@ -311,8 +313,8 @@ void FCesiumPropertyTableSpec::Define() { model, *pPropertyTable, scalarPropertyName, - ClassProperty::Type::SCALAR, - ClassProperty::ComponentType::INT32, + CesiumGltf::ClassProperty::Type::SCALAR, + CesiumGltf::ClassProperty::ComponentType::INT32, scalarValues); std::string vec2PropertyName("vec2Property"); @@ -326,8 +328,8 @@ void FCesiumPropertyTableSpec::Define() { model, *pPropertyTable, vec2PropertyName, - ClassProperty::Type::VEC2, - ClassProperty::ComponentType::FLOAT32, + CesiumGltf::ClassProperty::Type::VEC2, + CesiumGltf::ClassProperty::ComponentType::FLOAT32, vec2Values); std::string invalidPropertyName("badProperty"); @@ -336,8 +338,9 @@ void FCesiumPropertyTableSpec::Define() { model, *pPropertyTable, invalidPropertyName, - ClassProperty::Type::SCALAR, - ClassProperty::ComponentType::INT32, // Incorrect component type + CesiumGltf::ClassProperty::Type::SCALAR, + CesiumGltf::ClassProperty::ComponentType::INT32, // Incorrect + // component type invalidPropertyValues); FCesiumPropertyTable propertyTable(model, *pPropertyTable); @@ -378,8 +381,8 @@ void FCesiumPropertyTableSpec::Define() { model, *pPropertyTable, propertyName, - ClassProperty::Type::SCALAR, - ClassProperty::ComponentType::INT32, + CesiumGltf::ClassProperty::Type::SCALAR, + CesiumGltf::ClassProperty::ComponentType::INT32, values); FCesiumPropertyTable propertyTable(model, *pPropertyTable); @@ -418,8 +421,8 @@ void FCesiumPropertyTableSpec::Define() { model, *pPropertyTable, scalarPropertyName, - ClassProperty::Type::SCALAR, - ClassProperty::ComponentType::INT32, + CesiumGltf::ClassProperty::Type::SCALAR, + CesiumGltf::ClassProperty::ComponentType::INT32, scalarValues); std::string vec2PropertyName("vec2Property"); @@ -433,8 +436,8 @@ void FCesiumPropertyTableSpec::Define() { model, *pPropertyTable, vec2PropertyName, - ClassProperty::Type::VEC2, - ClassProperty::ComponentType::FLOAT32, + CesiumGltf::ClassProperty::Type::VEC2, + CesiumGltf::ClassProperty::ComponentType::FLOAT32, vec2Values); FCesiumPropertyTable propertyTable(model, *pPropertyTable); @@ -513,8 +516,8 @@ void FCesiumPropertyTableSpec::Define() { model, *pPropertyTable, scalarPropertyName, - ClassProperty::Type::SCALAR, - ClassProperty::ComponentType::INT32, + CesiumGltf::ClassProperty::Type::SCALAR, + CesiumGltf::ClassProperty::ComponentType::INT32, scalarValues); std::string vec2PropertyName("vec2Property"); @@ -528,8 +531,8 @@ void FCesiumPropertyTableSpec::Define() { model, *pPropertyTable, vec2PropertyName, - ClassProperty::Type::VEC2, - ClassProperty::ComponentType::FLOAT32, + CesiumGltf::ClassProperty::Type::VEC2, + CesiumGltf::ClassProperty::ComponentType::FLOAT32, vec2Values); FCesiumPropertyTable propertyTable(model, *pPropertyTable); @@ -568,8 +571,8 @@ void FCesiumPropertyTableSpec::Define() { model, *pPropertyTable, scalarPropertyName, - ClassProperty::Type::SCALAR, - ClassProperty::ComponentType::INT32, + CesiumGltf::ClassProperty::Type::SCALAR, + CesiumGltf::ClassProperty::ComponentType::INT32, scalarValues); std::string vec2PropertyName("vec2Property"); @@ -583,8 +586,8 @@ void FCesiumPropertyTableSpec::Define() { model, *pPropertyTable, vec2PropertyName, - ClassProperty::Type::VEC2, - ClassProperty::ComponentType::FLOAT32, + CesiumGltf::ClassProperty::Type::VEC2, + CesiumGltf::ClassProperty::ComponentType::FLOAT32, vec2Values); FCesiumPropertyTable propertyTable(model, *pPropertyTable); @@ -642,8 +645,8 @@ void FCesiumPropertyTableSpec::Define() { model, *pPropertyTable, propertyName, - ClassProperty::Type::SCALAR, - ClassProperty::ComponentType::INT32, + CesiumGltf::ClassProperty::Type::SCALAR, + CesiumGltf::ClassProperty::ComponentType::INT32, propertyValues); FCesiumPropertyTable propertyTable(model, *pPropertyTable); @@ -696,8 +699,8 @@ void FCesiumPropertyTableSpec::Define() { model, *pPropertyTable, scalarPropertyName, - ClassProperty::Type::SCALAR, - ClassProperty::ComponentType::INT32, + CesiumGltf::ClassProperty::Type::SCALAR, + CesiumGltf::ClassProperty::ComponentType::INT32, scalarValues); std::string vec2PropertyName("vec2Property"); @@ -711,8 +714,8 @@ void FCesiumPropertyTableSpec::Define() { model, *pPropertyTable, vec2PropertyName, - ClassProperty::Type::VEC2, - ClassProperty::ComponentType::FLOAT32, + CesiumGltf::ClassProperty::Type::VEC2, + CesiumGltf::ClassProperty::ComponentType::FLOAT32, vec2Values); FCesiumPropertyTable propertyTable(model, *pPropertyTable); @@ -747,8 +750,8 @@ void FCesiumPropertyTableSpec::Define() { model, *pPropertyTable, scalarPropertyName, - ClassProperty::Type::SCALAR, - ClassProperty::ComponentType::INT32, + CesiumGltf::ClassProperty::Type::SCALAR, + CesiumGltf::ClassProperty::ComponentType::INT32, scalarValues); std::string vec2PropertyName("vec2Property"); @@ -762,8 +765,8 @@ void FCesiumPropertyTableSpec::Define() { model, *pPropertyTable, vec2PropertyName, - ClassProperty::Type::VEC2, - ClassProperty::ComponentType::FLOAT32, + CesiumGltf::ClassProperty::Type::VEC2, + CesiumGltf::ClassProperty::ComponentType::FLOAT32, vec2Values); FCesiumPropertyTable propertyTable(model, *pPropertyTable); @@ -817,8 +820,8 @@ void FCesiumPropertyTableSpec::Define() { model, *pPropertyTable, propertyName, - ClassProperty::Type::SCALAR, - ClassProperty::ComponentType::INT32, + CesiumGltf::ClassProperty::Type::SCALAR, + CesiumGltf::ClassProperty::ComponentType::INT32, propertyValues); FCesiumPropertyTable propertyTable(model, *pPropertyTable); diff --git a/Source/CesiumRuntime/Private/Tests/CesiumPropertyTableProperty.spec.cpp b/Source/CesiumRuntime/Private/Tests/CesiumPropertyTableProperty.spec.cpp index cfb476b03..e158006f3 100644 --- a/Source/CesiumRuntime/Private/Tests/CesiumPropertyTableProperty.spec.cpp +++ b/Source/CesiumRuntime/Private/Tests/CesiumPropertyTableProperty.spec.cpp @@ -1,21 +1,23 @@ // Copyright 2020-2024 CesiumGS, Inc. and Contributors +#include "CesiumPropertyTableProperty.h" #include "CesiumGltfSpecUtility.h" #include "CesiumPropertyArrayBlueprintLibrary.h" -#include "CesiumPropertyTableProperty.h" #include "Misc/AutomationTest.h" #include -using namespace CesiumGltf; - BEGIN_DEFINE_SPEC( FCesiumPropertyTablePropertySpec, "Cesium.Unit.PropertyTableProperty", - EAutomationTestFlags::ApplicationContextMask | + EAutomationTestFlags::EditorContext | EAutomationTestFlags::ClientContext | + EAutomationTestFlags::ServerContext | + EAutomationTestFlags::CommandletContext | EAutomationTestFlags::ProductFilter) END_DEFINE_SPEC(FCesiumPropertyTablePropertySpec) void FCesiumPropertyTablePropertySpec::Define() { + using namespace CesiumGltf; + Describe("Constructor", [this]() { It("constructs invalid instance by default", [this]() { FCesiumPropertyTableProperty property; @@ -39,8 +41,9 @@ void FCesiumPropertyTablePropertySpec::Define() { It("constructs invalid instance from view with invalid definition", [this]() { - PropertyTablePropertyView propertyView( - PropertyTablePropertyViewStatus::ErrorArrayTypeMismatch); + CesiumGltf::PropertyTablePropertyView propertyView( + CesiumGltf::PropertyTablePropertyViewStatus:: + ErrorArrayTypeMismatch); FCesiumPropertyTableProperty property(propertyView); TestEqual( "PropertyTablePropertyStatus", @@ -61,8 +64,9 @@ void FCesiumPropertyTablePropertySpec::Define() { }); It("constructs invalid instance from view with invalid data", [this]() { - PropertyTablePropertyView propertyView( - PropertyTablePropertyViewStatus::ErrorBufferViewOutOfBounds); + CesiumGltf::PropertyTablePropertyView propertyView( + CesiumGltf::PropertyTablePropertyViewStatus:: + ErrorBufferViewOutOfBounds); FCesiumPropertyTableProperty property(propertyView); TestEqual( "PropertyTablePropertyStatus", @@ -83,18 +87,18 @@ void FCesiumPropertyTablePropertySpec::Define() { }); It("constructs valid instance", [this]() { - PropertyTableProperty propertyTableProperty; - ClassProperty classProperty; + CesiumGltf::PropertyTableProperty propertyTableProperty; + CesiumGltf::ClassProperty classProperty; classProperty.type = ClassProperty::Type::SCALAR; classProperty.componentType = ClassProperty::ComponentType::INT32; std::vector values{1, 2, 3, 4}; std::vector data = GetValuesAsBytes(values); - PropertyTablePropertyView propertyView( + CesiumGltf::PropertyTablePropertyView propertyView( propertyTableProperty, classProperty, static_cast(values.size()), - gsl::span(data.data(), data.size())); + std::span(data.data(), data.size())); FCesiumPropertyTableProperty property(propertyView); TestEqual( @@ -163,19 +167,19 @@ void FCesiumPropertyTablePropertySpec::Define() { }); It("constructs valid normalized instance", [this]() { - PropertyTableProperty propertyTableProperty; - ClassProperty classProperty; + CesiumGltf::PropertyTableProperty propertyTableProperty; + CesiumGltf::ClassProperty classProperty; classProperty.type = ClassProperty::Type::SCALAR; classProperty.componentType = ClassProperty::ComponentType::UINT8; classProperty.normalized = true; std::vector values{0, 1, 255, 128}; std::vector data = GetValuesAsBytes(values); - PropertyTablePropertyView propertyView( + CesiumGltf::PropertyTablePropertyView propertyView( propertyTableProperty, classProperty, static_cast(values.size()), - gsl::span(data.data(), data.size())); + std::span(data.data(), data.size())); FCesiumPropertyTableProperty property(propertyView); TestEqual( @@ -220,8 +224,8 @@ void FCesiumPropertyTablePropertySpec::Define() { }); It("constructs instance for fixed-length array property", [this]() { - PropertyTableProperty propertyTableProperty; - ClassProperty classProperty; + CesiumGltf::PropertyTableProperty propertyTableProperty; + CesiumGltf::ClassProperty classProperty; classProperty.type = ClassProperty::Type::SCALAR; classProperty.componentType = ClassProperty::ComponentType::INT32; classProperty.array = true; @@ -232,15 +236,16 @@ void FCesiumPropertyTablePropertySpec::Define() { static_cast(values.size()) / *classProperty.count; std::vector data = GetValuesAsBytes(values); - PropertyTablePropertyView> propertyView( - propertyTableProperty, - classProperty, - size, - gsl::span(data.data(), data.size()), - gsl::span(), - gsl::span(), - PropertyComponentType::None, - PropertyComponentType::None); + CesiumGltf::PropertyTablePropertyView> + propertyView( + propertyTableProperty, + classProperty, + size, + std::span(data.data(), data.size()), + std::span(), + std::span(), + PropertyComponentType::None, + PropertyComponentType::None); FCesiumPropertyTableProperty property(propertyView); TestEqual( @@ -284,8 +289,8 @@ void FCesiumPropertyTablePropertySpec::Define() { }); It("constructs instance for variable-length array property", [this]() { - PropertyTableProperty propertyTableProperty; - ClassProperty classProperty; + CesiumGltf::PropertyTableProperty propertyTableProperty; + CesiumGltf::ClassProperty classProperty; classProperty.type = ClassProperty::Type::SCALAR; classProperty.componentType = ClassProperty::ComponentType::INT32; classProperty.array = true; @@ -297,15 +302,18 @@ void FCesiumPropertyTablePropertySpec::Define() { std::vector offsetsData = GetValuesAsBytes(offsets); int64_t size = static_cast(offsets.size()) - 1; - PropertyTablePropertyView> propertyView( - propertyTableProperty, - classProperty, - size, - gsl::span(data.data(), data.size()), - gsl::span(offsetsData.data(), offsetsData.size()), - gsl::span(), - PropertyComponentType::Uint16, - PropertyComponentType::None); + CesiumGltf::PropertyTablePropertyView> + propertyView( + propertyTableProperty, + classProperty, + size, + std::span(data.data(), data.size()), + std::span( + offsetsData.data(), + offsetsData.size()), + std::span(), + PropertyComponentType::Uint16, + PropertyComponentType::None); FCesiumPropertyTableProperty property(propertyView); TestEqual( @@ -350,8 +358,8 @@ void FCesiumPropertyTablePropertySpec::Define() { }); It("constructs valid instance with additional properties", [this]() { - PropertyTableProperty propertyTableProperty; - ClassProperty classProperty; + CesiumGltf::PropertyTableProperty propertyTableProperty; + CesiumGltf::ClassProperty classProperty; classProperty.type = ClassProperty::Type::SCALAR; classProperty.componentType = ClassProperty::ComponentType::INT32; classProperty.normalized = true; @@ -372,11 +380,11 @@ void FCesiumPropertyTablePropertySpec::Define() { std::vector values{1, 2, 3, 4}; std::vector data = GetValuesAsBytes(values); - PropertyTablePropertyView propertyView( + CesiumGltf::PropertyTablePropertyView propertyView( propertyTableProperty, classProperty, static_cast(values.size()), - gsl::span(data.data(), data.size())); + std::span(data.data(), data.size())); FCesiumPropertyTableProperty property(propertyView); TestEqual( @@ -462,8 +470,8 @@ void FCesiumPropertyTablePropertySpec::Define() { }); It("constructs valid array instance with additional properties", [this]() { - PropertyTableProperty propertyTableProperty; - ClassProperty classProperty; + CesiumGltf::PropertyTableProperty propertyTableProperty; + CesiumGltf::ClassProperty classProperty; classProperty.type = ClassProperty::Type::SCALAR; classProperty.componentType = ClassProperty::ComponentType::INT32; classProperty.normalized = true; @@ -486,11 +494,12 @@ void FCesiumPropertyTablePropertySpec::Define() { std::vector values{1, 2, 3, 4, 5, 6, -1, -1}; std::vector data = GetValuesAsBytes(values); - PropertyTablePropertyView, true> propertyView( - propertyTableProperty, - classProperty, - static_cast(values.size()), - gsl::span(data.data(), data.size())); + CesiumGltf::PropertyTablePropertyView, true> + propertyView( + propertyTableProperty, + classProperty, + static_cast(values.size()), + std::span(data.data(), data.size())); FCesiumPropertyTableProperty property(propertyView); TestEqual( @@ -676,17 +685,17 @@ void FCesiumPropertyTablePropertySpec::Define() { }); It("returns default value for invalid feature ID", [this]() { - PropertyTableProperty propertyTableProperty; - ClassProperty classProperty; + CesiumGltf::PropertyTableProperty propertyTableProperty; + CesiumGltf::ClassProperty classProperty; classProperty.type = ClassProperty::Type::BOOLEAN; std::vector data{static_cast(0b10110001)}; - PropertyTablePropertyView propertyView( + CesiumGltf::PropertyTablePropertyView propertyView( propertyTableProperty, classProperty, static_cast(8), - gsl::span(data.data(), data.size())); + std::span(data.data(), data.size())); FCesiumPropertyTableProperty property(propertyView); TestEqual( "status", @@ -712,17 +721,17 @@ void FCesiumPropertyTablePropertySpec::Define() { }); It("gets from boolean property", [this]() { - PropertyTableProperty propertyTableProperty; - ClassProperty classProperty; + CesiumGltf::PropertyTableProperty propertyTableProperty; + CesiumGltf::ClassProperty classProperty; classProperty.type = ClassProperty::Type::BOOLEAN; std::vector data{static_cast(0b10110001)}; - PropertyTablePropertyView propertyView( + CesiumGltf::PropertyTablePropertyView propertyView( propertyTableProperty, classProperty, static_cast(8), - gsl::span(data.data(), data.size())); + std::span(data.data(), data.size())); FCesiumPropertyTableProperty property(propertyView); TestEqual( "status", @@ -771,17 +780,17 @@ void FCesiumPropertyTablePropertySpec::Define() { offsets[offsets.size() - 1] = currentOffset; std::vector offsetsData = GetValuesAsBytes(offsets); - PropertyTableProperty propertyTableProperty; - ClassProperty classProperty; + CesiumGltf::PropertyTableProperty propertyTableProperty; + CesiumGltf::ClassProperty classProperty; classProperty.type = ClassProperty::Type::STRING; - PropertyTablePropertyView propertyView( + CesiumGltf::PropertyTablePropertyView propertyView( propertyTableProperty, classProperty, static_cast(values.size()), - gsl::span(data.data(), data.size()), - gsl::span(), - gsl::span(offsetsData.data(), offsetsData.size()), + std::span(data.data(), data.size()), + std::span(), + std::span(offsetsData.data(), offsetsData.size()), PropertyComponentType::None, PropertyComponentType::Uint32); @@ -825,19 +834,19 @@ void FCesiumPropertyTablePropertySpec::Define() { }); It("returns default value for invalid feature ID", [this]() { - PropertyTableProperty propertyTableProperty; - ClassProperty classProperty; + CesiumGltf::PropertyTableProperty propertyTableProperty; + CesiumGltf::ClassProperty classProperty; classProperty.type = ClassProperty::Type::SCALAR; classProperty.componentType = ClassProperty::ComponentType::UINT8; std::vector values{1, 2, 3, 4}; std::vector data = GetValuesAsBytes(values); - PropertyTablePropertyView propertyView( + CesiumGltf::PropertyTablePropertyView propertyView( propertyTableProperty, classProperty, static_cast(values.size()), - gsl::span(data.data(), data.size())); + std::span(data.data(), data.size())); FCesiumPropertyTableProperty property(propertyView); TestEqual( "status", @@ -861,19 +870,19 @@ void FCesiumPropertyTablePropertySpec::Define() { }); It("gets from uint8 property", [this]() { - PropertyTableProperty propertyTableProperty; - ClassProperty classProperty; + CesiumGltf::PropertyTableProperty propertyTableProperty; + CesiumGltf::ClassProperty classProperty; classProperty.type = ClassProperty::Type::SCALAR; classProperty.componentType = ClassProperty::ComponentType::UINT8; std::vector values{1, 2, 3, 4}; std::vector data = GetValuesAsBytes(values); - PropertyTablePropertyView propertyView( + CesiumGltf::PropertyTablePropertyView propertyView( propertyTableProperty, classProperty, static_cast(values.size()), - gsl::span(data.data(), data.size())); + std::span(data.data(), data.size())); FCesiumPropertyTableProperty property(propertyView); TestEqual( "status", @@ -898,19 +907,19 @@ void FCesiumPropertyTablePropertySpec::Define() { }); It("converts compatible values", [this]() { - PropertyTableProperty propertyTableProperty; - ClassProperty classProperty; + CesiumGltf::PropertyTableProperty propertyTableProperty; + CesiumGltf::ClassProperty classProperty; classProperty.type = ClassProperty::Type::SCALAR; classProperty.componentType = ClassProperty::ComponentType::INT32; std::vector values{1, 24, 255, 256, -1, 28}; std::vector data = GetValuesAsBytes(values); - PropertyTablePropertyView propertyView( + CesiumGltf::PropertyTablePropertyView propertyView( propertyTableProperty, classProperty, static_cast(values.size()), - gsl::span(data.data(), data.size())); + std::span(data.data(), data.size())); FCesiumPropertyTableProperty property(propertyView); TestEqual( "status", @@ -936,8 +945,8 @@ void FCesiumPropertyTablePropertySpec::Define() { }); It("gets with noData / default value", [this]() { - PropertyTableProperty propertyTableProperty; - ClassProperty classProperty; + CesiumGltf::PropertyTableProperty propertyTableProperty; + CesiumGltf::ClassProperty classProperty; classProperty.type = ClassProperty::Type::SCALAR; classProperty.componentType = ClassProperty::ComponentType::UINT8; @@ -950,11 +959,11 @@ void FCesiumPropertyTablePropertySpec::Define() { std::vector values{1, 2, 3, 0, 4}; std::vector data = GetValuesAsBytes(values); - PropertyTablePropertyView propertyView( + CesiumGltf::PropertyTablePropertyView propertyView( propertyTableProperty, classProperty, static_cast(values.size()), - gsl::span(data.data(), data.size())); + std::span(data.data(), data.size())); FCesiumPropertyTableProperty property(propertyView); TestEqual( "status", @@ -1004,19 +1013,19 @@ void FCesiumPropertyTablePropertySpec::Define() { }); It("returns default value for invalid feature ID", [this]() { - PropertyTableProperty propertyTableProperty; - ClassProperty classProperty; + CesiumGltf::PropertyTableProperty propertyTableProperty; + CesiumGltf::ClassProperty classProperty; classProperty.type = ClassProperty::Type::SCALAR; classProperty.componentType = ClassProperty::ComponentType::INT32; std::vector values{-1, 2, -3, 4}; std::vector data = GetValuesAsBytes(values); - PropertyTablePropertyView propertyView( + CesiumGltf::PropertyTablePropertyView propertyView( propertyTableProperty, classProperty, static_cast(values.size()), - gsl::span(data.data(), data.size())); + std::span(data.data(), data.size())); FCesiumPropertyTableProperty property(propertyView); TestEqual( "status", @@ -1044,19 +1053,19 @@ void FCesiumPropertyTablePropertySpec::Define() { }); It("gets from int32 property", [this]() { - PropertyTableProperty propertyTableProperty; - ClassProperty classProperty; + CesiumGltf::PropertyTableProperty propertyTableProperty; + CesiumGltf::ClassProperty classProperty; classProperty.type = ClassProperty::Type::SCALAR; classProperty.componentType = ClassProperty::ComponentType::INT32; std::vector values{-1, 2, -3, 4}; std::vector data = GetValuesAsBytes(values); - PropertyTablePropertyView propertyView( + CesiumGltf::PropertyTablePropertyView propertyView( propertyTableProperty, classProperty, static_cast(values.size()), - gsl::span(data.data(), data.size())); + std::span(data.data(), data.size())); FCesiumPropertyTableProperty property(propertyView); TestEqual( "status", @@ -1081,8 +1090,8 @@ void FCesiumPropertyTablePropertySpec::Define() { }); It("converts compatible values", [this]() { - PropertyTableProperty propertyTableProperty; - ClassProperty classProperty; + CesiumGltf::PropertyTableProperty propertyTableProperty; + CesiumGltf::ClassProperty classProperty; classProperty.type = ClassProperty::Type::SCALAR; classProperty.componentType = ClassProperty::ComponentType::FLOAT32; @@ -1095,11 +1104,11 @@ void FCesiumPropertyTablePropertySpec::Define() { }; std::vector data = GetValuesAsBytes(values); - PropertyTablePropertyView propertyView( + CesiumGltf::PropertyTablePropertyView propertyView( propertyTableProperty, classProperty, static_cast(values.size()), - gsl::span(data.data(), data.size())); + std::span(data.data(), data.size())); FCesiumPropertyTableProperty property(propertyView); TestEqual( "status", @@ -1125,8 +1134,8 @@ void FCesiumPropertyTablePropertySpec::Define() { }); It("gets with noData / default value", [this]() { - PropertyTableProperty propertyTableProperty; - ClassProperty classProperty; + CesiumGltf::PropertyTableProperty propertyTableProperty; + CesiumGltf::ClassProperty classProperty; classProperty.type = ClassProperty::Type::SCALAR; classProperty.componentType = ClassProperty::ComponentType::INT32; @@ -1139,11 +1148,11 @@ void FCesiumPropertyTablePropertySpec::Define() { std::vector values{-1, 2, -3, 0, 4}; std::vector data = GetValuesAsBytes(values); - PropertyTablePropertyView propertyView( + CesiumGltf::PropertyTablePropertyView propertyView( propertyTableProperty, classProperty, static_cast(values.size()), - gsl::span(data.data(), data.size())); + std::span(data.data(), data.size())); FCesiumPropertyTableProperty property(propertyView); TestEqual( "status", @@ -1197,19 +1206,19 @@ void FCesiumPropertyTablePropertySpec::Define() { }); It("returns default value for invalid feature ID", [this, defaultInt64]() { - PropertyTableProperty propertyTableProperty; - ClassProperty classProperty; + CesiumGltf::PropertyTableProperty propertyTableProperty; + CesiumGltf::ClassProperty classProperty; classProperty.type = ClassProperty::Type::SCALAR; classProperty.componentType = ClassProperty::ComponentType::INT64; std::vector values{-1, 2, -3, 4}; std::vector data = GetValuesAsBytes(values); - PropertyTablePropertyView propertyView( + CesiumGltf::PropertyTablePropertyView propertyView( propertyTableProperty, classProperty, static_cast(values.size()), - gsl::span(data.data(), data.size())); + std::span(data.data(), data.size())); FCesiumPropertyTableProperty property(propertyView); TestEqual( "status", @@ -1237,19 +1246,19 @@ void FCesiumPropertyTablePropertySpec::Define() { }); It("gets from int64 property", [this, defaultInt64]() { - PropertyTableProperty propertyTableProperty; - ClassProperty classProperty; + CesiumGltf::PropertyTableProperty propertyTableProperty; + CesiumGltf::ClassProperty classProperty; classProperty.type = ClassProperty::Type::SCALAR; classProperty.componentType = ClassProperty::ComponentType::INT64; std::vector values{-1, 2, -3, 4}; std::vector data = GetValuesAsBytes(values); - PropertyTablePropertyView propertyView( + CesiumGltf::PropertyTablePropertyView propertyView( propertyTableProperty, classProperty, static_cast(values.size()), - gsl::span(data.data(), data.size())); + std::span(data.data(), data.size())); FCesiumPropertyTableProperty property(propertyView); TestEqual( "status", @@ -1274,8 +1283,8 @@ void FCesiumPropertyTablePropertySpec::Define() { }); It("converts compatible values", [this, defaultInt64]() { - PropertyTableProperty propertyTableProperty; - ClassProperty classProperty; + CesiumGltf::PropertyTableProperty propertyTableProperty; + CesiumGltf::ClassProperty classProperty; classProperty.type = ClassProperty::Type::SCALAR; classProperty.componentType = ClassProperty::ComponentType::UINT64; @@ -1286,11 +1295,11 @@ void FCesiumPropertyTablePropertySpec::Define() { static_cast(std::numeric_limits::max()) + 100}; std::vector data = GetValuesAsBytes(values); - PropertyTablePropertyView propertyView( + CesiumGltf::PropertyTablePropertyView propertyView( propertyTableProperty, classProperty, static_cast(values.size()), - gsl::span(data.data(), data.size())); + std::span(data.data(), data.size())); FCesiumPropertyTableProperty property(propertyView); TestEqual( "status", @@ -1316,8 +1325,8 @@ void FCesiumPropertyTablePropertySpec::Define() { }); It("gets with noData / default value", [this, defaultInt64]() { - PropertyTableProperty propertyTableProperty; - ClassProperty classProperty; + CesiumGltf::PropertyTableProperty propertyTableProperty; + CesiumGltf::ClassProperty classProperty; classProperty.type = ClassProperty::Type::SCALAR; classProperty.componentType = ClassProperty::ComponentType::INT64; @@ -1330,11 +1339,11 @@ void FCesiumPropertyTablePropertySpec::Define() { std::vector values{-1, 2, 0, -3, 4}; std::vector data = GetValuesAsBytes(values); - PropertyTablePropertyView propertyView( + CesiumGltf::PropertyTablePropertyView propertyView( propertyTableProperty, classProperty, static_cast(values.size()), - gsl::span(data.data(), data.size())); + std::span(data.data(), data.size())); FCesiumPropertyTableProperty property(propertyView); TestEqual( "status", @@ -1386,19 +1395,19 @@ void FCesiumPropertyTablePropertySpec::Define() { }); It("returns default value for invalid feature ID", [this]() { - PropertyTableProperty propertyTableProperty; - ClassProperty classProperty; + CesiumGltf::PropertyTableProperty propertyTableProperty; + CesiumGltf::ClassProperty classProperty; classProperty.type = ClassProperty::Type::SCALAR; classProperty.componentType = ClassProperty::ComponentType::FLOAT32; std::vector values{-1.1f, 2.2f, -3.3f, 4.0f}; std::vector data = GetValuesAsBytes(values); - PropertyTablePropertyView propertyView( + CesiumGltf::PropertyTablePropertyView propertyView( propertyTableProperty, classProperty, static_cast(values.size()), - gsl::span(data.data(), data.size())); + std::span(data.data(), data.size())); FCesiumPropertyTableProperty property(propertyView); TestEqual( "status", @@ -1422,19 +1431,19 @@ void FCesiumPropertyTablePropertySpec::Define() { }); It("gets from float property", [this]() { - PropertyTableProperty propertyTableProperty; - ClassProperty classProperty; + CesiumGltf::PropertyTableProperty propertyTableProperty; + CesiumGltf::ClassProperty classProperty; classProperty.type = ClassProperty::Type::SCALAR; classProperty.componentType = ClassProperty::ComponentType::FLOAT32; std::vector values{-1.1f, 2.2f, -3.3f, 4.0f}; std::vector data = GetValuesAsBytes(values); - PropertyTablePropertyView propertyView( + CesiumGltf::PropertyTablePropertyView propertyView( propertyTableProperty, classProperty, static_cast(values.size()), - gsl::span(data.data(), data.size())); + std::span(data.data(), data.size())); FCesiumPropertyTableProperty property(propertyView); TestEqual( "status", @@ -1466,16 +1475,16 @@ void FCesiumPropertyTablePropertySpec::Define() { std::numeric_limits::max()}; std::vector data = GetValuesAsBytes(values); - PropertyTableProperty propertyTableProperty; - ClassProperty classProperty; + CesiumGltf::PropertyTableProperty propertyTableProperty; + CesiumGltf::ClassProperty classProperty; classProperty.type = ClassProperty::Type::SCALAR; classProperty.componentType = ClassProperty::ComponentType::FLOAT64; - PropertyTablePropertyView propertyView( + CesiumGltf::PropertyTablePropertyView propertyView( propertyTableProperty, classProperty, static_cast(values.size()), - gsl::span(data.data(), data.size())); + std::span(data.data(), data.size())); FCesiumPropertyTableProperty property(propertyView); TestEqual( "status", @@ -1506,8 +1515,8 @@ void FCesiumPropertyTablePropertySpec::Define() { }); It("gets with offset / scale", [this]() { - PropertyTableProperty propertyTableProperty; - ClassProperty classProperty; + CesiumGltf::PropertyTableProperty propertyTableProperty; + CesiumGltf::ClassProperty classProperty; classProperty.type = ClassProperty::Type::SCALAR; classProperty.componentType = ClassProperty::ComponentType::FLOAT32; @@ -1520,11 +1529,11 @@ void FCesiumPropertyTablePropertySpec::Define() { std::vector values{-1.1f, 2.2f, -3.3f, 4.0f}; std::vector data = GetValuesAsBytes(values); - PropertyTablePropertyView propertyView( + CesiumGltf::PropertyTablePropertyView propertyView( propertyTableProperty, classProperty, static_cast(values.size()), - gsl::span(data.data(), data.size())); + std::span(data.data(), data.size())); FCesiumPropertyTableProperty property(propertyView); TestEqual( "status", @@ -1566,19 +1575,19 @@ void FCesiumPropertyTablePropertySpec::Define() { }); It("returns default value for invalid feature ID", [this]() { - PropertyTableProperty propertyTableProperty; - ClassProperty classProperty; + CesiumGltf::PropertyTableProperty propertyTableProperty; + CesiumGltf::ClassProperty classProperty; classProperty.type = ClassProperty::Type::SCALAR; classProperty.componentType = ClassProperty::ComponentType::FLOAT64; std::vector values{-1.1, 2.2, -3.3, 4.0}; std::vector data = GetValuesAsBytes(values); - PropertyTablePropertyView propertyView( + CesiumGltf::PropertyTablePropertyView propertyView( propertyTableProperty, classProperty, static_cast(values.size()), - gsl::span(data.data(), data.size())); + std::span(data.data(), data.size())); FCesiumPropertyTableProperty property(propertyView); TestEqual( "status", @@ -1606,19 +1615,19 @@ void FCesiumPropertyTablePropertySpec::Define() { }); It("gets from double property", [this]() { - PropertyTableProperty propertyTableProperty; - ClassProperty classProperty; + CesiumGltf::PropertyTableProperty propertyTableProperty; + CesiumGltf::ClassProperty classProperty; classProperty.type = ClassProperty::Type::SCALAR; classProperty.componentType = ClassProperty::ComponentType::FLOAT64; std::vector values{-1.1, 2.2, -3.3, 4.0}; std::vector data = GetValuesAsBytes(values); - PropertyTablePropertyView propertyView( + CesiumGltf::PropertyTablePropertyView propertyView( propertyTableProperty, classProperty, static_cast(values.size()), - gsl::span(data.data(), data.size())); + std::span(data.data(), data.size())); FCesiumPropertyTableProperty property(propertyView); TestEqual( "status", @@ -1643,8 +1652,8 @@ void FCesiumPropertyTablePropertySpec::Define() { }); It("gets from normalized uint8 property", [this]() { - PropertyTableProperty propertyTableProperty; - ClassProperty classProperty; + CesiumGltf::PropertyTableProperty propertyTableProperty; + CesiumGltf::ClassProperty classProperty; classProperty.type = ClassProperty::Type::SCALAR; classProperty.componentType = ClassProperty::ComponentType::UINT8; classProperty.normalized = true; @@ -1652,11 +1661,11 @@ void FCesiumPropertyTablePropertySpec::Define() { std::vector values{0, 128, 255, 0}; std::vector data = GetValuesAsBytes(values); - PropertyTablePropertyView propertyView( + CesiumGltf::PropertyTablePropertyView propertyView( propertyTableProperty, classProperty, static_cast(values.size()), - gsl::span(data.data(), data.size())); + std::span(data.data(), data.size())); FCesiumPropertyTableProperty property(propertyView); TestEqual( "status", @@ -1685,8 +1694,8 @@ void FCesiumPropertyTablePropertySpec::Define() { }); It("converts compatible values", [this]() { - PropertyTableProperty propertyTableProperty; - ClassProperty classProperty; + CesiumGltf::PropertyTableProperty propertyTableProperty; + CesiumGltf::ClassProperty classProperty; classProperty.type = ClassProperty::Type::STRING; std::vector values{"not a number", "10", "-2"}; @@ -1709,13 +1718,13 @@ void FCesiumPropertyTablePropertySpec::Define() { offsets[offsets.size() - 1] = currentOffset; std::vector offsetsData = GetValuesAsBytes(offsets); - PropertyTablePropertyView propertyView( + CesiumGltf::PropertyTablePropertyView propertyView( propertyTableProperty, classProperty, static_cast(values.size()), - gsl::span(data.data(), data.size()), - gsl::span(), - gsl::span(offsetsData.data(), offsetsData.size()), + std::span(data.data(), data.size()), + std::span(), + std::span(offsetsData.data(), offsetsData.size()), PropertyComponentType::None, PropertyComponentType::Uint8); FCesiumPropertyTableProperty property(propertyView); @@ -1746,8 +1755,8 @@ void FCesiumPropertyTablePropertySpec::Define() { }); It("gets with offset / scale", [this]() { - PropertyTableProperty propertyTableProperty; - ClassProperty classProperty; + CesiumGltf::PropertyTableProperty propertyTableProperty; + CesiumGltf::ClassProperty classProperty; classProperty.type = ClassProperty::Type::SCALAR; classProperty.componentType = ClassProperty::ComponentType::FLOAT64; @@ -1760,11 +1769,11 @@ void FCesiumPropertyTablePropertySpec::Define() { std::vector values{-1.1, 2.2, -3.3, 4.0}; std::vector data = GetValuesAsBytes(values); - PropertyTablePropertyView propertyView( + CesiumGltf::PropertyTablePropertyView propertyView( propertyTableProperty, classProperty, static_cast(values.size()), - gsl::span(data.data(), data.size())); + std::span(data.data(), data.size())); FCesiumPropertyTableProperty property(propertyView); TestEqual( "status", @@ -1807,8 +1816,8 @@ void FCesiumPropertyTablePropertySpec::Define() { }); It("returns default value for invalid feature ID", [this]() { - PropertyTableProperty propertyTableProperty; - ClassProperty classProperty; + CesiumGltf::PropertyTableProperty propertyTableProperty; + CesiumGltf::ClassProperty classProperty; classProperty.type = ClassProperty::Type::VEC2; classProperty.componentType = ClassProperty::ComponentType::INT32; @@ -1818,11 +1827,11 @@ void FCesiumPropertyTablePropertySpec::Define() { glm::ivec2(10, 4)}; std::vector data = GetValuesAsBytes(values); - PropertyTablePropertyView propertyView( + CesiumGltf::PropertyTablePropertyView propertyView( propertyTableProperty, classProperty, static_cast(values.size()), - gsl::span(data.data(), data.size())); + std::span(data.data(), data.size())); FCesiumPropertyTableProperty property(propertyView); TestEqual( "status", @@ -1852,8 +1861,8 @@ void FCesiumPropertyTablePropertySpec::Define() { }); It("gets from glm::ivec2 property", [this]() { - PropertyTableProperty propertyTableProperty; - ClassProperty classProperty; + CesiumGltf::PropertyTableProperty propertyTableProperty; + CesiumGltf::ClassProperty classProperty; classProperty.type = ClassProperty::Type::VEC2; classProperty.componentType = ClassProperty::ComponentType::INT32; @@ -1863,11 +1872,11 @@ void FCesiumPropertyTablePropertySpec::Define() { glm::ivec2(10, 4)}; std::vector data = GetValuesAsBytes(values); - PropertyTablePropertyView propertyView( + CesiumGltf::PropertyTablePropertyView propertyView( propertyTableProperty, classProperty, static_cast(values.size()), - gsl::span(data.data(), data.size())); + std::span(data.data(), data.size())); FCesiumPropertyTableProperty property(propertyView); TestEqual( "status", @@ -1893,8 +1902,8 @@ void FCesiumPropertyTablePropertySpec::Define() { }); It("converts compatible values", [this]() { - PropertyTableProperty propertyTableProperty; - ClassProperty classProperty; + CesiumGltf::PropertyTableProperty propertyTableProperty; + CesiumGltf::ClassProperty classProperty; classProperty.type = ClassProperty::Type::VEC3; classProperty.componentType = ClassProperty::ComponentType::FLOAT32; @@ -1904,11 +1913,11 @@ void FCesiumPropertyTablePropertySpec::Define() { glm::vec3(std::numeric_limits::max(), -1.0f, 2.0f)}; std::vector data = GetValuesAsBytes(values); - PropertyTablePropertyView propertyView( + CesiumGltf::PropertyTablePropertyView propertyView( propertyTableProperty, classProperty, static_cast(values.size()), - gsl::span(data.data(), data.size())); + std::span(data.data(), data.size())); FCesiumPropertyTableProperty property(propertyView); TestEqual( "status", @@ -1937,8 +1946,8 @@ void FCesiumPropertyTablePropertySpec::Define() { }); It("gets with noData / default value", [this]() { - PropertyTableProperty propertyTableProperty; - ClassProperty classProperty; + CesiumGltf::PropertyTableProperty propertyTableProperty; + CesiumGltf::ClassProperty classProperty; classProperty.type = ClassProperty::Type::VEC2; classProperty.componentType = ClassProperty::ComponentType::INT32; @@ -1954,11 +1963,11 @@ void FCesiumPropertyTablePropertySpec::Define() { glm::ivec2(10, 4)}; std::vector data = GetValuesAsBytes(values); - PropertyTablePropertyView propertyView( + CesiumGltf::PropertyTablePropertyView propertyView( propertyTableProperty, classProperty, static_cast(values.size()), - gsl::span(data.data(), data.size())); + std::span(data.data(), data.size())); FCesiumPropertyTableProperty property(propertyView); TestEqual( "status", @@ -2008,8 +2017,8 @@ void FCesiumPropertyTablePropertySpec::Define() { }); It("returns default value for invalid feature ID", [this]() { - PropertyTableProperty propertyTableProperty; - ClassProperty classProperty; + CesiumGltf::PropertyTableProperty propertyTableProperty; + CesiumGltf::ClassProperty classProperty; classProperty.type = ClassProperty::Type::VEC2; classProperty.componentType = ClassProperty::ComponentType::FLOAT64; @@ -2019,11 +2028,11 @@ void FCesiumPropertyTablePropertySpec::Define() { glm::dvec2(1.5, -1.5)}; std::vector data = GetValuesAsBytes(values); - PropertyTablePropertyView propertyView( + CesiumGltf::PropertyTablePropertyView propertyView( propertyTableProperty, classProperty, static_cast(values.size()), - gsl::span(data.data(), data.size())); + std::span(data.data(), data.size())); FCesiumPropertyTableProperty property(propertyView); TestEqual( "status", @@ -2053,8 +2062,8 @@ void FCesiumPropertyTablePropertySpec::Define() { }); It("gets from glm::dvec2 property", [this]() { - PropertyTableProperty propertyTableProperty; - ClassProperty classProperty; + CesiumGltf::PropertyTableProperty propertyTableProperty; + CesiumGltf::ClassProperty classProperty; classProperty.type = ClassProperty::Type::VEC2; classProperty.componentType = ClassProperty::ComponentType::FLOAT64; @@ -2064,11 +2073,11 @@ void FCesiumPropertyTablePropertySpec::Define() { glm::dvec2(1.5, -1.5)}; std::vector data = GetValuesAsBytes(values); - PropertyTablePropertyView propertyView( + CesiumGltf::PropertyTablePropertyView propertyView( propertyTableProperty, classProperty, static_cast(values.size()), - gsl::span(data.data(), data.size())); + std::span(data.data(), data.size())); FCesiumPropertyTableProperty property(propertyView); TestEqual( "status", @@ -2094,8 +2103,8 @@ void FCesiumPropertyTablePropertySpec::Define() { }); It("gets from normalized glm::u8vec2 property", [this]() { - PropertyTableProperty propertyTableProperty; - ClassProperty classProperty; + CesiumGltf::PropertyTableProperty propertyTableProperty; + CesiumGltf::ClassProperty classProperty; classProperty.type = ClassProperty::Type::VEC2; classProperty.componentType = ClassProperty::ComponentType::UINT8; classProperty.normalized = true; @@ -2106,11 +2115,11 @@ void FCesiumPropertyTablePropertySpec::Define() { glm::u8vec2(10, 4)}; std::vector data = GetValuesAsBytes(values); - PropertyTablePropertyView propertyView( + CesiumGltf::PropertyTablePropertyView propertyView( propertyTableProperty, classProperty, static_cast(values.size()), - gsl::span(data.data(), data.size())); + std::span(data.data(), data.size())); FCesiumPropertyTableProperty property(propertyView); TestEqual( "status", @@ -2140,8 +2149,8 @@ void FCesiumPropertyTablePropertySpec::Define() { }); It("converts compatible values", [this]() { - PropertyTableProperty propertyTableProperty; - ClassProperty classProperty; + CesiumGltf::PropertyTableProperty propertyTableProperty; + CesiumGltf::ClassProperty classProperty; classProperty.type = ClassProperty::Type::STRING; std::vector values{"X=10 Y=3", "not a vector", "X=-2 Y=4"}; @@ -2164,13 +2173,13 @@ void FCesiumPropertyTablePropertySpec::Define() { offsets[offsets.size() - 1] = currentOffset; std::vector offsetsData = GetValuesAsBytes(offsets); - PropertyTablePropertyView propertyView( + CesiumGltf::PropertyTablePropertyView propertyView( propertyTableProperty, classProperty, static_cast(values.size()), - gsl::span(data.data(), data.size()), - gsl::span(), - gsl::span(offsetsData.data(), offsetsData.size()), + std::span(data.data(), data.size()), + std::span(), + std::span(offsetsData.data(), offsetsData.size()), PropertyComponentType::None, PropertyComponentType::Uint8); FCesiumPropertyTableProperty property(propertyView); @@ -2201,8 +2210,8 @@ void FCesiumPropertyTablePropertySpec::Define() { }); It("gets with offset / scale", [this]() { - PropertyTableProperty propertyTableProperty; - ClassProperty classProperty; + CesiumGltf::PropertyTableProperty propertyTableProperty; + CesiumGltf::ClassProperty classProperty; classProperty.type = ClassProperty::Type::VEC2; classProperty.componentType = ClassProperty::ComponentType::FLOAT64; @@ -2218,11 +2227,11 @@ void FCesiumPropertyTablePropertySpec::Define() { glm::dvec2(1.5, -1.5)}; std::vector data = GetValuesAsBytes(values); - PropertyTablePropertyView propertyView( + CesiumGltf::PropertyTablePropertyView propertyView( propertyTableProperty, classProperty, static_cast(values.size()), - gsl::span(data.data(), data.size())); + std::span(data.data(), data.size())); FCesiumPropertyTableProperty property(propertyView); TestEqual( "status", @@ -2269,8 +2278,8 @@ void FCesiumPropertyTablePropertySpec::Define() { }); It("returns default value for invalid feature ID", [this]() { - PropertyTableProperty propertyTableProperty; - ClassProperty classProperty; + CesiumGltf::PropertyTableProperty propertyTableProperty; + CesiumGltf::ClassProperty classProperty; classProperty.type = ClassProperty::Type::VEC3; classProperty.componentType = ClassProperty::ComponentType::INT32; @@ -2280,11 +2289,11 @@ void FCesiumPropertyTablePropertySpec::Define() { glm::ivec3(10, 4, 5)}; std::vector data = GetValuesAsBytes(values); - PropertyTablePropertyView propertyView( + CesiumGltf::PropertyTablePropertyView propertyView( propertyTableProperty, classProperty, static_cast(values.size()), - gsl::span(data.data(), data.size())); + std::span(data.data(), data.size())); FCesiumPropertyTableProperty property(propertyView); TestEqual( "status", @@ -2314,8 +2323,8 @@ void FCesiumPropertyTablePropertySpec::Define() { }); It("gets from glm::ivec3 property", [this]() { - PropertyTableProperty propertyTableProperty; - ClassProperty classProperty; + CesiumGltf::PropertyTableProperty propertyTableProperty; + CesiumGltf::ClassProperty classProperty; classProperty.type = ClassProperty::Type::VEC3; classProperty.componentType = ClassProperty::ComponentType::INT32; @@ -2325,11 +2334,11 @@ void FCesiumPropertyTablePropertySpec::Define() { glm::ivec3(10, 4, 5)}; std::vector data = GetValuesAsBytes(values); - PropertyTablePropertyView propertyView( + CesiumGltf::PropertyTablePropertyView propertyView( propertyTableProperty, classProperty, static_cast(values.size()), - gsl::span(data.data(), data.size())); + std::span(data.data(), data.size())); FCesiumPropertyTableProperty property(propertyView); TestEqual( "status", @@ -2355,8 +2364,8 @@ void FCesiumPropertyTablePropertySpec::Define() { }); It("converts compatible values", [this]() { - PropertyTableProperty propertyTableProperty; - ClassProperty classProperty; + CesiumGltf::PropertyTableProperty propertyTableProperty; + CesiumGltf::ClassProperty classProperty; classProperty.type = ClassProperty::Type::VEC3; classProperty.componentType = ClassProperty::ComponentType::FLOAT32; @@ -2367,11 +2376,11 @@ void FCesiumPropertyTablePropertySpec::Define() { glm::vec3(std::numeric_limits::max(), -1.0f, 2.0f)}; std::vector data = GetValuesAsBytes(values); - PropertyTablePropertyView propertyView( + CesiumGltf::PropertyTablePropertyView propertyView( propertyTableProperty, classProperty, static_cast(values.size()), - gsl::span(data.data(), data.size())); + std::span(data.data(), data.size())); FCesiumPropertyTableProperty property(propertyView); TestEqual( "status", @@ -2401,8 +2410,8 @@ void FCesiumPropertyTablePropertySpec::Define() { }); It("gets with noData / default value", [this]() { - PropertyTableProperty propertyTableProperty; - ClassProperty classProperty; + CesiumGltf::PropertyTableProperty propertyTableProperty; + CesiumGltf::ClassProperty classProperty; classProperty.type = ClassProperty::Type::VEC3; classProperty.componentType = ClassProperty::ComponentType::INT32; @@ -2422,11 +2431,11 @@ void FCesiumPropertyTablePropertySpec::Define() { glm::ivec3(10, 4, 5)}; std::vector data = GetValuesAsBytes(values); - PropertyTablePropertyView propertyView( + CesiumGltf::PropertyTablePropertyView propertyView( propertyTableProperty, classProperty, static_cast(values.size()), - gsl::span(data.data(), data.size())); + std::span(data.data(), data.size())); FCesiumPropertyTableProperty property(propertyView); TestEqual( "status", @@ -2476,8 +2485,8 @@ void FCesiumPropertyTablePropertySpec::Define() { }); It("returns default value for invalid feature ID", [this]() { - PropertyTableProperty propertyTableProperty; - ClassProperty classProperty; + CesiumGltf::PropertyTableProperty propertyTableProperty; + CesiumGltf::ClassProperty classProperty; classProperty.type = ClassProperty::Type::VEC3; classProperty.componentType = ClassProperty::ComponentType::FLOAT32; @@ -2487,11 +2496,11 @@ void FCesiumPropertyTablePropertySpec::Define() { glm::vec3(10.0f, 4.4f, 5.4f)}; std::vector data = GetValuesAsBytes(values); - PropertyTablePropertyView propertyView( + CesiumGltf::PropertyTablePropertyView propertyView( propertyTableProperty, classProperty, static_cast(values.size()), - gsl::span(data.data(), data.size())); + std::span(data.data(), data.size())); FCesiumPropertyTableProperty property(propertyView); TestEqual( "status", @@ -2521,8 +2530,8 @@ void FCesiumPropertyTablePropertySpec::Define() { }); It("gets from glm::vec3 property", [this]() { - PropertyTableProperty propertyTableProperty; - ClassProperty classProperty; + CesiumGltf::PropertyTableProperty propertyTableProperty; + CesiumGltf::ClassProperty classProperty; classProperty.type = ClassProperty::Type::VEC3; classProperty.componentType = ClassProperty::ComponentType::FLOAT32; @@ -2532,11 +2541,11 @@ void FCesiumPropertyTablePropertySpec::Define() { glm::vec3(10.0f, 4.4f, 5.4f)}; std::vector data = GetValuesAsBytes(values); - PropertyTablePropertyView propertyView( + CesiumGltf::PropertyTablePropertyView propertyView( propertyTableProperty, classProperty, static_cast(values.size()), - gsl::span(data.data(), data.size())); + std::span(data.data(), data.size())); FCesiumPropertyTableProperty property(propertyView); TestEqual( "status", @@ -2562,8 +2571,8 @@ void FCesiumPropertyTablePropertySpec::Define() { }); It("converts compatible values", [this]() { - PropertyTableProperty propertyTableProperty; - ClassProperty classProperty; + CesiumGltf::PropertyTableProperty propertyTableProperty; + CesiumGltf::ClassProperty classProperty; classProperty.type = ClassProperty::Type::VEC2; classProperty.componentType = ClassProperty::ComponentType::FLOAT64; @@ -2574,11 +2583,11 @@ void FCesiumPropertyTablePropertySpec::Define() { glm::dvec2(std::numeric_limits::max(), -1.0)}; std::vector data = GetValuesAsBytes(values); - PropertyTablePropertyView propertyView( + CesiumGltf::PropertyTablePropertyView propertyView( propertyTableProperty, classProperty, static_cast(values.size()), - gsl::span(data.data(), data.size())); + std::span(data.data(), data.size())); FCesiumPropertyTableProperty property(propertyView); TestEqual( "status", @@ -2612,8 +2621,8 @@ void FCesiumPropertyTablePropertySpec::Define() { }); It("gets with offset / scale", [this]() { - PropertyTableProperty propertyTableProperty; - ClassProperty classProperty; + CesiumGltf::PropertyTableProperty propertyTableProperty; + CesiumGltf::ClassProperty classProperty; classProperty.type = ClassProperty::Type::VEC3; classProperty.componentType = ClassProperty::ComponentType::FLOAT32; @@ -2629,11 +2638,11 @@ void FCesiumPropertyTablePropertySpec::Define() { glm::vec3(10.0f, 4.4f, 5.4f)}; std::vector data = GetValuesAsBytes(values); - PropertyTablePropertyView propertyView( + CesiumGltf::PropertyTablePropertyView propertyView( propertyTableProperty, classProperty, static_cast(values.size()), - gsl::span(data.data(), data.size())); + std::span(data.data(), data.size())); FCesiumPropertyTableProperty property(propertyView); TestEqual( "status", @@ -2680,8 +2689,8 @@ void FCesiumPropertyTablePropertySpec::Define() { }); It("returns default value for invalid feature ID", [this]() { - PropertyTableProperty propertyTableProperty; - ClassProperty classProperty; + CesiumGltf::PropertyTableProperty propertyTableProperty; + CesiumGltf::ClassProperty classProperty; classProperty.type = ClassProperty::Type::VEC3; classProperty.componentType = ClassProperty::ComponentType::FLOAT64; @@ -2691,11 +2700,11 @@ void FCesiumPropertyTablePropertySpec::Define() { glm::dvec3(1.5, -1.5, -2.01)}; std::vector data = GetValuesAsBytes(values); - PropertyTablePropertyView propertyView( + CesiumGltf::PropertyTablePropertyView propertyView( propertyTableProperty, classProperty, static_cast(values.size()), - gsl::span(data.data(), data.size())); + std::span(data.data(), data.size())); FCesiumPropertyTableProperty property(propertyView); TestEqual( "status", @@ -2725,8 +2734,8 @@ void FCesiumPropertyTablePropertySpec::Define() { }); It("gets from glm::dvec3 property", [this]() { - PropertyTableProperty propertyTableProperty; - ClassProperty classProperty; + CesiumGltf::PropertyTableProperty propertyTableProperty; + CesiumGltf::ClassProperty classProperty; classProperty.type = ClassProperty::Type::VEC3; classProperty.componentType = ClassProperty::ComponentType::FLOAT64; @@ -2736,11 +2745,11 @@ void FCesiumPropertyTablePropertySpec::Define() { glm::dvec3(1.5, -1.5, -2.01)}; std::vector data = GetValuesAsBytes(values); - PropertyTablePropertyView propertyView( + CesiumGltf::PropertyTablePropertyView propertyView( propertyTableProperty, classProperty, static_cast(values.size()), - gsl::span(data.data(), data.size())); + std::span(data.data(), data.size())); FCesiumPropertyTableProperty property(propertyView); TestEqual( "status", @@ -2766,8 +2775,8 @@ void FCesiumPropertyTablePropertySpec::Define() { }); It("gets from normalized glm::i8vec3 property", [this]() { - PropertyTableProperty propertyTableProperty; - ClassProperty classProperty; + CesiumGltf::PropertyTableProperty propertyTableProperty; + CesiumGltf::ClassProperty classProperty; classProperty.type = ClassProperty::Type::VEC3; classProperty.componentType = ClassProperty::ComponentType::INT8; classProperty.normalized = true; @@ -2778,11 +2787,11 @@ void FCesiumPropertyTablePropertySpec::Define() { glm::i8vec3(1, -1, -2)}; std::vector data = GetValuesAsBytes(values); - PropertyTablePropertyView propertyView( + CesiumGltf::PropertyTablePropertyView propertyView( propertyTableProperty, classProperty, static_cast(values.size()), - gsl::span(data.data(), data.size())); + std::span(data.data(), data.size())); FCesiumPropertyTableProperty property(propertyView); TestEqual( "status", @@ -2813,8 +2822,8 @@ void FCesiumPropertyTablePropertySpec::Define() { }); It("converts compatible values", [this]() { - PropertyTableProperty propertyTableProperty; - ClassProperty classProperty; + CesiumGltf::PropertyTableProperty propertyTableProperty; + CesiumGltf::ClassProperty classProperty; classProperty.type = ClassProperty::Type::STRING; std::vector values{ @@ -2840,13 +2849,13 @@ void FCesiumPropertyTablePropertySpec::Define() { offsets[offsets.size() - 1] = currentOffset; std::vector offsetsData = GetValuesAsBytes(offsets); - PropertyTablePropertyView propertyView( + CesiumGltf::PropertyTablePropertyView propertyView( propertyTableProperty, classProperty, static_cast(values.size()), - gsl::span(data.data(), data.size()), - gsl::span(), - gsl::span(offsetsData.data(), offsetsData.size()), + std::span(data.data(), data.size()), + std::span(), + std::span(offsetsData.data(), offsetsData.size()), PropertyComponentType::None, PropertyComponentType::Uint8); FCesiumPropertyTableProperty property(propertyView); @@ -2877,8 +2886,8 @@ void FCesiumPropertyTablePropertySpec::Define() { }); It("gets with offset / scale", [this]() { - PropertyTableProperty propertyTableProperty; - ClassProperty classProperty; + CesiumGltf::PropertyTableProperty propertyTableProperty; + CesiumGltf::ClassProperty classProperty; classProperty.type = ClassProperty::Type::VEC3; classProperty.componentType = ClassProperty::ComponentType::FLOAT64; @@ -2894,11 +2903,11 @@ void FCesiumPropertyTablePropertySpec::Define() { glm::dvec3(1.5, -1.5, -2.01)}; std::vector data = GetValuesAsBytes(values); - PropertyTablePropertyView propertyView( + CesiumGltf::PropertyTablePropertyView propertyView( propertyTableProperty, classProperty, static_cast(values.size()), - gsl::span(data.data(), data.size())); + std::span(data.data(), data.size())); FCesiumPropertyTableProperty property(propertyView); TestEqual( "status", @@ -2945,8 +2954,8 @@ void FCesiumPropertyTablePropertySpec::Define() { }); It("returns default value for invalid feature ID", [this]() { - PropertyTableProperty propertyTableProperty; - ClassProperty classProperty; + CesiumGltf::PropertyTableProperty propertyTableProperty; + CesiumGltf::ClassProperty classProperty; classProperty.type = ClassProperty::Type::VEC4; classProperty.componentType = ClassProperty::ComponentType::FLOAT64; @@ -2956,11 +2965,11 @@ void FCesiumPropertyTablePropertySpec::Define() { glm::dvec4(1.5, -1.5, -2.01, 5.5)}; std::vector data = GetValuesAsBytes(values); - PropertyTablePropertyView propertyView( + CesiumGltf::PropertyTablePropertyView propertyView( propertyTableProperty, classProperty, static_cast(values.size()), - gsl::span(data.data(), data.size())); + std::span(data.data(), data.size())); FCesiumPropertyTableProperty property(propertyView); TestEqual( "status", @@ -2990,8 +2999,8 @@ void FCesiumPropertyTablePropertySpec::Define() { }); It("gets from glm::dvec4 property", [this]() { - PropertyTableProperty propertyTableProperty; - ClassProperty classProperty; + CesiumGltf::PropertyTableProperty propertyTableProperty; + CesiumGltf::ClassProperty classProperty; classProperty.type = ClassProperty::Type::VEC4; classProperty.componentType = ClassProperty::ComponentType::FLOAT64; @@ -3001,11 +3010,11 @@ void FCesiumPropertyTablePropertySpec::Define() { glm::dvec4(1.5, -1.5, -2.01, 5.5)}; std::vector data = GetValuesAsBytes(values); - PropertyTablePropertyView propertyView( + CesiumGltf::PropertyTablePropertyView propertyView( propertyTableProperty, classProperty, static_cast(values.size()), - gsl::span(data.data(), data.size())); + std::span(data.data(), data.size())); FCesiumPropertyTableProperty property(propertyView); TestEqual( "status", @@ -3035,8 +3044,8 @@ void FCesiumPropertyTablePropertySpec::Define() { }); It("gets from glm::i8vec4 property", [this]() { - PropertyTableProperty propertyTableProperty; - ClassProperty classProperty; + CesiumGltf::PropertyTableProperty propertyTableProperty; + CesiumGltf::ClassProperty classProperty; classProperty.type = ClassProperty::Type::VEC4; classProperty.componentType = ClassProperty::ComponentType::INT8; classProperty.normalized = true; @@ -3047,11 +3056,11 @@ void FCesiumPropertyTablePropertySpec::Define() { glm::i8vec4(1, -1, -2, 5)}; std::vector data = GetValuesAsBytes(values); - PropertyTablePropertyView propertyView( + CesiumGltf::PropertyTablePropertyView propertyView( propertyTableProperty, classProperty, static_cast(values.size()), - gsl::span(data.data(), data.size())); + std::span(data.data(), data.size())); FCesiumPropertyTableProperty property(propertyView); TestEqual( "status", @@ -3087,8 +3096,8 @@ void FCesiumPropertyTablePropertySpec::Define() { }); It("converts compatible values", [this]() { - PropertyTableProperty propertyTableProperty; - ClassProperty classProperty; + CesiumGltf::PropertyTableProperty propertyTableProperty; + CesiumGltf::ClassProperty classProperty; classProperty.type = ClassProperty::Type::STRING; std::vector values{ @@ -3114,13 +3123,13 @@ void FCesiumPropertyTablePropertySpec::Define() { offsets[offsets.size() - 1] = currentOffset; std::vector offsetsData = GetValuesAsBytes(offsets); - PropertyTablePropertyView propertyView( + CesiumGltf::PropertyTablePropertyView propertyView( propertyTableProperty, classProperty, static_cast(values.size()), - gsl::span(data.data(), data.size()), - gsl::span(), - gsl::span(offsetsData.data(), offsetsData.size()), + std::span(data.data(), data.size()), + std::span(), + std::span(offsetsData.data(), offsetsData.size()), PropertyComponentType::None, PropertyComponentType::Uint8); FCesiumPropertyTableProperty property(propertyView); @@ -3151,8 +3160,8 @@ void FCesiumPropertyTablePropertySpec::Define() { }); It("gets with offset / scale", [this]() { - PropertyTableProperty propertyTableProperty; - ClassProperty classProperty; + CesiumGltf::PropertyTableProperty propertyTableProperty; + CesiumGltf::ClassProperty classProperty; classProperty.type = ClassProperty::Type::VEC4; classProperty.componentType = ClassProperty::ComponentType::FLOAT64; @@ -3168,11 +3177,11 @@ void FCesiumPropertyTablePropertySpec::Define() { glm::dvec4(1.5, -1.5, -2.01, 5.5)}; std::vector data = GetValuesAsBytes(values); - PropertyTablePropertyView propertyView( + CesiumGltf::PropertyTablePropertyView propertyView( propertyTableProperty, classProperty, static_cast(values.size()), - gsl::span(data.data(), data.size())); + std::span(data.data(), data.size())); FCesiumPropertyTableProperty property(propertyView); TestEqual( "status", @@ -3220,8 +3229,8 @@ void FCesiumPropertyTablePropertySpec::Define() { }); It("returns default value for invalid feature ID", [this]() { - PropertyTableProperty propertyTableProperty; - ClassProperty classProperty; + CesiumGltf::PropertyTableProperty propertyTableProperty; + CesiumGltf::ClassProperty classProperty; classProperty.type = ClassProperty::Type::MAT4; classProperty.componentType = ClassProperty::ComponentType::FLOAT64; @@ -3241,11 +3250,11 @@ void FCesiumPropertyTablePropertySpec::Define() { // clang-format on std::vector data = GetValuesAsBytes(values); - PropertyTablePropertyView propertyView( + CesiumGltf::PropertyTablePropertyView propertyView( propertyTableProperty, classProperty, static_cast(values.size()), - gsl::span(data.data(), data.size())); + std::span(data.data(), data.size())); FCesiumPropertyTableProperty property(propertyView); TestEqual( "status", @@ -3276,8 +3285,8 @@ void FCesiumPropertyTablePropertySpec::Define() { }); It("gets from glm::dmat4 property", [this]() { - PropertyTableProperty propertyTableProperty; - ClassProperty classProperty; + CesiumGltf::PropertyTableProperty propertyTableProperty; + CesiumGltf::ClassProperty classProperty; classProperty.type = ClassProperty::Type::MAT4; classProperty.componentType = ClassProperty::ComponentType::FLOAT64; @@ -3297,11 +3306,11 @@ void FCesiumPropertyTablePropertySpec::Define() { // clang-format on std::vector data = GetValuesAsBytes(values); - PropertyTablePropertyView propertyView( + CesiumGltf::PropertyTablePropertyView propertyView( propertyTableProperty, classProperty, static_cast(values.size()), - gsl::span(data.data(), data.size())); + std::span(data.data(), data.size())); FCesiumPropertyTableProperty property(propertyView); TestEqual( "status", @@ -3338,8 +3347,8 @@ void FCesiumPropertyTablePropertySpec::Define() { }); It("gets from glm::u8mat4x4 property", [this]() { - PropertyTableProperty propertyTableProperty; - ClassProperty classProperty; + CesiumGltf::PropertyTableProperty propertyTableProperty; + CesiumGltf::ClassProperty classProperty; classProperty.type = ClassProperty::Type::MAT4; classProperty.componentType = ClassProperty::ComponentType::INT8; classProperty.normalized = true; @@ -3360,11 +3369,11 @@ void FCesiumPropertyTablePropertySpec::Define() { // clang-format on std::vector data = GetValuesAsBytes(values); - PropertyTablePropertyView propertyView( + CesiumGltf::PropertyTablePropertyView propertyView( propertyTableProperty, classProperty, static_cast(values.size()), - gsl::span(data.data(), data.size())); + std::span(data.data(), data.size())); FCesiumPropertyTableProperty property(propertyView); TestEqual( "status", @@ -3405,19 +3414,19 @@ void FCesiumPropertyTablePropertySpec::Define() { }); It("converts compatible values", [this]() { - PropertyTableProperty propertyTableProperty; - ClassProperty classProperty; + CesiumGltf::PropertyTableProperty propertyTableProperty; + CesiumGltf::ClassProperty classProperty; classProperty.type = ClassProperty::Type::SCALAR; classProperty.componentType = ClassProperty::ComponentType::FLOAT64; std::vector values{-2.0, 10.5}; std::vector data = GetValuesAsBytes(values); - PropertyTablePropertyView propertyView( + CesiumGltf::PropertyTablePropertyView propertyView( propertyTableProperty, classProperty, static_cast(values.size()), - gsl::span(data.data(), data.size())); + std::span(data.data(), data.size())); FCesiumPropertyTableProperty property(propertyView); TestEqual( "status", @@ -3453,8 +3462,8 @@ void FCesiumPropertyTablePropertySpec::Define() { }); It("returns default values for incompatible type", [this]() { - PropertyTableProperty propertyTableProperty; - ClassProperty classProperty; + CesiumGltf::PropertyTableProperty propertyTableProperty; + CesiumGltf::ClassProperty classProperty; classProperty.type = ClassProperty::Type::VEC2; classProperty.componentType = ClassProperty::ComponentType::FLOAT32; @@ -3463,11 +3472,11 @@ void FCesiumPropertyTablePropertySpec::Define() { glm::vec2(1.5f, 0.1f)}; std::vector data = GetValuesAsBytes(values); - PropertyTablePropertyView propertyView( + CesiumGltf::PropertyTablePropertyView propertyView( propertyTableProperty, classProperty, static_cast(values.size()), - gsl::span(data.data(), data.size())); + std::span(data.data(), data.size())); FCesiumPropertyTableProperty property(propertyView); TestEqual( "status", @@ -3492,8 +3501,8 @@ void FCesiumPropertyTablePropertySpec::Define() { }); It("gets with offset / scale", [this]() { - PropertyTableProperty propertyTableProperty; - ClassProperty classProperty; + CesiumGltf::PropertyTableProperty propertyTableProperty; + CesiumGltf::ClassProperty classProperty; classProperty.type = ClassProperty::Type::MAT4; classProperty.componentType = ClassProperty::ComponentType::FLOAT64; @@ -3526,11 +3535,11 @@ void FCesiumPropertyTablePropertySpec::Define() { // clang-format on std::vector data = GetValuesAsBytes(values); - PropertyTablePropertyView propertyView( + CesiumGltf::PropertyTablePropertyView propertyView( propertyTableProperty, classProperty, static_cast(values.size()), - gsl::span(data.data(), data.size())); + std::span(data.data(), data.size())); FCesiumPropertyTableProperty property(propertyView); TestEqual( "status", @@ -3569,19 +3578,19 @@ void FCesiumPropertyTablePropertySpec::Define() { Describe("GetArray", [this]() { It("returns empty array for non-array property", [this]() { - PropertyTableProperty propertyTableProperty; - ClassProperty classProperty; + CesiumGltf::PropertyTableProperty propertyTableProperty; + CesiumGltf::ClassProperty classProperty; classProperty.type = ClassProperty::Type::SCALAR; classProperty.componentType = ClassProperty::ComponentType::INT32; std::vector values{1, 2, 3, 4, 5, 6}; std::vector data = GetValuesAsBytes(values); - PropertyTablePropertyView propertyView( + CesiumGltf::PropertyTablePropertyView propertyView( propertyTableProperty, classProperty, static_cast(values.size()), - gsl::span(data.data(), data.size())); + std::span(data.data(), data.size())); FCesiumPropertyTableProperty property(propertyView); TestEqual( "PropertyTablePropertyStatus", @@ -3629,8 +3638,8 @@ void FCesiumPropertyTablePropertySpec::Define() { }); It("returns empty array for invalid feature ID", [this]() { - PropertyTableProperty propertyTableProperty; - ClassProperty classProperty; + CesiumGltf::PropertyTableProperty propertyTableProperty; + CesiumGltf::ClassProperty classProperty; classProperty.type = ClassProperty::Type::SCALAR; classProperty.componentType = ClassProperty::ComponentType::INT32; classProperty.array = true; @@ -3640,15 +3649,16 @@ void FCesiumPropertyTablePropertySpec::Define() { std::vector data = GetValuesAsBytes(values); int64 size = static_cast(values.size()) / *classProperty.count; - PropertyTablePropertyView> propertyView( - propertyTableProperty, - classProperty, - size, - gsl::span(data.data(), data.size()), - gsl::span(), - gsl::span(), - PropertyComponentType::None, - PropertyComponentType::None); + CesiumGltf::PropertyTablePropertyView> + propertyView( + propertyTableProperty, + classProperty, + size, + std::span(data.data(), data.size()), + std::span(), + std::span(), + PropertyComponentType::None, + PropertyComponentType::None); FCesiumPropertyTableProperty property(propertyView); TestEqual( "PropertyTablePropertyStatus", @@ -3686,8 +3696,8 @@ void FCesiumPropertyTablePropertySpec::Define() { }); It("returns array for fixed-length array property", [this]() { - PropertyTableProperty propertyTableProperty; - ClassProperty classProperty; + CesiumGltf::PropertyTableProperty propertyTableProperty; + CesiumGltf::ClassProperty classProperty; classProperty.type = ClassProperty::Type::SCALAR; classProperty.componentType = ClassProperty::ComponentType::INT32; classProperty.array = true; @@ -3697,15 +3707,16 @@ void FCesiumPropertyTablePropertySpec::Define() { std::vector data = GetValuesAsBytes(values); int64 size = static_cast(values.size()) / *classProperty.count; - PropertyTablePropertyView> propertyView( - propertyTableProperty, - classProperty, - size, - gsl::span(data.data(), data.size()), - gsl::span(), - gsl::span(), - PropertyComponentType::None, - PropertyComponentType::None); + CesiumGltf::PropertyTablePropertyView> + propertyView( + propertyTableProperty, + classProperty, + size, + std::span(data.data(), data.size()), + std::span(), + std::span(), + PropertyComponentType::None, + PropertyComponentType::None); FCesiumPropertyTableProperty property(propertyView); TestEqual( "PropertyTablePropertyStatus", @@ -3751,8 +3762,8 @@ void FCesiumPropertyTablePropertySpec::Define() { }); It("returns array for variable-length array property", [this]() { - PropertyTableProperty propertyTableProperty; - ClassProperty classProperty; + CesiumGltf::PropertyTableProperty propertyTableProperty; + CesiumGltf::ClassProperty classProperty; classProperty.type = ClassProperty::Type::SCALAR; classProperty.componentType = ClassProperty::ComponentType::INT32; classProperty.array = true; @@ -3764,15 +3775,18 @@ void FCesiumPropertyTablePropertySpec::Define() { std::vector offsetsData = GetValuesAsBytes(offsets); int64 size = static_cast(offsets.size() - 1); - PropertyTablePropertyView> propertyView( - propertyTableProperty, - classProperty, - size, - gsl::span(data.data(), data.size()), - gsl::span(offsetsData.data(), offsetsData.size()), - gsl::span(), - PropertyComponentType::Uint16, - PropertyComponentType::None); + CesiumGltf::PropertyTablePropertyView> + propertyView( + propertyTableProperty, + classProperty, + size, + std::span(data.data(), data.size()), + std::span( + offsetsData.data(), + offsetsData.size()), + std::span(), + PropertyComponentType::Uint16, + PropertyComponentType::None); FCesiumPropertyTableProperty property(propertyView); TestEqual( "PropertyTablePropertyStatus", @@ -3824,8 +3838,8 @@ void FCesiumPropertyTablePropertySpec::Define() { }); It("gets with noData value", [this]() { - PropertyTableProperty propertyTableProperty; - ClassProperty classProperty; + CesiumGltf::PropertyTableProperty propertyTableProperty; + CesiumGltf::ClassProperty classProperty; classProperty.type = ClassProperty::Type::SCALAR; classProperty.componentType = ClassProperty::ComponentType::INT32; classProperty.array = true; @@ -3837,15 +3851,16 @@ void FCesiumPropertyTablePropertySpec::Define() { std::vector data = GetValuesAsBytes(values); int64 size = static_cast(values.size()) / *classProperty.count; - PropertyTablePropertyView> propertyView( - propertyTableProperty, - classProperty, - size, - gsl::span(data.data(), data.size()), - gsl::span(), - gsl::span(), - PropertyComponentType::None, - PropertyComponentType::None); + CesiumGltf::PropertyTablePropertyView> + propertyView( + propertyTableProperty, + classProperty, + size, + std::span(data.data(), data.size()), + std::span(), + std::span(), + PropertyComponentType::None, + PropertyComponentType::None); FCesiumPropertyTableProperty property(propertyView); TestEqual( "PropertyTablePropertyStatus", @@ -3910,8 +3925,8 @@ void FCesiumPropertyTablePropertySpec::Define() { }); It("gets with noData / default value", [this]() { - PropertyTableProperty propertyTableProperty; - ClassProperty classProperty; + CesiumGltf::PropertyTableProperty propertyTableProperty; + CesiumGltf::ClassProperty classProperty; classProperty.type = ClassProperty::Type::SCALAR; classProperty.componentType = ClassProperty::ComponentType::INT32; classProperty.array = true; @@ -3924,15 +3939,16 @@ void FCesiumPropertyTablePropertySpec::Define() { std::vector data = GetValuesAsBytes(values); int64 size = static_cast(values.size()) / *classProperty.count; - PropertyTablePropertyView> propertyView( - propertyTableProperty, - classProperty, - size, - gsl::span(data.data(), data.size()), - gsl::span(), - gsl::span(), - PropertyComponentType::None, - PropertyComponentType::None); + CesiumGltf::PropertyTablePropertyView> + propertyView( + propertyTableProperty, + classProperty, + size, + std::span(data.data(), data.size()), + std::span(), + std::span(), + PropertyComponentType::None, + PropertyComponentType::None); FCesiumPropertyTableProperty property(propertyView); TestEqual( "PropertyTablePropertyStatus", @@ -4019,19 +4035,19 @@ void FCesiumPropertyTablePropertySpec::Define() { }); It("returns empty value for invalid feature ID", [this]() { - PropertyTableProperty propertyTableProperty; - ClassProperty classProperty; + CesiumGltf::PropertyTableProperty propertyTableProperty; + CesiumGltf::ClassProperty classProperty; classProperty.type = ClassProperty::Type::SCALAR; classProperty.componentType = ClassProperty::ComponentType::INT32; std::vector values{-1, 2, -3, 4}; std::vector data = GetValuesAsBytes(values); - PropertyTablePropertyView propertyView( + CesiumGltf::PropertyTablePropertyView propertyView( propertyTableProperty, classProperty, static_cast(values.size()), - gsl::span(data.data(), data.size())); + std::span(data.data(), data.size())); FCesiumPropertyTableProperty property(propertyView); TestEqual( "status", @@ -4061,19 +4077,19 @@ void FCesiumPropertyTablePropertySpec::Define() { }); It("gets value for valid feature IDs", [this]() { - PropertyTableProperty propertyTableProperty; - ClassProperty classProperty; + CesiumGltf::PropertyTableProperty propertyTableProperty; + CesiumGltf::ClassProperty classProperty; classProperty.type = ClassProperty::Type::SCALAR; classProperty.componentType = ClassProperty::ComponentType::INT32; std::vector values{-1, 2, -3, 4}; std::vector data = GetValuesAsBytes(values); - PropertyTablePropertyView propertyView( + CesiumGltf::PropertyTablePropertyView propertyView( propertyTableProperty, classProperty, static_cast(values.size()), - gsl::span(data.data(), data.size())); + std::span(data.data(), data.size())); FCesiumPropertyTableProperty property(propertyView); TestEqual( "status", @@ -4105,8 +4121,8 @@ void FCesiumPropertyTablePropertySpec::Define() { }); It("gets with offset / scale", [this]() { - PropertyTableProperty propertyTableProperty; - ClassProperty classProperty; + CesiumGltf::PropertyTableProperty propertyTableProperty; + CesiumGltf::ClassProperty classProperty; classProperty.type = ClassProperty::Type::SCALAR; classProperty.componentType = ClassProperty::ComponentType::FLOAT32; @@ -4119,11 +4135,11 @@ void FCesiumPropertyTablePropertySpec::Define() { classProperty.offset = offset; classProperty.scale = scale; - PropertyTablePropertyView propertyView( + CesiumGltf::PropertyTablePropertyView propertyView( propertyTableProperty, classProperty, static_cast(values.size()), - gsl::span(data.data(), data.size())); + std::span(data.data(), data.size())); FCesiumPropertyTableProperty property(propertyView); TestEqual( "status", @@ -4155,8 +4171,8 @@ void FCesiumPropertyTablePropertySpec::Define() { }); It("gets with noData", [this]() { - PropertyTableProperty propertyTableProperty; - ClassProperty classProperty; + CesiumGltf::PropertyTableProperty propertyTableProperty; + CesiumGltf::ClassProperty classProperty; classProperty.type = ClassProperty::Type::SCALAR; classProperty.componentType = ClassProperty::ComponentType::INT32; @@ -4166,11 +4182,11 @@ void FCesiumPropertyTablePropertySpec::Define() { std::vector values{-1, 2, -3, 4}; std::vector data = GetValuesAsBytes(values); - PropertyTablePropertyView propertyView( + CesiumGltf::PropertyTablePropertyView propertyView( propertyTableProperty, classProperty, static_cast(values.size()), - gsl::span(data.data(), data.size())); + std::span(data.data(), data.size())); FCesiumPropertyTableProperty property(propertyView); TestEqual( "status", @@ -4210,8 +4226,8 @@ void FCesiumPropertyTablePropertySpec::Define() { }); It("gets with noData / default value", [this]() { - PropertyTableProperty propertyTableProperty; - ClassProperty classProperty; + CesiumGltf::PropertyTableProperty propertyTableProperty; + CesiumGltf::ClassProperty classProperty; classProperty.type = ClassProperty::Type::SCALAR; classProperty.componentType = ClassProperty::ComponentType::INT32; @@ -4224,11 +4240,11 @@ void FCesiumPropertyTablePropertySpec::Define() { std::vector values{-1, 2, -3, 4}; std::vector data = GetValuesAsBytes(values); - PropertyTablePropertyView propertyView( + CesiumGltf::PropertyTablePropertyView propertyView( propertyTableProperty, classProperty, static_cast(values.size()), - gsl::span(data.data(), data.size())); + std::span(data.data(), data.size())); FCesiumPropertyTableProperty property(propertyView); TestEqual( "status", diff --git a/Source/CesiumRuntime/Private/Tests/CesiumPropertyTexture.spec.cpp b/Source/CesiumRuntime/Private/Tests/CesiumPropertyTexture.spec.cpp index 52a9d8381..8465832f7 100644 --- a/Source/CesiumRuntime/Private/Tests/CesiumPropertyTexture.spec.cpp +++ b/Source/CesiumRuntime/Private/Tests/CesiumPropertyTexture.spec.cpp @@ -1,25 +1,25 @@ // Copyright 2020-2024 CesiumGS, Inc. and Contributors +#include "CesiumPropertyTexture.h" #include "CesiumGltf/ExtensionModelExtStructuralMetadata.h" #include "CesiumGltf/Model.h" #include "CesiumGltfComponent.h" #include "CesiumGltfPrimitiveComponent.h" #include "CesiumGltfSpecUtility.h" -#include "CesiumPropertyTexture.h" #include "Misc/AutomationTest.h" #include -using namespace CesiumGltf; - BEGIN_DEFINE_SPEC( FCesiumPropertyTextureSpec, "Cesium.Unit.PropertyTexture", - EAutomationTestFlags::ApplicationContextMask | + EAutomationTestFlags::EditorContext | EAutomationTestFlags::ClientContext | + EAutomationTestFlags::ServerContext | + EAutomationTestFlags::CommandletContext | EAutomationTestFlags::ProductFilter) -Model model; -MeshPrimitive* pPrimitive; -ExtensionModelExtStructuralMetadata* pExtension; -PropertyTexture* pPropertyTexture; +CesiumGltf::Model model; +CesiumGltf::MeshPrimitive* pPrimitive; +CesiumGltf::ExtensionModelExtStructuralMetadata* pExtension; +CesiumGltf::PropertyTexture* pPropertyTexture; TObjectPtr pModelComponent; TObjectPtr pPrimitiveComponent; @@ -31,10 +31,12 @@ const std::vector texCoords{ END_DEFINE_SPEC(FCesiumPropertyTextureSpec) void FCesiumPropertyTextureSpec::Define() { + using namespace CesiumGltf; + BeforeEach([this]() { model = Model(); pExtension = &model.addExtension(); - pExtension->schema = Schema(); + pExtension->schema.emplace(); pPropertyTexture = &pExtension->propertyTextures.emplace_back(); }); @@ -53,7 +55,7 @@ void FCesiumPropertyTextureSpec::Define() { }); It("constructs invalid instance for missing schema", [this]() { - pExtension->schema = std::nullopt; + pExtension->schema.reset(); FCesiumPropertyTexture propertyTexture(model, *pPropertyTexture); TestEqual( @@ -676,7 +678,8 @@ void FCesiumPropertyTextureSpec::Define() { FHitResult Hit; Hit.Component = nullptr; Hit.FaceIndex = 0; - Hit.Location = {0, 0, 0}; + Hit.Location = FVector_NetQuantize{0, 0, 0} * + CesiumPrimitiveData::positionScaleFactor; const auto values = UCesiumPropertyTextureBlueprintLibrary::GetMetadataValuesFromHit( @@ -741,7 +744,7 @@ void FCesiumPropertyTextureSpec::Define() { FIntPoint(1, 2)}; for (size_t i = 0; i < locations.size(); i++) { - Hit.Location = locations[i]; + Hit.Location = locations[i] * CesiumPrimitiveData::positionScaleFactor; const auto values = UCesiumPropertyTextureBlueprintLibrary::GetMetadataValuesFromHit( propertyTexture, @@ -807,7 +810,8 @@ void FCesiumPropertyTextureSpec::Define() { FHitResult Hit; Hit.Component = pPrimitiveComponent; Hit.FaceIndex = 0; - Hit.Location = {0, 0, 0}; + Hit.Location = FVector_NetQuantize{0, 0, 0} * + CesiumPrimitiveData::positionScaleFactor; const auto values = UCesiumPropertyTextureBlueprintLibrary::GetMetadataValuesFromHit( diff --git a/Source/CesiumRuntime/Private/Tests/CesiumPropertyTextureProperty.spec.cpp b/Source/CesiumRuntime/Private/Tests/CesiumPropertyTextureProperty.spec.cpp index 41e728f16..0c23881d2 100644 --- a/Source/CesiumRuntime/Private/Tests/CesiumPropertyTextureProperty.spec.cpp +++ b/Source/CesiumRuntime/Private/Tests/CesiumPropertyTextureProperty.spec.cpp @@ -1,17 +1,17 @@ // Copyright 2020-2024 CesiumGS, Inc. and Contributors +#include "CesiumPropertyTextureProperty.h" #include "CesiumGltfSpecUtility.h" #include "CesiumPropertyArrayBlueprintLibrary.h" -#include "CesiumPropertyTextureProperty.h" #include "Misc/AutomationTest.h" #include -using namespace CesiumGltf; - BEGIN_DEFINE_SPEC( FCesiumPropertyTexturePropertySpec, "Cesium.Unit.PropertyTextureProperty", - EAutomationTestFlags::ApplicationContextMask | + EAutomationTestFlags::EditorContext | EAutomationTestFlags::ClientContext | + EAutomationTestFlags::ServerContext | + EAutomationTestFlags::CommandletContext | EAutomationTestFlags::ProductFilter) const std::vector texCoords{ FVector2D(0, 0), @@ -21,6 +21,8 @@ const std::vector texCoords{ END_DEFINE_SPEC(FCesiumPropertyTexturePropertySpec) void FCesiumPropertyTexturePropertySpec::Define() { + using namespace CesiumGltf; + Describe("Constructor", [this]() { It("constructs invalid instance by default", [this]() { FCesiumPropertyTextureProperty property; @@ -81,7 +83,7 @@ void FCesiumPropertyTexturePropertySpec::Define() { classProperty.componentType = ClassProperty::ComponentType::UINT8; Sampler sampler; - ImageCesium image; + ImageAsset image; image.width = 2; image.height = 2; image.channels = 1; @@ -170,7 +172,7 @@ void FCesiumPropertyTexturePropertySpec::Define() { classProperty.normalized = true; Sampler sampler; - ImageCesium image; + ImageAsset image; image.width = 2; image.height = 2; image.channels = 1; @@ -235,7 +237,7 @@ void FCesiumPropertyTexturePropertySpec::Define() { classProperty.count = 2; Sampler sampler; - ImageCesium image; + ImageAsset image; image.width = 2; image.height = 2; image.channels = 2; @@ -312,7 +314,7 @@ void FCesiumPropertyTexturePropertySpec::Define() { classProperty.defaultProperty = defaultValue; Sampler sampler; - ImageCesium image; + ImageAsset image; image.width = 2; image.height = 2; image.channels = 1; @@ -434,7 +436,7 @@ void FCesiumPropertyTexturePropertySpec::Define() { classProperty.componentType = ClassProperty::ComponentType::UINT8; Sampler sampler; - ImageCesium image; + ImageAsset image; image.width = 2; image.height = 2; image.channels = 1; @@ -472,7 +474,7 @@ void FCesiumPropertyTexturePropertySpec::Define() { classProperty.componentType = ClassProperty::ComponentType::INT16; Sampler sampler; - ImageCesium image; + ImageAsset image; image.width = 2; image.height = 2; image.channels = 2; @@ -526,7 +528,7 @@ void FCesiumPropertyTexturePropertySpec::Define() { classProperty.defaultProperty = defaultValue; Sampler sampler; - ImageCesium image; + ImageAsset image; image.width = 2; image.height = 2; image.channels = 1; @@ -590,7 +592,7 @@ void FCesiumPropertyTexturePropertySpec::Define() { classProperty.componentType = ClassProperty::ComponentType::INT32; Sampler sampler; - ImageCesium image; + ImageAsset image; image.width = 2; image.height = 2; image.channels = 4; @@ -634,7 +636,7 @@ void FCesiumPropertyTexturePropertySpec::Define() { classProperty.componentType = ClassProperty::ComponentType::FLOAT32; Sampler sampler; - ImageCesium image; + ImageAsset image; image.width = 2; image.height = 2; image.channels = 4; @@ -688,7 +690,7 @@ void FCesiumPropertyTexturePropertySpec::Define() { classProperty.defaultProperty = defaultValue; Sampler sampler; - ImageCesium image; + ImageAsset image; image.width = 2; image.height = 2; image.channels = 4; @@ -758,7 +760,7 @@ void FCesiumPropertyTexturePropertySpec::Define() { classProperty.componentType = ClassProperty::ComponentType::FLOAT32; Sampler sampler; - ImageCesium image; + ImageAsset image; image.width = 2; image.height = 2; image.channels = 4; @@ -804,7 +806,7 @@ void FCesiumPropertyTexturePropertySpec::Define() { classProperty.componentType = ClassProperty::ComponentType::UINT8; Sampler sampler; - ImageCesium image; + ImageAsset image; image.width = 2; image.height = 2; image.channels = 1; @@ -848,7 +850,7 @@ void FCesiumPropertyTexturePropertySpec::Define() { classProperty.scale = scale; Sampler sampler; - ImageCesium image; + ImageAsset image; image.width = 2; image.height = 2; image.channels = 4; @@ -912,7 +914,7 @@ void FCesiumPropertyTexturePropertySpec::Define() { classProperty.normalized = true; Sampler sampler; - ImageCesium image; + ImageAsset image; image.width = 2; image.height = 2; image.channels = 1; @@ -955,7 +957,7 @@ void FCesiumPropertyTexturePropertySpec::Define() { classProperty.componentType = ClassProperty::ComponentType::FLOAT32; Sampler sampler; - ImageCesium image; + ImageAsset image; image.width = 2; image.height = 2; image.channels = 4; @@ -1008,7 +1010,7 @@ void FCesiumPropertyTexturePropertySpec::Define() { classProperty.scale = scale; Sampler sampler; - ImageCesium image; + ImageAsset image; image.width = 2; image.height = 2; image.channels = 1; @@ -1066,7 +1068,7 @@ void FCesiumPropertyTexturePropertySpec::Define() { classProperty.componentType = ClassProperty::ComponentType::INT8; Sampler sampler; - ImageCesium image; + ImageAsset image; image.width = 2; image.height = 2; image.channels = 2; @@ -1110,7 +1112,7 @@ void FCesiumPropertyTexturePropertySpec::Define() { classProperty.componentType = ClassProperty::ComponentType::FLOAT32; Sampler sampler; - ImageCesium image; + ImageAsset image; image.width = 2; image.height = 2; image.channels = 4; @@ -1168,7 +1170,7 @@ void FCesiumPropertyTexturePropertySpec::Define() { classProperty.defaultProperty = {defaultValue[0], defaultValue[1]}; Sampler sampler; - ImageCesium image; + ImageAsset image; image.width = 2; image.height = 2; image.channels = 2; @@ -1239,7 +1241,7 @@ void FCesiumPropertyTexturePropertySpec::Define() { classProperty.normalized = true; Sampler sampler; - ImageCesium image; + ImageAsset image; image.width = 2; image.height = 2; image.channels = 2; @@ -1290,7 +1292,7 @@ void FCesiumPropertyTexturePropertySpec::Define() { classProperty.componentType = ClassProperty::ComponentType::UINT8; Sampler sampler; - ImageCesium image; + ImageAsset image; image.width = 2; image.height = 2; image.channels = 2; @@ -1342,7 +1344,7 @@ void FCesiumPropertyTexturePropertySpec::Define() { classProperty.scale = {scale[0], scale[1]}; Sampler sampler; - ImageCesium image; + ImageAsset image; image.width = 2; image.height = 2; image.channels = 2; @@ -1409,7 +1411,7 @@ void FCesiumPropertyTexturePropertySpec::Define() { classProperty.componentType = ClassProperty::ComponentType::INT8; Sampler sampler; - ImageCesium image; + ImageAsset image; image.width = 2; image.height = 2; image.channels = 3; @@ -1453,7 +1455,7 @@ void FCesiumPropertyTexturePropertySpec::Define() { classProperty.componentType = ClassProperty::ComponentType::FLOAT32; Sampler sampler; - ImageCesium image; + ImageAsset image; image.width = 2; image.height = 2; image.channels = 4; @@ -1514,7 +1516,7 @@ void FCesiumPropertyTexturePropertySpec::Define() { defaultValue[2]}; Sampler sampler; - ImageCesium image; + ImageAsset image; image.width = 2; image.height = 2; image.channels = 3; @@ -1585,7 +1587,7 @@ void FCesiumPropertyTexturePropertySpec::Define() { classProperty.normalized = true; Sampler sampler; - ImageCesium image; + ImageAsset image; image.width = 2; image.height = 2; image.channels = 3; @@ -1637,7 +1639,7 @@ void FCesiumPropertyTexturePropertySpec::Define() { classProperty.componentType = ClassProperty::ComponentType::INT8; Sampler sampler; - ImageCesium image; + ImageAsset image; image.width = 2; image.height = 2; image.channels = 3; @@ -1689,7 +1691,7 @@ void FCesiumPropertyTexturePropertySpec::Define() { classProperty.scale = {scale[0], scale[1], scale[2]}; Sampler sampler; - ImageCesium image; + ImageAsset image; image.width = 2; image.height = 2; image.channels = 3; @@ -1757,7 +1759,7 @@ void FCesiumPropertyTexturePropertySpec::Define() { classProperty.normalized = true; Sampler sampler; - ImageCesium image; + ImageAsset image; image.width = 2; image.height = 2; image.channels = 4; @@ -1814,7 +1816,7 @@ void FCesiumPropertyTexturePropertySpec::Define() { classProperty.componentType = ClassProperty::ComponentType::INT8; Sampler sampler; - ImageCesium image; + ImageAsset image; image.width = 2; image.height = 2; image.channels = 4; @@ -1872,7 +1874,7 @@ void FCesiumPropertyTexturePropertySpec::Define() { classProperty.scale = {scale[0], scale[1], scale[2], scale[3]}; Sampler sampler; - ImageCesium image; + ImageAsset image; image.width = 2; image.height = 2; image.channels = 4; @@ -1923,7 +1925,7 @@ void FCesiumPropertyTexturePropertySpec::Define() { classProperty.componentType = ClassProperty::ComponentType::INT32; Sampler sampler; - ImageCesium image; + ImageAsset image; image.width = 2; image.height = 2; image.channels = 4; @@ -1999,7 +2001,7 @@ void FCesiumPropertyTexturePropertySpec::Define() { classProperty.count = 2; Sampler sampler; - ImageCesium image; + ImageAsset image; image.width = 2; image.height = 2; image.channels = 2; @@ -2067,7 +2069,7 @@ void FCesiumPropertyTexturePropertySpec::Define() { classProperty.noData = {0, 0}; Sampler sampler; - ImageCesium image; + ImageAsset image; image.width = 2; image.height = 2; image.channels = 2; @@ -2155,7 +2157,7 @@ void FCesiumPropertyTexturePropertySpec::Define() { classProperty.defaultProperty = {10, 20}; Sampler sampler; - ImageCesium image; + ImageAsset image; image.width = 2; image.height = 2; image.channels = 2; @@ -2256,7 +2258,7 @@ void FCesiumPropertyTexturePropertySpec::Define() { classProperty.componentType = ClassProperty::ComponentType::INT32; Sampler sampler; - ImageCesium image; + ImageAsset image; image.width = 2; image.height = 2; image.channels = 4; @@ -2316,7 +2318,7 @@ void FCesiumPropertyTexturePropertySpec::Define() { classProperty.scale = scale; Sampler sampler; - ImageCesium image; + ImageAsset image; image.width = 2; image.height = 2; image.channels = 4; @@ -2373,7 +2375,7 @@ void FCesiumPropertyTexturePropertySpec::Define() { classProperty.noData = noData; Sampler sampler; - ImageCesium image; + ImageAsset image; image.width = 2; image.height = 2; image.channels = 4; @@ -2441,7 +2443,7 @@ void FCesiumPropertyTexturePropertySpec::Define() { classProperty.defaultProperty = defaultValue; Sampler sampler; - ImageCesium image; + ImageAsset image; image.width = 2; image.height = 2; image.channels = 4; diff --git a/Source/CesiumRuntime/Private/Tests/CesiumSceneGeneration.cpp b/Source/CesiumRuntime/Private/Tests/CesiumSceneGeneration.cpp index 05a24035b..671236607 100644 --- a/Source/CesiumRuntime/Private/Tests/CesiumSceneGeneration.cpp +++ b/Source/CesiumRuntime/Private/Tests/CesiumSceneGeneration.cpp @@ -19,7 +19,7 @@ namespace Cesium { FString SceneGenerationContext::testIonToken( - "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJqdGkiOiIyOGEwZmZhZS03N2U3LTQ3YzMtYWRhYy05OGY0MDIxY2ZkMWEiLCJpZCI6MjU5LCJpYXQiOjE3MTczODI3OTd9.xo6dUz0EilPaeagaXnmRKGLyVL4lTk3P99u1_1N78js"); + "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJqdGkiOiI0Yjc0ZGNhYy0zZGRmLTQ2MjItYTYzNy1hNjEwNGE2NWEzM2QiLCJpZCI6MjU5LCJpYXQiOjE3Mzg1MzAwNzl9.vMHaV_X1sHiTNtu0dRp1dYscpRrGF74kMeoKK6H3uK8"); void SceneGenerationContext::setCommonProperties( const FVector& origin, diff --git a/Source/CesiumRuntime/Private/Tests/CesiumTestHelpers.cpp b/Source/CesiumRuntime/Private/Tests/CesiumTestHelpers.cpp index a1b53d17f..34dcdf0a0 100644 --- a/Source/CesiumRuntime/Private/Tests/CesiumTestHelpers.cpp +++ b/Source/CesiumRuntime/Private/Tests/CesiumTestHelpers.cpp @@ -4,6 +4,11 @@ #include "CesiumGeoreference.h" #include "Engine/Engine.h" +#if WITH_EDITOR +#include "Editor/EditorPerformanceSettings.h" +#include "Interfaces/IPluginManager.h" +#endif + namespace CesiumTestHelpers { UWorld* getGlobalWorldContext() { @@ -63,6 +68,37 @@ FName getUniqueTag(UActorComponent* pComponent) { return FName(FString::Printf(TEXT("%lld"), pComponent)); } +#if WITH_EDITOR +namespace { +size_t timesAllowingEditorTick = 0; +bool originalEditorTickState = true; +} // namespace +#endif + +void pushAllowTickInEditor() { +#if WITH_EDITOR + if (timesAllowingEditorTick == 0) { + UEditorPerformanceSettings* pSettings = + GetMutableDefault(); + originalEditorTickState = pSettings->bThrottleCPUWhenNotForeground; + pSettings->bThrottleCPUWhenNotForeground = false; + } + + ++timesAllowingEditorTick; +#endif +} + +void popAllowTickInEditor() { +#if WITH_EDITOR + --timesAllowingEditorTick; + if (timesAllowingEditorTick == 0) { + UEditorPerformanceSettings* pSettings = + GetMutableDefault(); + pSettings->bThrottleCPUWhenNotForeground = originalEditorTickState; + } +#endif +} + void trackForPlay(AActor* pEditorActor) { pEditorActor->Tags.Add(getUniqueTag(pEditorActor)); } diff --git a/Source/CesiumRuntime/Private/Tests/CesiumTestHelpers.h b/Source/CesiumRuntime/Private/Tests/CesiumTestHelpers.h index 2e0c67ac5..932eebd6d 100644 --- a/Source/CesiumRuntime/Private/Tests/CesiumTestHelpers.h +++ b/Source/CesiumRuntime/Private/Tests/CesiumTestHelpers.h @@ -52,7 +52,10 @@ void waitForImpl( done.Execute(); } else { pWorld->GetTimerManager().SetTimerForNextTick( - [done, pWorld, condition, timerHandle]() mutable { + [done, + pWorld, + condition = std::forward(condition), + timerHandle]() mutable { waitForImpl(done, pWorld, std::move(condition), timerHandle); }); } @@ -135,6 +138,20 @@ FName getUniqueTag(AActor* pActor); /// The unique tag. FName getUniqueTag(UActorComponent* pComponent); +/// +/// By default, UE 5.3+ don't tick in a headless Editor, which is often used to +/// run tests. Call this at the start of a test that requires ticking to +/// override this default. Call popAllowTickInEditor after the test to restore +/// the default. +/// +void pushAllowTickInEditor(); + +/// +/// Call this after a test that needs working ticking to restore the default +/// state. +/// +void popAllowTickInEditor(); + #if WITH_EDITOR /// @@ -176,9 +193,9 @@ template T* findInPlay(T* pEditorObject) { if (!pPlayOwner) return nullptr; return getComponentWithTag(pPlayOwner, getUniqueTag(pEditorObject)); + } else { + return nullptr; } - - return nullptr; } /// diff --git a/Source/CesiumRuntime/Private/Tests/CesiumTestPass.h b/Source/CesiumRuntime/Private/Tests/CesiumTestPass.h new file mode 100644 index 000000000..13480ba73 --- /dev/null +++ b/Source/CesiumRuntime/Private/Tests/CesiumTestPass.h @@ -0,0 +1,37 @@ +#pragma once + +#if WITH_EDITOR + +#include +#include + +#include "CesiumSceneGeneration.h" +#include "Tests/AutomationCommon.h" + +namespace Cesium { + +struct TestPass { + typedef std::variant TestingParameter; + typedef std::function< + void(SceneGenerationContext&, TestingParameter)> + SetupPassCallback; + typedef std::function< + bool(SceneGenerationContext&, SceneGenerationContext&, TestingParameter)> + VerifyPassCallback; + + FString name; + SetupPassCallback setupStep; + VerifyPassCallback verifyStep; + TestingParameter optionalParameter; + + bool testInProgress = false; + double startMark = 0; + double endMark = 0; + double elapsedTime = 0; + + bool isFastest = false; +}; + +} // namespace Cesium + +#endif diff --git a/Source/CesiumRuntime/Private/Tests/CesiumTextureUtility.spec.cpp b/Source/CesiumRuntime/Private/Tests/CesiumTextureUtility.spec.cpp index 10b8ba83b..fea05be2a 100644 --- a/Source/CesiumRuntime/Private/Tests/CesiumTextureUtility.spec.cpp +++ b/Source/CesiumRuntime/Private/Tests/CesiumTextureUtility.spec.cpp @@ -1,26 +1,32 @@ // Copyright 2020-2024 CesiumGS, Inc. and Contributors #include "CesiumTextureUtility.h" +#include "CesiumAsync/AsyncSystem.h" +#include "ExtensionImageAssetUnreal.h" #include "Misc/AutomationTest.h" #include "RenderingThread.h" +#include +#include +#include -using namespace CesiumGltf; using namespace CesiumTextureUtility; using namespace CesiumUtility; BEGIN_DEFINE_SPEC( CesiumTextureUtilitySpec, "Cesium.Unit.CesiumTextureUtility", - EAutomationTestFlags::ApplicationContextMask | + EAutomationTestFlags::EditorContext | EAutomationTestFlags::ClientContext | EAutomationTestFlags::ProductFilter | EAutomationTestFlags::NonNullRHI) std::vector originalPixels; std::vector originalMipPixels; -ImageCesium imageCesium; +std::vector expectedMipPixelsIfGenerated; +CesiumUtility::IntrusivePointer pImageAsset; void RunTests(); void CheckPixels( - const IntrusivePointer& pRefCountedTexture); + const IntrusivePointer& pRefCountedTexture, + bool requireMips = false); void CheckSRGB( const IntrusivePointer& pRefCountedTexture, bool expectedSRGB); @@ -44,20 +50,35 @@ void CesiumTextureUtilitySpec::Define() { 0x24, 0x44, 0x84, 0xF4, 0x25, 0x45, 0x85, 0xF5}; originalMipPixels.clear(); - imageCesium = {}; - imageCesium.width = 3; - imageCesium.height = 2; + pImageAsset.emplace(); + pImageAsset->width = 3; + pImageAsset->height = 2; TestEqual( "image buffer size is correct", originalPixels.size(), - imageCesium.width * imageCesium.height * imageCesium.bytesPerChannel * - imageCesium.channels); - imageCesium.pixelData.resize(originalPixels.size()); + pImageAsset->width * pImageAsset->height * + pImageAsset->bytesPerChannel * pImageAsset->channels); + pImageAsset->pixelData.resize(originalPixels.size()); std::memcpy( - imageCesium.pixelData.data(), + pImageAsset->pixelData.data(), originalPixels.data(), originalPixels.size()); + + CesiumUtility::IntrusivePointer pCopy = + new CesiumGltf::ImageAsset(*pImageAsset); + CesiumGltfReader::ImageDecoder::generateMipMaps(*pCopy); + + expectedMipPixelsIfGenerated.clear(); + + if (pCopy->mipPositions.size() >= 2) { + expectedMipPixelsIfGenerated.resize(pCopy->mipPositions[1].byteSize); + for (size_t iSrc = pCopy->mipPositions[1].byteOffset, iDest = 0; + iDest < pCopy->mipPositions[1].byteSize; + ++iSrc, ++iDest) { + expectedMipPixelsIfGenerated[iDest] = uint8_t(pCopy->pixelData[iSrc]); + } + } }); RunTests(); @@ -65,31 +86,31 @@ void CesiumTextureUtilitySpec::Define() { Describe("With Mips", [this]() { BeforeEach([this]() { - imageCesium = {}; - imageCesium.width = 3; - imageCesium.height = 2; + pImageAsset.emplace(); + pImageAsset->width = 3; + pImageAsset->height = 2; // Original image (3x2) originalPixels = {0x20, 0x40, 0x80, 0xF0, 0x21, 0x41, 0x81, 0xF1, 0x22, 0x42, 0x82, 0xF2, 0x23, 0x43, 0x83, 0xF3, 0x24, 0x44, 0x84, 0xF4, 0x25, 0x45, 0x85, 0xF5}; - imageCesium.mipPositions.emplace_back( - ImageCesiumMipPosition{0, originalPixels.size()}); + pImageAsset->mipPositions.emplace_back( + CesiumGltf::ImageAssetMipPosition{0, originalPixels.size()}); // Mip 1 (1x1) originalMipPixels = {0x26, 0x46, 0x86, 0xF6}; - imageCesium.mipPositions.emplace_back(ImageCesiumMipPosition{ - imageCesium.mipPositions[0].byteSize, + pImageAsset->mipPositions.emplace_back(CesiumGltf::ImageAssetMipPosition{ + pImageAsset->mipPositions[0].byteSize, originalMipPixels.size()}); - imageCesium.pixelData.resize( + pImageAsset->pixelData.resize( originalPixels.size() + originalMipPixels.size()); std::memcpy( - imageCesium.pixelData.data(), + pImageAsset->pixelData.data(), originalPixels.data(), originalPixels.size()); std::memcpy( - imageCesium.pixelData.data() + originalPixels.size(), + pImageAsset->pixelData.data() + originalPixels.size(), originalMipPixels.data(), originalMipPixels.size()); }); @@ -99,22 +120,21 @@ void CesiumTextureUtilitySpec::Define() { } void CesiumTextureUtilitySpec::RunTests() { - It("ImageCesium non-sRGB", [this]() { + It("ImageAsset non-sRGB", [this]() { TUniquePtr pHalfLoaded = loadTextureAnyThreadPart( - imageCesium, + *pImageAsset, TextureAddress::TA_Mirror, TextureAddress::TA_Wrap, TextureFilter::TF_Bilinear, true, TextureGroup::TEXTUREGROUP_Cinematic, false, - std::nullopt, - nullptr); + std::nullopt); TestNotNull("pHalfLoaded", pHalfLoaded.Get()); IntrusivePointer pRefCountedTexture = loadTextureGameThreadPart(pHalfLoaded.Get()); - CheckPixels(pRefCountedTexture); + CheckPixels(pRefCountedTexture, true); CheckSRGB(pRefCountedTexture, false); CheckAddress( pRefCountedTexture, @@ -124,22 +144,21 @@ void CesiumTextureUtilitySpec::RunTests() { CheckGroup(pRefCountedTexture, TextureGroup::TEXTUREGROUP_Cinematic); }); - It("ImageCesium sRGB", [this]() { + It("ImageAsset sRGB", [this]() { TUniquePtr pHalfLoaded = loadTextureAnyThreadPart( - imageCesium, + *pImageAsset, TextureAddress::TA_Clamp, TextureAddress::TA_Mirror, TextureFilter::TF_Trilinear, true, TextureGroup::TEXTUREGROUP_Bokeh, true, - std::nullopt, - nullptr); + std::nullopt); TestNotNull("pHalfLoaded", pHalfLoaded.Get()); IntrusivePointer pRefCountedTexture = loadTextureGameThreadPart(pHalfLoaded.Get()); - CheckPixels(pRefCountedTexture); + CheckPixels(pRefCountedTexture, true); CheckSRGB(pRefCountedTexture, true); CheckAddress( pRefCountedTexture, @@ -150,26 +169,22 @@ void CesiumTextureUtilitySpec::RunTests() { }); It("Image and Sampler", [this]() { - Image image; - image.cesium = imageCesium; - - Sampler sampler; - sampler.minFilter = Sampler::MinFilter::NEAREST; - sampler.magFilter = Sampler::MagFilter::NEAREST; - sampler.wrapS = Sampler::WrapS::MIRRORED_REPEAT; - sampler.wrapT = Sampler::WrapT::CLAMP_TO_EDGE; + CesiumGltf::Sampler sampler; + sampler.minFilter = CesiumGltf::Sampler::MinFilter::NEAREST; + sampler.magFilter = CesiumGltf::Sampler::MagFilter::NEAREST; + sampler.wrapS = CesiumGltf::Sampler::WrapS::MIRRORED_REPEAT; + sampler.wrapT = CesiumGltf::Sampler::WrapT::CLAMP_TO_EDGE; TUniquePtr pHalfLoaded = loadTextureFromImageAndSamplerAnyThreadPart( - image, + *pImageAsset, sampler, - false, - nullptr); + false); TestNotNull("pHalfLoaded", pHalfLoaded.Get()); IntrusivePointer pRefCountedTexture = loadTextureGameThreadPart(pHalfLoaded.Get()); - CheckPixels(pRefCountedTexture); + CheckPixels(pRefCountedTexture, false); CheckSRGB(pRefCountedTexture, false); CheckAddress( pRefCountedTexture, @@ -180,40 +195,29 @@ void CesiumTextureUtilitySpec::RunTests() { }); It("Model", [this]() { - Model model; + CesiumGltf::Model model; - Image& image = model.images.emplace_back(); - image.cesium = imageCesium; + CesiumGltf::Image& image = model.images.emplace_back(); + image.pAsset = pImageAsset; - Sampler& sampler = model.samplers.emplace_back(); - sampler.minFilter = Sampler::MinFilter::LINEAR_MIPMAP_LINEAR; - sampler.magFilter = Sampler::MagFilter::LINEAR; - sampler.wrapS = Sampler::WrapS::REPEAT; - sampler.wrapT = Sampler::WrapT::MIRRORED_REPEAT; + CesiumGltf::Sampler& sampler = model.samplers.emplace_back(); + sampler.minFilter = CesiumGltf::Sampler::MinFilter::LINEAR_MIPMAP_LINEAR; + sampler.magFilter = CesiumGltf::Sampler::MagFilter::LINEAR; + sampler.wrapS = CesiumGltf::Sampler::WrapS::REPEAT; + sampler.wrapT = CesiumGltf::Sampler::WrapT::MIRRORED_REPEAT; - Texture& texture = model.textures.emplace_back(); + CesiumGltf::Texture& texture = model.textures.emplace_back(); texture.source = 0; texture.sampler = 0; - std::vector textureResources; - textureResources.resize(model.images.size(), nullptr); - TUniquePtr pHalfLoaded = - loadTextureFromModelAnyThreadPart( - model, - texture, - true, - textureResources); + loadTextureFromModelAnyThreadPart(model, texture, true); TestNotNull("pHalfLoaded", pHalfLoaded.Get()); TestNotNull("pHalfLoaded->pTexture", pHalfLoaded->pTexture.get()); - TestEqual( - "textureResources[0]", - textureResources[0], - pHalfLoaded->pTexture->getTextureResource().Get()); IntrusivePointer pRefCountedTexture = loadTextureGameThreadPart(model, pHalfLoaded.Get()); - CheckPixels(pRefCountedTexture); + CheckPixels(pRefCountedTexture, true); CheckSRGB(pRefCountedTexture, true); CheckAddress( pRefCountedTexture, @@ -224,66 +228,47 @@ void CesiumTextureUtilitySpec::RunTests() { }); It("Two textures referencing one image", [this]() { - Model model; + CesiumGltf::Model model; - Image& image = model.images.emplace_back(); - image.cesium = imageCesium; + CesiumGltf::Image& image = model.images.emplace_back(); + image.pAsset = pImageAsset; - Sampler& sampler1 = model.samplers.emplace_back(); - sampler1.minFilter = Sampler::MinFilter::LINEAR_MIPMAP_LINEAR; - sampler1.magFilter = Sampler::MagFilter::LINEAR; - sampler1.wrapS = Sampler::WrapS::REPEAT; - sampler1.wrapT = Sampler::WrapT::MIRRORED_REPEAT; + CesiumGltf::Sampler& sampler1 = model.samplers.emplace_back(); + sampler1.minFilter = CesiumGltf::Sampler::MinFilter::LINEAR_MIPMAP_LINEAR; + sampler1.magFilter = CesiumGltf::Sampler::MagFilter::LINEAR; + sampler1.wrapS = CesiumGltf::Sampler::WrapS::REPEAT; + sampler1.wrapT = CesiumGltf::Sampler::WrapT::MIRRORED_REPEAT; - Texture& texture1 = model.textures.emplace_back(); + CesiumGltf::Texture& texture1 = model.textures.emplace_back(); texture1.source = 0; texture1.sampler = 0; - Sampler& sampler2 = model.samplers.emplace_back(); - sampler2.minFilter = Sampler::MinFilter::NEAREST; - sampler2.magFilter = Sampler::MagFilter::NEAREST; - sampler2.wrapS = Sampler::WrapS::MIRRORED_REPEAT; - sampler2.wrapT = Sampler::WrapT::REPEAT; + CesiumGltf::Sampler& sampler2 = model.samplers.emplace_back(); + sampler2.minFilter = CesiumGltf::Sampler::MinFilter::NEAREST; + sampler2.magFilter = CesiumGltf::Sampler::MagFilter::NEAREST; + sampler2.wrapS = CesiumGltf::Sampler::WrapS::MIRRORED_REPEAT; + sampler2.wrapT = CesiumGltf::Sampler::WrapT::REPEAT; - Texture& texture2 = model.textures.emplace_back(); + CesiumGltf::Texture& texture2 = model.textures.emplace_back(); texture2.source = 0; texture2.sampler = 1; - std::vector textureResources; - textureResources.resize(model.images.size(), nullptr); - TUniquePtr pHalfLoaded1 = - loadTextureFromModelAnyThreadPart( - model, - model.textures[0], - true, - textureResources); + loadTextureFromModelAnyThreadPart(model, model.textures[0], true); TestNotNull("pHalfLoaded1", pHalfLoaded1.Get()); TestNotNull("pHalfLoaded1->pTexture", pHalfLoaded1->pTexture.get()); - TestEqual( - "textureResources[0]", - textureResources[0], - pHalfLoaded1->pTexture->getTextureResource().Get()); TUniquePtr pHalfLoaded2 = - loadTextureFromModelAnyThreadPart( - model, - model.textures[1], - false, - textureResources); + loadTextureFromModelAnyThreadPart(model, model.textures[1], false); TestNotNull("pHalfLoaded2", pHalfLoaded2.Get()); TestNotNull("pHalfLoaded2->pTexture", pHalfLoaded2->pTexture.get()); - TestEqual( - "textureResources[0]", - textureResources[0], - pHalfLoaded2->pTexture->getTextureResource().Get()); IntrusivePointer pRefCountedTexture1 = loadTextureGameThreadPart(model, pHalfLoaded1.Get()); IntrusivePointer pRefCountedTexture2 = loadTextureGameThreadPart(model, pHalfLoaded2.Get()); - CheckPixels(pRefCountedTexture1); + CheckPixels(pRefCountedTexture1, true); CheckSRGB(pRefCountedTexture1, true); CheckAddress( pRefCountedTexture1, @@ -292,7 +277,7 @@ void CesiumTextureUtilitySpec::RunTests() { CheckFilter(pRefCountedTexture1, TextureFilter::TF_Default); CheckGroup(pRefCountedTexture1, TextureGroup::TEXTUREGROUP_World); - CheckPixels(pRefCountedTexture2); + CheckPixels(pRefCountedTexture2, false); CheckSRGB(pRefCountedTexture2, false); CheckAddress( pRefCountedTexture2, @@ -310,40 +295,29 @@ void CesiumTextureUtilitySpec::RunTests() { }); It("Loading the same texture twice", [this]() { - Model model; + CesiumGltf::Model model; - Image& image = model.images.emplace_back(); - image.cesium = imageCesium; + CesiumGltf::Image& image = model.images.emplace_back(); + image.pAsset = pImageAsset; - Sampler& sampler = model.samplers.emplace_back(); - sampler.minFilter = Sampler::MinFilter::LINEAR_MIPMAP_LINEAR; - sampler.magFilter = Sampler::MagFilter::LINEAR; - sampler.wrapS = Sampler::WrapS::REPEAT; - sampler.wrapT = Sampler::WrapT::MIRRORED_REPEAT; + CesiumGltf::Sampler& sampler = model.samplers.emplace_back(); + sampler.minFilter = CesiumGltf::Sampler::MinFilter::LINEAR_MIPMAP_LINEAR; + sampler.magFilter = CesiumGltf::Sampler::MagFilter::LINEAR; + sampler.wrapS = CesiumGltf::Sampler::WrapS::REPEAT; + sampler.wrapT = CesiumGltf::Sampler::WrapT::MIRRORED_REPEAT; - Texture& texture = model.textures.emplace_back(); + CesiumGltf::Texture& texture = model.textures.emplace_back(); texture.source = 0; texture.sampler = 0; - std::vector textureResources; - textureResources.resize(model.images.size(), nullptr); - TUniquePtr pHalfLoaded = - loadTextureFromModelAnyThreadPart( - model, - texture, - true, - textureResources); + loadTextureFromModelAnyThreadPart(model, texture, true); TestNotNull("pHalfLoaded", pHalfLoaded.Get()); TestNotNull("pHalfLoaded->pTexture", pHalfLoaded->pTexture.get()); - TestEqual( - "textureResources[0]", - textureResources[0], - pHalfLoaded->pTexture->getTextureResource().Get()); IntrusivePointer pRefCountedTexture = loadTextureGameThreadPart(model, pHalfLoaded.Get()); - CheckPixels(pRefCountedTexture); + CheckPixels(pRefCountedTexture, true); CheckSRGB(pRefCountedTexture, true); CheckAddress( pRefCountedTexture, @@ -352,19 +326,12 @@ void CesiumTextureUtilitySpec::RunTests() { CheckFilter(pRefCountedTexture, TextureFilter::TF_Default); CheckGroup(pRefCountedTexture, TextureGroup::TEXTUREGROUP_World); - std::vector textureResources2; - textureResources2.resize(model.images.size(), nullptr); - // Copy the model and load the same texture again. // This time there's no more pixel data, so it's necessary to use the // previously-created texture. - Model model2 = model; + CesiumGltf::Model model2 = model; TUniquePtr pHalfLoaded2 = - loadTextureFromModelAnyThreadPart( - model2, - model.textures[0], - true, - textureResources2); + loadTextureFromModelAnyThreadPart(model2, model.textures[0], true); TestNotNull("pHalfLoaded2", pHalfLoaded2.Get()); TestNotNull("pHalfLoaded2->pTexture", pHalfLoaded2->pTexture.get()); TestNull( @@ -377,40 +344,29 @@ void CesiumTextureUtilitySpec::RunTests() { }); It("Loading the same texture twice from one model", [this]() { - Model model; + CesiumGltf::Model model; - Image& image = model.images.emplace_back(); - image.cesium = imageCesium; + CesiumGltf::Image& image = model.images.emplace_back(); + image.pAsset = pImageAsset; - Sampler& sampler = model.samplers.emplace_back(); - sampler.minFilter = Sampler::MinFilter::LINEAR_MIPMAP_LINEAR; - sampler.magFilter = Sampler::MagFilter::LINEAR; - sampler.wrapS = Sampler::WrapS::REPEAT; - sampler.wrapT = Sampler::WrapT::MIRRORED_REPEAT; + CesiumGltf::Sampler& sampler = model.samplers.emplace_back(); + sampler.minFilter = CesiumGltf::Sampler::MinFilter::LINEAR_MIPMAP_LINEAR; + sampler.magFilter = CesiumGltf::Sampler::MagFilter::LINEAR; + sampler.wrapS = CesiumGltf::Sampler::WrapS::REPEAT; + sampler.wrapT = CesiumGltf::Sampler::WrapT::MIRRORED_REPEAT; - Texture& texture = model.textures.emplace_back(); + CesiumGltf::Texture& texture = model.textures.emplace_back(); texture.source = 0; texture.sampler = 0; - std::vector textureResources; - textureResources.resize(model.images.size(), nullptr); - TUniquePtr pHalfLoaded = - loadTextureFromModelAnyThreadPart( - model, - texture, - true, - textureResources); + loadTextureFromModelAnyThreadPart(model, texture, true); TestNotNull("pHalfLoaded", pHalfLoaded.Get()); TestNotNull("pHalfLoaded->pTexture", pHalfLoaded->pTexture.get()); - TestEqual( - "textureResources[0]", - textureResources[0], - pHalfLoaded->pTexture->getTextureResource().Get()); IntrusivePointer pRefCountedTexture = loadTextureGameThreadPart(model, pHalfLoaded.Get()); - CheckPixels(pRefCountedTexture); + CheckPixels(pRefCountedTexture, true); CheckSRGB(pRefCountedTexture, true); CheckAddress( pRefCountedTexture, @@ -419,18 +375,11 @@ void CesiumTextureUtilitySpec::RunTests() { CheckFilter(pRefCountedTexture, TextureFilter::TF_Default); CheckGroup(pRefCountedTexture, TextureGroup::TEXTUREGROUP_World); - std::vector textureResources2; - textureResources2.resize(model.images.size(), nullptr); - // Load the same texture again. // This time there's no more pixel data, so it's necessary to use the // previously-created texture. TUniquePtr pHalfLoaded2 = - loadTextureFromModelAnyThreadPart( - model, - model.textures[0], - true, - textureResources2); + loadTextureFromModelAnyThreadPart(model, model.textures[0], true); TestNotNull("pHalfLoaded2", pHalfLoaded2.Get()); TestNotNull("pHalfLoaded2->pTexture", pHalfLoaded2->pTexture.get()); TestNull( @@ -444,7 +393,8 @@ void CesiumTextureUtilitySpec::RunTests() { } void CesiumTextureUtilitySpec::CheckPixels( - const IntrusivePointer& pRefCountedTexture) { + const IntrusivePointer& pRefCountedTexture, + bool requireMips) { TestNotNull("pRefCountedTexture", pRefCountedTexture.get()); TestNotNull( "pRefCountedTexture->getUnrealTexture()", @@ -494,27 +444,35 @@ void CesiumTextureUtilitySpec::CheckPixels( TestEqual("pixel-alpha", readPixels[i].A, originalPixels[i * 4 + 3]); } + if (requireMips) { + TestTrue("Has Mips", !readPixelsMip1.IsEmpty()); + } + if (!readPixelsMip1.IsEmpty()) { + std::vector& pixelsToMatch = originalMipPixels.empty() + ? expectedMipPixelsIfGenerated + : originalMipPixels; + TestEqual( "read buffer size", readPixelsMip1.Num() * 4, - originalMipPixels.size()); + pixelsToMatch.size()); for (size_t i = 0; - i < readPixelsMip1.Num() && (i * 4 + 3) < originalMipPixels.size(); + i < readPixelsMip1.Num() && (i * 4 + 3) < pixelsToMatch.size(); ++i) { - TestEqual("mip pixel-red", readPixelsMip1[i].R, originalMipPixels[i * 4]); + TestEqual("mip pixel-red", readPixelsMip1[i].R, pixelsToMatch[i * 4]); TestEqual( "mip pixel-green", readPixelsMip1[i].G, - originalMipPixels[i * 4 + 1]); + pixelsToMatch[i * 4 + 1]); TestEqual( "mip pixel-blue", readPixelsMip1[i].B, - originalMipPixels[i * 4 + 2]); + pixelsToMatch[i * 4 + 2]); TestEqual( "mip pixel-alpha", readPixelsMip1[i].A, - originalMipPixels[i * 4 + 3]); + pixelsToMatch[i * 4 + 3]); } } } diff --git a/Source/CesiumRuntime/Private/Tests/GeoTransforms.spec.cpp b/Source/CesiumRuntime/Private/Tests/GeoTransforms.spec.cpp index cc8bd38b1..117f0b018 100644 --- a/Source/CesiumRuntime/Private/Tests/GeoTransforms.spec.cpp +++ b/Source/CesiumRuntime/Private/Tests/GeoTransforms.spec.cpp @@ -1,8 +1,8 @@ // Copyright 2020-2024 CesiumGS, Inc. and Contributors +#include "GeoTransforms.h" #include "CesiumGeospatial/Ellipsoid.h" #include "CesiumUtility/Math.h" -#include "GeoTransforms.h" #include "Misc/AutomationTest.h" using namespace CesiumGeospatial; @@ -11,7 +11,9 @@ using namespace CesiumUtility; BEGIN_DEFINE_SPEC( FGeoTransformsSpec, "Cesium.Unit.GeoTransforms", - EAutomationTestFlags::ApplicationContextMask | + EAutomationTestFlags::EditorContext | EAutomationTestFlags::ClientContext | + EAutomationTestFlags::ServerContext | + EAutomationTestFlags::CommandletContext | EAutomationTestFlags::ProductFilter) END_DEFINE_SPEC(FGeoTransformsSpec) diff --git a/Source/CesiumRuntime/Private/Tests/GlobeAwareDefaultPawn.spec.cpp b/Source/CesiumRuntime/Private/Tests/GlobeAwareDefaultPawn.spec.cpp index 8e5517ebb..84098476d 100644 --- a/Source/CesiumRuntime/Private/Tests/GlobeAwareDefaultPawn.spec.cpp +++ b/Source/CesiumRuntime/Private/Tests/GlobeAwareDefaultPawn.spec.cpp @@ -2,6 +2,7 @@ #if WITH_EDITOR +#include "GlobeAwareDefaultPawn.h" #include "CesiumFlyToComponent.h" #include "CesiumGeoreference.h" #include "CesiumGlobeAnchorComponent.h" @@ -10,14 +11,15 @@ #include "Editor.h" #include "Engine/World.h" #include "EngineUtils.h" -#include "GlobeAwareDefaultPawn.h" #include "Misc/AutomationTest.h" #include "Tests/AutomationEditorCommon.h" BEGIN_DEFINE_SPEC( FGlobeAwareDefaultPawnSpec, "Cesium.Unit.GlobeAwareDefaultPawn", - EAutomationTestFlags::ApplicationContextMask | + EAutomationTestFlags::EditorContext | EAutomationTestFlags::ClientContext | + EAutomationTestFlags::ServerContext | + EAutomationTestFlags::CommandletContext | EAutomationTestFlags::ProductFilter) FDelegateHandle subscriptionPostPIEStarted; diff --git a/Source/CesiumRuntime/Private/Tests/Google3dTilesLoadTest.cpp b/Source/CesiumRuntime/Private/Tests/Google3dTilesLoadTest.cpp deleted file mode 100644 index 94eea489f..000000000 --- a/Source/CesiumRuntime/Private/Tests/Google3dTilesLoadTest.cpp +++ /dev/null @@ -1,314 +0,0 @@ -// Copyright 2020-2024 CesiumGS, Inc. and Contributors - -#if WITH_EDITOR - -#include "CesiumLoadTestCore.h" - -#include "Engine/World.h" -#include "Misc/AutomationTest.h" - -#include "Cesium3DTileset.h" -#include "CesiumAsync/ICacheDatabase.h" -#include "CesiumRuntime.h" -#include "CesiumSunSky.h" - -using namespace Cesium; - -IMPLEMENT_SIMPLE_AUTOMATION_TEST( - FGoogleTilesPompidou, - "Cesium.Performance.GoogleTiles.LocalePompidou", - EAutomationTestFlags::EditorContext | EAutomationTestFlags::PerfFilter) - -IMPLEMENT_SIMPLE_AUTOMATION_TEST( - FGoogleTilesChrysler, - "Cesium.Performance.GoogleTiles.LocaleChrysler", - EAutomationTestFlags::EditorContext | EAutomationTestFlags::PerfFilter) - -IMPLEMENT_SIMPLE_AUTOMATION_TEST( - FGoogleTilesChryslerWarm, - "Cesium.Performance.GoogleTiles.LocaleChrysler (Warm)", - EAutomationTestFlags::EditorContext | EAutomationTestFlags::PerfFilter) - -IMPLEMENT_SIMPLE_AUTOMATION_TEST( - FGoogleTilesGuggenheim, - "Cesium.Performance.GoogleTiles.LocaleGuggenheim", - EAutomationTestFlags::EditorContext | EAutomationTestFlags::PerfFilter) - -IMPLEMENT_SIMPLE_AUTOMATION_TEST( - FGoogleTilesDeathValley, - "Cesium.Performance.GoogleTiles.LocaleDeathValley", - EAutomationTestFlags::EditorContext | EAutomationTestFlags::PerfFilter) - -IMPLEMENT_SIMPLE_AUTOMATION_TEST( - FGoogleTilesDeathValleyWarm, - "Cesium.Performance.GoogleTiles.LocaleDeathValley (Warm)", - EAutomationTestFlags::EditorContext | EAutomationTestFlags::PerfFilter) - -IMPLEMENT_SIMPLE_AUTOMATION_TEST( - FGoogleTilesTokyo, - "Cesium.Performance.GoogleTiles.LocaleTokyo", - EAutomationTestFlags::EditorContext | EAutomationTestFlags::PerfFilter) - -IMPLEMENT_SIMPLE_AUTOMATION_TEST( - FGoogleTilesGoogleplex, - "Cesium.Performance.GoogleTiles.LocaleGoogleplex", - EAutomationTestFlags::EditorContext | EAutomationTestFlags::PerfFilter) - -IMPLEMENT_SIMPLE_AUTOMATION_TEST( - FGoogleTilesMaxTileLoads, - "Cesium.Performance.GoogleTiles.VaryMaxTileLoads", - EAutomationTestFlags::EditorContext | EAutomationTestFlags::PerfFilter) - -#define TEST_SCREEN_WIDTH 1280 -#define TEST_SCREEN_HEIGHT 720 - -void googleSetupRefreshTilesets( - SceneGenerationContext& context, - TestPass::TestingParameter parameter) { - context.refreshTilesets(); -} - -void googleSetupClearCache( - SceneGenerationContext& context, - TestPass::TestingParameter parameter) { - std::shared_ptr pCacheDatabase = - getCacheDatabase(); - pCacheDatabase->clearAll(); -} - -void setupForPompidou(SceneGenerationContext& context) { - context.setCommonProperties( - FVector(2.352200, 48.860600, 200), - FVector(0, 0, 0), - FRotator(-20.0, -90.0, 0.0), - 60.0f); - - context.sunSky->TimeZone = 2.0f; - context.sunSky->UpdateSun(); - - ACesium3DTileset* tileset = context.world->SpawnActor(); - tileset->SetTilesetSource(ETilesetSource::FromCesiumIon); - tileset->SetIonAssetID(2275207); - tileset->SetIonAccessToken(SceneGenerationContext::testIonToken); - tileset->SetActorLabel(TEXT("Center Pompidou, Paris, France")); - context.tilesets.push_back(tileset); -} - -void setupForChrysler(SceneGenerationContext& context) { - context.setCommonProperties( - FVector(-73.9752624659, 40.74697185903, 307.38), - FVector(0, 0, 0), - FRotator(-15.0, -90.0, 0.0), - 60.0f); - - context.sunSky->TimeZone = -4.0f; - context.sunSky->UpdateSun(); - - ACesium3DTileset* tileset = context.world->SpawnActor(); - tileset->SetTilesetSource(ETilesetSource::FromCesiumIon); - tileset->SetIonAssetID(2275207); - tileset->SetIonAccessToken(SceneGenerationContext::testIonToken); - tileset->SetActorLabel(TEXT("Chrysler Building, NYC")); - context.tilesets.push_back(tileset); -} - -void setupForGuggenheim(SceneGenerationContext& context) { - context.setCommonProperties( - FVector(-2.937, 43.2685, 150), - FVector(0, 0, 0), - FRotator(-15.0, 0.0, 0.0), - 60.0f); - - context.sunSky->TimeZone = 2.0f; - context.sunSky->UpdateSun(); - - ACesium3DTileset* tileset = context.world->SpawnActor(); - tileset->SetTilesetSource(ETilesetSource::FromCesiumIon); - tileset->SetIonAssetID(2275207); - tileset->SetIonAccessToken(SceneGenerationContext::testIonToken); - tileset->SetActorLabel(TEXT("Guggenheim Museum, Bilbao, Spain")); - context.tilesets.push_back(tileset); -} - -void setupForDeathValley(SceneGenerationContext& context) { - context.setCommonProperties( - FVector(-116.812278, 36.42, 300), - FVector(0, 0, 0), - FRotator(0, 0.0, 0.0), - 60.0f); - - context.sunSky->TimeZone = -7.0f; - context.sunSky->UpdateSun(); - - ACesium3DTileset* tileset = context.world->SpawnActor(); - tileset->SetTilesetSource(ETilesetSource::FromCesiumIon); - tileset->SetIonAssetID(2275207); - tileset->SetIonAccessToken(SceneGenerationContext::testIonToken); - tileset->SetActorLabel( - TEXT("Zabriskie Point, Death Valley National Park, California")); - context.tilesets.push_back(tileset); -} - -void setupForTokyo(SceneGenerationContext& context) { - context.setCommonProperties( - FVector(139.7563178458, 35.652798383944, 525.62), - FVector(0, 0, 0), - FRotator(-15, -150, 0.0), - 60.0f); - - context.sunSky->TimeZone = 9.0f; - context.sunSky->UpdateSun(); - - ACesium3DTileset* tileset = context.world->SpawnActor(); - tileset->SetTilesetSource(ETilesetSource::FromCesiumIon); - tileset->SetIonAssetID(2275207); - tileset->SetIonAccessToken(SceneGenerationContext::testIonToken); - tileset->SetActorLabel(TEXT("Tokyo Tower, Tokyo, Japan")); - context.tilesets.push_back(tileset); -} - -void setupForGoogleplex(SceneGenerationContext& context) { - context.setCommonProperties( - FVector(-122.083969, 37.424492, 142.859116), - FVector(0, 0, 0), - FRotator(-25, 95, 0), - 90.0f); - - ACesium3DTileset* tileset = context.world->SpawnActor(); - tileset->SetTilesetSource(ETilesetSource::FromCesiumIon); - tileset->SetIonAssetID(2275207); - tileset->SetIonAccessToken(SceneGenerationContext::testIonToken); - tileset->SetActorLabel(TEXT("Google Photorealistic 3D Tiles")); - - context.tilesets.push_back(tileset); -} - -bool FGoogleTilesPompidou::RunTest(const FString& Parameters) { - std::vector testPasses; - testPasses.push_back(TestPass{"Cold Cache", googleSetupClearCache, nullptr}); - - return RunLoadTest( - GetBeautifiedTestName(), - setupForPompidou, - testPasses, - TEST_SCREEN_WIDTH, - TEST_SCREEN_HEIGHT); -} - -bool FGoogleTilesChrysler::RunTest(const FString& Parameters) { - std::vector testPasses; - testPasses.push_back(TestPass{"Cold Cache", googleSetupClearCache, nullptr}); - - return RunLoadTest( - GetBeautifiedTestName(), - setupForChrysler, - testPasses, - TEST_SCREEN_WIDTH, - TEST_SCREEN_HEIGHT); -} - -bool FGoogleTilesChryslerWarm::RunTest(const FString& Parameters) { - std::vector testPasses; - testPasses.push_back( - TestPass{"Warm Cache", googleSetupRefreshTilesets, nullptr}); - - return RunLoadTest( - GetBeautifiedTestName(), - setupForChrysler, - testPasses, - TEST_SCREEN_WIDTH, - TEST_SCREEN_HEIGHT); -} - -bool FGoogleTilesGuggenheim::RunTest(const FString& Parameters) { - std::vector testPasses; - testPasses.push_back(TestPass{"Cold Cache", googleSetupClearCache, nullptr}); - - return RunLoadTest( - GetBeautifiedTestName(), - setupForGuggenheim, - testPasses, - TEST_SCREEN_WIDTH, - TEST_SCREEN_HEIGHT); -} - -bool FGoogleTilesDeathValley::RunTest(const FString& Parameters) { - std::vector testPasses; - testPasses.push_back(TestPass{"Cold Cache", googleSetupClearCache, nullptr}); - - return RunLoadTest( - GetBeautifiedTestName(), - setupForDeathValley, - testPasses, - TEST_SCREEN_WIDTH, - TEST_SCREEN_HEIGHT); -} - -bool FGoogleTilesDeathValleyWarm::RunTest(const FString& Parameters) { - std::vector testPasses; - testPasses.push_back( - TestPass{"Warm Cache", googleSetupRefreshTilesets, nullptr}); - - return RunLoadTest( - GetBeautifiedTestName(), - setupForDeathValley, - testPasses, - TEST_SCREEN_WIDTH, - TEST_SCREEN_HEIGHT); -} - -bool FGoogleTilesTokyo::RunTest(const FString& Parameters) { - std::vector testPasses; - testPasses.push_back(TestPass{"Cold Cache", googleSetupClearCache, nullptr}); - - return RunLoadTest( - GetBeautifiedTestName(), - setupForTokyo, - testPasses, - TEST_SCREEN_WIDTH, - TEST_SCREEN_HEIGHT); -} - -bool FGoogleTilesGoogleplex::RunTest(const FString& Parameters) { - std::vector testPasses; - testPasses.push_back(TestPass{"Cold Cache", googleSetupClearCache, nullptr}); - - return RunLoadTest( - GetBeautifiedTestName(), - setupForGoogleplex, - testPasses, - TEST_SCREEN_WIDTH, - TEST_SCREEN_HEIGHT); -} - -bool FGoogleTilesMaxTileLoads::RunTest(const FString& Parameters) { - auto setupPass = [this]( - SceneGenerationContext& context, - TestPass::TestingParameter parameter) { - std::shared_ptr pCacheDatabase = - getCacheDatabase(); - pCacheDatabase->clearAll(); - - int maxLoadsTarget = std::get(parameter); - context.setMaximumSimultaneousTileLoads(maxLoadsTarget); - - context.refreshTilesets(); - }; - - std::vector testPasses; - testPasses.push_back(TestPass{"Default", googleSetupClearCache, NULL}); - testPasses.push_back(TestPass{"12", setupPass, NULL, 12}); - testPasses.push_back(TestPass{"16", setupPass, NULL, 16}); - testPasses.push_back(TestPass{"20", setupPass, NULL, 20}); - testPasses.push_back(TestPass{"24", setupPass, NULL, 24}); - testPasses.push_back(TestPass{"28", setupPass, NULL, 28}); - - return RunLoadTest( - GetBeautifiedTestName(), - setupForChrysler, - testPasses, - TEST_SCREEN_WIDTH, - TEST_SCREEN_HEIGHT); -} - -#endif diff --git a/Source/CesiumRuntime/Private/Tests/GooglePhotorealistic3dTilesLoad.perf.cpp b/Source/CesiumRuntime/Private/Tests/GooglePhotorealistic3dTilesLoad.perf.cpp new file mode 100644 index 000000000..9cb0f005c --- /dev/null +++ b/Source/CesiumRuntime/Private/Tests/GooglePhotorealistic3dTilesLoad.perf.cpp @@ -0,0 +1,204 @@ +// Copyright 2020-2024 CesiumGS, Inc. and Contributors + +#if WITH_EDITOR + +#include "CesiumLoadTestCore.h" + +#include "Engine/World.h" +#include "Misc/AutomationTest.h" + +#include "Cesium3DTileset.h" +#include "CesiumAsync/ICacheDatabase.h" +#include "CesiumRuntime.h" +#include "CesiumSunSky.h" +#include "GoogleTilesTestSetup.h" + +using namespace Cesium; + +IMPLEMENT_SIMPLE_AUTOMATION_TEST( + FLoadTilesetGooglePompidou, + "Cesium.Performance.Tileset Loading.Google P3DT Pompidou", + EAutomationTestFlags::EditorContext | EAutomationTestFlags::PerfFilter) + +IMPLEMENT_SIMPLE_AUTOMATION_TEST( + FLoadTilesetGoogleChrysler, + "Cesium.Performance.Tileset Loading.Google P3DT Chrysler", + EAutomationTestFlags::EditorContext | EAutomationTestFlags::PerfFilter) + +IMPLEMENT_SIMPLE_AUTOMATION_TEST( + FLoadTilesetGoogleChryslerWarm, + "Cesium.Performance.Tileset Loading.Google P3DT Chrysler, warm cache", + EAutomationTestFlags::EditorContext | EAutomationTestFlags::PerfFilter) + +IMPLEMENT_SIMPLE_AUTOMATION_TEST( + FLoadTilesetGoogleGuggenheim, + "Cesium.Performance.Tileset Loading.Google P3DT Guggenheim", + EAutomationTestFlags::EditorContext | EAutomationTestFlags::PerfFilter) + +IMPLEMENT_SIMPLE_AUTOMATION_TEST( + FLoadTilesetGoogleDeathValley, + "Cesium.Performance.Tileset Loading.Google P3DT DeathValley", + EAutomationTestFlags::EditorContext | EAutomationTestFlags::PerfFilter) + +IMPLEMENT_SIMPLE_AUTOMATION_TEST( + FLoadTilesetGoogleDeathValleyWarm, + "Cesium.Performance.Tileset Loading.Google P3DT DeathValley, warm cache", + EAutomationTestFlags::EditorContext | EAutomationTestFlags::PerfFilter) + +IMPLEMENT_SIMPLE_AUTOMATION_TEST( + FLoadTilesetGoogleTokyo, + "Cesium.Performance.Tileset Loading.Google P3DT Tokyo", + EAutomationTestFlags::EditorContext | EAutomationTestFlags::PerfFilter) + +IMPLEMENT_SIMPLE_AUTOMATION_TEST( + FLoadTilesetGoogleGoogleplex, + "Cesium.Performance.Tileset Loading.Google P3DT Googleplex", + EAutomationTestFlags::EditorContext | EAutomationTestFlags::PerfFilter) + +IMPLEMENT_SIMPLE_AUTOMATION_TEST( + FLoadTilesetGoogleChryslerVaryMaxTileLoads, + "Cesium.Performance.Tileset Loading.Google P3DT Chrysler, vary max tile loads", + EAutomationTestFlags::EditorContext | EAutomationTestFlags::PerfFilter) + +#define TEST_SCREEN_WIDTH 1280 +#define TEST_SCREEN_HEIGHT 720 + +bool FLoadTilesetGooglePompidou::RunTest(const FString& Parameters) { + std::vector testPasses; + testPasses.push_back(TestPass{ + "Cold Cache", + GoogleTilesTestSetup::setupClearCache, + nullptr}); + + return RunLoadTest( + GetBeautifiedTestName(), + GoogleTilesTestSetup::setupForPompidou, + testPasses, + TEST_SCREEN_WIDTH, + TEST_SCREEN_HEIGHT); +} + +bool FLoadTilesetGoogleChrysler::RunTest(const FString& Parameters) { + std::vector testPasses; + testPasses.push_back( + TestPass{"Cold Cache", GoogleTilesTestSetup::setupClearCache, nullptr}); + + return RunLoadTest( + GetBeautifiedTestName(), + GoogleTilesTestSetup::setupForChrysler, + testPasses, + TEST_SCREEN_WIDTH, + TEST_SCREEN_HEIGHT); +} + +bool FLoadTilesetGoogleChryslerWarm::RunTest(const FString& Parameters) { + std::vector testPasses; + testPasses.push_back( + TestPass{"Warm Cache", GoogleTilesTestSetup::setupRefreshTilesets, nullptr}); + + return RunLoadTest( + GetBeautifiedTestName(), + GoogleTilesTestSetup::setupForChrysler, + testPasses, + TEST_SCREEN_WIDTH, + TEST_SCREEN_HEIGHT); +} + +bool FLoadTilesetGoogleGuggenheim::RunTest(const FString& Parameters) { + std::vector testPasses; + testPasses.push_back( + TestPass{"Cold Cache", GoogleTilesTestSetup::setupClearCache, nullptr}); + + return RunLoadTest( + GetBeautifiedTestName(), + GoogleTilesTestSetup::setupForGuggenheim, + testPasses, + TEST_SCREEN_WIDTH, + TEST_SCREEN_HEIGHT); +} + +bool FLoadTilesetGoogleDeathValley::RunTest(const FString& Parameters) { + std::vector testPasses; + testPasses.push_back( + TestPass{"Cold Cache", GoogleTilesTestSetup::setupClearCache, nullptr}); + + return RunLoadTest( + GetBeautifiedTestName(), + GoogleTilesTestSetup::setupForDeathValley, + testPasses, + TEST_SCREEN_WIDTH, + TEST_SCREEN_HEIGHT); +} + +bool FLoadTilesetGoogleDeathValleyWarm::RunTest(const FString& Parameters) { + std::vector testPasses; + testPasses.push_back( + TestPass{"Warm Cache", GoogleTilesTestSetup::setupRefreshTilesets, nullptr}); + + return RunLoadTest( + GetBeautifiedTestName(), + GoogleTilesTestSetup::setupForDeathValley, + testPasses, + TEST_SCREEN_WIDTH, + TEST_SCREEN_HEIGHT); +} + +bool FLoadTilesetGoogleTokyo::RunTest(const FString& Parameters) { + std::vector testPasses; + testPasses.push_back( + TestPass{"Cold Cache", GoogleTilesTestSetup::setupClearCache, nullptr}); + + return RunLoadTest( + GetBeautifiedTestName(), + GoogleTilesTestSetup::setupForTokyo, + testPasses, + TEST_SCREEN_WIDTH, + TEST_SCREEN_HEIGHT); +} + +bool FLoadTilesetGoogleGoogleplex::RunTest(const FString& Parameters) { + std::vector testPasses; + testPasses.push_back( + TestPass{"Cold Cache", GoogleTilesTestSetup::setupClearCache, nullptr}); + + return RunLoadTest( + GetBeautifiedTestName(), + GoogleTilesTestSetup::setupForGoogleplex, + testPasses, + TEST_SCREEN_WIDTH, + TEST_SCREEN_HEIGHT); +} + +bool FLoadTilesetGoogleChryslerVaryMaxTileLoads::RunTest( + const FString& Parameters) { + auto setupPass = [this]( + SceneGenerationContext& context, + TestPass::TestingParameter parameter) { + std::shared_ptr pCacheDatabase = + getCacheDatabase(); + pCacheDatabase->clearAll(); + + int maxLoadsTarget = std::get(parameter); + context.setMaximumSimultaneousTileLoads(maxLoadsTarget); + + context.refreshTilesets(); + }; + + std::vector testPasses; + testPasses.push_back( + TestPass{"Default", GoogleTilesTestSetup::setupClearCache, NULL}); + testPasses.push_back(TestPass{"12", setupPass, NULL, 12}); + testPasses.push_back(TestPass{"16", setupPass, NULL, 16}); + testPasses.push_back(TestPass{"20", setupPass, NULL, 20}); + testPasses.push_back(TestPass{"24", setupPass, NULL, 24}); + testPasses.push_back(TestPass{"28", setupPass, NULL, 28}); + + return RunLoadTest( + GetBeautifiedTestName(), + GoogleTilesTestSetup::setupForChrysler, + testPasses, + TEST_SCREEN_WIDTH, + TEST_SCREEN_HEIGHT); +} + +#endif diff --git a/Source/CesiumRuntime/Private/Tests/GoogleTilesTestSetup.cpp b/Source/CesiumRuntime/Private/Tests/GoogleTilesTestSetup.cpp new file mode 100644 index 000000000..baa1542a5 --- /dev/null +++ b/Source/CesiumRuntime/Private/Tests/GoogleTilesTestSetup.cpp @@ -0,0 +1,109 @@ +#include "GoogleTilesTestSetup.h" + +#include "Cesium3DTileset.h" +#include "CesiumAsync/ICacheDatabase.h" +#include "CesiumLoadTestCore.h" +#include "CesiumRuntime.h" +#include "CesiumSunSky.h" + +namespace Cesium { + +inline void GoogleTilesTestSetup::setupRefreshTilesets( + SceneGenerationContext& context, + TestPass::TestingParameter parameter) { + context.refreshTilesets(); +} + +inline void GoogleTilesTestSetup::setupClearCache( + SceneGenerationContext& context, + TestPass::TestingParameter parameter) { + std::shared_ptr pCacheDatabase = + getCacheDatabase(); + pCacheDatabase->clearAll(); +} + +inline void GoogleTilesTestSetup::setupForLocation( + SceneGenerationContext& context, + const FVector& location, + const FRotator& rotation, + const FString& name) { + context.setCommonProperties(location, FVector::ZeroVector, rotation, 60.0f); + + ACesium3DTileset* tileset = context.world->SpawnActor(); + tileset->SetTilesetSource(ETilesetSource::FromCesiumIon); + tileset->SetIonAssetID(2275207); + tileset->SetIonAccessToken(SceneGenerationContext::testIonToken); + tileset->SetActorLabel(name); + context.tilesets.push_back(tileset); +} + +inline void +GoogleTilesTestSetup::setupForPompidou(SceneGenerationContext& context) { + setupForLocation( + context, + FVector(2.352200, 48.860600, 200), + FRotator(-20.0, -90.0, 0.0), + TEXT("Center Pompidou, Paris, France")); + + context.sunSky->TimeZone = 2.0f; + context.sunSky->UpdateSun(); +} + +inline void +GoogleTilesTestSetup::setupForChrysler(SceneGenerationContext& context) { + setupForLocation( + context, + FVector(-73.9752624659, 40.74697185903, 307.38), + FRotator(-15.0, -90.0, 0.0), + TEXT("Chrysler Building, NYC")); + + context.sunSky->TimeZone = -4.0f; + context.sunSky->UpdateSun(); +} + +inline void +GoogleTilesTestSetup::setupForGuggenheim(SceneGenerationContext& context) { + setupForLocation( + context, + FVector(-2.937, 43.2685, 150), + FRotator(-15.0, 0.0, 0.0), + TEXT("Guggenheim Museum, Bilbao, Spain")); + + context.sunSky->TimeZone = 2.0f; + context.sunSky->UpdateSun(); +} + +inline void +GoogleTilesTestSetup::setupForDeathValley(SceneGenerationContext& context) { + setupForLocation( + context, + FVector(-116.812278, 36.42, 300), + FRotator(0, 0.0, 0.0), + TEXT("Zabriskie Point, Death Valley National Park, California")); + + context.sunSky->TimeZone = -7.0f; + context.sunSky->UpdateSun(); +} + +inline void +GoogleTilesTestSetup::setupForTokyo(SceneGenerationContext& context) { + setupForLocation( + context, + FVector(139.7563178458, 35.652798383944, 525.62), + FRotator(-15, -150, 0.0), + TEXT("Tokyo Tower, Tokyo, Japan")); + + context.sunSky->TimeZone = 9.0f; + context.sunSky->UpdateSun(); +} + +inline void +GoogleTilesTestSetup::setupForGoogleplex(SceneGenerationContext& context) { + setupForLocation( + context, + FVector(-122.083969, 37.424492, 142.859116), + FRotator(-25, 95, 0), + TEXT("Google Photorealistic 3D Tiles")); +} + +} // namespace Cesium diff --git a/Source/CesiumRuntime/Private/Tests/GoogleTilesTestSetup.h b/Source/CesiumRuntime/Private/Tests/GoogleTilesTestSetup.h new file mode 100644 index 000000000..f83122fb4 --- /dev/null +++ b/Source/CesiumRuntime/Private/Tests/GoogleTilesTestSetup.h @@ -0,0 +1,35 @@ +#pragma once + +#if WITH_EDITOR + +#include "CesiumSceneGeneration.h" +#include "CesiumTestPass.h" + +namespace Cesium { + +struct GoogleTilesTestSetup { + static void setupRefreshTilesets( + SceneGenerationContext& context, + TestPass::TestingParameter parameter); + + static void setupClearCache( + SceneGenerationContext& creationContext, + TestPass::TestingParameter parameter); + + static void setupForLocation( + SceneGenerationContext& context, + const FVector& location, + const FRotator& rotation, + const FString& name); + + static void setupForPompidou(SceneGenerationContext& context); + static void setupForChrysler(SceneGenerationContext& context); + static void setupForGuggenheim(SceneGenerationContext& context); + static void setupForDeathValley(SceneGenerationContext& context); + static void setupForTokyo(SceneGenerationContext& context); + static void setupForGoogleplex(SceneGenerationContext& context); +}; + +} // namespace Cesium + +#endif diff --git a/Source/CesiumRuntime/Private/Tests/SampleHeightCallbackReceiver.h b/Source/CesiumRuntime/Private/Tests/SampleHeightCallbackReceiver.h new file mode 100644 index 000000000..7c354d601 --- /dev/null +++ b/Source/CesiumRuntime/Private/Tests/SampleHeightCallbackReceiver.h @@ -0,0 +1,39 @@ +// Copyright 2020-2024 CesiumGS, Inc. and Contributors + +#pragma once + +#include "CesiumSampleHeightMostDetailedAsyncAction.h" +#include "UObject/Object.h" +#include "UObject/ObjectMacros.h" +#include +#include "SampleHeightCallbackReceiver.generated.h" + +UCLASS() +class USampleHeightCallbackReceiver : public UObject { + GENERATED_BODY() + +public: + using TFunction = std::function< + void(const TArray&, const TArray&)>; + + static void + Bind(FCesiumSampleHeightMostDetailedComplete& delegate, TFunction callback) { + USampleHeightCallbackReceiver* p = + NewObject(); + p->_callback = callback; + p->AddToRoot(); + + delegate.AddUniqueDynamic(p, &USampleHeightCallbackReceiver::Receiver); + } + +private: + UFUNCTION() + void Receiver( + const TArray& Result, + const TArray& Warnings) { + this->_callback(Result, Warnings); + this->RemoveFromRoot(); + } + + TFunction _callback; +}; diff --git a/Source/CesiumRuntime/Private/Tests/SampleHeightMostDetailed.perf.cpp b/Source/CesiumRuntime/Private/Tests/SampleHeightMostDetailed.perf.cpp new file mode 100644 index 000000000..f54441636 --- /dev/null +++ b/Source/CesiumRuntime/Private/Tests/SampleHeightMostDetailed.perf.cpp @@ -0,0 +1,484 @@ +// Copyright 2020-2024 CesiumGS, Inc. and Contributors + +#if WITH_EDITOR + +#include "CesiumLoadTestCore.h" + +#include "Misc/AutomationTest.h" + +#include "CesiumAsync/ICacheDatabase.h" +#include "CesiumGltfComponent.h" +#include "CesiumIonRasterOverlay.h" +#include "CesiumRuntime.h" +#include "CesiumSunSky.h" +#include "GlobeAwareDefaultPawn.h" + +#include "Engine/StaticMeshActor.h" + +using namespace Cesium; +using namespace std::chrono_literals; + +namespace { +void setupDenverHillsCesiumWorldTerrain(SceneGenerationContext& context); +void setupDenverHillsGoogle(SceneGenerationContext& context); +bool RunSingleQueryTest( + const FString& testName, + std::function setup); +bool RunMultipleQueryTest( + const FString& testName, + std::function setup); +} // namespace + +IMPLEMENT_SIMPLE_AUTOMATION_TEST( + FSampleHeightMostDetailedCesiumWorldTerrainSingle, + "Cesium.Performance.SampleHeightMostDetailed.Single query against Cesium World Terrain", + EAutomationTestFlags::EditorContext | EAutomationTestFlags::PerfFilter) + +IMPLEMENT_SIMPLE_AUTOMATION_TEST( + FSampleHeightMostDetailedCesiumWorldTerrainMultiple, + "Cesium.Performance.SampleHeightMostDetailed.Multiple queries against Cesium World Terrain", + EAutomationTestFlags::EditorContext | EAutomationTestFlags::PerfFilter) + +IMPLEMENT_SIMPLE_AUTOMATION_TEST( + FSampleHeightMostDetailedGoogleSingle, + "Cesium.Performance.SampleHeightMostDetailed.Single query against Google Photorealistic 3D Tiles", + EAutomationTestFlags::EditorContext | EAutomationTestFlags::PerfFilter) + +IMPLEMENT_SIMPLE_AUTOMATION_TEST( + FSampleHeightMostDetailedGoogleMultiple, + "Cesium.Performance.SampleHeightMostDetailed.Multiple queries against Google Photorealistic 3D Tiles", + EAutomationTestFlags::EditorContext | EAutomationTestFlags::PerfFilter) + +bool FSampleHeightMostDetailedCesiumWorldTerrainSingle::RunTest( + const FString& Parameters) { + return RunSingleQueryTest( + this->GetBeautifiedTestName(), + setupDenverHillsCesiumWorldTerrain); +} + +bool FSampleHeightMostDetailedCesiumWorldTerrainMultiple::RunTest( + const FString& Parameters) { + return RunMultipleQueryTest( + this->GetBeautifiedTestName(), + setupDenverHillsCesiumWorldTerrain); +} + +bool FSampleHeightMostDetailedGoogleSingle::RunTest(const FString& Parameters) { + return RunSingleQueryTest( + this->GetBeautifiedTestName(), + setupDenverHillsGoogle); +} + +bool FSampleHeightMostDetailedGoogleMultiple::RunTest( + const FString& Parameters) { + return RunMultipleQueryTest( + this->GetBeautifiedTestName(), + setupDenverHillsGoogle); +} + +namespace { +// Our test model path +// +// Uses a simple cube, but to see trees instead, download 'temperate Vegetation: +// Spruce Forest' from the Unreal Engine Marketplace then use the following +// path... +// "'/Game/PN_interactiveSpruceForest/Meshes/full/low/spruce_full_01_low.spruce_full_01_low'" +FString terrainQueryTestModelPath( + TEXT("StaticMesh'/Engine/BasicShapes/Cube.Cube'")); + +void setupDenverHillsCesiumWorldTerrain(SceneGenerationContext& context) { + context.setCommonProperties( + FVector(-105.238887, 39.756177, 1887.175525), + FVector(0, 0, 0), + FRotator(-7, -226, -5), + 90.0f); + + // Add Cesium World Terrain + ACesium3DTileset* worldTerrainTileset = + context.world->SpawnActor(); + worldTerrainTileset->SetTilesetSource(ETilesetSource::FromCesiumIon); + worldTerrainTileset->SetIonAssetID(1); + worldTerrainTileset->SetIonAccessToken(SceneGenerationContext::testIonToken); + worldTerrainTileset->SetActorLabel(TEXT("Cesium World Terrain")); + worldTerrainTileset->MaximumCachedBytes = 0; + + context.tilesets.push_back(worldTerrainTileset); +} + +void setupDenverHillsGoogle(SceneGenerationContext& context) { + context.setCommonProperties( + FVector(-105.238887, 39.756177, 1887.175525), + FVector(0, 0, 0), + FRotator(-7, -226, -5), + 90.0f); + + // Add Cesium World Terrain + ACesium3DTileset* googleTileset = + context.world->SpawnActor(); + googleTileset->SetTilesetSource(ETilesetSource::FromCesiumIon); + googleTileset->SetIonAssetID(2275207); + googleTileset->SetIonAccessToken(SceneGenerationContext::testIonToken); + googleTileset->SetActorLabel(TEXT("Google Photorealistic 3D Tiles")); + googleTileset->MaximumCachedBytes = 0; + + context.tilesets.push_back(googleTileset); +} + +bool RunSingleQueryTest( + const FString& testName, + std::function setup) { + auto clearCache = [](SceneGenerationContext& context, + TestPass::TestingParameter parameter) { + std::shared_ptr pCacheDatabase = + getCacheDatabase(); + pCacheDatabase->clearAll(); + }; + + struct TestResults { + std::atomic queryFinished = false; + TArray heightResults; + TArray warnings; + }; + + static TestResults testResults; + + auto issueQueries = [&testResults = testResults]( + SceneGenerationContext& context, + TestPass::TestingParameter parameter) { + // Test right at camera position + double testLongitude = -105.257595; + double testLatitude = 39.743103; + + // Make a grid of test points + const size_t gridRowCount = 20; + const size_t gridColumnCount = 20; + double cartographicSpacing = 0.001; + + TArray queryInput; + + for (size_t rowIndex = 0; rowIndex < gridRowCount; ++rowIndex) { + double rowLatitude = testLatitude + (cartographicSpacing * rowIndex); + + for (size_t columnIndex = 0; columnIndex < gridColumnCount; + ++columnIndex) { + FVector queryInstance = { + testLongitude + (cartographicSpacing * columnIndex), + rowLatitude, + 0.0}; + + queryInput.Add(queryInstance); + } + } + + ACesium3DTileset* tileset = context.tilesets[0]; + + tileset->SampleHeightMostDetailed( + queryInput, + FCesiumSampleHeightMostDetailedCallback::CreateLambda( + [&testResults]( + ACesium3DTileset* Tileset, + const TArray& Results, + const TArray& Warnings) { + testResults.heightResults = Results; + testResults.warnings = Warnings; + testResults.queryFinished = true; + })); + }; + + auto waitForQueries = [&testResults = testResults]( + SceneGenerationContext& creationContext, + SceneGenerationContext& playContext, + TestPass::TestingParameter parameter) { + return (bool)testResults.queryFinished; + }; + + auto showResults = [&testResults = testResults]( + SceneGenerationContext& creationContext, + SceneGenerationContext& playContext, + TestPass::TestingParameter parameter) { + // Turn on the editor tileset updates so we can see what we loaded + creationContext.setSuspendUpdate(false); + + // Place an object on the ground to verify position + UWorld* World = creationContext.world; + + UStaticMesh* testMesh = + LoadObject(nullptr, *terrainQueryTestModelPath); + + ACesium3DTileset* tileset = playContext.tilesets[0]; + Cesium3DTilesSelection::Tileset* nativeTileset = tileset->GetTileset(); + + // Log any warnings + for (const FString& warning : testResults.warnings) { + UE_LOG(LogCesium, Warning, TEXT("Height query warning: %s"), *warning); + } + + int32 resultCount = testResults.heightResults.Num(); + for (int32 resultIndex = 0; resultIndex < resultCount; ++resultIndex) { + const FVector& queryLongitudeLatitudeHeight = + testResults.heightResults[resultIndex].LongitudeLatitudeHeight; + + if (!testResults.heightResults[resultIndex].SampleSuccess) { + UE_LOG( + LogCesium, + Error, + TEXT("The height at (%f,%f) was not sampled successfully."), + queryLongitudeLatitudeHeight.X, + queryLongitudeLatitudeHeight.Y); + continue; + } + + FVector unrealPosition = + tileset->ResolveGeoreference() + ->TransformLongitudeLatitudeHeightPositionToUnreal( + queryLongitudeLatitudeHeight); + + // Now bring the hit point to unreal world coordinates + FVector unrealWorldPosition = + tileset->GetActorTransform().TransformFVector4(unrealPosition); + + AStaticMeshActor* staticMeshActor = World->SpawnActor(); + staticMeshActor->GetStaticMeshComponent()->SetStaticMesh(testMesh); + staticMeshActor->SetActorLocation(unrealWorldPosition); + staticMeshActor->SetActorScale3D(FVector(7, 7, 7)); + staticMeshActor->SetActorLabel( + FString::Printf(TEXT("Hit %d"), resultIndex)); + staticMeshActor->SetFolderPath("/QueryResults"); + } + + return true; + }; + + std::vector testPasses; + testPasses.push_back( + TestPass{"Load terrain from cold cache", clearCache, nullptr}); + testPasses.push_back( + TestPass{"Issue height queries and wait", issueQueries, waitForQueries}); + testPasses.push_back( + TestPass{"Populate scene with results", nullptr, showResults}); + + return RunLoadTest(testName, setup, testPasses, 1280, 768); +} + +bool RunMultipleQueryTest( + const FString& testName, + std::function setup) { + struct QueryObject { + FVector coordinateDegrees; + + AStaticMeshActor* creationMeshActor = nullptr; + AStaticMeshActor* playMeshActor = nullptr; + + bool queryFinished = false; + }; + + struct TestProcess { + std::vector queryObjects; + }; + + auto pProcess = std::make_shared(); + + // + // Setup all object positions that will receive queries + // + // Test right at camera position + double testLongitude = -105.257595; + double testLatitude = 39.743103; + + // Make a grid of test points + const size_t gridRowCount = 20; + const size_t gridColumnCount = 20; + double cartographicSpacing = 0.001; + + for (size_t rowIndex = 0; rowIndex < gridRowCount; ++rowIndex) { + double rowLatitude = testLatitude + (cartographicSpacing * rowIndex); + + for (size_t columnIndex = 0; columnIndex < gridColumnCount; ++columnIndex) { + FVector position( + testLongitude + (cartographicSpacing * columnIndex), + rowLatitude, + 2190.0); + + QueryObject newQueryObject = {position}; + + pProcess->queryObjects.push_back(std::move(newQueryObject)); + } + } + + auto clearCache = [](SceneGenerationContext&, TestPass::TestingParameter) { + std::shared_ptr pCacheDatabase = + getCacheDatabase(); + pCacheDatabase->clearAll(); + }; + + auto addTestObjects = [pProcess]( + SceneGenerationContext& creationContext, + SceneGenerationContext& playContext, + TestPass::TestingParameter) { + // Place an object on the ground to verify position + UWorld* creationWorld = creationContext.world; + UWorld* playWorld = playContext.world; + + UStaticMesh* testMesh = + LoadObject(nullptr, *terrainQueryTestModelPath); + + ACesium3DTileset* tileset = playContext.tilesets[0]; + Cesium3DTilesSelection::Tileset* nativeTileset = tileset->GetTileset(); + + for (size_t queryIndex = 0; queryIndex < pProcess->queryObjects.size(); + ++queryIndex) { + QueryObject& queryObject = pProcess->queryObjects[queryIndex]; + + FVector unrealPosition = + tileset->ResolveGeoreference() + ->TransformLongitudeLatitudeHeightPositionToUnreal( + queryObject.coordinateDegrees); + + // Now bring the hit point to unreal world coordinates + FVector unrealWorldPosition = + tileset->GetActorTransform().TransformFVector4(unrealPosition); + + { + AStaticMeshActor* staticMeshActor = + creationWorld->SpawnActor(); + staticMeshActor->SetMobility(EComponentMobility::Movable); + staticMeshActor->GetStaticMeshComponent()->SetStaticMesh(testMesh); + staticMeshActor->SetActorLocation(unrealWorldPosition); + staticMeshActor->SetActorScale3D(FVector(7, 7, 7)); + staticMeshActor->SetActorLabel( + FString::Printf(TEXT("Hit %d"), queryIndex)); + staticMeshActor->SetFolderPath("/QueryResults"); + queryObject.creationMeshActor = staticMeshActor; + } + + { + AStaticMeshActor* staticMeshActor = + playWorld->SpawnActor(); + staticMeshActor->SetMobility(EComponentMobility::Movable); + staticMeshActor->GetStaticMeshComponent()->SetStaticMesh(testMesh); + staticMeshActor->SetActorLocation(unrealWorldPosition); + staticMeshActor->SetActorScale3D(FVector(7, 7, 7)); + staticMeshActor->SetActorLabel( + FString::Printf(TEXT("Hit %d"), queryIndex)); + staticMeshActor->SetFolderPath("/QueryResults"); + queryObject.playMeshActor = staticMeshActor; + } + } + return true; + }; + + auto issueQueries = [pProcess]( + SceneGenerationContext& context, + TestPass::TestingParameter) { + ACesium3DTileset* tileset = context.tilesets[0]; + + for (QueryObject& queryObject : pProcess->queryObjects) { + tileset->SampleHeightMostDetailed( + {queryObject.coordinateDegrees}, + FCesiumSampleHeightMostDetailedCallback::CreateLambda( + [tileset, &queryObject]( + ACesium3DTileset* pTileset, + const TArray& results, + const TArray& warnings) { + queryObject.queryFinished = true; + + // Log any warnings + for (const FString& warning : warnings) { + UE_LOG( + LogCesium, + Warning, + TEXT("Height query traversal warning: %s"), + *warning); + } + + if (results.Num() != 1) { + UE_LOG( + LogCesium, + Warning, + TEXT("Unexpected number of results received")); + return; + } + + const FVector& newCoordinate = + results[0].LongitudeLatitudeHeight; + if (!results[0].SampleSuccess) { + UE_LOG( + LogCesium, + Error, + TEXT( + "The height at (%f,%f) was not sampled successfully."), + newCoordinate.X, + newCoordinate.Y); + return; + } + + const FVector& originalCoordinate = + queryObject.coordinateDegrees; + + if (!FMath::IsNearlyEqual( + originalCoordinate.X, + newCoordinate.X, + 1e-12) || + !FMath::IsNearlyEqual( + originalCoordinate.Y, + newCoordinate.Y, + 1e-12)) { + UE_LOG( + LogCesium, + Warning, + TEXT("Hit result doesn't match original input")); + return; + } + + FVector unrealPosition = + tileset->ResolveGeoreference() + ->TransformLongitudeLatitudeHeightPositionToUnreal( + newCoordinate); + + // Now bring the hit point to unreal world coordinates + FVector unrealWorldPosition = + tileset->GetActorTransform().TransformFVector4( + unrealPosition); + + queryObject.creationMeshActor->SetActorLocation( + unrealWorldPosition); + + queryObject.playMeshActor->SetActorLocation( + unrealWorldPosition); + })); + } + }; + + auto waitForQueries = [pProcess]( + SceneGenerationContext&, + SceneGenerationContext&, + TestPass::TestingParameter) { + for (QueryObject& queryObject : pProcess->queryObjects) { + if (!queryObject.queryFinished) + return false; + } + return true; + }; + + auto showResults = [](SceneGenerationContext& creationContext, + SceneGenerationContext&, + TestPass::TestingParameter) { + // Turn on the editor tileset updates so we can see what we loaded + creationContext.setSuspendUpdate(false); + return true; + }; + + std::vector testPasses; + testPasses.push_back( + TestPass{"Load terrain from cold cache", clearCache, nullptr}); + testPasses.push_back(TestPass{"Add test objects", nullptr, addTestObjects}); + testPasses.push_back( + TestPass{"Issue height queries and wait", issueQueries, waitForQueries}); + testPasses.push_back(TestPass{"Show results", nullptr, showResults}); + + return RunLoadTest(testName, setup, testPasses, 1280, 720); +} + +} // namespace + +#endif diff --git a/Source/CesiumRuntime/Private/Tests/SampleHeightMostDetailed.spec.cpp b/Source/CesiumRuntime/Private/Tests/SampleHeightMostDetailed.spec.cpp new file mode 100644 index 000000000..a0ed673ac --- /dev/null +++ b/Source/CesiumRuntime/Private/Tests/SampleHeightMostDetailed.spec.cpp @@ -0,0 +1,381 @@ +// Copyright 2020-2024 CesiumGS, Inc. and Contributors + +#include "Cesium3DTileset.h" +#include "CesiumSampleHeightMostDetailedAsyncAction.h" +#include "CesiumSceneGeneration.h" +#include "CesiumTestHelpers.h" +#include "Misc/AutomationTest.h" +#include "SampleHeightCallbackReceiver.h" + +BEGIN_DEFINE_SPEC( + FSampleHeightMostDetailedSpec, + "Cesium.Unit.SampleHeightMostDetailed", + EAutomationTestFlags::EditorContext | EAutomationTestFlags::ClientContext | + EAutomationTestFlags::ServerContext | + EAutomationTestFlags::CommandletContext | + EAutomationTestFlags::ProductFilter) + +TObjectPtr pTileset; + +END_DEFINE_SPEC(FSampleHeightMostDetailedSpec) + +// The intention of these tests is not to verify that height querying produces +// correct heights, because the cesium-native tests already do that. It's just +// to verify that the Unreal wrapper API around cesium-native is working +// correctly. + +void FSampleHeightMostDetailedSpec::Define() { + Describe("Cesium World Terrain", [this]() { + BeforeEach([this]() { + CesiumTestHelpers::pushAllowTickInEditor(); + + UWorld* pWorld = CesiumTestHelpers::getGlobalWorldContext(); + pTileset = pWorld->SpawnActor(); + pTileset->SetIonAssetID(1); +#if WITH_EDITOR + pTileset->SetIonAccessToken(Cesium::SceneGenerationContext::testIonToken); + pTileset->SetActorLabel(TEXT("Cesium World Terrain")); +#endif + }); + + AfterEach(EAsyncExecution::TaskGraphMainThread, [this]() { + pTileset->Destroy(); + + CesiumTestHelpers::popAllowTickInEditor(); + }); + + LatentIt( + "works with an empty array of positions", + EAsyncExecution::TaskGraphMainThread, + [this](const FDoneDelegate& done) { + pTileset->SampleHeightMostDetailed( + {}, + FCesiumSampleHeightMostDetailedCallback::CreateLambda( + [this, done]( + ACesium3DTileset* pTileset, + const TArray& result, + const TArray& warnings) { + TestEqual("Number of results", result.Num(), 0); + TestEqual("Number of warnings", warnings.Num(), 0); + done.ExecuteIfBound(); + })); + }); + + LatentIt( + "works with a single position", + EAsyncExecution::TaskGraphMainThread, + [this](const FDoneDelegate& done) { + pTileset->SampleHeightMostDetailed( + {FVector(-105.1, 40.1, 1.0)}, + FCesiumSampleHeightMostDetailedCallback::CreateLambda( + [this, done]( + ACesium3DTileset* pTileset, + const TArray& result, + const TArray& warnings) { + TestEqual("Number of results", result.Num(), 1); + TestEqual("Number of warnings", warnings.Num(), 0); + TestTrue("SampleSuccess", result[0].SampleSuccess); + TestEqual( + "Longitude", + result[0].LongitudeLatitudeHeight.X, + -105.1, + 1e-12); + TestEqual( + "Latitude", + result[0].LongitudeLatitudeHeight.Y, + 40.1, + 1e-12); + TestTrue( + "Height", + !FMath::IsNearlyEqual( + result[0].LongitudeLatitudeHeight.Z, + 1.0, + 1.0)); + done.ExecuteIfBound(); + })); + }); + + LatentIt( + "works with multiple positions", + EAsyncExecution::TaskGraphMainThread, + [this](const FDoneDelegate& done) { + pTileset->SampleHeightMostDetailed( + {FVector(-105.1, 40.1, 1.0), FVector(105.1, -40.1, 1.0)}, + FCesiumSampleHeightMostDetailedCallback::CreateLambda( + [this, done]( + ACesium3DTileset* pTileset, + const TArray& result, + const TArray& warnings) { + TestEqual("Number of results", result.Num(), 2); + TestEqual("Number of warnings", warnings.Num(), 0); + TestTrue("SampleSuccess", result[0].SampleSuccess); + TestEqual( + "Longitude", + result[0].LongitudeLatitudeHeight.X, + -105.1, + 1e-12); + TestEqual( + "Latitude", + result[0].LongitudeLatitudeHeight.Y, + 40.1, + 1e-12); + TestTrue( + "Height", + !FMath::IsNearlyEqual( + result[0].LongitudeLatitudeHeight.Z, + 1.0, + 1.0)); + TestTrue("SampleSuccess", result[1].SampleSuccess); + TestEqual( + "Longitude", + result[1].LongitudeLatitudeHeight.X, + 105.1, + 1e-12); + TestEqual( + "Latitude", + result[1].LongitudeLatitudeHeight.Y, + -40.1, + 1e-12); + TestTrue( + "Height", + !FMath::IsNearlyEqual( + result[1].LongitudeLatitudeHeight.Z, + 1.0, + 1.0)); + done.ExecuteIfBound(); + })); + }); + }); + + Describe("Melbourne Photogrammetry", [this]() { + BeforeEach([this]() { + CesiumTestHelpers::pushAllowTickInEditor(); + + UWorld* pWorld = CesiumTestHelpers::getGlobalWorldContext(); + pTileset = pWorld->SpawnActor(); + pTileset->SetIonAssetID(69380); +#if WITH_EDITOR + pTileset->SetIonAccessToken(Cesium::SceneGenerationContext::testIonToken); + pTileset->SetActorLabel(TEXT("Melbourne Photogrammetry")); +#endif + }); + + AfterEach(EAsyncExecution::TaskGraphMainThread, [this]() { + pTileset->Destroy(); + + CesiumTestHelpers::popAllowTickInEditor(); + }); + + LatentIt( + "indicates !HeightSampled for position outside tileset", + EAsyncExecution::TaskGraphMainThread, + [this](const FDoneDelegate& done) { + pTileset->SampleHeightMostDetailed( + // Somewhere in Sydney, not Melbourne + {FVector(151.20972, -33.87100, 1.0)}, + FCesiumSampleHeightMostDetailedCallback::CreateLambda( + [this, done]( + ACesium3DTileset* pTileset, + const TArray& result, + const TArray& warnings) { + TestEqual("Number of results", result.Num(), 1); + TestEqual("Number of warnings", warnings.Num(), 0); + TestTrue("SampleSuccess", !result[0].SampleSuccess); + TestEqual( + "Longitude", + result[0].LongitudeLatitudeHeight.X, + 151.20972, + 1e-12); + TestEqual( + "Latitude", + result[0].LongitudeLatitudeHeight.Y, + -33.87100, + 1e-12); + TestEqual( + "Height", + result[0].LongitudeLatitudeHeight.Z, + 1.0, + 1e-12); + done.ExecuteIfBound(); + })); + }); + + LatentIt( + "can be queried via Blueprint interface", + EAsyncExecution::TaskGraphMainThread, + [this](const FDoneDelegate& done) { + UCesiumSampleHeightMostDetailedAsyncAction* pAsync = + UCesiumSampleHeightMostDetailedAsyncAction:: + SampleHeightMostDetailed( + pTileset, + {FVector(144.93406, -37.82457, 1.0)}); + + USampleHeightCallbackReceiver::Bind( + pAsync->OnHeightsSampled, + [this, done]( + const TArray& result, + const TArray& warnings) { + TestEqual("Number of results", result.Num(), 1); + TestEqual("Number of warnings", warnings.Num(), 0); + TestTrue("SampleSuccess", result[0].SampleSuccess); + TestEqual( + "Longitude", + result[0].LongitudeLatitudeHeight.X, + 144.93406, + 1e-12); + TestEqual( + "Latitude", + result[0].LongitudeLatitudeHeight.Y, + -37.82457, + 1e-12); + TestTrue( + "Height", + !FMath::IsNearlyEqual( + result[0].LongitudeLatitudeHeight.Z, + 1.0, + 1.0)); + done.ExecuteIfBound(); + }); + + pAsync->Activate(); + }); + }); + + Describe("Two tilesets in rapid succession", [this]() { + BeforeEach([this]() { CesiumTestHelpers::pushAllowTickInEditor(); }); + + AfterEach(EAsyncExecution::TaskGraphMainThread, [this]() { + CesiumTestHelpers::popAllowTickInEditor(); + }); + + LatentIt( + "", + EAsyncExecution::TaskGraphMainThread, + [this](const FDoneDelegate& done) { + UWorld* pWorld = CesiumTestHelpers::getGlobalWorldContext(); + + ACesium3DTileset* pTileset1 = pWorld->SpawnActor(); + pTileset1->SetIonAssetID(1); +#if WITH_EDITOR + pTileset1->SetIonAccessToken( + Cesium::SceneGenerationContext::testIonToken); +#endif + + pTileset1->SampleHeightMostDetailed( + {FVector(-105.1, 40.1, 1.0)}, + FCesiumSampleHeightMostDetailedCallback::CreateLambda( + [this, pWorld, done]( + ACesium3DTileset* pTileset, + const TArray& result, + const TArray& warnings) { + TestEqual("Number of results", result.Num(), 1); + TestEqual("Number of warnings", warnings.Num(), 0); + TestTrue("SampleSuccess", result[0].SampleSuccess); + + ACesium3DTileset* pTileset2 = + pWorld->SpawnActor(); + pTileset2->SetIonAssetID(1); +#if WITH_EDITOR + pTileset2->SetIonAccessToken( + Cesium::SceneGenerationContext::testIonToken); +#endif + pTileset2->SampleHeightMostDetailed( + {FVector(105.1, 40.1, 1.0)}, + FCesiumSampleHeightMostDetailedCallback::CreateLambda( + [this, pWorld, done]( + ACesium3DTileset* pTileset, + const TArray& result, + const TArray& warnings) { + TestEqual("Number of results", result.Num(), 1); + TestEqual( + "Number of warnings", + warnings.Num(), + 0); + TestTrue( + "SampleSuccess", + result[0].SampleSuccess); + + done.ExecuteIfBound(); + })); + })); + }); + }); + + Describe("Broken tileset", [this]() { + BeforeEach([this]() { CesiumTestHelpers::pushAllowTickInEditor(); }); + + AfterEach(EAsyncExecution::TaskGraphMainThread, [this]() { + CesiumTestHelpers::popAllowTickInEditor(); + }); + + LatentIt( + "invalid tileset URL", + EAsyncExecution::TaskGraphMainThread, + [this](const FDoneDelegate& done) { + // Two slightly different error messages will occur, depending on + // whether there's a web server running on localhost. + this->AddExpectedError( + TEXT("(Errors when loading)|(error occurred)")); + + UWorld* pWorld = CesiumTestHelpers::getGlobalWorldContext(); + + ACesium3DTileset* pTileset = pWorld->SpawnActor(); + pTileset->SetTilesetSource(ETilesetSource::FromUrl); + pTileset->SetUrl("http://localhost/notgonnawork"); + + pTileset->SampleHeightMostDetailed( + {FVector(-105.1, 40.1, 1.0)}, + FCesiumSampleHeightMostDetailedCallback::CreateLambda( + [this, done]( + ACesium3DTileset* pTileset, + const TArray& result, + const TArray& warnings) { + TestEqual("Number of results", result.Num(), 1); + TestEqual("Number of warnings", warnings.Num(), 1); + TestFalse("SampleSuccess", result[0].SampleSuccess); + TestEqual( + "Longitude", + result[0].LongitudeLatitudeHeight.X, + -105.1, + 1e-12); + TestEqual( + "Latitude", + result[0].LongitudeLatitudeHeight.Y, + 40.1, + 1e-12); + TestEqual( + "Height", + result[0].LongitudeLatitudeHeight.Z, + 1.0, + 1e-12); + TestTrue( + "Error message", + warnings[0].Contains(TEXT("failed to load"))); + done.ExecuteIfBound(); + })); + }); + + LatentIt( + "tileset parameter is nullptr", + EAsyncExecution::TaskGraphMainThread, + [this](const FDoneDelegate& done) { + UCesiumSampleHeightMostDetailedAsyncAction* pAsync = + UCesiumSampleHeightMostDetailedAsyncAction:: + SampleHeightMostDetailed( + nullptr, + {FVector(144.93406, -37.82457, 1.0)}); + + USampleHeightCallbackReceiver::Bind( + pAsync->OnHeightsSampled, + [this, done]( + const TArray& result, + const TArray& warnings) { + TestEqual("Number of results", result.Num(), 0); + TestEqual("Number of warnings", warnings.Num(), 1); + done.ExecuteIfBound(); + }); + + pAsync->Activate(); + }); + }); +} diff --git a/Source/CesiumRuntime/Private/Tests/CesiumLoadTestSamples.cpp b/Source/CesiumRuntime/Private/Tests/SampleTilesetsLoad.perf.cpp similarity index 90% rename from Source/CesiumRuntime/Private/Tests/CesiumLoadTestSamples.cpp rename to Source/CesiumRuntime/Private/Tests/SampleTilesetsLoad.perf.cpp index 258d45b84..c3062d21e 100644 --- a/Source/CesiumRuntime/Private/Tests/CesiumLoadTestSamples.cpp +++ b/Source/CesiumRuntime/Private/Tests/SampleTilesetsLoad.perf.cpp @@ -16,23 +16,23 @@ using namespace Cesium; IMPLEMENT_SIMPLE_AUTOMATION_TEST( - FCesiumSampleDenver, - "Cesium.Performance.SampleLocaleDenver", + FLoadTilesetDenver, + "Cesium.Performance.Tileset Loading.Aerometrex Denver", EAutomationTestFlags::EditorContext | EAutomationTestFlags::PerfFilter) IMPLEMENT_SIMPLE_AUTOMATION_TEST( - FCesiumSampleMelbourne, - "Cesium.Performance.SampleLocaleMelbourne", + FLoadTilesetMelbourne, + "Cesium.Performance.Tileset Loading.Melbourne photogrammetry (open data)", EAutomationTestFlags::EditorContext | EAutomationTestFlags::PerfFilter) IMPLEMENT_SIMPLE_AUTOMATION_TEST( - FCesiumSampleMontrealPointCloud, - "Cesium.Performance.SampleTestPointCloud", + FLoadTilesetMontrealPointCloud, + "Cesium.Performance.Tileset Loading.Montreal point cloud (open data)", EAutomationTestFlags::EditorContext | EAutomationTestFlags::PerfFilter) IMPLEMENT_SIMPLE_AUTOMATION_TEST( - FSampleMaxTileLoads, - "Cesium.Performance.SampleVaryMaxTileLoads", + FLoadTilesetMelbourneVaryMaxTileLoads, + "Cesium.Performance.Tileset Loading.Melbourne photogrammetry (open data), vary max tile loads", EAutomationTestFlags::EditorContext | EAutomationTestFlags::PerfFilter) void samplesClearCache(SceneGenerationContext&, TestPass::TestingParameter) { @@ -146,7 +146,7 @@ void setupForMontrealPointCloud(SceneGenerationContext& context) { context.tilesets.push_back(montrealTileset); } -bool FCesiumSampleDenver::RunTest(const FString& Parameters) { +bool FLoadTilesetDenver::RunTest(const FString& Parameters) { std::vector testPasses; testPasses.push_back(TestPass{"Cold Cache", samplesClearCache, nullptr}); testPasses.push_back(TestPass{"Warm Cache", samplesRefreshTilesets, nullptr}); @@ -159,7 +159,7 @@ bool FCesiumSampleDenver::RunTest(const FString& Parameters) { 768); } -bool FCesiumSampleMelbourne::RunTest(const FString& Parameters) { +bool FLoadTilesetMelbourne::RunTest(const FString& Parameters) { std::vector testPasses; testPasses.push_back(TestPass{"Cold Cache", samplesClearCache, nullptr}); testPasses.push_back(TestPass{"Warm Cache", samplesRefreshTilesets, nullptr}); @@ -172,7 +172,7 @@ bool FCesiumSampleMelbourne::RunTest(const FString& Parameters) { 768); } -bool FCesiumSampleMontrealPointCloud::RunTest(const FString& Parameters) { +bool FLoadTilesetMontrealPointCloud::RunTest(const FString& Parameters) { auto adjustCamera = [this]( SceneGenerationContext& context, TestPass::TestingParameter parameter) { @@ -185,10 +185,11 @@ bool FCesiumSampleMontrealPointCloud::RunTest(const FString& Parameters) { }; auto verifyVisibleTiles = [this]( - SceneGenerationContext& context, + SceneGenerationContext& creationContext, + SceneGenerationContext& playContext, TestPass::TestingParameter parameter) { Cesium3DTilesSelection::Tileset* pTileset = - context.tilesets[0]->GetTileset(); + playContext.tilesets[0]->GetTileset(); if (TestNotNull("Tileset", pTileset)) { int visibleTiles = 0; pTileset->forEachLoadedTile([&](Cesium3DTilesSelection::Tile& tile) { @@ -210,6 +211,8 @@ bool FCesiumSampleMontrealPointCloud::RunTest(const FString& Parameters) { TestEqual("visibleTiles", visibleTiles, 1); } + + return true; }; std::vector testPasses; @@ -224,7 +227,7 @@ bool FCesiumSampleMontrealPointCloud::RunTest(const FString& Parameters) { 512); } -bool FSampleMaxTileLoads::RunTest(const FString& Parameters) { +bool FLoadTilesetMelbourneVaryMaxTileLoads::RunTest(const FString& Parameters) { auto setupPass = [this]( SceneGenerationContext& context, diff --git a/Source/CesiumRuntime/Private/Tests/SubLevels.spec.cpp b/Source/CesiumRuntime/Private/Tests/SubLevels.spec.cpp index 3cd88dca3..383c17b19 100644 --- a/Source/CesiumRuntime/Private/Tests/SubLevels.spec.cpp +++ b/Source/CesiumRuntime/Private/Tests/SubLevels.spec.cpp @@ -18,7 +18,9 @@ BEGIN_DEFINE_SPEC( FSubLevelsSpec, "Cesium.Unit.SubLevels", - EAutomationTestFlags::ApplicationContextMask | + EAutomationTestFlags::EditorContext | EAutomationTestFlags::ClientContext | + EAutomationTestFlags::ServerContext | + EAutomationTestFlags::CommandletContext | EAutomationTestFlags::ProductFilter) TObjectPtr pWorld; diff --git a/Source/CesiumRuntime/Private/Tests/TestRegionPolygons.cpp b/Source/CesiumRuntime/Private/Tests/TestRegionPolygons.cpp new file mode 100644 index 000000000..458bc93c0 --- /dev/null +++ b/Source/CesiumRuntime/Private/Tests/TestRegionPolygons.cpp @@ -0,0 +1,192 @@ +#include "TestRegionPolygons.h" + +#include + +namespace Cesium { +static const TestPolygon testRegionPolygonsData[] = { + {FVector2D(-74.2013321117691, 40.9774450853578), + FVector2D(-74.4593744591054, 40.514167617152), + FVector2D(-72.9155255739658, 40.7042737041433), + FVector2D(-73.85290089588, 40.9326611125325), + FVector2D(-74.2013321117691, 40.9774450853578)}, + {FVector2D(-70.8665457211077, 42.5869988084598), + FVector2D(-71.3661722404885, 42.4639488342876), + FVector2D(-71.2972087427719, 42.1467522915001), + FVector2D(-70.7729743178252, 42.2335714316977), + FVector2D(-70.8665457211077, 42.5869988084598)}, + {FVector2D(-75.0239947410133, 40.1395284511288), + FVector2D(-75.4196355358948, 40.0148058322418), + FVector2D(-75.2636118623868, 39.7886799431864), + FVector2D(-74.7858557650542, 39.9438636936503), + FVector2D(-75.0239947410133, 40.1395284511288)}, + {FVector2D(-76.7463533262082, 39.4825406033305), + FVector2D(-77.4340311059877, 38.8258770447382), + FVector2D(-76.9547073596801, 38.6332198167468), + FVector2D(-76.2326804229044, 39.3697178750327), + FVector2D(-76.7463533262082, 39.4825406033305)}, + {FVector2D(-87.7880477582706, 42.484868555962), + FVector2D(-88.5878253665254, 42.3173994498162), + FVector2D(-88.2041661838266, 41.2937330828566), + FVector2D(-87.2835529091586, 41.5464660939422), + FVector2D(-87.7880477582706, 42.484868555962)}, + {FVector2D(-117.797555097187, 33.5210842049415), + FVector2D(-116.732710054453, 34.1503747429439), + FVector2D(-118.101396808054, 34.3250274422573), + FVector2D(-119.005372293813, 34.0462414684101), + FVector2D(-117.797555097187, 33.5210842049415)}, + {FVector2D(-121.952555819749, 37.0551315779953), + FVector2D(-121.472262225148, 37.2762707697842), + FVector2D(-122.308508157973, 38.2801293998287), + FVector2D(-122.735942423996, 37.8231990412902), + FVector2D(-121.952555819749, 37.0551315779953)}, + {FVector2D(-123.344029747329, 49.3851693056083), + FVector2D(-123.302612411589, 48.8580301457693), + FVector2D(-122.05501553595, 48.8358263385625), + FVector2D(-121.933325112706, 49.2715130224448), + FVector2D(-123.344029747329, 49.3851693056083)}, + {FVector2D(-98.894461647111, 19.1607853097298), + FVector2D(-98.7686431463364, 19.6183748878263), + FVector2D(-99.3048055915005, 19.6853872937311), + FVector2D(-99.3991868765643, 19.3265084381959), + FVector2D(-98.894461647111, 19.1607853097298)}, + {FVector2D(140.054350788689, 35.0230502784051), + FVector2D(140.412218892413, 36.3913714622335), + FVector2D(139.256616929582, 36.4982427020207), + FVector2D(139.10640870208, 34.9240606249587), + FVector2D(140.054350788689, 35.0230502784051)}, + {FVector2D(135.055269955952, 34.1165959544619), + FVector2D(136.010060967071, 34.3342346904423), + FVector2D(135.827593998297, 35.1609921898404), + FVector2D(134.951100611567, 34.7581621821003), + FVector2D(135.055269955952, 34.1165959544619)}, + {FVector2D(126.506482128111, 37.309652936223), + FVector2D(127.276578372058, 37.3152753352917), + FVector2D(127.276625945403, 37.7169510199583), + FVector2D(126.456565879908, 37.6708092887235), + FVector2D(126.506482128111, 37.309652936223)}, + {FVector2D(121.134001967184, 31.5497391098806), + FVector2D(121.162908585755, 30.9008622819707), + FVector2D(121.973194206992, 30.996871119183), + FVector2D(121.703379279597, 31.5459147489145), + FVector2D(121.134001967184, 31.5497391098806)}, + {FVector2D(113.118683475979, 21.9538081632891), + FVector2D(113.116571761854, 21.9536183257244), + FVector2D(114.51719761199, 22.1592194597545), + FVector2D(114.412643287974, 23.2156098976288), + FVector2D(112.968966605958, 23.1794019008474), + FVector2D(113.118683475979, 21.9538081632891)}, + {FVector2D(119.602455828861, 23.3701241133722), + FVector2D(120.43065363132, 22.7299422907066), + FVector2D(121.979122588007, 24.9890484436014), + FVector2D(121.331012296727, 25.3178637634457), + FVector2D(119.602455828861, 23.3701241133722)}, + {FVector2D(116.388332170902, 38.6463257232499), + FVector2D(118.085699455998, 38.898921209556), + FVector2D(117.787877280437, 40.1604047317278), + FVector2D(115.944808581142, 40.0167139637757), + FVector2D(116.388332170902, 38.6463257232499)}, + {FVector2D(120.760414545729, 14.3748010156788), + FVector2D(121.258394771143, 14.2501216390828), + FVector2D(121.290054862448, 14.7534041084167), + FVector2D(120.738158949159, 14.7593332219211), + FVector2D(120.760414545729, 14.3748010156788)}, + {FVector2D(103.50156107247, 0.998061113465564), + FVector2D(104.715513672489, 0.982204662790223), + FVector2D(104.334518818725, 1.70398117696512), + FVector2D(103.258944549305, 1.4844867069418), + FVector2D(103.50156107247, 0.998061113465564)}, + {FVector2D(105.881719721888, -5.74570400497445), + FVector2D(105.833559417072, -6.21278484163883), + FVector2D(108.186160253085, -6.47215807929743), + FVector2D(108.027660861491, -5.93654743166617), + FVector2D(105.881719721888, -5.74570400497445)}, + {FVector2D(150.583157022031, -34.0498630944677), + FVector2D(151.280108788925, -34.1723736264387), + FVector2D(151.430931749967, -33.6913578323042), + FVector2D(150.68777700301, -33.5004609703255), + FVector2D(150.583157022031, -34.0498630944677)}, + {FVector2D(100.362043393093, 13.5146830907152), + FVector2D(100.804723956777, 13.4902538260098), + FVector2D(100.857533774329, 14.0291484359391), + FVector2D(100.296514387822, 14.0180095766592), + FVector2D(100.362043393093, 13.5146830907152)}, + {FVector2D(72.8139207040816, 18.8644328953372), + FVector2D(73.0797035981117, 18.9090108585454), + FVector2D(73.0550830148766, 19.2511180020347), + FVector2D(72.765539257819, 19.2056123110889), + FVector2D(72.8139207040816, 18.8644328953372)}, + {FVector2D(76.9327816012394, 28.3841052539538), + FVector2D(77.4771720538251, 28.4833789366456), + FVector2D(77.3482561523984, 28.8846883488663), + FVector2D(76.8582384578204, 28.7963756494536), + FVector2D(76.9327816012394, 28.3841052539538)}, + {FVector2D(54.9429835012101, 25.0178517226697), + FVector2D(55.0946994816812, 24.8756220574815), + FVector2D(55.602636800682, 25.3172895563037), + FVector2D(55.3945349608567, 25.4562123460321), + FVector2D(54.9429835012101, 25.0178517226697)}, + {FVector2D(-3.61878369798117, 40.2775903261193), + FVector2D(-3.4906994656486, 40.4737663140241), + FVector2D(-3.72686800427542, 40.601926645219), + FVector2D(-3.89898175894152, 40.3290711912317), + FVector2D(-3.61878369798117, 40.2775903261193)}, + {FVector2D(-9.19296732462638, 38.3938592975828), + FVector2D(-8.75078735276178, 38.5702884330086), + FVector2D(-8.92050164224059, 38.9449362396636), + FVector2D(-9.5272031704166, 38.7658866470946), + FVector2D(-9.19296732462638, 38.3938592975828)}, + {FVector2D(1.81826634445193, 48.6429184198264), + FVector2D(2.57743142898819, 48.5161116317191), + FVector2D(2.81852244248245, 48.9958850870085), + FVector2D(2.08220061664221, 49.1112351713166), + FVector2D(1.81826634445193, 48.6429184198264)}, + {FVector2D(12.046678722878, 41.8734309143794), + FVector2D(12.538572569152, 41.5584390046116), + FVector2D(12.902473689969, 41.8844741109742), + FVector2D(12.3604328937937, 42.1775684704485), + FVector2D(12.046678722878, 41.8734309143794)}, + {FVector2D(13.0369523148704, 52.3264792264681), + FVector2D(13.7857078301483, 52.2432874392554), + FVector2D(13.7245722259762, 52.5706652767158), + FVector2D(13.0855894510726, 52.6398386596651), + FVector2D(13.0369523148704, 52.3264792264681)}, + {FVector2D(-0.540173561477041, 51.3275558776523), + FVector2D(0.366937281698374, 51.2972794865316), + FVector2D(0.378630660590049, 51.6312453736339), + FVector2D(-0.565434346898922, 51.6941551135231), + FVector2D(-0.540173561477041, 51.3275558776523)}, + {FVector2D(-3.44162716057316, 55.9042055474235), + FVector2D(-2.86557475273948, 55.8204519638228), + FVector2D(-2.76434520027445, 55.9879349630359), + FVector2D(-3.39396844082001, 56.0516294637465), + FVector2D(-3.44162716057316, 55.9042055474235)}, + {FVector2D(-6.45226364658212, 53.233148089773), + FVector2D(-5.94733626257021, 53.2160280458379), + FVector2D(-5.99718303046307, 53.4420617215498), + FVector2D(-6.53307425159679, 53.4371162576022), + FVector2D(-6.45226364658212, 53.233148089773)}}; + +const TestPolygon* TestRegionPolygons::polygons = testRegionPolygonsData; + +FVector TestPolygon::GetRandomPoint() const { + // For testing we don't need to actually generate a random point within the + // polygon - just use the polygon's bounding box. + double minX = std::numeric_limits::max(); + double minY = std::numeric_limits::max(); + double maxX = std::numeric_limits::min(); + double maxY = std::numeric_limits::min(); + + for (const FVector2D& point : this->points) { + minX = std::min(point.X, minX); + minY = std::min(point.Y, minY); + maxX = std::max(point.X, maxX); + maxY = std::max(point.Y, maxY); + } + + return FVector( + FMath::RandRange(minX, maxX), + FMath::RandRange(minY, maxY), + 0.0f); +} + +} // namespace Cesium diff --git a/Source/CesiumRuntime/Private/Tests/TestRegionPolygons.h b/Source/CesiumRuntime/Private/Tests/TestRegionPolygons.h new file mode 100644 index 000000000..7d5faa5eb --- /dev/null +++ b/Source/CesiumRuntime/Private/Tests/TestRegionPolygons.h @@ -0,0 +1,33 @@ +#pragma once + +#if WITH_EDITOR + +#include "VectorTypes.h" +#include +#include + +namespace Cesium { +struct TestPolygon { + TestPolygon(std::initializer_list points) : points(points) {} + + /** + * Returns a random point within this polygon to test with. + */ + FVector GetRandomPoint() const; + +private: + std::vector points; +}; + +// An array of test polygons delineating populated, high-interest areas to test +// with. +constexpr static int TEST_REGION_POLYGONS_COUNT = 32; + +class TestRegionPolygons { +public: + static const TestPolygon* polygons; +}; + +} // namespace Cesium + +#endif diff --git a/Source/CesiumRuntime/Private/Tests/TileLoadingSoakTest.cpp b/Source/CesiumRuntime/Private/Tests/TileLoadingSoakTest.cpp new file mode 100644 index 000000000..256d8ea44 --- /dev/null +++ b/Source/CesiumRuntime/Private/Tests/TileLoadingSoakTest.cpp @@ -0,0 +1,276 @@ +// Copyright 2020-2024 CesiumGS, Inc. and Contributors + +#if WITH_EDITOR + +#include +#include +#include +#include +#include +#include + +#include "Containers/UnrealString.h" +#include "GenericPlatform/GenericPlatformFile.h" +#include "GenericPlatform/GenericPlatformMemory.h" +#include "GenericPlatform/GenericPlatformProcess.h" +#include "HAL/PlatformFileManager.h" +#include "Math/UnrealMathUtility.h" +#include "Misc/AutomationTest.h" +#include "Settings/LevelEditorPlaySettings.h" +#include "Tests/AutomationCommon.h" +#include "Tests/AutomationEditorCommon.h" + +#include "Cesium3DTilesSelection/Tile.h" +#include "Cesium3DTileset.h" +#include "CesiumFlyToComponent.h" +#include "CesiumGeoreference.h" +#include "GlobeAwareDefaultPawn.h" +#include "GoogleTilesTestSetup.h" + +#include "CesiumLoadTestCore.h" +#include "CesiumSceneGeneration.h" +#include "CesiumTestHelpers.h" + +#include "TestRegionPolygons.h" + +#define VIEWPORT_WIDTH 1280; +#define VIEWPORT_HEIGHT 720; +// Twelve hour soak test +constexpr static double SOAK_TEST_DURATION = 60 * 60 * 12; +// The duration in seconds between each stress test iteration +constexpr static double TEST_ITERATION_DELAY = 10.0; +constexpr static float FLIGHT_TIME = 5.0f; + +// Stack of indices into TestRegionPolygons::polygons to use next +static std::stack nextPolygonIndex; + +namespace Cesium { + +FString& getLogFilePath() { + static std::optional path{}; + static const TCHAR* filename = TEXT("tiles_output.csv"); + + if (!path.has_value()) { + path = FString::Printf(TEXT("%s/%s"), *FPaths::ProjectDir(), filename); + } + + return path.value(); +} + +void countTree( + Cesium3DTilesSelection::Tile* tile, + int depth, + int& outCount, + int& outUnloaded, + int& outUnloading, + int& outContentLoading, + int& outContentLoaded, + int& outDone) { + /*std::string indentation(depth, '\t'); + UE_LOG( + LogCesium, + Display, + TEXT("%s- tile load state %d"), + UTF8_TO_TCHAR(indentation.c_str()), + tile->getState());*/ + + outCount++; + std::span tiles = tile->getChildren(); + for (Cesium3DTilesSelection::Tile& child : tiles) { + switch (child.getState()) { + case Cesium3DTilesSelection::TileLoadState::Unloaded: + outUnloaded++; + break; + case Cesium3DTilesSelection::TileLoadState::ContentLoading: + outContentLoading++; + break; + case Cesium3DTilesSelection::TileLoadState::ContentLoaded: + outContentLoaded++; + break; + case Cesium3DTilesSelection::TileLoadState::Unloading: + outUnloading++; + break; + case Cesium3DTilesSelection::TileLoadState::Done: + outDone++; + break; + } + countTree( + &child, + depth + 1, + outCount, + outUnloaded, + outUnloading, + outContentLoading, + outContentLoaded, + outDone); + } +} + +void logDebug(ACesium3DTileset* tilesetActor) { + Cesium3DTilesSelection::Tileset* tileset = tilesetActor->GetTileset(); + int numTiles = 0, numUnloaded = 0, numUnloading = 0, numContentLoading = 0, + numContentLoaded = 0, numDone = 0; + countTree( + tileset->getRootTile(), + 0, + numTiles, + numUnloaded, + numUnloading, + numContentLoading, + numContentLoaded, + numDone); + + FGenericPlatformMemoryStats stats = FPlatformMemory::GetStats(); + + IPlatformFile& file = FPlatformFileManager::Get().GetPlatformFile(); + IFileHandle* handle = file.OpenWrite(*getLogFilePath(), true); + assert(handle); + + std::stringstream outstream; + + outstream << static_cast(FPlatformTime::Seconds()) << "," << numTiles + << "," << numUnloaded << "," << numUnloading << "," + << numContentLoading << "," << numContentLoaded << "," << numDone + << "," << stats.UsedVirtual << std::endl; + + std::string str = outstream.str(); + handle->Write(reinterpret_cast(str.c_str()), str.length()); + handle->Flush(); + delete handle; + + UE_LOG( + LogCesium, + Display, + TEXT( + "Tileset has %d tiles in tree (%d unloaded, %d unloading, %d content loading, %d content loaded, %d done)"), + numTiles, + numUnloaded, + numUnloading, + numContentLoading, + numContentLoaded, + numDone); +} + +void fillWithRandomIndices() { + // Create a vector with every index + std::vector indices; + for (int i = 0; i < TEST_REGION_POLYGONS_COUNT; i++) { + indices.push_back(i); + } + + // Shuffle indices + std::default_random_engine rng{}; + std::shuffle(indices.begin(), indices.end(), rng); + + // Push shuffled indices onto stack + for (int idx : indices) { + nextPolygonIndex.push(idx); + } +} + +// Since this shares a name with the global defined in Google3dTilesLoadTest, we +// tell the compiler to look for the variable there instead. +extern LoadTestContext gLoadTestContext; + +DEFINE_LATENT_AUTOMATION_COMMAND_ONE_PARAMETER( + FFlyToRandomLocationCommand, + LoadTestContext&, + context); + +bool FFlyToRandomLocationCommand::Update() { + + if (!GEditor->IsPlaySessionInProgress()) { + return true; + } + + logDebug(context.playContext.tilesets.at(0)); + + UCesiumFlyToComponent* flyTo = + context.playContext.pawn->FindComponentByClass(); + + flyTo->Duration = FLIGHT_TIME; + + FVector pawnPosition = context.playContext.pawn->GetActorLocation(); + FVector llhPosition = + context.playContext.georeference + ->TransformUnrealPositionToLongitudeLatitudeHeight(pawnPosition); + + if (nextPolygonIndex.empty()) { + fillWithRandomIndices(); + } + + const int nextIndex = nextPolygonIndex.top(); + nextPolygonIndex.pop(); + + FVector targetLlh = TestRegionPolygons::polygons[nextIndex].GetRandomPoint(); + targetLlh.Z = 1000.0f; + + // Start the flight + context.playContext.pawn + ->FlyToLocationLongitudeLatitudeHeight(targetLlh, 0, 0, false); + return true; +} + +IMPLEMENT_SIMPLE_AUTOMATION_TEST( + FGoogleTilesStressTest, + "Cesium.Performance.StressTest.GoogleTiles", + EAutomationTestFlags::EditorContext | EAutomationTestFlags::StressFilter) + +bool FGoogleTilesStressTest::RunTest(const FString& Parameters) { + + LoadTestContext& context = gLoadTestContext; + + context.reset(); + + UE_LOG(LogCesium, Display, TEXT("Creating common world objects...")); + createCommonWorldObjects(context.creationContext); + + UE_LOG(LogCesium, Display, TEXT("Setting up location...")); + GoogleTilesTestSetup::setupForGoogleplex(context.creationContext); + ACesium3DTileset* tileset = context.creationContext.tilesets.at(0); + tileset->MaximumCachedBytes = 0; + context.creationContext.trackForPlay(); + + // Let the editor viewports see the same thing the test will + context.creationContext.syncWorldCamera(); + + context.creationContext.refreshTilesets(); + + ADD_LATENT_AUTOMATION_COMMAND(FWaitForShadersToFinishCompiling); + + // Queue play in editor and set desired viewport size + FRequestPlaySessionParams Params; + Params.WorldType = EPlaySessionWorldType::PlayInEditor; + Params.EditorPlaySettings = NewObject(); + Params.EditorPlaySettings->NewWindowWidth = VIEWPORT_WIDTH; + Params.EditorPlaySettings->NewWindowHeight = VIEWPORT_HEIGHT; + Params.EditorPlaySettings->EnableGameSound = false; + GEditor->RequestPlaySession(Params); + + ADD_LATENT_AUTOMATION_COMMAND( + InitForPlayWhenReady(context.creationContext, context.playContext)); + + // Wait to show distinct gap in profiler + ADD_LATENT_AUTOMATION_COMMAND(FWaitLatentCommand(1.0f)); + + int numFlights = static_cast( + SOAK_TEST_DURATION / (FLIGHT_TIME + TEST_ITERATION_DELAY)); + + for (int i = 0; i < numFlights; i++) { + // Give it some time for the tiles to load where we are + ADD_LATENT_AUTOMATION_COMMAND(FWaitLatentCommand(TEST_ITERATION_DELAY)); + ADD_LATENT_AUTOMATION_COMMAND(FFlyToRandomLocationCommand(context)); + ADD_LATENT_AUTOMATION_COMMAND(FWaitLatentCommand(FLIGHT_TIME)); + } + + // End play in editor + ADD_LATENT_AUTOMATION_COMMAND(FEndPlayMapCommand()); + + ADD_LATENT_AUTOMATION_COMMAND(TestCleanupCommand(context)); + + return true; +} + +} // namespace Cesium + +#endif diff --git a/Source/CesiumRuntime/Private/Tests/UnrealAssetAccessor.spec.cpp b/Source/CesiumRuntime/Private/Tests/UnrealAssetAccessor.spec.cpp index 539949770..48f9e46fa 100644 --- a/Source/CesiumRuntime/Private/Tests/UnrealAssetAccessor.spec.cpp +++ b/Source/CesiumRuntime/Private/Tests/UnrealAssetAccessor.spec.cpp @@ -1,5 +1,6 @@ // Copyright 2020-2024 CesiumGS, Inc. and Contributors +#include "UnrealAssetAccessor.h" #include "Async/Async.h" #include "CesiumAsync/IAssetResponse.h" #include "CesiumRuntime.h" @@ -7,12 +8,13 @@ #include "Misc/AutomationTest.h" #include "Misc/FileHelper.h" #include "Misc/Paths.h" -#include "UnrealAssetAccessor.h" BEGIN_DEFINE_SPEC( FUnrealAssetAccessorSpec, "Cesium.Unit.UnrealAssetAccessor", - EAutomationTestFlags::ApplicationContextMask | + EAutomationTestFlags::EditorContext | EAutomationTestFlags::ClientContext | + EAutomationTestFlags::ServerContext | + EAutomationTestFlags::CommandletContext | EAutomationTestFlags::ProductFilter) FString Filename; @@ -31,7 +33,7 @@ void TestAccessorRequest(const FString& Uri, const std::string& expectedData) { if (!Response) return; - gsl::span data = Response->data(); + std::span data = Response->data(); TestEqual("data length", data.size(), expectedData.size()); std::string s( reinterpret_cast(data.data()), diff --git a/Source/CesiumRuntime/Private/Tests/UnrealMetadataConversions.spec.cpp b/Source/CesiumRuntime/Private/Tests/UnrealMetadataConversions.spec.cpp index a39999677..f4e81ea48 100644 --- a/Source/CesiumRuntime/Private/Tests/UnrealMetadataConversions.spec.cpp +++ b/Source/CesiumRuntime/Private/Tests/UnrealMetadataConversions.spec.cpp @@ -1,17 +1,17 @@ // Copyright 2020-2024 CesiumGS, Inc. and Contributors +#include "UnrealMetadataConversions.h" #include "CesiumTestHelpers.h" #include "Misc/AutomationTest.h" -#include "UnrealMetadataConversions.h" #include -using namespace CesiumGltf; - BEGIN_DEFINE_SPEC( FUnrealMetadataConversionsSpec, "Cesium.Unit.MetadataConversions", - EAutomationTestFlags::ApplicationContextMask | + EAutomationTestFlags::EditorContext | EAutomationTestFlags::ClientContext | + EAutomationTestFlags::ServerContext | + EAutomationTestFlags::CommandletContext | EAutomationTestFlags::ProductFilter) END_DEFINE_SPEC(FUnrealMetadataConversionsSpec) diff --git a/Source/CesiumRuntime/Private/Tests/VecMath.spec.cpp b/Source/CesiumRuntime/Private/Tests/VecMath.spec.cpp new file mode 100644 index 000000000..ce97ba63f --- /dev/null +++ b/Source/CesiumRuntime/Private/Tests/VecMath.spec.cpp @@ -0,0 +1,77 @@ +// Copyright 2020-2025 CesiumGS, Inc. and Contributors + +#include "VecMath.h" +#include "Misc/AutomationTest.h" + +BEGIN_DEFINE_SPEC( + FVecMathSpec, + "Cesium.Unit.VecMath", + EAutomationTestFlags::EditorContext | EAutomationTestFlags::ClientContext | + EAutomationTestFlags::ServerContext | + EAutomationTestFlags::CommandletContext | + EAutomationTestFlags::ProductFilter) +END_DEFINE_SPEC(FVecMathSpec) + +void FVecMathSpec::Define() { + Describe("createTransform", [this]() { + It("matches FMatrix -> FTransform for larger scales", [this]() { + FTransform original = FTransform( + FQuat::MakeFromRotator(FRotator(10.0, 20.0, 30.0)), + FVector(3000.0, 2000.0, 1000.0), + FVector(1.0, 2.0, 3.0)); + + FMatrix originalUnrealMatrix = original.ToMatrixWithScale(); + glm::dmat4 originalGlmMatrix = + VecMath::createMatrix4D(originalUnrealMatrix); + + FTransform viaUnrealMatrix = + FTransform(VecMath::createMatrix(originalGlmMatrix)); + FTransform viaVecMath = VecMath::createTransform(originalGlmMatrix); + + TestNearlyEqual( + TEXT("Translation"), + viaVecMath.GetTranslation(), + viaUnrealMatrix.GetTranslation(), + 1e-8); + TestNearlyEqual( + TEXT("Rotation"), + viaVecMath.GetRotation().Rotator(), + viaUnrealMatrix.GetRotation().Rotator(), + 1e-10); + TestNearlyEqual( + TEXT("Scale"), + viaVecMath.GetScale3D(), + viaUnrealMatrix.GetScale3D(), + 1e-11); + }); + + It("returns correct values when scale is small", [this]() { + FTransform original = FTransform( + FQuat::MakeFromRotator(FRotator(10.0, 20.0, 30.0)), + FVector(3000.0, 2000.0, 1000.0), + FVector(1e-7, 2e-7, 3e-7)); + + FMatrix originalUnrealMatrix = original.ToMatrixWithScale(); + glm::dmat4 originalGlmMatrix = + VecMath::createMatrix4D(originalUnrealMatrix); + + FTransform viaVecMath = VecMath::createTransform(originalGlmMatrix); + + TestNearlyEqual( + TEXT("Translation"), + viaVecMath.GetTranslation(), + original.GetTranslation(), + 1e-8); + TestNearlyEqual( + TEXT("Rotation"), + viaVecMath.GetRotation().Rotator(), + original.GetRotation().Rotator(), + 1e-10); + TestNearlyEqual( + TEXT("Scale"), + viaVecMath.GetScale3D(), + original.GetScale3D(), + 1e-18); + }); + }); +} diff --git a/Source/CesiumRuntime/Private/UnrealAssetAccessor.cpp b/Source/CesiumRuntime/Private/UnrealAssetAccessor.cpp index 2b9816ff1..663ff7a8f 100644 --- a/Source/CesiumRuntime/Private/UnrealAssetAccessor.cpp +++ b/Source/CesiumRuntime/Private/UnrealAssetAccessor.cpp @@ -7,6 +7,10 @@ #include "CesiumAsync/AsyncSystem.h" #include "CesiumAsync/IAssetRequest.h" #include "CesiumAsync/IAssetResponse.h" +THIRD_PARTY_INCLUDES_START +#include "CesiumUtility/Uri.h" +THIRD_PARTY_INCLUDES_END +#include "CesiumCommon.h" #include "CesiumRuntime.h" #include "HttpManager.h" #include "HttpModule.h" @@ -20,7 +24,6 @@ #include #include #include -#include namespace { @@ -58,9 +61,9 @@ class UnrealAssetResponse : public CesiumAsync::IAssetResponse { return this->_headers; } - virtual gsl::span data() const override { + virtual std::span data() const override { const TArray& content = this->_pResponse->GetContent(); - return gsl::span( + return std::span( reinterpret_cast(content.GetData()), content.Num()); } @@ -147,6 +150,30 @@ bool isFile(const std::string& url) { return url.compare(0, sizeof(fileProtocol) - 1, fileProtocol) == 0; } +void rejectPromiseOnUnsuccessfulConnection( + const CesiumAsync::Promise>& + promise, + FHttpRequestPtr pRequest) { +#if ENGINE_VERSION_5_4_OR_HIGHER + if (pRequest->GetStatus() == EHttpRequestStatus::Failed) { + EHttpFailureReason failureReason = pRequest->GetFailureReason(); + promise.reject(std::runtime_error(fmt::format( + "Request failed: {}", + TCHAR_TO_UTF8(LexToString(failureReason))))); + } else { + promise.reject(std::runtime_error(fmt::format( + "Request not successful: {}", + TCHAR_TO_UTF8(ToString(pRequest->GetStatus()))))); + } +#else + if (pRequest->GetStatus() == EHttpRequestStatus::Failed_ConnectionError) { + promise.reject(std::runtime_error("Connection failed.")); + } else { + promise.reject(std::runtime_error("Request failed.")); + } +#endif +} + } // namespace CesiumAsync::Future> @@ -196,12 +223,7 @@ UnrealAssetAccessor::get( promise.resolve( std::make_unique(pRequest, pResponse)); } else { - switch (pRequest->GetStatus()) { - case EHttpRequestStatus::Failed_ConnectionError: - promise.reject(std::runtime_error("Connection failed.")); - default: - promise.reject(std::runtime_error("Request failed.")); - } + rejectPromiseOnUnsuccessfulConnection(promise, pRequest); } }); @@ -215,7 +237,7 @@ UnrealAssetAccessor::request( const std::string& verb, const std::string& url, const std::vector& headers, - const gsl::span& contentPayload) { + const std::span& contentPayload) { const FString& userAgent = this->_userAgent; const TMap& cesiumRequestHeaders = @@ -259,12 +281,7 @@ UnrealAssetAccessor::request( promise.resolve( std::make_unique(pRequest, pResponse)); } else { - switch (pRequest->GetStatus()) { - case EHttpRequestStatus::Failed_ConnectionError: - promise.reject(std::runtime_error("Connection failed.")); - default: - promise.reject(std::runtime_error("Request failed.")); - } + rejectPromiseOnUnsuccessfulConnection(promise, pRequest); } }); @@ -304,8 +321,8 @@ class UnrealFileAssetRequestResponse : public CesiumAsync::IAssetRequest, virtual std::string contentType() const override { return std::string(); } - virtual gsl::span data() const override { - return gsl::span( + virtual std::span data() const override { + return std::span( reinterpret_cast(this->_data.GetData()), size_t(this->_data.Num())); } @@ -323,32 +340,9 @@ const std::string UnrealFileAssetRequestResponse::getMethod = "GET"; const CesiumAsync::HttpHeaders UnrealFileAssetRequestResponse::emptyHeaders{}; std::string convertFileUriToFilename(const std::string& url) { - // According to the uriparser docs, both uriUriStringToWindowsFilenameA and - // uriUriStringToUnixFilenameA require an output buffer with space for at most - // length(url)+1 characters. - // https://uriparser.github.io/doc/api/latest/Uri_8h.html#a4afbc8453c7013b9618259bc57d81a39 - std::string result(url.size() + 1, '\0'); - -#ifdef _WIN32 - int errorCode = uriUriStringToWindowsFilenameA(url.c_str(), result.data()); -#else - int errorCode = uriUriStringToUnixFilenameA(url.c_str(), result.data()); -#endif - - // Truncate the string if necessary by finding the first null character. - size_t end = result.find('\0'); - if (end != std::string::npos) { - result.resize(end); - } - - // Remove query parameters from the URL if present, as they are no longer - // ignored by Unreal. - size_t pos = result.find("?"); - if (pos != std::string::npos) { - result.erase(pos); - } - - return result; + CesiumUtility::Uri parsedUri(url); + return CesiumUtility::Uri::uriPathToNativePath( + std::string(parsedUri.getPath())); } class FCesiumReadFileWorker : public FNonAbandonableTask { diff --git a/Source/CesiumRuntime/Private/UnrealPrepareRendererResources.cpp b/Source/CesiumRuntime/Private/UnrealPrepareRendererResources.cpp new file mode 100644 index 000000000..de6b0c91b --- /dev/null +++ b/Source/CesiumRuntime/Private/UnrealPrepareRendererResources.cpp @@ -0,0 +1,252 @@ +#include "UnrealPrepareRendererResources.h" +#include "Cesium3DTileset.h" +#include "CesiumGltfComponent.h" +#include "CesiumLifetime.h" +#include "CesiumRasterOverlay.h" +#include "CesiumRuntime.h" +#include "CreateGltfOptions.h" +#include "ExtensionImageAssetUnreal.h" +#include +#include +#include +#include +#include + +UnrealPrepareRendererResources::UnrealPrepareRendererResources( + ACesium3DTileset* pActor) + : _pActor(pActor) {} + +CesiumAsync::Future +UnrealPrepareRendererResources::prepareInLoadThread( + const CesiumAsync::AsyncSystem& asyncSystem, + Cesium3DTilesSelection::TileLoadResult&& tileLoadResult, + const glm::dmat4& transform, + const std::any& rendererOptions) { + CreateGltfOptions::CreateModelOptions options(std::move(tileLoadResult)); + if (!options.pModel) { + return asyncSystem.createResolvedFuture( + Cesium3DTilesSelection::TileLoadResultAndRenderResources{ + std::move(options.tileLoadResult), + nullptr}); + } + + options.alwaysIncludeTangents = this->_pActor->GetAlwaysIncludeTangents(); + options.createPhysicsMeshes = this->_pActor->GetCreatePhysicsMeshes(); + + options.ignoreKhrMaterialsUnlit = this->_pActor->GetIgnoreKhrMaterialsUnlit(); + + if (this->_pActor->_featuresMetadataDescription) { + options.pFeaturesMetadataDescription = + &(*this->_pActor->_featuresMetadataDescription); + } else if (this->_pActor->_metadataDescription_DEPRECATED) { + options.pEncodedMetadataDescription_DEPRECATED = + &(*this->_pActor->_metadataDescription_DEPRECATED); + } + + const CesiumGeospatial::Ellipsoid& ellipsoid = tileLoadResult.ellipsoid; + + CesiumAsync::Future + pHalfFuture = UCesiumGltfComponent::CreateOffGameThread( + asyncSystem, + transform, + std::move(options), + ellipsoid); + + return MoveTemp(pHalfFuture) + .thenImmediately( + [](UCesiumGltfComponent::CreateOffGameThreadResult&& result) + -> Cesium3DTilesSelection::TileLoadResultAndRenderResources { + return Cesium3DTilesSelection::TileLoadResultAndRenderResources{ + std::move(result.TileLoadResult), + result.HalfConstructed.Release()}; + }); +} + +void* UnrealPrepareRendererResources::prepareInMainThread( + Cesium3DTilesSelection::Tile& tile, + void* pLoadThreadResult) { + Cesium3DTilesSelection::TileContent& content = tile.getContent(); + if (content.isRenderContent()) { + TUniquePtr pHalf( + reinterpret_cast( + pLoadThreadResult)); + Cesium3DTilesSelection::TileRenderContent& renderContent = + *content.getRenderContent(); + return UCesiumGltfComponent::CreateOnGameThread( + renderContent.getModel(), + this->_pActor, + std::move(pHalf), + _pActor->GetCesiumTilesetToUnrealRelativeWorldTransform(), + this->_pActor->GetMaterial(), + this->_pActor->GetTranslucentMaterial(), + this->_pActor->GetWaterMaterial(), + this->_pActor->GetCustomDepthParameters(), + tile, + this->_pActor->GetCreateNavCollision()); + } + // UE_LOG(LogCesium, VeryVerbose, TEXT("No content for tile")); + return nullptr; +} + +void UnrealPrepareRendererResources::free( + Cesium3DTilesSelection::Tile& tile, + void* pLoadThreadResult, + void* pMainThreadResult) noexcept { + if (pLoadThreadResult) { + UCesiumGltfComponent::HalfConstructed* pHalf = + reinterpret_cast( + pLoadThreadResult); + delete pHalf; + } else if (pMainThreadResult) { + UCesiumGltfComponent* pGltf = + reinterpret_cast(pMainThreadResult); + CesiumLifetime::destroyComponentRecursively(pGltf); + } +} + +void* UnrealPrepareRendererResources::prepareRasterInLoadThread( + CesiumGltf::ImageAsset& image, + const std::any& rendererOptions) { + auto ppOptions = + std::any_cast(&rendererOptions); + check(ppOptions != nullptr && *ppOptions != nullptr); + if (ppOptions == nullptr || *ppOptions == nullptr) { + return nullptr; + } + + auto pOptions = *ppOptions; + + if (pOptions->useMipmaps) { + std::optional errorMessage = + CesiumGltfReader::ImageDecoder::generateMipMaps(image); + if (errorMessage) { + UE_LOG( + LogCesium, + Warning, + TEXT("%s"), + UTF8_TO_TCHAR(errorMessage->c_str())); + } + } + + // TODO: sRGB should probably be configurable on the raster overlay. + bool sRGB = true; + + const ExtensionImageAssetUnreal& extension = + ExtensionImageAssetUnreal::getOrCreate( + CesiumAsync::AsyncSystem(nullptr), // TODO + image, + sRGB, + pOptions->useMipmaps, + std::nullopt); + + // Because raster overlay images are never shared (at least currently!), the + // future should already be resolved by the time we get here. + check(extension.getFuture().isReady()); + + auto texture = CesiumTextureUtility::loadTextureAnyThreadPart( + image, + TextureAddress::TA_Clamp, + TextureAddress::TA_Clamp, + pOptions->filter, + pOptions->useMipmaps, + pOptions->group, + sRGB, + std::nullopt); + + return texture.Release(); +} + +void* UnrealPrepareRendererResources::prepareRasterInMainThread( + CesiumRasterOverlays::RasterOverlayTile& rasterTile, + void* pLoadThreadResult) { + TUniquePtr pLoadedTexture{ + static_cast( + pLoadThreadResult)}; + + if (!pLoadedTexture) { + return nullptr; + } + + CesiumUtility::IntrusivePointer< + CesiumTextureUtility::ReferenceCountedUnrealTexture> + pTexture = + CesiumTextureUtility::loadTextureGameThreadPart(pLoadedTexture.Get()); + if (!pTexture) { + return nullptr; + } + + // Don't let this ReferenceCountedUnrealTexture be destroyed when the + // intrusive pointer goes out of scope. + pTexture->addReference(); + return pTexture.get(); +} + +void UnrealPrepareRendererResources::freeRaster( + const CesiumRasterOverlays::RasterOverlayTile& rasterTile, + void* pLoadThreadResult, + void* pMainThreadResult) noexcept { + if (pLoadThreadResult) { + CesiumTextureUtility::LoadedTextureResult* pLoadedTexture = + static_cast( + pLoadThreadResult); + delete pLoadedTexture; + } + + if (pMainThreadResult) { + CesiumTextureUtility::ReferenceCountedUnrealTexture* pTexture = + static_cast( + pMainThreadResult); + pTexture->releaseReference(); + } +} + +void UnrealPrepareRendererResources::attachRasterInMainThread( + const Cesium3DTilesSelection::Tile& tile, + int32_t overlayTextureCoordinateID, + const CesiumRasterOverlays::RasterOverlayTile& rasterTile, + void* pMainThreadRendererResources, + const glm::dvec2& translation, + const glm::dvec2& scale) { + const Cesium3DTilesSelection::TileContent& content = tile.getContent(); + const Cesium3DTilesSelection::TileRenderContent* pRenderContent = + content.getRenderContent(); + if (pMainThreadRendererResources != nullptr && pRenderContent != nullptr) { + UCesiumGltfComponent* pGltfContent = + reinterpret_cast( + pRenderContent->getRenderResources()); + if (pGltfContent) { + pGltfContent->AttachRasterTile( + tile, + rasterTile, + static_cast( + pMainThreadRendererResources) + ->getUnrealTexture(), + translation, + scale, + overlayTextureCoordinateID); + } + } +} + +void UnrealPrepareRendererResources::detachRasterInMainThread( + const Cesium3DTilesSelection::Tile& tile, + int32_t overlayTextureCoordinateID, + const CesiumRasterOverlays::RasterOverlayTile& rasterTile, + void* pMainThreadRendererResources) noexcept { + const Cesium3DTilesSelection::TileContent& content = tile.getContent(); + const Cesium3DTilesSelection::TileRenderContent* pRenderContent = + content.getRenderContent(); + if (pRenderContent) { + UCesiumGltfComponent* pGltfContent = + reinterpret_cast( + pRenderContent->getRenderResources()); + if (pMainThreadRendererResources != nullptr && pGltfContent != nullptr) { + pGltfContent->DetachRasterTile( + tile, + rasterTile, + static_cast( + pMainThreadRendererResources) + ->getUnrealTexture()); + } + } +} diff --git a/Source/CesiumRuntime/Private/UnrealPrepareRendererResources.h b/Source/CesiumRuntime/Private/UnrealPrepareRendererResources.h new file mode 100644 index 000000000..48508a6c0 --- /dev/null +++ b/Source/CesiumRuntime/Private/UnrealPrepareRendererResources.h @@ -0,0 +1,62 @@ +#pragma once + +#include + +class ACesium3DTileset; + +/** + * An implementation of Cesium Native's IPrepareRendererResources that creates + * Unreal objects for 3D Tiles tiles and raster overlays. + */ +class UnrealPrepareRendererResources + : public Cesium3DTilesSelection::IPrepareRendererResources { +public: + UnrealPrepareRendererResources(ACesium3DTileset* pActor); + + virtual CesiumAsync::Future< + Cesium3DTilesSelection::TileLoadResultAndRenderResources> + prepareInLoadThread( + const CesiumAsync::AsyncSystem& asyncSystem, + Cesium3DTilesSelection::TileLoadResult&& tileLoadResult, + const glm::dmat4& transform, + const std::any& rendererOptions) override; + + virtual void* prepareInMainThread( + Cesium3DTilesSelection::Tile& tile, + void* pLoadThreadResult) override; + + virtual void free( + Cesium3DTilesSelection::Tile& tile, + void* pLoadThreadResult, + void* pMainThreadResult) noexcept override; + + virtual void* prepareRasterInLoadThread( + CesiumGltf::ImageAsset& image, + const std::any& rendererOptions) override; + + virtual void* prepareRasterInMainThread( + CesiumRasterOverlays::RasterOverlayTile& rasterTile, + void* pLoadThreadResult) override; + + virtual void freeRaster( + const CesiumRasterOverlays::RasterOverlayTile& rasterTile, + void* pLoadThreadResult, + void* pMainThreadResult) noexcept override; + + virtual void attachRasterInMainThread( + const Cesium3DTilesSelection::Tile& tile, + int32_t overlayTextureCoordinateID, + const CesiumRasterOverlays::RasterOverlayTile& rasterTile, + void* pMainThreadRendererResources, + const glm::dvec2& translation, + const glm::dvec2& scale) override; + + virtual void detachRasterInMainThread( + const Cesium3DTilesSelection::Tile& tile, + int32_t overlayTextureCoordinateID, + const CesiumRasterOverlays::RasterOverlayTile& rasterTile, + void* pMainThreadRendererResources) noexcept override; + +private: + ACesium3DTileset* _pActor; +}; diff --git a/Source/CesiumRuntime/Private/VecMath.cpp b/Source/CesiumRuntime/Private/VecMath.cpp index 1ac8f5f80..cbfa08d83 100644 --- a/Source/CesiumRuntime/Private/VecMath.cpp +++ b/Source/CesiumRuntime/Private/VecMath.cpp @@ -2,13 +2,11 @@ #include "VecMath.h" -#include "CesiumUtility/Math.h" #include "Math/Quat.h" #include "Math/RotationMatrix.h" -#include +#include +#include #include -#include -#include glm::dmat4 VecMath::createMatrix4D(const FMatrix& m) noexcept { return glm::dmat4( @@ -126,6 +124,22 @@ FMatrix VecMath::createMatrix(const glm::dmat4& m) noexcept { FVector(m[3].x, m[3].y, m[3].z)); } +FTransform VecMath::createTransform(const glm::dmat4& m) noexcept { + glm::dvec3 translation; + glm::dquat rotation; + glm::dvec3 scale; + CesiumGeometry::Transforms::computeTranslationRotationScaleFromMatrix( + m, + &translation, + &rotation, + &scale); + + return FTransform( + VecMath::createQuaternion(rotation), + VecMath::createVector(translation), + VecMath::createVector(scale)); +} + FMatrix VecMath::createMatrix(const glm::dmat3& m) noexcept { return FMatrix( FVector(m[0].x, m[0].y, m[0].z), diff --git a/Source/CesiumRuntime/Private/VecMath.h b/Source/CesiumRuntime/Private/VecMath.h index d6b6ecc97..2ef3e6c08 100644 --- a/Source/CesiumRuntime/Private/VecMath.h +++ b/Source/CesiumRuntime/Private/VecMath.h @@ -143,11 +143,22 @@ class VecMath { /** * @brief Create a `FMatrix` from the given `glm` matrix. * + * If the ultimate goal is to create an `FTransform`, use + * {@link createTransform} instead. + * * @param m The `glm` matrix. * @return The `FMatrix`. */ static FMatrix createMatrix(const glm::dmat4& m) noexcept; + /** + * @brief Create a `FTransform` from the given `glm` matrix. + * + * @param m The `glm` matrix. + * @return The `FTransform`. + */ + static FTransform createTransform(const glm::dmat4& m) noexcept; + /** * @brief Create a `FMatrix` from the given `glm` columns * diff --git a/Source/CesiumRuntime/Public/Cesium3DTileset.h b/Source/CesiumRuntime/Public/Cesium3DTileset.h index e398d7889..50de411ff 100644 --- a/Source/CesiumRuntime/Public/Cesium3DTileset.h +++ b/Source/CesiumRuntime/Public/Cesium3DTileset.h @@ -12,6 +12,7 @@ #include "CesiumGeoreference.h" #include "CesiumIonServer.h" #include "CesiumPointCloudShading.h" +#include "CesiumSampleHeightResult.h" #include "CoreMinimal.h" #include "CustomDepthParameters.h" #include "Engine/EngineTypes.h" @@ -26,6 +27,10 @@ #include #include "Cesium3DTileset.generated.h" +#ifdef CESIUM_DEBUG_TILE_STATES +#include +#endif + class UMaterialInterface; class ACesiumCartographicSelection; class ACesiumCameraManager; @@ -47,6 +52,12 @@ DECLARE_MULTICAST_DELEGATE_OneParam( FCesium3DTilesetLoadFailure, const FCesium3DTilesetLoadFailureDetails&); +DECLARE_DELEGATE_ThreeParams( + FCesiumSampleHeightMostDetailedCallback, + ACesium3DTileset*, + const TArray&, + const TArray&); + /** * The delegate for the Acesium3DTileset::OnTilesetLoaded, * which is triggered from UpdateLoadStatus @@ -67,7 +78,12 @@ enum class ETilesetSource : uint8 { /** * The tileset will be loaded from the specified Url. */ - FromUrl UMETA(DisplayName = "From Url") + FromUrl UMETA(DisplayName = "From Url"), + + /** + * The tileset will be loaded from the georeference ellipsoid. + */ + FromEllipsoid UMETA(DisplayName = "From Ellipsoid") }; UENUM(BlueprintType) @@ -101,6 +117,27 @@ class CESIUMRUNTIME_API ACesium3DTileset : public AActor { UFUNCTION(BlueprintCallable, meta = (DeprecatedFunction)) void SetMobility(EComponentMobility::Type NewMobility); + /** + * @brief Initiates an asynchronous query for the height of this tileset at a + * list of cartographic positions, where the Longitude (X) and Latitude (Y) + * are given in degrees. The most detailed available tiles are used to + * determine each height. + * + * The height of the input positions is ignored, unless height sampling fails + * at that location. The output height is expressed in meters above the + * ellipsoid (usually WGS84), which should not be confused with a height above + * mean sea level. + * + * @param LongitudeLatitudeHeightArray The cartographic positions for which to + * sample heights. The Longitude (X) and Latitude (Y) are expressed in + * degrees, while Height (Z) is given in meters. + * @param OnHeightsSampled A callback that is invoked in the game thread when + * heights have been sampled for all positions. + */ + void SampleHeightMostDetailed( + const TArray& LongitudeLatitudeHeightArray, + FCesiumSampleHeightMostDetailedCallback OnHeightsSampled); + private: /** * The designated georeference actor controlling how the actor's @@ -598,6 +635,20 @@ class CESIUMRUNTIME_API ACesium3DTileset : public AActor { UPROPERTY(EditAnywhere, Category = "Cesium|Debug") bool LogSelectionStats = false; + /** + * If true, logs stats on the assets in this tileset's shared asset system to + * the Output Log. + */ + UPROPERTY(EditAnywhere, Category = "Cesium|Debug") + bool LogSharedAssetStats = false; + + /** + * If true, draws debug text above each tile being rendered with information + * about that tile. + */ + UPROPERTY(EditAnywhere, Category = "Cesium|Debug") + bool DrawTileInfo = false; + /** * Define the collision profile for all the 3D tiles created inside this * actor. @@ -713,6 +764,16 @@ class CESIUMRUNTIME_API ACesium3DTileset : public AActor { meta = (EditCondition = "TilesetSource==ETilesetSource::FromCesiumIon")) UCesiumIonServer* CesiumIonServer; + /** + * Headers to be attached to each request made for this tileset. + */ + UPROPERTY( + EditAnywhere, + BlueprintGetter = GetRequestHeaders, + BlueprintSetter = SetRequestHeaders, + Category = "Cesium") + TMap RequestHeaders; + /** * Check if the Cesium ion token used to access this tileset is working * correctly, and fix it if necessary. @@ -799,8 +860,7 @@ class CESIUMRUNTIME_API ACesium3DTileset : public AActor { EditAnywhere, BlueprintGetter = GetEnableWaterMask, BlueprintSetter = SetEnableWaterMask, - Category = "Cesium|Rendering", - meta = (EditCondition = "!bIsMac")) + Category = "Cesium|Rendering") bool EnableWaterMask = false; /** @@ -894,11 +954,6 @@ class CESIUMRUNTIME_API ACesium3DTileset : public AActor { UPROPERTY() FString PlatformName; -#if WITH_EDITORONLY_DATA - UPROPERTY() - bool bIsMac; -#endif - public: UFUNCTION(BlueprintGetter, Category = "Cesium") float GetLoadProgress() const { return LoadProgress; } @@ -921,6 +976,12 @@ class CESIUMRUNTIME_API ACesium3DTileset : public AActor { UFUNCTION(BlueprintSetter, Category = "Cesium") void SetUrl(const FString& InUrl); + UFUNCTION(BlueprintGetter, Category = "Cesium") + TMap GetRequestHeaders() const { return RequestHeaders; } + + UFUNCTION(BlueprintSetter, Category = "Cesium") + void SetRequestHeaders(const TMap& InRequestHeaders); + UFUNCTION(BlueprintGetter, Category = "Cesium") int64 GetIonAssetID() const { return IonAssetID; } @@ -1047,10 +1108,12 @@ class CESIUMRUNTIME_API ACesium3DTileset : public AActor { /** * This method is not supposed to be called by clients. It is currently - * only required by the UnrealResourcePreparer. + * only required by the UnrealPrepareRendererResources. * + * @internal * See {@link - * Cesium3DTilesetRoot::GetCesiumTilesetToUnrealRelativeWorldTransform}. + * UCesium3DTilesetRoot::GetCesiumTilesetToUnrealRelativeWorldTransform}. + * @endinternal */ const glm::dmat4& GetCesiumTilesetToUnrealRelativeWorldTransform() const; @@ -1061,6 +1124,11 @@ class CESIUMRUNTIME_API ACesium3DTileset : public AActor { return this->_pTileset.Get(); } + const std::optional& + getFeaturesMetadataDescription() const { + return this->_featuresMetadataDescription; + } + // AActor overrides (some or most of them should be protected) virtual bool ShouldTickIfViewportsOnly() const override; virtual void Tick(float DeltaTime) override; @@ -1081,6 +1149,7 @@ class CESIUMRUNTIME_API ACesium3DTileset : public AActor { FPropertyChangedChainEvent& PropertyChangedChainEvent) override; virtual void PostEditUndo() override; virtual void PostEditImport() override; + virtual bool CanEditChange(const FProperty* InProperty) const override; #endif protected: @@ -1110,7 +1179,8 @@ class CESIUMRUNTIME_API ACesium3DTileset : public AActor { static Cesium3DTilesSelection::ViewState CreateViewStateFromViewParameters( const FCesiumCamera& camera, - const glm::dmat4& unrealWorldToTileset); + const glm::dmat4& unrealWorldToTileset, + UCesiumEllipsoid* ellipsoid); std::vector GetCameras() const; std::vector GetPlayerCameras() const; @@ -1127,6 +1197,14 @@ class CESIUMRUNTIME_API ACesium3DTileset : public AActor { void UpdateTransformFromCesium(); private: + /** + * The event handler for ACesiumGeoreference::OnEllipsoidChanged. + */ + UFUNCTION(CallInEditor) + void HandleOnGeoreferenceEllipsoidChanged( + UCesiumEllipsoid* OldEllipsoid, + UCesiumEllipsoid* NewEllpisoid); + /** * Writes the values of all properties of this actor into the * TilesetOptions, to take them into account during the next @@ -1182,6 +1260,10 @@ class CESIUMRUNTIME_API ACesium3DTileset : public AActor { private: TUniquePtr _pTileset; +#ifdef CESIUM_DEBUG_TILE_STATES + TUniquePtr _pStateDebug; +#endif + std::optional _featuresMetadataDescription; @@ -1227,6 +1309,6 @@ class CESIUMRUNTIME_API ACesium3DTileset : public AActor { int32 _tilesetsBeingDestroyed; - friend class UnrealResourcePreparer; + friend class UnrealPrepareRendererResources; friend class UCesiumGltfPointsComponent; }; diff --git a/Source/CesiumRuntime/Public/CesiumBingMapsRasterOverlay.h b/Source/CesiumRuntime/Public/CesiumBingMapsRasterOverlay.h index 656954740..92f04f45b 100644 --- a/Source/CesiumRuntime/Public/CesiumBingMapsRasterOverlay.h +++ b/Source/CesiumRuntime/Public/CesiumBingMapsRasterOverlay.h @@ -22,7 +22,7 @@ enum class EBingMapsStyle : uint8 { * A raster overlay that directly accesses Bing Maps. If you're using Bing Maps * via Cesium ion, use the "Cesium ion Raster Overlay" component instead. */ -UCLASS(ClassGroup = (Cesium), meta = (BlueprintSpawnableComponent)) +UCLASS(ClassGroup = Cesium, meta = (BlueprintSpawnableComponent)) class CESIUMRUNTIME_API UCesiumBingMapsRasterOverlay : public UCesiumRasterOverlay { GENERATED_BODY() diff --git a/Source/CesiumRuntime/Public/CesiumCamera.h b/Source/CesiumRuntime/Public/CesiumCamera.h index e59ff8dd4..2f98178b0 100644 --- a/Source/CesiumRuntime/Public/CesiumCamera.h +++ b/Source/CesiumRuntime/Public/CesiumCamera.h @@ -12,7 +12,7 @@ #include "CesiumCamera.generated.h" /** - * @brief A camera description that {@link Cesium3DTileset}s can use to decide + * @brief A camera description that {@link ACesium3DTileset}s can use to decide * what tiles need to be loaded to sufficiently cover the camera view. */ USTRUCT(BlueprintType) diff --git a/Source/CesiumRuntime/Public/CesiumCameraManager.h b/Source/CesiumRuntime/Public/CesiumCameraManager.h index 0fef0f531..4575a7dd2 100644 --- a/Source/CesiumRuntime/Public/CesiumCameraManager.h +++ b/Source/CesiumRuntime/Public/CesiumCameraManager.h @@ -10,7 +10,7 @@ /** * @brief Manages custom {@link FCesiumCamera}s for all - * {@link Cesium3DTileset}s in the world. + * {@link ACesium3DTileset}s in the world. */ UCLASS() class CESIUMRUNTIME_API ACesiumCameraManager : public AActor { diff --git a/Source/CesiumRuntime/Public/CesiumCartographicPolygon.h b/Source/CesiumRuntime/Public/CesiumCartographicPolygon.h index 770bdf314..6d4a81c1e 100644 --- a/Source/CesiumRuntime/Public/CesiumCartographicPolygon.h +++ b/Source/CesiumRuntime/Public/CesiumCartographicPolygon.h @@ -18,7 +18,7 @@ * A spline-based polygon actor used to rasterize 2D polygons on top of * Cesium 3D Tileset actors. */ -UCLASS(ClassGroup = (Cesium), meta = (BlueprintSpawnableComponent)) +UCLASS(ClassGroup = Cesium, meta = (BlueprintSpawnableComponent)) class CESIUMRUNTIME_API ACesiumCartographicPolygon : public AActor { GENERATED_BODY() diff --git a/Source/CesiumRuntime/Public/CesiumCommon.h b/Source/CesiumRuntime/Public/CesiumCommon.h index 633570315..d9880269d 100644 --- a/Source/CesiumRuntime/Public/CesiumCommon.h +++ b/Source/CesiumRuntime/Public/CesiumCommon.h @@ -4,7 +4,7 @@ #include "Runtime/Launch/Resources/Version.h" +#define ENGINE_VERSION_5_5_OR_HIGHER \ + (ENGINE_MAJOR_VERSION > 5 || ENGINE_MINOR_VERSION >= 5) #define ENGINE_VERSION_5_4_OR_HIGHER \ (ENGINE_MAJOR_VERSION > 5 || ENGINE_MINOR_VERSION >= 4) -#define ENGINE_VERSION_5_3_OR_HIGHER \ - (ENGINE_MAJOR_VERSION > 5 || ENGINE_MINOR_VERSION >= 3) diff --git a/Source/CesiumRuntime/Public/CesiumEllipsoid.h b/Source/CesiumRuntime/Public/CesiumEllipsoid.h new file mode 100644 index 000000000..093191193 --- /dev/null +++ b/Source/CesiumRuntime/Public/CesiumEllipsoid.h @@ -0,0 +1,148 @@ +// Copyright 2020-2024 CesiumGS, Inc. and Contributors + +#pragma once + +#include "Engine/DataAsset.h" +#include "Misc/Optional.h" +#include +#include "CesiumEllipsoid.generated.h" + +namespace CesiumGeospatial { +class Ellipsoid; +}; + +UCLASS() +class CESIUMRUNTIME_API UCesiumEllipsoid : public UDataAsset { + GENERATED_BODY() + +public: + /** + * Creates a new {@link UCesiumEllipsoid} with the given radii. + * + * This is equivalent to + * ``` + * auto ellipsoid = NewObject(); + * ellipsoid->SetRadii(Radii); + * ``` + */ + UFUNCTION(BlueprintCallable, Category = "Cesium|Ellipsoid") + static UCesiumEllipsoid* Create(const FVector& Radii); + + /** + * Gets the radii of the ellipsoid in its x-, y-, and z-directions in + * meters. + */ + UFUNCTION(BlueprintPure, Category = "Cesium|Ellipsoid") + FVector GetRadii(); + + /** + * Sets the radii of this ellipsoid in its x-, y-, and z-directions in meters. + * + * Tilesets using this ellipsoid may have to be refreshed to see the changes + * applied. + */ + void SetRadii(const FVector& NewRadii); + + /** + * Gets the maximum radius of the ellipsoid in any dimension, in meters. + */ + UFUNCTION(BlueprintPure, Category = "Cesium|Ellipsoid") + double GetMaximumRadius(); + + /** + * Gets the minimum radius of the ellipsoid in any dimension, in + * meters. + */ + UFUNCTION(BlueprintPure, Category = "Cesium|Ellipsoid") + double GetMinimumRadius(); + + /** + * Scale the given Ellipsoid-Centered, Ellipsoid-Fixed position along the + * geodetic surface normal so that it is on the surface of the ellipsoid. If + * the position is near the center of the ellipsoid, the result will have the + * value (0,0,0) because the surface position is undefined. + */ + UFUNCTION( + BlueprintPure, + Category = "Cesium|Ellipsoid", + meta = (ReturnDisplayName = "SurfacePosition")) + FVector + ScaleToGeodeticSurface(const FVector& EarthCenteredEarthFixedPosition); + + /** + * Computes the normal of the plane tangent to the surface of the ellipsoid + * at the provided Ellipsoid-Centered, Ellipsoid-Fixed position. + */ + UFUNCTION( + BlueprintPure, + Category = "Cesium|Ellipsoid", + meta = (ReturnDisplayName = "SurfaceNormalVector")) + FVector GeodeticSurfaceNormal(const FVector& EarthCenteredEarthFixedPosition); + + /** + * Convert longitude in degrees (X), latitude in degrees (Y), and height above + * the ellipsoid in meters (Z) to Ellipsoid-Centered, Ellipsoid-Fixed (ECEF) + * coordinates. + */ + UFUNCTION( + BlueprintPure, + Category = "Cesium|Ellipsoid", + meta = (ReturnDisplayName = "EarthCenteredEarthFixedPosition")) + FVector LongitudeLatitudeHeightToEllipsoidCenteredEllipsoidFixed( + const FVector& LongitudeLatitudeHeight); + + /** + * Convert Ellipsoid-Centered, Ellipsoid-Fixed (ECEF) coordinates to longitude + * in degrees (X), latitude in degrees (Y), and height above the ellipsoid in + * meters (Z). If the position is near the center of the Ellipsoid, the result + * will have the value (0,0,0) because the longitude, latitude, and height are + * undefined. + */ + UFUNCTION( + BlueprintPure, + Category = "Cesium|Ellipsoid", + meta = (ReturnDisplayName = "LongitudeLatitudeHeight")) + FVector EllipsoidCenteredEllipsoidFixedToLongitudeLatitudeHeight( + const FVector& EarthCenteredEarthFixedPosition); + + /** + * Computes the transformation matrix from the local East-North-Up (ENU) frame + * to Ellipsoid-Centered, Ellipsoid-Fixed (ECEF) at the specified ECEF + * location. + */ + FMatrix EastNorthUpToEllipsoidCenteredEllipsoidFixed( + const FVector& EarthCenteredEarthFixedPosition); + + /** + * Returns a new {@link CesiumGeospatial::LocalHorizontalCoordinateSystem} + * with the given scale, center, and ellipsoid. + */ + CesiumGeospatial::LocalHorizontalCoordinateSystem + CreateCoordinateSystem(const FVector& Center, double Scale); + + /** + * Returns the underlying {@link CesiumGeospatial::Ellipsoid} + */ + const CesiumGeospatial::Ellipsoid& GetNativeEllipsoid(); + +protected: + /** + * The radii of this ellipsoid. + * + * The X coordinate of the vector should be the radius of the largest axis and + * the Z coordinate should be the radius of the smallest axis. + */ + UPROPERTY( + EditAnywhere, + Category = "Cesium|Ellipsoid", + meta = (DisplayName = "Radii")) + FVector Radii; + +private: +#if WITH_EDITOR + virtual void + PostSaveRoot(FObjectPostSaveRootContext ObjectSaveContext) override; +#endif + + TOptional NativeEllipsoid; +}; diff --git a/Source/CesiumRuntime/Public/CesiumEncodedMetadataComponent.h b/Source/CesiumRuntime/Public/CesiumEncodedMetadataComponent.h index 4e4ad3b30..aef91d524 100644 --- a/Source/CesiumRuntime/Public/CesiumEncodedMetadataComponent.h +++ b/Source/CesiumRuntime/Public/CesiumEncodedMetadataComponent.h @@ -267,6 +267,7 @@ struct CESIUMRUNTIME_API FMetadataDescription { * "Auto Fill" button. Once a selection of desired metadata is made, the * boiler-plate material code to access the selected properties can be * auto-generated using the "Generate Material" button. + * @deprecated Use UCesiumFeaturesMetadataComponent instead. */ UCLASS(Deprecated) class CESIUMRUNTIME_API UDEPRECATED_CesiumEncodedMetadataComponent diff --git a/Source/CesiumRuntime/Public/CesiumFeatureIdAttribute.h b/Source/CesiumRuntime/Public/CesiumFeatureIdAttribute.h index 14f493c3b..7604a1239 100644 --- a/Source/CesiumRuntime/Public/CesiumFeatureIdAttribute.h +++ b/Source/CesiumRuntime/Public/CesiumFeatureIdAttribute.h @@ -9,6 +9,7 @@ namespace CesiumGltf { struct Model; struct Accessor; +struct Node; } // namespace CesiumGltf /** @@ -27,8 +28,9 @@ enum class ECesiumFeatureIdAttributeStatus : uint8 { /** * @brief A blueprint-accessible wrapper for a feature ID attribute from a glTF - * primitive. Provides access to per-vertex feature IDs which can be used with - * the corresponding {@link FCesiumFeatureTable} to access per-vertex metadata. + * model. Provides access to feature IDs which can be used with the + * corresponding {@link FCesiumPropertyTable} to access metadata. These feature + * IDs may be defined per-vertex or per-instance. */ USTRUCT(BlueprintType) struct CESIUMRUNTIME_API FCesiumFeatureIdAttribute { @@ -61,6 +63,22 @@ struct CESIUMRUNTIME_API FCesiumFeatureIdAttribute { const int64 FeatureIDAttribute, const FString& PropertyTableName); + /** + * @brief Constructs a feature ID attribute instance from + * EXT_instance_features data. + * + * @param Model The model. + * @param Node The node containing the feature ID attribute. + * @param FeatureIDAttribute The attribute index specified by the FeatureId. + * @param PropertyTableName The name of the property table this attribute + * corresponds to, if one exists, for backwards compatibility. + */ + FCesiumFeatureIdAttribute( + const CesiumGltf::Model& Model, + const CesiumGltf::Node& Node, + const int64 FeatureIDAttribute, + const FString& PropertyTableName); + /** * Gets the index of this feature ID attribute in the glTF primitive. */ @@ -92,7 +110,6 @@ class CESIUMRUNTIME_API UCesiumFeatureIdAttributeBlueprintLibrary UFUNCTION( BlueprintCallable, BlueprintPure, - Category = "Cesium|Metadata|FeatureIdAttribute", Meta = (DeprecatedFunction, DeprecationMessage = @@ -114,27 +131,35 @@ class CESIUMRUNTIME_API UCesiumFeatureIdAttributeBlueprintLibrary UPARAM(ref) const FCesiumFeatureIdAttribute& FeatureIDAttribute); /** - * Get the number of vertices in the primitive containing the feature - * ID attribute. If the feature ID attribute is invalid, this returns 0. + * Gets the number of elements in the attribute. This is distinct from the + * number of unique feature IDs within the attribute. + * + * For a feature ID attribute of a regular mesh, this is the number of + * vertices. For a per-instance feature ID, this is the number of instances. + * + * If the feature ID attribute is invalid, this returns 0. */ UFUNCTION( BlueprintCallable, BlueprintPure, Category = "Cesium|Features|FeatureIDAttribute") static int64 - GetVertexCount(UPARAM(ref) - const FCesiumFeatureIdAttribute& FeatureIDAttribute); + GetCount(UPARAM(ref) const FCesiumFeatureIdAttribute& FeatureIDAttribute); /** - * Gets the feature ID associated with the given vertex. The feature ID can be - * used with a FCesiumFeatureTable to retrieve the per-vertex metadata. If - * the feature ID attribute is invalid, this returns -1. + * Gets the feature ID at the given index. A feature ID can be used with a + * FCesiumPropertyTable to retrieve the metadata for that ID. If the feature + * ID attribute is invalid, this returns -1. + * + * For a feature ID attribute of a regular mesh, the provided Index is the + * index of a vertex within the mesh. For a per-instance feature ID, the + * provided Index is the index of the instance. */ UFUNCTION( BlueprintCallable, BlueprintPure, Category = "Cesium|Features|FeatureIDAttribute") - static int64 GetFeatureIDForVertex( + static int64 GetFeatureID( UPARAM(ref) const FCesiumFeatureIdAttribute& FeatureIDAttribute, - int64 VertexIndex); + int64 Index); }; diff --git a/Source/CesiumRuntime/Public/CesiumFeatureIdSet.h b/Source/CesiumRuntime/Public/CesiumFeatureIdSet.h index 0fd86aedf..ee6699094 100644 --- a/Source/CesiumRuntime/Public/CesiumFeatureIdSet.h +++ b/Source/CesiumRuntime/Public/CesiumFeatureIdSet.h @@ -5,11 +5,13 @@ #include "CesiumFeatureIdAttribute.h" #include "CesiumFeatureIdTexture.h" #include "Kismet/BlueprintFunctionLibrary.h" +#include #include "CesiumFeatureIdSet.generated.h" namespace CesiumGltf { struct Model; struct FeatureId; +struct ExtensionExtInstanceFeaturesFeatureId; } // namespace CesiumGltf /** @@ -20,14 +22,17 @@ enum class ECesiumFeatureIdSetType : uint8 { None, Attribute, Texture, - Implicit + Implicit, + Instance, + InstanceImplicit }; /** * @brief A blueprint-accessible wrapper for a feature ID set from a glTF * primitive. A feature ID can be defined as a per-vertex attribute, as a - * feature texture, or implicitly via vertex ID. These can be used with the - * corresponding {@link FCesiumPropertyTable} to access per-vertex metadata. + * feature texture, implicitly via vertex ID, or associated with glTF + * instances. These can be used with the corresponding {@link + * FCesiumPropertyTable} to access the metadata. */ USTRUCT(BlueprintType) struct CESIUMRUNTIME_API FCesiumFeatureIdSet { @@ -49,6 +54,12 @@ struct CESIUMRUNTIME_API FCesiumFeatureIdSet { const CesiumGltf::MeshPrimitive& Primitive, const CesiumGltf::FeatureId& FeatureId); + FCesiumFeatureIdSet( + const CesiumGltf::Model& Model, + const CesiumGltf::Node& Node, + const CesiumGltf::ExtensionExtInstanceFeaturesFeatureId& + InstanceFeatureId); + private: FeatureIDType _featureID; ECesiumFeatureIdSetType _featureIDSetType; @@ -164,6 +175,24 @@ class CESIUMRUNTIME_API UCesiumFeatureIdSetBlueprintLibrary UPARAM(ref) const FCesiumFeatureIdSet& FeatureIDSet, int64 VertexIndex); + /** + * Gets the feature ID associated with a given instance in glTF models using + * the EXT_mesh_gpu_instancing and EXT_instance_features extensions. The + * feature ID can be used with a FCesiumPropertyTable to retrieve the + * corresponding metadata. + * + * This returns -1 if the given instance is out-of-bounds, if the feature ID + * set is not for instances, or if the feature ID set is invalid (e.g., it + * contains an invalid feature ID attribute). + */ + UFUNCTION( + BlueprintCallable, + BlueprintPure, + Category = "Cesium|Features|FeatureIDSet") + static int64 GetFeatureIDForInstance( + UPARAM(ref) const FCesiumFeatureIdSet& FeatureIDSet, + int64 InstanceIndex); + /** * Given a trace hit result, gets the feature ID from the feature ID set on * the hit component. This returns a more accurate value for feature ID diff --git a/Source/CesiumRuntime/Public/CesiumFeatureIdTexture.h b/Source/CesiumRuntime/Public/CesiumFeatureIdTexture.h index 9816d47f2..465dc0d33 100644 --- a/Source/CesiumRuntime/Public/CesiumFeatureIdTexture.h +++ b/Source/CesiumRuntime/Public/CesiumFeatureIdTexture.h @@ -95,7 +95,7 @@ class CESIUMRUNTIME_API UCesiumFeatureIdTextureBlueprintLibrary /** * Gets the name of the feature table corresponding to this feature ID * texture. The name can be used to fetch the appropriate - * FCesiumFeatureTable from the FCesiumMetadataModel. + * {@link FCesiumPropertyTable} from the FCesiumMetadataModel. */ UFUNCTION( BlueprintCallable, diff --git a/Source/CesiumRuntime/Public/CesiumFeaturesMetadataComponent.h b/Source/CesiumRuntime/Public/CesiumFeaturesMetadataComponent.h index 54125303e..a204a080a 100644 --- a/Source/CesiumRuntime/Public/CesiumFeaturesMetadataComponent.h +++ b/Source/CesiumRuntime/Public/CesiumFeaturesMetadataComponent.h @@ -31,11 +31,11 @@ struct CESIUMRUNTIME_API FCesiumFeatureIdSetDescription { * unlabeled, a name will be generated like so: * * - If the feature ID set is an attribute, this will appear as - * "_FEATURE_ID_", where is the set index specified in + * "_FEATURE_ID_\", where \ is the set index specified in * the attribute. * - If the feature ID set is a texture, this will appear as - * "_FEATURE_ID_TEXTURE_", where increments with the number of - * feature ID textures seen in an individual primitive. + * "_FEATURE_ID_TEXTURE_\", where \ increments with the number + * of feature ID textures seen in an individual primitive. * - If the feature ID set is an implicit set, this will appear as * "_IMPLICIT_FEATURE_ID". Implicit feature ID sets don't vary in definition, * so any additional implicit feature ID sets across the primitives are @@ -323,7 +323,7 @@ struct CESIUMRUNTIME_API FCesiumFeaturesMetadataDescription { * boiler-plate material code to access the selected properties can be * auto-generated using the "Generate Material" button. */ -UCLASS(ClassGroup = (Cesium), Meta = (BlueprintSpawnableComponent)) +UCLASS(ClassGroup = Cesium, Meta = (BlueprintSpawnableComponent)) class CESIUMRUNTIME_API UCesiumFeaturesMetadataComponent : public UActorComponent { GENERATED_BODY() diff --git a/Source/CesiumRuntime/Public/CesiumFlyToComponent.h b/Source/CesiumRuntime/Public/CesiumFlyToComponent.h index 82c274aa8..6860b1e20 100644 --- a/Source/CesiumRuntime/Public/CesiumFlyToComponent.h +++ b/Source/CesiumRuntime/Public/CesiumFlyToComponent.h @@ -198,6 +198,11 @@ class CESIUMRUNTIME_API UCesiumFlyToComponent UFUNCTION(BlueprintCallable, Category = "Cesium") void InterruptFlight(); + /** + * @brief Returns whether a flight is currently in progress. + */ + bool IsFlightInProgress() const; + protected: virtual void TickComponent( float DeltaTime, diff --git a/Source/CesiumRuntime/Public/CesiumGeoreference.h b/Source/CesiumRuntime/Public/CesiumGeoreference.h index 87de5ca01..53219a981 100644 --- a/Source/CesiumRuntime/Public/CesiumGeoreference.h +++ b/Source/CesiumRuntime/Public/CesiumGeoreference.h @@ -2,8 +2,10 @@ #pragma once +#include "CesiumEllipsoid.h" #include "CesiumGeospatial/LocalHorizontalCoordinateSystem.h" #include "CesiumSubLevel.h" +#include "Delegates/Delegate.h" #include "GameFramework/Actor.h" #include "GeoTransforms.h" #include "OriginPlacement.h" @@ -19,6 +21,18 @@ class UCesiumSubLevelSwitcherComponent; */ DECLARE_DYNAMIC_MULTICAST_DELEGATE(FGeoreferenceUpdated); +/** + * The event that triggers when a georeference's ellipsoid is changed. + * This should be used for performing any necessary coordinate changes. + * The parameters are (OldEllipsoid, NewEllipsoid). + */ +DECLARE_DYNAMIC_MULTICAST_DELEGATE_TwoParams( + FGeoreferenceEllipsoidChanged, + UCesiumEllipsoid*, + OldEllipsoid, + UCesiumEllipsoid*, + NewEllipsoid); + /** * Controls how global geospatial coordinates are mapped to coordinates in the * Unreal Engine level. Internally, Cesium uses a global Earth-centered, @@ -84,9 +98,30 @@ class CESIUMRUNTIME_API ACesiumGeoreference : public AActor { UPROPERTY(BlueprintAssignable, Category = "Cesium") FGeoreferenceUpdated OnGeoreferenceUpdated; + /** + * An event that will be called whenever the georeference's ellipsoid has + * been modified. + */ + UPROPERTY(BlueprintAssignable, Category = "Cesium") + FGeoreferenceEllipsoidChanged OnEllipsoidChanged; + #pragma region Properties private: + /** + * The Ellipsoid being used by this georeference. The ellipsoid informs how + * cartographic coordinates will be interpreted and how they are transformed + * into cartesian coordinates. + */ + UPROPERTY( + Category = "Cesium", + EditAnywhere, + BlueprintReadWrite, + BlueprintGetter = GetEllipsoid, + BlueprintSetter = SetEllipsoid, + meta = (AllowPrivateAccess)) + UCesiumEllipsoid* Ellipsoid; + /** * The placement of this Actor's origin (coordinate 0,0,0) within the tileset. * @@ -381,6 +416,22 @@ class CESIUMRUNTIME_API ACesiumGeoreference : public AActor { return this->SubLevelSwitcher; } + /** + * Returns a pointer to the UCesiumEllipsoid currently being used by this + * georeference. + */ + UFUNCTION(BlueprintCallable, BlueprintGetter, Category = "Cesium") + UCesiumEllipsoid* GetEllipsoid() const; + + /** + * Sets the UCesiumEllipsoid used by this georeference. + * + * Calling this will cause all tilesets under this georeference to be + * reloaded. + */ + UFUNCTION(BlueprintSetter, Category = "Cesium") + void SetEllipsoid(UCesiumEllipsoid* NewEllipsoid); + #if WITH_EDITOR /** * Gets whether to visualize the level loading radii in the editor. Helpful @@ -719,7 +770,7 @@ class CESIUMRUNTIME_API ACesiumGeoreference : public AActor { public: UE_DEPRECATED( "Cesium For Unreal v2.0", - "Use transformation functions on ACesiumGeoreference and UCesiumWgs84Ellipsoid instead.") + "Use transformation functions on ACesiumGeoreference and UCesiumEllipsoid instead.") GeoTransforms GetGeoTransforms() const noexcept; private: @@ -747,14 +798,14 @@ class CESIUMRUNTIME_API ACesiumGeoreference : public AActor { meta = (DeprecatedFunction, DeprecationMessage = - "Use LongitudeLatitudeHeightToEarthCenteredEarthFixed on CesiumWgs84Ellipsoid instead.")) + "Use LongitudeLatitudeHeightToEllipsoidCenteredEllipsoidFixed on UCesiumEllipsoid instead.")) FVector TransformLongitudeLatitudeHeightToEcef( const FVector& LongitudeLatitudeHeight) const; /** * Transforms the given Earth-Centered, Earth-Fixed (ECEF) coordinates into - * WGS84 longitude in degrees (x), latitude in degrees (y), and height above - * the ellipsoid in meters (z). + * Ellipsoid longitude in degrees (x), latitude in degrees (y), and height + * above the ellipsoid in meters (z). */ UFUNCTION( BlueprintPure, @@ -762,7 +813,7 @@ class CESIUMRUNTIME_API ACesiumGeoreference : public AActor { meta = (DeprecatedFunction, DeprecationMessage = - "Use EarthCenteredEarthFixedToLongitudeLatitudeHeight on CesiumWgs84Ellipsoid instead.")) + "Use EllipsoidCenteredEllipsoidFixedToLongitudeLatitudeHeight on UCesiumEllipsoid instead.")) FVector TransformEcefToLongitudeLatitudeHeight(const FVector& Ecef) const; /** @@ -775,11 +826,12 @@ class CESIUMRUNTIME_API ACesiumGeoreference : public AActor { meta = (DeprecatedFunction, DeprecationMessage = - "Use EastNorthUpToEarthCenteredEarthFixed on CesiumWgs84Ellipsoid instead.")) + "Use EastNorthUpToEllipsoidCenteredEllipsoidFixed on UCesiumEllipsoid instead.")) FMatrix ComputeEastNorthUpToEcef(const FVector& Ecef) const; #pragma endregion +private: #pragma region Implementation Details public: diff --git a/Source/CesiumRuntime/Public/CesiumGlobeAnchorComponent.h b/Source/CesiumRuntime/Public/CesiumGlobeAnchorComponent.h index 52a2442ed..7643eb6ff 100644 --- a/Source/CesiumRuntime/Public/CesiumGlobeAnchorComponent.h +++ b/Source/CesiumRuntime/Public/CesiumGlobeAnchorComponent.h @@ -178,6 +178,13 @@ class CESIUMRUNTIME_API UCesiumGlobeAnchorComponent : public UActorComponent { UFUNCTION(BlueprintCallable, Category = "Cesium") ACesiumGeoreference* ResolveGeoreference(bool bForceReresolve = false); + /** + * Obtains the {@link UCesiumEllipsoid} set on the georeference used by this + * component. + */ + UFUNCTION(BlueprintGetter, Category = "Cesium") + UCesiumEllipsoid* GetEllipsoid() const; + /** * Gets the 4x4 transformation matrix from the Actors's local coordinate * system to the Earth-Centered, Earth-Fixed (ECEF) coordinate system. @@ -323,7 +330,7 @@ class CESIUMRUNTIME_API UCesiumGlobeAnchorComponent : public UActorComponent { * Moves the Actor to which this component is attached to a given longitude in * degrees (X), latitude in degrees (Y), and height in meters (Z). * - * The Height (Z) is measured in meters above the WGS84 ellipsoid. Do not + * The Height (Z) is measured in meters above the ellipsoid. Do not * confused an ellipsoidal height with a geoid height or height above mean sea * level, which can be tens of meters higher or lower depending on where in * the world the object is located. @@ -351,7 +358,7 @@ class CESIUMRUNTIME_API UCesiumGlobeAnchorComponent : public UActorComponent { * If AdjustOrientationForGlobeWhenMoving is enabled, this method will * also update the orientation based on the globe curvature. * - * @param newPosition The new position. + * @param EarthCenteredEarthFixedPosition The new position. */ UFUNCTION(BlueprintCallable, Category = "Cesium") void MoveToEarthCenteredEarthFixedPosition( @@ -586,7 +593,7 @@ class CESIUMRUNTIME_API UCesiumGlobeAnchorComponent : public UActorComponent { * Height. The Actor's position and orientation are recomputed from the * Component's globe (ECEF) position and orientation. */ - UFUNCTION() + UFUNCTION(CallInEditor) void _onGeoreferenceChanged(); friend class FCesiumGlobeAnchorCustomization; diff --git a/Source/CesiumRuntime/Public/CesiumMetadataEncodingDetails.h b/Source/CesiumRuntime/Public/CesiumMetadataEncodingDetails.h index ef5c446e6..f4ceb12f3 100644 --- a/Source/CesiumRuntime/Public/CesiumMetadataEncodingDetails.h +++ b/Source/CesiumRuntime/Public/CesiumMetadataEncodingDetails.h @@ -48,8 +48,8 @@ enum class ECesiumEncodedMetadataConversion : uint8 { /** * Attempt to parse a color from a string property value. This supports * the following formats: - * - rgb(R, G, B), where R, G, and B are values in the range [0, 255] - * - hexcode colors, e.g. #ff0000 + * - `rgb(R, G, B)`, where R, G, and B are values in the range [0, 255] + * - hexcode colors, e.g. `#ff0000` */ ParseColorFromString }; diff --git a/Source/CesiumRuntime/Public/CesiumMetadataPrimitive.h b/Source/CesiumRuntime/Public/CesiumMetadataPrimitive.h index dba5ee0bd..d1cb6c897 100644 --- a/Source/CesiumRuntime/Public/CesiumMetadataPrimitive.h +++ b/Source/CesiumRuntime/Public/CesiumMetadataPrimitive.h @@ -46,6 +46,8 @@ struct CESIUMRUNTIME_API FCesiumMetadataPrimitive { * IDs in the glTF mesh primitive. * @param PrimitiveMetadata The FCesiumPrimitiveMetadata containing references * to the metadata for the glTF mesh primitive. + * @param ModelMetadata The FCesiumModelMetadata containing the property + * tables and textures contained in a glTF model. */ FCesiumMetadataPrimitive( const FCesiumPrimitiveFeatures& PrimitiveFeatures, @@ -71,6 +73,9 @@ class CESIUMRUNTIME_API UCesiumMetadataPrimitiveBlueprintLibrary /** * Get all the feature ID attributes that are associated with the * primitive. + * + * @param MetadataPrimitive The {@link FCesiumMetadataPrimitive} to obtain the + * feature ID attributes from. */ UFUNCTION( BlueprintCallable, @@ -87,6 +92,9 @@ class CESIUMRUNTIME_API UCesiumMetadataPrimitiveBlueprintLibrary /** * Get all the feature ID textures that are associated with the * primitive. + * + * @param MetadataPrimitive The {@link FCesiumMetadataPrimitive} to obtain the + * feature ID textures from. */ UFUNCTION( BlueprintCallable, @@ -103,6 +111,9 @@ class CESIUMRUNTIME_API UCesiumMetadataPrimitiveBlueprintLibrary /** * @brief Get all the feature textures that are associated with the * primitive. + * + * @param MetadataPrimitive The {@link FCesiumMetadataPrimitive} to obtain the + * feature texture names from. */ UFUNCTION( BlueprintCallable, @@ -120,7 +131,9 @@ class CESIUMRUNTIME_API UCesiumMetadataPrimitiveBlueprintLibrary * Gets the ID of the first vertex that makes up a given face of this * primitive. * - * @param faceID The ID of the face. + * @param MetadataPrimitive The {@link FCesiumMetadataPrimitive} to obtain the + * vertex ID from. + * @param FaceID The ID of the face. */ UFUNCTION( BlueprintCallable, diff --git a/Source/CesiumRuntime/Public/CesiumMetadataValue.h b/Source/CesiumRuntime/Public/CesiumMetadataValue.h index d8daa68c3..337407026 100644 --- a/Source/CesiumRuntime/Public/CesiumMetadataValue.h +++ b/Source/CesiumRuntime/Public/CesiumMetadataValue.h @@ -9,6 +9,7 @@ #include "UObject/ObjectMacros.h" #include #include +#include #include "CesiumMetadataValue.generated.h" @@ -22,8 +23,8 @@ struct CESIUMRUNTIME_API FCesiumMetadataValue { private: #pragma region ValueType declaration template using ArrayView = CesiumGltf::PropertyArrayView; - using ValueType = std::variant< - std::monostate, + using ValueType = swl::variant< + swl::monostate, int8_t, uint8_t, int16_t, @@ -174,7 +175,7 @@ struct CESIUMRUNTIME_API FCesiumMetadataValue { /** * Constructs an empty metadata value with unknown type. */ - FCesiumMetadataValue() : _value(std::monostate{}), _valueType() {} + FCesiumMetadataValue() : _value(swl::monostate{}), _valueType(), _storage() {} /** * Constructs a metadata value with the given input. @@ -182,7 +183,8 @@ struct CESIUMRUNTIME_API FCesiumMetadataValue { * @param Value The value to be stored in this struct. */ template - explicit FCesiumMetadataValue(const T& Value) : _value(Value), _valueType() { + explicit FCesiumMetadataValue(const T& Value) + : _value(Value), _valueType(), _storage() { ECesiumMetadataType type; ECesiumMetadataComponentType componentType; bool isArray; @@ -202,6 +204,24 @@ struct CESIUMRUNTIME_API FCesiumMetadataValue { _valueType = {type, componentType, isArray}; } + template + explicit FCesiumMetadataValue( + const CesiumGltf::PropertyArrayCopy& Copy) + : FCesiumMetadataValue(CesiumGltf::PropertyArrayCopy(Copy)) {} + + template + explicit FCesiumMetadataValue(CesiumGltf::PropertyArrayCopy&& Copy) + : _value(), _valueType(), _storage() { + this->_value = std::move(Copy).toViewAndExternalBuffer(this->_storage); + + ECesiumMetadataType type = + ECesiumMetadataType(CesiumGltf::TypeToPropertyType::value); + ECesiumMetadataComponentType componentType = ECesiumMetadataComponentType( + CesiumGltf::TypeToPropertyType::component); + bool isArray = true; + this->_valueType = {type, componentType, isArray}; + } + /** * Constructs a metadata value with the given optional input. * @@ -209,18 +229,26 @@ struct CESIUMRUNTIME_API FCesiumMetadataValue { */ template explicit FCesiumMetadataValue(const std::optional& MaybeValue) - : _value(std::monostate{}), _valueType() { + : _value(), _valueType(), _storage() { if (!MaybeValue) { return; } - _value = *MaybeValue; - _valueType = TypeToMetadataValueType(); + FCesiumMetadataValue temp(*MaybeValue); + this->_value = std::move(temp._value); + this->_valueType = std::move(temp._valueType); + this->_storage = std::move(temp._storage); } + FCesiumMetadataValue(FCesiumMetadataValue&& rhs); + FCesiumMetadataValue& operator=(FCesiumMetadataValue&& rhs); + FCesiumMetadataValue(const FCesiumMetadataValue& rhs); + FCesiumMetadataValue& operator=(const FCesiumMetadataValue& rhs); + private: ValueType _value; FCesiumMetadataValueType _valueType; + std::vector _storage; friend class UCesiumMetadataValueBlueprintLibrary; }; @@ -313,6 +341,7 @@ class CESIUMRUNTIME_API UCesiumMetadataValueBlueprintLibrary * * All other types return the default value. * + * @param value The metadata value to retrieve. * @param DefaultValue The default value to use if the given value cannot * be converted to a Boolean. * @return The value as a Boolean. @@ -342,6 +371,7 @@ class CESIUMRUNTIME_API UCesiumMetadataValueBlueprintLibrary * * In all other cases, the default value is returned. * + * @param Value The metadata value to retrieve. * @param DefaultValue The default value to use if the given value cannot * be converted to a Byte. * @return The value as a Byte. @@ -373,6 +403,7 @@ class CESIUMRUNTIME_API UCesiumMetadataValueBlueprintLibrary * * In all other cases, the default value is returned. * + * @param Value The metadata value to retrieve. * @param DefaultValue The default value to use if the given value cannot * be converted to an Integer. * @return The value as an Integer. @@ -404,6 +435,7 @@ class CESIUMRUNTIME_API UCesiumMetadataValueBlueprintLibrary * * In all other cases, the default value is returned. * + * @param Value The metadata value to retrieve. * @param DefaultValue The default value to use if the given value cannot * be converted to an Integer64. * @return The value as an Integer64. @@ -435,6 +467,7 @@ class CESIUMRUNTIME_API UCesiumMetadataValueBlueprintLibrary * * In all other cases, the default value is returned. * + * @param Value The metadata value to retrieve. * @param DefaultValue The default value to use if the given value cannot * be converted to a Float. * @return The value as a Float. @@ -464,6 +497,7 @@ class CESIUMRUNTIME_API UCesiumMetadataValueBlueprintLibrary * * In all other cases, the default value is returned. * + * @param Value The metadata value to retrieve. * @param DefaultValue The default value to use if the given value cannot * be converted to a Float64. * @return The value as a Float64. @@ -498,6 +532,7 @@ class CESIUMRUNTIME_API UCesiumMetadataValueBlueprintLibrary * any of the relevant components cannot be represented as a 32-bit signed, * the default value is returned. * + * @param Value The metadata value to retrieve. * @param DefaultValue The default value to use if the given value cannot * be converted to a FIntPoint. * @return The value as a FIntPoint. @@ -530,6 +565,7 @@ class CESIUMRUNTIME_API UCesiumMetadataValueBlueprintLibrary * * In all other cases, the default value is returned. * + * @param Value The metadata value to retrieve. * @param DefaultValue The default value to use if the given value cannot * be converted to a FIntPoint. * @return The value as a FIntPoint. @@ -567,6 +603,7 @@ class CESIUMRUNTIME_API UCesiumMetadataValueBlueprintLibrary * any of the relevant components cannot be represented as a 32-bit signed * integer, the default value is returned. * + * @param Value The metadata value to retrieve. * @param DefaultValue The default value to use if the given value cannot * be converted to a FIntVector. * @return The value as a FIntVector. @@ -605,6 +642,7 @@ class CESIUMRUNTIME_API UCesiumMetadataValueBlueprintLibrary * any of the relevant components cannot be represented as a single-precision * float, the default value is returned. * + * @param Value The metadata value to retrieve. * @param DefaultValue The default value to use if the given value cannot * be converted to a FVector3f. * @return The value as a FVector3f. @@ -640,6 +678,7 @@ class CESIUMRUNTIME_API UCesiumMetadataValueBlueprintLibrary * * In all other cases, the default value is returned. * + * @param Value The metadata value to retrieve. * @param DefaultValue The default value to use if the given value cannot * be converted to a FVector. * @return The value as a FVector. @@ -677,6 +716,7 @@ class CESIUMRUNTIME_API UCesiumMetadataValueBlueprintLibrary * * In all other cases, the default value is returned. * + * @param Value The metadata value to retrieve. * @param DefaultValue The default value to use if the given value cannot * be converted to a FVector4. * @return The value as a FVector4. @@ -715,6 +755,7 @@ class CESIUMRUNTIME_API UCesiumMetadataValueBlueprintLibrary * * In all other cases, the default value is returned. * + * @param Value The metadata value to retrieve. * @param DefaultValue The default value to use if the given value cannot * be converted to a FMatrix. * @return The value as a FMatrix. @@ -745,6 +786,7 @@ class CESIUMRUNTIME_API UCesiumMetadataValueBlueprintLibrary * * Array properties return the default value. * + * @param Value The metadata value to retrieve. * @param DefaultValue The default value to use if the given value cannot * be converted to a FString. * @return The value as a FString. @@ -761,6 +803,7 @@ class CESIUMRUNTIME_API UCesiumMetadataValueBlueprintLibrary * Attempts to retrieve the value as a FCesiumPropertyArray. If the property * is not an array type, this returns an empty array. * + * @param Value The metadata value to retrieve. * @return The value as a FCesiumPropertyArray. */ UFUNCTION( @@ -777,6 +820,7 @@ class CESIUMRUNTIME_API UCesiumMetadataValueBlueprintLibrary * matches the property's specified "no data" value, it will return an empty * FCesiumMetadataValue. * + * @param Value The metadata value to retrieve. * @return Whether the value is empty. */ UFUNCTION( diff --git a/Source/CesiumRuntime/Public/CesiumMetadataValueType.h b/Source/CesiumRuntime/Public/CesiumMetadataValueType.h index e01f6a6ee..ce6c3dd3b 100644 --- a/Source/CesiumRuntime/Public/CesiumMetadataValueType.h +++ b/Source/CesiumRuntime/Public/CesiumMetadataValueType.h @@ -5,7 +5,6 @@ #include "CesiumGltf/PropertyArrayView.h" #include "CesiumGltf/PropertyType.h" #include "CesiumGltf/PropertyTypeTraits.h" -#include "UObject/ObjectMacros.h" #include "CesiumMetadataValueType.generated.h" /** diff --git a/Source/CesiumRuntime/Public/CesiumPolygonRasterOverlay.h b/Source/CesiumRuntime/Public/CesiumPolygonRasterOverlay.h index abf154bb8..09c5ac3e8 100644 --- a/Source/CesiumRuntime/Public/CesiumPolygonRasterOverlay.h +++ b/Source/CesiumRuntime/Public/CesiumPolygonRasterOverlay.h @@ -17,7 +17,7 @@ class RasterizedPolygonsTileExcluder; * This is useful for clipping out parts of a tileset, for adding a water effect * in an area, and for many other purposes. */ -UCLASS(ClassGroup = (Cesium), meta = (BlueprintSpawnableComponent)) +UCLASS(ClassGroup = Cesium, meta = (BlueprintSpawnableComponent)) class CESIUMRUNTIME_API UCesiumPolygonRasterOverlay : public UCesiumRasterOverlay { GENERATED_BODY() @@ -29,7 +29,7 @@ class CESIUMRUNTIME_API UCesiumPolygonRasterOverlay * The polygons to rasterize for this overlay. */ UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Cesium") - TArray Polygons; + TArray> Polygons; /** * Whether to invert the selection specified by the polygons. diff --git a/Source/CesiumRuntime/Public/CesiumPrimitiveFeatures.h b/Source/CesiumRuntime/Public/CesiumPrimitiveFeatures.h index 8753caacc..9b079cf3f 100644 --- a/Source/CesiumRuntime/Public/CesiumPrimitiveFeatures.h +++ b/Source/CesiumRuntime/Public/CesiumPrimitiveFeatures.h @@ -11,11 +11,15 @@ namespace CesiumGltf { struct ExtensionExtMeshFeatures; +struct ExtensionExtInstanceFeatures; } // namespace CesiumGltf /** * A Blueprint-accessible wrapper for a glTF Primitive's mesh features. It holds - * views of the feature ID sets associated with this primitive. + * views of the feature ID sets associated with this primitive. The collection + * of features in the EXT_instance_features is very similar to that in + * EXT_mesh_features, so FCesiumPrimitiveFeatures can be used to handle those + * features too. */ USTRUCT(BlueprintType) struct CESIUMRUNTIME_API FCesiumPrimitiveFeatures { @@ -33,17 +37,31 @@ struct CESIUMRUNTIME_API FCesiumPrimitiveFeatures { * @param Model The model that contains the EXT_mesh_features extension * @param Primitive The mesh primitive that stores EXT_mesh_features * extension - * @param Features The EXT_mesh_features of the glTF mesh primitive. - * primitive + * @param Features The EXT_mesh_features of the glTF mesh primitive */ FCesiumPrimitiveFeatures( const CesiumGltf::Model& Model, const CesiumGltf::MeshPrimitive& Primitive, const CesiumGltf::ExtensionExtMeshFeatures& Features); + /** + * Constructs an instance feature object. + * + * @param Model The model that contains the EXT_instance_features extension + * @param Node The node that stores EXT_instance_features + * extension + * @param InstanceFeatures The EXT_Instance_features of the glTF mesh + * primitive + */ + FCesiumPrimitiveFeatures( + const CesiumGltf::Model& Model, + const CesiumGltf::Node& Node, + const CesiumGltf::ExtensionExtInstanceFeatures& InstanceFeatures); + private: TArray _featureIdSets; CesiumGltf::IndexAccessorType _indexAccessor; + // Vertex count = 0 and _primitiveMode = -1 indicates instance features int64_t _vertexCount; int32_t _primitiveMode; @@ -57,8 +75,10 @@ class CESIUMRUNTIME_API UCesiumPrimitiveFeaturesBlueprintLibrary public: /** - * Gets the primitive features of a glTF primitive component. If component is - * not a Cesium glTF primitive component, the returned features are empty. + * Gets the primitive features of a glTF primitive component. If `component` + * is not a Cesium glTF primitive component, the returned features are empty. + * + * @param component The component to get the features of. */ UFUNCTION( BlueprintCallable, @@ -70,6 +90,8 @@ class CESIUMRUNTIME_API UCesiumPrimitiveFeaturesBlueprintLibrary /** * Gets all the feature ID sets that are associated with the * primitive. + * + * @param PrimitiveFeatures The primitive. */ UFUNCTION( BlueprintCallable, @@ -80,7 +102,10 @@ class CESIUMRUNTIME_API UCesiumPrimitiveFeaturesBlueprintLibrary const FCesiumPrimitiveFeatures& PrimitiveFeatures); /** - * Gets all the feature ID sets of the given type. If the primitive has no + * Gets all the feature ID sets of the given type. + * + * @param PrimitiveFeatures The primitive. + * @param Type The type of feature ID set to obtain. If the primitive has no * sets of that type, the returned array will be empty. */ UFUNCTION( @@ -93,6 +118,8 @@ class CESIUMRUNTIME_API UCesiumPrimitiveFeaturesBlueprintLibrary /** * Get the number of vertices in the primitive. + * + * @param PrimitiveFeatures The primitive. */ UFUNCTION( BlueprintCallable, @@ -105,6 +132,7 @@ class CESIUMRUNTIME_API UCesiumPrimitiveFeaturesBlueprintLibrary * Gets the index of the first vertex that makes up a given face of this * primitive. * + * @param PrimitiveFeatures The primitive. * @param FaceIndex The index of the face. */ UFUNCTION( @@ -118,10 +146,12 @@ class CESIUMRUNTIME_API UCesiumPrimitiveFeaturesBlueprintLibrary /** * Gets the feature ID associated with the given face. * - * A primitive may have multiple feature ID sets, so this allows a feature ID - * set to be specified by index. This value should index into the array of - * CesiumFeatureIdSets in the CesiumPrimitiveFeatures. If the specified - * feature ID set index is invalid, this returns -1. + * @param PrimitiveFeatures The primitive. + * @param FaceIndex The index of the face to obtain the feature ID of. + * @param FeatureIDSetIndex A primitive may have multiple feature ID sets, so + * this allows a feature ID set to be specified by index. This value should + * index into the array of CesiumFeatureIdSets in the CesiumPrimitiveFeatures. + * If the specified feature ID set index is invalid, this returns -1. */ UFUNCTION( BlueprintCallable, @@ -132,14 +162,28 @@ class CESIUMRUNTIME_API UCesiumPrimitiveFeaturesBlueprintLibrary int64 FaceIndex, int64 FeatureIDSetIndex = 0); + /** + * Gets the feature ID associated with the instance at the given index. + */ + UFUNCTION( + BlueprintCallable, + BlueprintPure, + Category = "Cesium|Primitive|Features") + static int64 GetFeatureIDFromInstance( + UPARAM(ref) const FCesiumPrimitiveFeatures& InstanceFeatures, + int64 InstanceIndex, + int64 FeatureIDSetIndex = 0); + /** * Gets the feature ID from the given line trace hit, assuming it * has hit a glTF primitive component containing this CesiumPrimitiveFeatures. * - * A primitive may have multiple feature ID sets, so this allows a feature ID - * set to be specified by index. This value should index into the array of - * CesiumFeatureIdSets in the CesiumPrimitiveFeatures. If the specified - * feature ID set index is invalid, this returns -1. + * @param PrimitiveFeatures The primitive. + * @param Hit The line trace hit to try to obtain a feature ID from. + * @param FeatureIDSetIndex A primitive may have multiple feature ID sets, so + * this allows a feature ID set to be specified by index. This value should + * index into the array of CesiumFeatureIdSets in the CesiumPrimitiveFeatures. + * If the specified feature ID set index is invalid, this returns -1. */ UFUNCTION( BlueprintCallable, diff --git a/Source/CesiumRuntime/Public/CesiumPropertyArray.h b/Source/CesiumRuntime/Public/CesiumPropertyArray.h index 9743a8376..dab0d63a7 100644 --- a/Source/CesiumRuntime/Public/CesiumPropertyArray.h +++ b/Source/CesiumRuntime/Public/CesiumPropertyArray.h @@ -6,7 +6,7 @@ #include "CesiumGltf/PropertyTypeTraits.h" #include "CesiumMetadataValueType.h" #include "UObject/ObjectMacros.h" -#include +#include #include "CesiumPropertyArray.generated.h" /** @@ -21,7 +21,7 @@ struct CESIUMRUNTIME_API FCesiumPropertyArray { template using ArrayPropertyView = CesiumGltf::PropertyArrayView; - using ArrayType = std::variant< + using ArrayType = swl::variant< ArrayPropertyView, ArrayPropertyView, ArrayPropertyView, @@ -107,7 +107,24 @@ struct CESIUMRUNTIME_API FCesiumPropertyArray { * @param value The property array view that will be stored in this struct */ template - FCesiumPropertyArray(CesiumGltf::PropertyArrayView value) + FCesiumPropertyArray(CesiumGltf::PropertyArrayCopy&& value) + : _value(), _elementType(), _storage() { + this->_value = std::move(value).toViewAndExternalBuffer(this->_storage); + ECesiumMetadataType type = + ECesiumMetadataType(CesiumGltf::TypeToPropertyType::value); + ECesiumMetadataComponentType componentType = ECesiumMetadataComponentType( + CesiumGltf::TypeToPropertyType::component); + bool isArray = false; + + _elementType = {type, componentType, isArray}; + } + + template + FCesiumPropertyArray(const CesiumGltf::PropertyArrayCopy& value) + : FCesiumPropertyArray(CesiumGltf::PropertyArrayCopy(value)) {} + + template + FCesiumPropertyArray(const CesiumGltf::PropertyArrayView& value) : _value(value), _elementType() { ECesiumMetadataType type = ECesiumMetadataType(CesiumGltf::TypeToPropertyType::value); @@ -118,15 +135,21 @@ struct CESIUMRUNTIME_API FCesiumPropertyArray { _elementType = {type, componentType, isArray}; } + FCesiumPropertyArray(FCesiumPropertyArray&& rhs); + FCesiumPropertyArray& operator=(FCesiumPropertyArray&& rhs); + FCesiumPropertyArray(const FCesiumPropertyArray& rhs); + FCesiumPropertyArray& operator=(const FCesiumPropertyArray& rhs); + private: template static bool - holdsArrayAlternative(const std::variant& variant) { - return std::holds_alternative>(variant); + holdsArrayAlternative(const swl::variant& variant) { + return swl::holds_alternative>(variant); } ArrayType _value; FCesiumMetadataValueType _elementType; + std::vector _storage; friend class UCesiumPropertyArrayBlueprintLibrary; }; diff --git a/Source/CesiumRuntime/Public/CesiumPropertyArrayBlueprintLibrary.h b/Source/CesiumRuntime/Public/CesiumPropertyArrayBlueprintLibrary.h index 13dc3ad2e..1612fcd5b 100644 --- a/Source/CesiumRuntime/Public/CesiumPropertyArrayBlueprintLibrary.h +++ b/Source/CesiumRuntime/Public/CesiumPropertyArrayBlueprintLibrary.h @@ -18,6 +18,8 @@ class CESIUMRUNTIME_API UCesiumPropertyArrayBlueprintLibrary public: /** * Gets the best-fitting Blueprints type for the elements of this array. + * + * @param array The array. */ UFUNCTION( BlueprintCallable, @@ -30,6 +32,8 @@ class CESIUMRUNTIME_API UCesiumPropertyArrayBlueprintLibrary * Gets the true value type of the elements in the array. Many of these types * are not accessible from Blueprints, but can be converted to a * Blueprint-accessible type. + * + * @param array The array. */ UFUNCTION( BlueprintCallable, @@ -42,6 +46,7 @@ class CESIUMRUNTIME_API UCesiumPropertyArrayBlueprintLibrary * Gets the number of elements in the array. Returns 0 if the elements have * an unknown type. * + * @param Array The array. * @return The number of elements in the array. */ UFUNCTION( @@ -57,6 +62,7 @@ class CESIUMRUNTIME_API UCesiumPropertyArrayBlueprintLibrary * If the index is out-of-bounds, this returns a bogus FCesiumMetadataValue of * an unknown type. * + * @param Array The array. * @param Index The index of the array element to retrieve. * @return The element as a FCesiumMetadataValue. */ @@ -70,6 +76,8 @@ class CESIUMRUNTIME_API UCesiumPropertyArrayBlueprintLibrary PRAGMA_DISABLE_DEPRECATION_WARNINGS /** * Gets the best-fitting Blueprints type for the elements of this array. + * + * @param array The array. */ UFUNCTION( BlueprintCallable, @@ -84,6 +92,8 @@ class CESIUMRUNTIME_API UCesiumPropertyArrayBlueprintLibrary * Gets true type of the elements in the array. Many of these types are not * accessible from Blueprints, but can be converted to a Blueprint-accessible * type. + * + * @param array The array. */ UFUNCTION( BlueprintCallable, @@ -99,6 +109,7 @@ class CESIUMRUNTIME_API UCesiumPropertyArrayBlueprintLibrary * Gets the number of elements in the array. Returns 0 if the elements have * an unknown type. * + * @param Array The array. * @return The number of elements in the array. */ UFUNCTION( @@ -125,6 +136,7 @@ class CESIUMRUNTIME_API UCesiumPropertyArrayBlueprintLibrary * * Other types of elements will return the default value. * + * @param Array The array. * @param Index The index of the array element to retrieve. * @param DefaultValue The default value to use if the index is invalid * or the element's value cannot be converted. @@ -161,6 +173,7 @@ class CESIUMRUNTIME_API UCesiumPropertyArrayBlueprintLibrary * * Otherwise, the default value is returned. * + * @param Array The array. * @param Index The index of the array element to retrieve. * @param DefaultValue The default value to use if the index is invalid * or the element's value cannot be converted. @@ -198,6 +211,7 @@ class CESIUMRUNTIME_API UCesiumPropertyArrayBlueprintLibrary * * Otherwise, the default value is returned. * + * @param Array The array. * @param Index The index of the array element to retrieve. * @param DefaultValue The default value to use if the index is invalid * or the element's value cannot be converted. @@ -238,8 +252,9 @@ class CESIUMRUNTIME_API UCesiumPropertyArrayBlueprintLibrary * * Otherwise, the default value is returned. * - * @param index The index of the array element to retrieve. - * @param defaultValue The default value to use if the index is invalid + * @param Array The array. + * @param Index The index of the array element to retrieve. + * @param DefaultValue The default value to use if the index is invalid * or the element's value cannot be converted. * @return The element value. */ @@ -274,7 +289,8 @@ class CESIUMRUNTIME_API UCesiumPropertyArrayBlueprintLibrary * * Otherwise, the default value is returned. * - * @param Index The index of the array element to retrieve. + * @param array The array. + * @param index The index of the array element to retrieve. * @param DefaultValue The default value to use if the index is invalid * or the element's value cannot be converted. * @return The element value. @@ -310,7 +326,8 @@ class CESIUMRUNTIME_API UCesiumPropertyArrayBlueprintLibrary * * Otherwise, the default value is returned. * - * @param Index The index of the array element to retrieve. + * @param array The array. + * @param index The index of the array element to retrieve. * @param DefaultValue The default value to use if the index is invalid * or the element's value cannot be converted. * @return The element value. @@ -338,6 +355,7 @@ class CESIUMRUNTIME_API UCesiumPropertyArrayBlueprintLibrary * * String elements are returned directly. * + * @param Array The array. * @param Index The index of the array element to retrieve. * @param DefaultValue The default value to use if the index is invalid * or the element's value cannot be converted. diff --git a/Source/CesiumRuntime/Public/CesiumPropertyTable.h b/Source/CesiumRuntime/Public/CesiumPropertyTable.h index c2c1304de..9cd02551e 100644 --- a/Source/CesiumRuntime/Public/CesiumPropertyTable.h +++ b/Source/CesiumRuntime/Public/CesiumPropertyTable.h @@ -2,7 +2,6 @@ #pragma once -#include "CesiumGltf/Class.h" #include "CesiumMetadataValue.h" #include "CesiumPropertyTableProperty.h" #include "Kismet/BlueprintFunctionLibrary.h" @@ -81,6 +80,8 @@ class CESIUMRUNTIME_API UCesiumPropertyTableBlueprintLibrary /** * Gets the status of the property table. If an error occurred while parsing * the property table from the glTF extension, this briefly conveys why. + * + * @param PropertyTable The property table. */ UFUNCTION( BlueprintCallable, @@ -92,6 +93,8 @@ class CESIUMRUNTIME_API UCesiumPropertyTableBlueprintLibrary /** * Gets the name of the property table. If no name was specified in the glTF * extension, this returns an empty string. + * + * @param PropertyTable The property table. */ UFUNCTION( BlueprintCallable, @@ -103,6 +106,8 @@ class CESIUMRUNTIME_API UCesiumPropertyTableBlueprintLibrary /** * Gets the number of values each property in the table is expected to have. * If an error occurred while parsing the property table, this returns zero. + * + * @param PropertyTable The property table. */ UFUNCTION( BlueprintCallable, @@ -113,6 +118,8 @@ class CESIUMRUNTIME_API UCesiumPropertyTableBlueprintLibrary /** * Gets all the properties of the property table, mapped by property name. + * + * @param PropertyTable The property table. */ UFUNCTION( BlueprintCallable, @@ -123,6 +130,8 @@ class CESIUMRUNTIME_API UCesiumPropertyTableBlueprintLibrary /** * Gets the names of the properties in this property table. + * + * @param PropertyTable The property table. */ UFUNCTION( BlueprintCallable, @@ -135,6 +144,9 @@ class CESIUMRUNTIME_API UCesiumPropertyTableBlueprintLibrary * Retrieve a FCesiumPropertyTableProperty by name. If the property table * does not contain a property with that name, this returns an invalid * FCesiumPropertyTableProperty. + * + * @param PropertyTable The property table. + * @param PropertyName The name of the property to find. */ UFUNCTION( BlueprintCallable, @@ -150,7 +162,8 @@ class CESIUMRUNTIME_API UCesiumPropertyTableBlueprintLibrary * * If the feature ID is out-of-bounds, the returned map will be empty. * - * @param featureID The ID of the feature. + * @param PropertyTable The property table. + * @param FeatureID The ID of the feature. * @return The property values mapped by property name. */ UFUNCTION( @@ -172,6 +185,7 @@ class CESIUMRUNTIME_API UCesiumPropertyTableBlueprintLibrary * * If the feature ID is out-of-bounds, the returned map will be empty. * + * @param PropertyTable The property table. * @param FeatureID The ID of the feature. * @return The property values as strings mapped by property name. */ diff --git a/Source/CesiumRuntime/Public/CesiumPropertyTableProperty.h b/Source/CesiumRuntime/Public/CesiumPropertyTableProperty.h index f7671cd28..d9e91b3e3 100644 --- a/Source/CesiumRuntime/Public/CesiumPropertyTableProperty.h +++ b/Source/CesiumRuntime/Public/CesiumPropertyTableProperty.h @@ -57,7 +57,7 @@ struct CESIUMRUNTIME_API FCesiumPropertyTableProperty { /** * Construct a wrapper for the property table property view. * - * @param value The PropertyTablePropertyView to be stored in this struct. + * @param Property The PropertyTablePropertyView to be stored in this struct. */ template FCesiumPropertyTableProperty( @@ -119,6 +119,8 @@ class CESIUMRUNTIME_API UCesiumPropertyTablePropertyBlueprintLibrary /** * Gets the status of the property table property. If this property table * property is invalid in any way, this will briefly indicate why. + * + * @param Property The property table property. */ UFUNCTION( BlueprintCallable, @@ -131,6 +133,8 @@ class CESIUMRUNTIME_API UCesiumPropertyTablePropertyBlueprintLibrary * Gets the best-fitting type for the property that is accessible from * Blueprints. For the most precise representation of the values possible in * Blueprints, you should retrieve it using this type. + * + * @param Property The property table property. */ UFUNCTION( BlueprintCallable, @@ -143,6 +147,8 @@ class CESIUMRUNTIME_API UCesiumPropertyTablePropertyBlueprintLibrary * Gets the best-fitting Blueprints type for the elements in this property's * array values. If the given property does not contain array values, this * returns None. + * + * @param Property The property table property. */ UFUNCTION( BlueprintCallable, @@ -156,6 +162,8 @@ class CESIUMRUNTIME_API UCesiumPropertyTablePropertyBlueprintLibrary * Gets the best-fitting Blueprints type for the elements in this property's * array values. If the given property does not contain array values, this * returns None. + * + * @param Property The property table property. */ UFUNCTION( BlueprintCallable, @@ -172,6 +180,8 @@ class CESIUMRUNTIME_API UCesiumPropertyTablePropertyBlueprintLibrary * Gets the type of the metadata value as defined in the * EXT_structural_metadata extension. Many of these types are not accessible * from Blueprints, but can be converted to a Blueprint-accessible type. + * + * @param Property The property table property. */ UFUNCTION( BlueprintCallable, @@ -184,6 +194,8 @@ class CESIUMRUNTIME_API UCesiumPropertyTablePropertyBlueprintLibrary /** * Gets true type of the value. Many of these types are not accessible * from Blueprints, but can be converted to a Blueprint-accessible type. + * + * @param Value The property table property. */ UFUNCTION( BlueprintCallable, @@ -200,6 +212,8 @@ class CESIUMRUNTIME_API UCesiumPropertyTablePropertyBlueprintLibrary * array property, the component type will be None. Many of these types are * not accessible from Blueprints, but can be converted to a * Blueprint-accessible type. + * + * @param Value The property table property. */ UFUNCTION( BlueprintCallable, @@ -215,6 +229,8 @@ class CESIUMRUNTIME_API UCesiumPropertyTablePropertyBlueprintLibrary /** * Gets the number of values in the property. + * + * @param Property The property table property. */ UFUNCTION( BlueprintCallable, @@ -226,6 +242,8 @@ class CESIUMRUNTIME_API UCesiumPropertyTablePropertyBlueprintLibrary PRAGMA_DISABLE_DEPRECATION_WARNINGS /** * Gets the number of values in this property. + * + * @param Property The property table property. */ UFUNCTION( BlueprintCallable, @@ -240,6 +258,8 @@ class CESIUMRUNTIME_API UCesiumPropertyTablePropertyBlueprintLibrary /** * Gets the number of elements in an array of this property. Only * applicable when the property is a fixed-length array type. + * + * @param Property The property table property. */ UFUNCTION( BlueprintCallable, @@ -252,6 +272,8 @@ class CESIUMRUNTIME_API UCesiumPropertyTablePropertyBlueprintLibrary /** * Gets the number of elements in an array of this property. Only * applicable when the property is a fixed-length array type. + * + * @param Property The property table property. */ UFUNCTION( BlueprintCallable, @@ -289,6 +311,7 @@ class CESIUMRUNTIME_API UCesiumPropertyTablePropertyBlueprintLibrary * out-of-range, or if the property table property is somehow invalid, the * user-defined default value is returned. * + * @param Property The property table property. * @param FeatureID The ID of the feature. * @param DefaultValue The default value to fall back on. * @return The property value as a Boolean. @@ -330,6 +353,7 @@ class CESIUMRUNTIME_API UCesiumPropertyTablePropertyBlueprintLibrary * feature ID is out-of-range, or if the property table property is somehow * invalid, the user-defined default value is returned. * + * @param Property The property table property. * @param FeatureID The ID of the feature. * @param DefaultValue The default value to fall back on. * @return The property value as a Byte. @@ -374,6 +398,7 @@ class CESIUMRUNTIME_API UCesiumPropertyTablePropertyBlueprintLibrary * feature ID is out-of-range, or if the property table property is somehow * invalid, the user-defined default value is returned. * + * @param Property The property table property. * @param FeatureID The ID of the feature. * @param DefaultValue The default value to fall back on. * @return The property value as an Integer. @@ -417,6 +442,7 @@ class CESIUMRUNTIME_API UCesiumPropertyTablePropertyBlueprintLibrary * feature ID is out-of-range, or if the property table property is somehow * invalid, the user-defined default value is returned. * + * @param Property The property table property. * @param FeatureID The ID of the feature. * @param DefaultValue The default value to fall back on. * @return The property value as an Integer64. @@ -461,6 +487,7 @@ class CESIUMRUNTIME_API UCesiumPropertyTablePropertyBlueprintLibrary * feature ID is out-of-range, or if the property table property is somehow * invalid, the user-defined default value is returned. * + * @param Property The property table property. * @param FeatureID The ID of the feature. * @param DefaultValue The default value to fall back on. * @return The property value as a Float. @@ -504,6 +531,7 @@ class CESIUMRUNTIME_API UCesiumPropertyTablePropertyBlueprintLibrary * feature ID is out-of-range, or if the property table property is somehow * invalid, the user-defined default value is returned. * + * @param Property The property table property. * @param FeatureID The ID of the feature. * @param DefaultValue The default value to fall back on. * @return The property value as a Float64. @@ -552,6 +580,7 @@ class CESIUMRUNTIME_API UCesiumPropertyTablePropertyBlueprintLibrary * If the feature ID is out-of-range, or if the property table property is * somehow invalid, the user-defined default value is returned. * + * @param Property The property table property. * @param FeatureID The ID of the feature. * @param DefaultValue The default value to fall back on. * @return The property value as a FIntPoint. @@ -596,6 +625,7 @@ class CESIUMRUNTIME_API UCesiumPropertyTablePropertyBlueprintLibrary * feature ID is out-of-range, or if the property table property is somehow * invalid, the user-defined default value is returned. * + * @param Property The property table property. * @param FeatureID The ID of the feature. * @param DefaultValue The default value to fall back on. * @return The property value as a FVector2D. @@ -647,6 +677,7 @@ class CESIUMRUNTIME_API UCesiumPropertyTablePropertyBlueprintLibrary * If the feature ID is out-of-range, or if the property table property is * somehow invalid, the user-defined default value is returned. * + * @param Property The property table property. * @param FeatureID The ID of the feature. * @param DefaultValue The default value to fall back on. * @return The property value as a FIntVector. @@ -698,6 +729,7 @@ class CESIUMRUNTIME_API UCesiumPropertyTablePropertyBlueprintLibrary * If the feature ID is out-of-range, or if the property table property is * somehow invalid, the user-defined default value is returned. * + * @param Property The property table property. * @param FeatureID The ID of the feature. * @param DefaultValue The default value to fall back on. * @return The property value as a FVector3f. @@ -745,6 +777,7 @@ class CESIUMRUNTIME_API UCesiumPropertyTablePropertyBlueprintLibrary * feature ID is out-of-range, or if the property table property is somehow * invalid, the user-defined default value is returned. * + * @param Property The property table property. * @param FeatureID The ID of the feature. * @param DefaultValue The default value to fall back on. * @return The property value as a FVector. @@ -794,6 +827,7 @@ class CESIUMRUNTIME_API UCesiumPropertyTablePropertyBlueprintLibrary * feature ID is out-of-range, or if the property table property is somehow * invalid, the user-defined default value is returned. * + * @param Property The property table property. * @param FeatureID The ID of the feature. * @param DefaultValue The default value to fall back on. * @return The property value as a FVector4. @@ -844,6 +878,7 @@ class CESIUMRUNTIME_API UCesiumPropertyTablePropertyBlueprintLibrary * feature ID is out-of-range, or if the property table property is somehow * invalid, the user-defined default value is returned. * + * @param Property The property table property. * @param FeatureID The ID of the feature. * @param DefaultValue The default value to fall back on. * @return The property value as a FMatrix. @@ -887,6 +922,7 @@ class CESIUMRUNTIME_API UCesiumPropertyTablePropertyBlueprintLibrary * If the feature ID is out-of-range, or if the property table property is * somehow invalid, the user-defined default value is returned. * + * @param Property The property table property. * @param FeatureID The ID of the feature. * @param DefaultValue The default value to fall back on. * @return The property value as a FString. @@ -912,7 +948,8 @@ class CESIUMRUNTIME_API UCesiumPropertyTablePropertyBlueprintLibrary * the property-defined default value cannot be converted, or does not exist, * then the user-defined default value is returned. * - * @param featureID The ID of the feature. + * @param Property The property table property. + * @param FeatureID The ID of the feature. * @return The property value as a FCesiumPropertyArray. */ UFUNCTION( @@ -934,7 +971,8 @@ class CESIUMRUNTIME_API UCesiumPropertyTablePropertyBlueprintLibrary * empty value will be returned. However, if the property itself specifies a * default value, then the property-defined default value will be returned. * - * @param featureID The ID of the feature. + * @param Property The property table property. + * @param FeatureID The ID of the feature. * @return The property value. */ UFUNCTION( @@ -951,7 +989,8 @@ class CESIUMRUNTIME_API UCesiumPropertyTablePropertyBlueprintLibrary * value to be acted on more generically; its true value can be retrieved * later as a specific Blueprints type. * - * @param featureID The ID of the feature. + * @param Property The property table property. + * @param FeatureID The ID of the feature. * @return The property value. */ UFUNCTION( @@ -972,7 +1011,9 @@ class CESIUMRUNTIME_API UCesiumPropertyTablePropertyBlueprintLibrary * * If this property is an empty property with a specified default value, it * will not have any raw data to retrieve. The returned value will be empty. - * @param featureID The ID of the feature. + + * @param Property The property table property. + * @param FeatureID The ID of the feature. * @return The raw property value. */ UFUNCTION( @@ -987,6 +1028,7 @@ class CESIUMRUNTIME_API UCesiumPropertyTablePropertyBlueprintLibrary * Whether this property is normalized. Only applicable when this property has * an integer component type. * + * @param Property The property table property. * @return Whether this property is normalized. */ UFUNCTION( @@ -1004,6 +1046,7 @@ class CESIUMRUNTIME_API UCesiumPropertyTablePropertyBlueprintLibrary * integer component types. If an offset is not defined or applicable, this * returns an empty value. * + * @param Property The property table property. * @return The offset of the property. */ UFUNCTION( @@ -1021,6 +1064,7 @@ class CESIUMRUNTIME_API UCesiumPropertyTablePropertyBlueprintLibrary * integer component types. If a scale is not defined or applicable, this * returns an empty value. * + * @param Property The property table property. * @return The scale of the property. */ UFUNCTION( @@ -1040,6 +1084,7 @@ class CESIUMRUNTIME_API UCesiumPropertyTablePropertyBlueprintLibrary * offset, and scale applied. If a minimum value is not defined or * applicable, this returns an empty value. * + * @param Property The property table property. * @return The minimum value of the property. */ UFUNCTION( @@ -1059,6 +1104,7 @@ class CESIUMRUNTIME_API UCesiumPropertyTablePropertyBlueprintLibrary * offset, and scale applied. If a maximum value is not defined or applicable, * this returns an empty value. * + * @param Property The property table property. * @return The maximum value of the property. */ UFUNCTION( @@ -1077,6 +1123,7 @@ class CESIUMRUNTIME_API UCesiumPropertyTablePropertyBlueprintLibrary * This is not applicable to boolean properties. If a "no data" value is * not defined or applicable, this returns an empty value. * + * @param Property The property table property. * @return The "no data" value of the property. */ UFUNCTION( @@ -1093,6 +1140,7 @@ class CESIUMRUNTIME_API UCesiumPropertyTablePropertyBlueprintLibrary * * If a default value is not defined, this returns an empty value. * + * @param Property The property table property. * @return The default value of the property. */ UFUNCTION( diff --git a/Source/CesiumRuntime/Public/CesiumPropertyTexture.h b/Source/CesiumRuntime/Public/CesiumPropertyTexture.h index 70009327f..e32bbc936 100644 --- a/Source/CesiumRuntime/Public/CesiumPropertyTexture.h +++ b/Source/CesiumRuntime/Public/CesiumPropertyTexture.h @@ -67,6 +67,8 @@ class CESIUMRUNTIME_API UCesiumPropertyTextureBlueprintLibrary /** * Gets the status of the property texture. If the property texture is invalid * in any way, this briefly indicates why. + * + * @param PropertyTexture The property texture. */ UFUNCTION( BlueprintCallable, @@ -78,6 +80,8 @@ class CESIUMRUNTIME_API UCesiumPropertyTextureBlueprintLibrary /** * Gets the name of the property texture. + * + * @param PropertyTexture The property texture. */ UFUNCTION( BlueprintCallable, @@ -89,6 +93,8 @@ class CESIUMRUNTIME_API UCesiumPropertyTextureBlueprintLibrary /** * Gets all the properties of the property texture, mapped by property name. + * + * @param PropertyTexture The property texture. */ UFUNCTION( BlueprintCallable, @@ -100,6 +106,8 @@ class CESIUMRUNTIME_API UCesiumPropertyTextureBlueprintLibrary /** * Gets the names of the properties in this property texture. If the property * texture is invalid, this returns an empty array. + * + * @param PropertyTexture The property texture. */ UFUNCTION( BlueprintCallable, @@ -112,6 +120,9 @@ class CESIUMRUNTIME_API UCesiumPropertyTextureBlueprintLibrary * Retrieve a FCesiumPropertyTextureProperty by name. If the property texture * does not contain a property with that name, this returns an invalid * FCesiumPropertyTextureProperty. + * + * @param PropertyTexture The property texture. + * @param PropertyName The name of the property to find. */ UFUNCTION( BlueprintCallable, @@ -132,6 +143,7 @@ class CESIUMRUNTIME_API UCesiumPropertyTextureBlueprintLibrary * coordinate set. Use GetMetadataValuesForHit instead to sample the property * texture's properties with their respective texture coordinate sets. * + * @param PropertyTexture The property texture. * @param UV The texture coordinates. * @return The property values mapped by property name. */ @@ -152,6 +164,7 @@ class CESIUMRUNTIME_API UCesiumPropertyTextureBlueprintLibrary * texture coordinate sets to be sampled from. This method uses the * corresponding texture coordinate sets to sample each property. * + * @param PropertyTexture The property texture. * @param Hit The trace hit result * @return The property values mapped by property name. */ diff --git a/Source/CesiumRuntime/Public/CesiumPropertyTextureProperty.h b/Source/CesiumRuntime/Public/CesiumPropertyTextureProperty.h index c9c855b5a..c9a7c00d2 100644 --- a/Source/CesiumRuntime/Public/CesiumPropertyTextureProperty.h +++ b/Source/CesiumRuntime/Public/CesiumPropertyTextureProperty.h @@ -98,7 +98,7 @@ struct CESIUMRUNTIME_API FCesiumPropertyTextureProperty { const int64 getTexCoordSetIndex() const; const CesiumGltf::Sampler* getSampler() const; - const CesiumGltf::ImageCesium* getImage() const; + const CesiumGltf::ImageAsset* getImage() const; const std::optional getTextureTransform() const; @@ -122,6 +122,8 @@ class CESIUMRUNTIME_API UCesiumPropertyTexturePropertyBlueprintLibrary /** * Gets the status of the property texture property. If this property texture * property is invalid in any way, this will briefly indicate why. + * + * @param Property The property texture property. */ UFUNCTION( BlueprintCallable, @@ -134,6 +136,8 @@ class CESIUMRUNTIME_API UCesiumPropertyTexturePropertyBlueprintLibrary * Gets the best-fitting type for the property that is accessible from * Blueprints. For the most precise representation of the values possible in * Blueprints, you should retrieve it using this type. + * + * @param Property The property texture property. */ UFUNCTION( BlueprintCallable, @@ -146,6 +150,8 @@ class CESIUMRUNTIME_API UCesiumPropertyTexturePropertyBlueprintLibrary * Gets the best-fitting Blueprints type for the elements in this property's * array values. If the given property does not contain array values, this * returns None. + * + * @param Property The property texture property. */ UFUNCTION( BlueprintCallable, @@ -158,6 +164,8 @@ class CESIUMRUNTIME_API UCesiumPropertyTexturePropertyBlueprintLibrary * Gets the type of the metadata value as defined in the * EXT_structural_metadata extension. Many of these types are not accessible * from Blueprints, but can be converted to a Blueprint-accessible type. + * + * @param Property The property texture property. */ UFUNCTION( BlueprintCallable, @@ -169,6 +177,8 @@ class CESIUMRUNTIME_API UCesiumPropertyTexturePropertyBlueprintLibrary /** * Gets the number of elements in an array of this property. Only * applicable when the property is a fixed-length array type. + * + * @param Property The property texture property. */ UFUNCTION( BlueprintCallable, @@ -183,6 +193,8 @@ class CESIUMRUNTIME_API UCesiumPropertyTexturePropertyBlueprintLibrary * on the glTF primitive that samples this texture. * * If the property texture property is invalid, this returns -1. + * + * @param Property The property texture property. */ UFUNCTION( BlueprintCallable, @@ -207,6 +219,9 @@ class CESIUMRUNTIME_API UCesiumPropertyTexturePropertyBlueprintLibrary * This returns -1 if the property texture property is invalid, or if the * specified texture coordinate set is not present in the component's mesh * data. + * + * @param Component The component to get the texture coordinate set from. + * @param Property The property texture property. */ UFUNCTION( BlueprintCallable, @@ -220,6 +235,8 @@ class CESIUMRUNTIME_API UCesiumPropertyTexturePropertyBlueprintLibrary * @brief Get the channels array of this property. This contains the indices * of the meaningful texel channels that will be used when sampling the * property texture. + * + * @param Property The property texture property. */ UFUNCTION( BlueprintCallable, @@ -249,6 +266,7 @@ class CESIUMRUNTIME_API UCesiumPropertyTexturePropertyBlueprintLibrary * property texture property is somehow invalid, the user-defined default * value is returned. * + * @param Property The property texture property. * @param UV The texture coordinates. * @param DefaultValue The default value to fall back on. * @return The property value as a Byte. @@ -284,6 +302,7 @@ class CESIUMRUNTIME_API UCesiumPropertyTexturePropertyBlueprintLibrary * property texture property is somehow invalid, the user-defined default * value is returned. * + * @param Property The property texture property. * @param UV The texture coordinates. * @param DefaultValue The default value to fall back on. * @return The property value as an Integer. @@ -321,6 +340,7 @@ class CESIUMRUNTIME_API UCesiumPropertyTexturePropertyBlueprintLibrary * property texture property is somehow invalid, the user-defined default * value is returned. * + * @param Property The property texture property. * @param UV The texture coordinates. * @param DefaultValue The default value to fall back on. * @return The property value as a Float. @@ -357,6 +377,7 @@ class CESIUMRUNTIME_API UCesiumPropertyTexturePropertyBlueprintLibrary * property texture property is somehow invalid, the user-defined default * value is returned. * + * @param Property The property texture property. * @param UV The texture coordinates. * @param DefaultValue The default value to fall back on. * @return The property value as a Float. @@ -400,6 +421,7 @@ class CESIUMRUNTIME_API UCesiumPropertyTexturePropertyBlueprintLibrary * If the property texture property is somehow invalid, the user-defined * default value is returned. * + * @param Property The property texture property. * @param UV The texture coordinates. * @param DefaultValue The default value to fall back on. * @return The property value as a FIntPoint. @@ -411,7 +433,6 @@ class CESIUMRUNTIME_API UCesiumPropertyTexturePropertyBlueprintLibrary static FIntPoint GetIntPoint( UPARAM(ref) const FCesiumPropertyTextureProperty& Property, const FVector2D& UV, - const FIntPoint& DefaultValue); /** @@ -441,6 +462,7 @@ class CESIUMRUNTIME_API UCesiumPropertyTexturePropertyBlueprintLibrary * property texture property is somehow invalid, the user-defined default * value is returned. * + * @param Property The property texture property. * @param UV The texture coordinates. * @param DefaultValue The default value to fall back on. * @return The property value as a FVector2D. @@ -452,7 +474,6 @@ class CESIUMRUNTIME_API UCesiumPropertyTexturePropertyBlueprintLibrary static FVector2D GetVector2D( UPARAM(ref) const FCesiumPropertyTextureProperty& Property, const FVector2D& UV, - const FVector2D& DefaultValue); /** @@ -488,6 +509,7 @@ class CESIUMRUNTIME_API UCesiumPropertyTexturePropertyBlueprintLibrary * If the property texture property is somehow invalid, the user-defined * default value is returned. * + * @param Property The property texture property. * @param UV The texture coordinates. * @param DefaultValue The default value to fall back on. * @return The property value as a FIntVector. @@ -499,7 +521,6 @@ class CESIUMRUNTIME_API UCesiumPropertyTexturePropertyBlueprintLibrary static FIntVector GetIntVector( UPARAM(ref) const FCesiumPropertyTextureProperty& Property, const FVector2D& UV, - const FIntVector& DefaultValue); /** @@ -534,6 +555,7 @@ class CESIUMRUNTIME_API UCesiumPropertyTexturePropertyBlueprintLibrary * If the property texture property is somehow invalid, the user-defined * default value is returned. * + * @param Property The property texture property. * @param UV The texture coordinates. * @param DefaultValue The default value to fall back on. * @return The property value as a FVector. @@ -545,7 +567,6 @@ class CESIUMRUNTIME_API UCesiumPropertyTexturePropertyBlueprintLibrary static FVector GetVector( UPARAM(ref) const FCesiumPropertyTextureProperty& Property, const FVector2D& UV, - const FVector& DefaultValue); /** @@ -577,6 +598,7 @@ class CESIUMRUNTIME_API UCesiumPropertyTexturePropertyBlueprintLibrary * property texture property is somehow invalid, the user-defined default * value is returned. * + * @param Property The property texture property. * @param UV The texture coordinates. * @param DefaultValue The default value to fall back on. * @return The property value as a FVector4. @@ -588,7 +610,6 @@ class CESIUMRUNTIME_API UCesiumPropertyTexturePropertyBlueprintLibrary static FVector4 GetVector4( UPARAM(ref) const FCesiumPropertyTextureProperty& Property, const FVector2D& UV, - const FVector4& DefaultValue); /** @@ -603,6 +624,7 @@ class CESIUMRUNTIME_API UCesiumPropertyTexturePropertyBlueprintLibrary * possible. If the property-defined default value cannot be converted, or * does not exist, then the user-defined default value is returned. * + * @param Property The property texture property. * @param UV The texture coordinates. * @return The property value as a FCesiumPropertyArray. */ @@ -625,6 +647,7 @@ class CESIUMRUNTIME_API UCesiumPropertyTexturePropertyBlueprintLibrary * empty value will be returned. However, if the property itself specifies a * default value, then the property-defined default value will be returned. * + * @param Property The property texture property. * @param UV The texture coordinates. * @return The property value. */ @@ -643,6 +666,7 @@ class CESIUMRUNTIME_API UCesiumPropertyTexturePropertyBlueprintLibrary * If this property specifies a "no data" value, and the raw value is equal to * this "no data" value, the value is returned as-is. * + * @param Property The property texture property. * @param UV The texture coordinates. * @return The raw property value. */ @@ -658,6 +682,7 @@ class CESIUMRUNTIME_API UCesiumPropertyTexturePropertyBlueprintLibrary * Whether this property is normalized. Only applicable when this property * has an integer component type. * + * @param Property The property texture property. * @return Whether this property is normalized. */ UFUNCTION( @@ -675,6 +700,7 @@ class CESIUMRUNTIME_API UCesiumPropertyTexturePropertyBlueprintLibrary * integer component types. If an offset is not defined or applicable, this * returns an empty value. * + * @param Property The property texture property. * @return The offset of the property. */ UFUNCTION( @@ -692,6 +718,7 @@ class CESIUMRUNTIME_API UCesiumPropertyTexturePropertyBlueprintLibrary * integer component types. If a scale is not defined or applicable, this * returns an empty value. * + * @param Property The property texture property. * @return The scale of the property. */ UFUNCTION( @@ -711,6 +738,7 @@ class CESIUMRUNTIME_API UCesiumPropertyTexturePropertyBlueprintLibrary * offset, and scale applied. If a minimum value is not defined or * applicable, this returns an empty value. * + * @param Property The property texture property. * @return The minimum value of the property. */ UFUNCTION( @@ -730,6 +758,7 @@ class CESIUMRUNTIME_API UCesiumPropertyTexturePropertyBlueprintLibrary * offset, and scale applied. If a maximum value is not defined or applicable, * this returns an empty value. * + * @param Property The property texture property. * @return The maximum value of the property. */ UFUNCTION( @@ -748,6 +777,7 @@ class CESIUMRUNTIME_API UCesiumPropertyTexturePropertyBlueprintLibrary * This is not applicable to boolean properties. If a "no data" value is * not defined or applicable, this returns an empty value. * + * @param Property The property texture property. * @return The "no data" value of the property. */ UFUNCTION( @@ -764,6 +794,7 @@ class CESIUMRUNTIME_API UCesiumPropertyTexturePropertyBlueprintLibrary * * If a default value is not defined, this returns an empty value. * + * @param Property The property texture property. * @return The default value of the property. */ UFUNCTION( @@ -778,6 +809,8 @@ class CESIUMRUNTIME_API UCesiumPropertyTexturePropertyBlueprintLibrary * @brief Get the string representing how the metadata is encoded into a * pixel color. This is useful to unpack the correct order of the metadata * components from the pixel color. + * + * @param Property The property texture property. */ UFUNCTION( BlueprintCallable, @@ -793,6 +826,8 @@ class CESIUMRUNTIME_API UCesiumPropertyTexturePropertyBlueprintLibrary * @brief Get the component count of this property. Since the metadata is * encoded as pixel color, this is also the number of meaningful channels * it will use. + * + * @param Property The property texture property. */ UFUNCTION( BlueprintCallable, diff --git a/Source/CesiumRuntime/Public/CesiumRasterOverlay.h b/Source/CesiumRuntime/Public/CesiumRasterOverlay.h index 4015a77ee..41d1fdd0e 100644 --- a/Source/CesiumRuntime/Public/CesiumRasterOverlay.h +++ b/Source/CesiumRuntime/Public/CesiumRasterOverlay.h @@ -78,17 +78,27 @@ class CESIUMRUNTIME_API UCesiumRasterOverlay : public UActorComponent { UCesiumRasterOverlay(); /** - * Adds this raster overlay to its owning Cesium 3D Tileset Actor. If the - * overlay is already added or if this component's Owner is not a Cesium 3D - * Tileset, this method does nothing. + * Displays this raster overlay on its owning Cesium 3D Tileset Actor, without + * changing its activation state. It is usually better to call Activate + * rather than this function, in order to ensure that the component is also + * activated. Otherwise, if the Cesium3DTileset is reloaded for any reason, + * this overlay will no longer be shown. + * + * If the overlay is already added or if this component's Owner is not a + * Cesium 3D Tileset, this method does nothing. */ UFUNCTION(BlueprintCallable, Category = "Cesium") void AddToTileset(); /** - * Removes this raster overlay from its owning Cesium 3D Tileset Actor. If the - * overlay is not yet added or if this component's Owner is not a Cesium 3D - * Tileset, this method does nothing. + * Stops displaying this raster overlay on its owning Cesium 3D Tileset Actor. + * It is usually better to call Deactivate rather than this function, in order + * to ensure that the component is also deactivated. Otherwise, if the + * component remains active and the Cesium3DTileset is reloaded for any + * reason, this overlay will reappear. + * + * If the overlay is not yet added or if this component's Owner is not a + * Cesium 3D Tileset, this method does nothing. */ UFUNCTION(BlueprintCallable, Category = "Cesium") void RemoveFromTileset(); @@ -96,7 +106,9 @@ class CESIUMRUNTIME_API UCesiumRasterOverlay : public UActorComponent { /** * Refreshes this overlay by removing from its owning Cesium 3D Tileset Actor * and re-adding it. If this component's Owner is not a Cesium 3D Tileset - * Actor, this method does nothing. + * Actor, this method does nothing. If this component is not active, the + * overlay will be removed from the Cesium3DTileset if already present but not + * re-added. */ UFUNCTION(BlueprintCallable, Category = "Cesium") void Refresh(); @@ -125,8 +137,32 @@ class CESIUMRUNTIME_API UCesiumRasterOverlay : public UActorComponent { UFUNCTION(BlueprintCallable, Category = "Cesium") void SetSubTileCacheBytes(int64 Value); + /** + * Activates this raster overlay, which will display it on the Cesium3DTileset + * to which the component is attached, if it isn't already displayed. The + * overlay will continue to be shown on the tileset until it is deactivated. + * + * If the overlay is already displayed on the Cesium3DTileset, calling this + * function will not cause it to pick up any new values for properties that + * have been modified since it was added. To do that, call Refresh. + * + * If you created this overlay component via Blueprints, consider setting the + * "Auto Activate" property to false on the "Add Component" node and calling + * Activate after setting all the desired properties. This will avoid the need + * to call Refresh, and will ensure the overlay is not loaded multiple times. + * + * @param bReset Whether the activation should happen even if ShouldActivate + * returns false. + */ virtual void Activate(bool bReset) override; + + /** + * Deactivates this raster overlay. This will stop displaying it on the + * Cesium3DTileset to which the component is attached. The overlay will not be + * shown again until the component is re-activated. + */ virtual void Deactivate() override; + virtual void OnComponentDestroyed(bool bDestroyingHierarchy) override; virtual bool IsReadyForFinishDestroy() override; @@ -178,12 +214,12 @@ class CESIUMRUNTIME_API UCesiumRasterOverlay : public UActorComponent { /** * The maximum number of bytes to use to cache sub-tiles in memory. * - * This is used by provider types, that have an underlying tiling - * scheme that may not align with the tiling scheme of the geometry tiles on - * which the raster overlay tiles are draped. Because a single sub-tile may - * overlap multiple geometry tiles, it is useful to cache loaded sub-tiles - * in memory in case they're needed again soon. This property controls the - * maximum size of that cache. + * This is used by provider types that have an underlying tiling scheme that + * may not align with the tiling scheme of the geometry tiles on which the + * raster overlay tiles are draped. Because a single sub-tile may overlap + * multiple geometry tiles, it is useful to cache loaded sub-tiles in memory + * in case they're needed again soon. This property controls the maximum size + * of that cache. */ UPROPERTY( EditAnywhere, diff --git a/Source/CesiumRuntime/Public/CesiumSampleHeightMostDetailedAsyncAction.h b/Source/CesiumRuntime/Public/CesiumSampleHeightMostDetailedAsyncAction.h new file mode 100644 index 000000000..769182f69 --- /dev/null +++ b/Source/CesiumRuntime/Public/CesiumSampleHeightMostDetailedAsyncAction.h @@ -0,0 +1,71 @@ +// Copyright 2020-2024 CesiumGS, Inc. and Contributors +#pragma once + +#include "CesiumSampleHeightResult.h" +#include "Kismet/BlueprintAsyncActionBase.h" +#include "CesiumSampleHeightMostDetailedAsyncAction.generated.h" + +class ACesium3DTileset; + +/** + * The delegate used to asynchronously return sampled heights. + * @param Result The result of the height sampling. This array contains the + * outputs for each input cartographic position. Each result has a HeightSampled + * property indicating whether the height was successfully sampled at that + * position, and a LongitudeLatitudeHeight property with the complete position, + * including the sampled height. If the sample was unsuccessful, the original + * position is returned. + * @param Warnings Provides information about problems, if any, that were + * encountered while sampling heights. + */ +DECLARE_DYNAMIC_MULTICAST_DELEGATE_TwoParams( + FCesiumSampleHeightMostDetailedComplete, + const TArray&, + Result, + const TArray&, + Warnings); + +UCLASS() +class CESIUMRUNTIME_API UCesiumSampleHeightMostDetailedAsyncAction + : public UBlueprintAsyncActionBase { + GENERATED_BODY() + +public: + /** + * Asynchronously samples the height of the tileset at a list of cartographic + * positions, each expressed as a Longitude (X) and Latitude (Y) in degrees. + * The Height (Z) provided on input is ignored unless the sampling fails at + * that position, in which case it is passed through to the output. + * @param Tileset The tileset from which to query heights. + * @param LongitudeLatitudeHeightArray The array of cartographic positions at + * which to query heights, with Longitude in the X component and Latitude in + * the Y component. + */ + UFUNCTION( + BlueprintCallable, + Category = "Cesium", + meta = (BlueprintInternalUseOnly = true)) + static UCesiumSampleHeightMostDetailedAsyncAction* SampleHeightMostDetailed( + ACesium3DTileset* Tileset, + const TArray& LongitudeLatitudeHeightArray); + + /** + * Called when height has been sampled at all of the given positions. The + * Result property contains an element for each input position and in the same + * order. The Warnings property provides information about problems that were + * encountered while sampling heights. + */ + UPROPERTY(BlueprintAssignable) + FCesiumSampleHeightMostDetailedComplete OnHeightsSampled; + + virtual void Activate() override; + +private: + void RaiseOnHeightsSampled( + ACesium3DTileset* Tileset, + const TArray& Result, + const TArray& Warnings); + + ACesium3DTileset* _pTileset; + TArray _longitudeLatitudeHeightArray; +}; diff --git a/Source/CesiumRuntime/Public/CesiumSampleHeightResult.h b/Source/CesiumRuntime/Public/CesiumSampleHeightResult.h new file mode 100644 index 000000000..27b0265f1 --- /dev/null +++ b/Source/CesiumRuntime/Public/CesiumSampleHeightResult.h @@ -0,0 +1,32 @@ +// Copyright 2020-2024 CesiumGS, Inc. and Contributors + +#pragma once + +#include "CesiumSampleHeightResult.generated.h" + +/** + * The result of sampling the height on a tileset at the given cartographic + * position. + */ +USTRUCT(BlueprintType) +struct CESIUMRUNTIME_API FCesiumSampleHeightResult { + GENERATED_BODY() + + /** + * The Longitude (X) and Latitude (Y) are the same values provided on input. + * The Height (Z) is the height sampled from the tileset if the SampleSuccess + * property is true, or the original height provided on input if SampleSuccess + * is false. + */ + UPROPERTY(BlueprintReadWrite, Category = "Cesium") + FVector LongitudeLatitudeHeight = {0.0, 0.0, 0.0}; + + /** + * True if the height as sampled from the tileset successfully. False if the + * tileset doesn't have any height at that position, or if something went + * wrong. If something went wrong, the Warnings pin of the sampling function + * will have more information about the problem. + */ + UPROPERTY(BlueprintReadWrite, Category = "Cesium") + bool SampleSuccess = false; +}; diff --git a/Source/CesiumRuntime/Public/CesiumSubLevelComponent.h b/Source/CesiumRuntime/Public/CesiumSubLevelComponent.h index 23ce68635..21b0a0fa2 100644 --- a/Source/CesiumRuntime/Public/CesiumSubLevelComponent.h +++ b/Source/CesiumRuntime/Public/CesiumSubLevelComponent.h @@ -43,7 +43,7 @@ class UCesiumSubLevelSwitcherComponent; * sub-level's "Load Radius" that sub-level will be activated. If multiple * sub-levels are in range, only the closest one will be activated. */ -UCLASS(ClassGroup = (Cesium), meta = (BlueprintSpawnableComponent)) +UCLASS(ClassGroup = Cesium, meta = (BlueprintSpawnableComponent)) class CESIUMRUNTIME_API UCesiumSubLevelComponent : public UActorComponent { GENERATED_BODY() @@ -104,7 +104,7 @@ class CESIUMRUNTIME_API UCesiumSubLevelComponent : public UActorComponent { /** * Gets the height of the georeference origin for this sub-level in meters - * above the WGS84 ellipsoid. This height should not be confused with a height + * above the ellipsoid. This height should not be confused with a height * above Mean Sea Level. When this sub-level is active, the CesiumGeoreference * will adopt this origin. */ @@ -113,7 +113,7 @@ class CESIUMRUNTIME_API UCesiumSubLevelComponent : public UActorComponent { /** * Sets the height of the georeference origin for this sub-level in meters - * above the WGS84 ellipsoid. This height should not be confused with a height + * above the ellipsoid. This height should not be confused with a height * above Mean Sea Level. When this sub-level is active, the CesiumGeoreference * will adopt this origin. */ @@ -180,7 +180,7 @@ class CESIUMRUNTIME_API UCesiumSubLevelComponent : public UActorComponent { * Sets the longitude (X), latitude (Y), and height (Z) of this sub-level's * georeference origin. When this sub-level is active, the CesiumGeoreference * will adopt this origin. Longitude and latitude are in degrees. Height is in - * meters above the WGS84 ellipsoid, which should not be confused with meters + * meters above the ellipsoid, which should not be confused with meters * above Mean Sea Level. */ UFUNCTION(BlueprintCallable, Category = "Cesium") @@ -322,7 +322,7 @@ class CESIUMRUNTIME_API UCesiumSubLevelComponent : public UActorComponent { /** * The height of the georeference origin for this sub-level in meters above - * the WGS84 ellipsoid. This height should not be confused with a height above + * the ellipsoid. This height should not be confused with a height above * Mean Sea Level. When this sub-level is active, the CesiumGeoreference will * adopt this origin. */ diff --git a/Source/CesiumRuntime/Public/CesiumSunSky.h b/Source/CesiumRuntime/Public/CesiumSunSky.h index 97a43bb5f..73aaf43bc 100644 --- a/Source/CesiumRuntime/Public/CesiumSunSky.h +++ b/Source/CesiumRuntime/Public/CesiumSunSky.h @@ -48,7 +48,7 @@ class CESIUMRUNTIME_API ACesiumSunSky : public AActor { /** * The Globe Anchor Component that precisely ties this Actor to the Globe. */ - UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = "Cesium") + UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category = Components) UCesiumGlobeAnchorComponent* GlobeAnchor; /** @@ -295,6 +295,21 @@ class CESIUMRUNTIME_API ACesiumSunSky : public AActor { Category = "Cesium|Atmosphere") double CircumscribedGroundThreshold = 100.0; + /** + * The height at which to place the bottom of the atmosphere when the player + * pawn is above the CircumscribedGroundThreshold. This is expressed as a + * height in kilometers above the maximum radius of the ellipsoid (usually + * WGS84). To avoid dark splotchy artifacts in the atmosphere when zoomed out + * far from the globe, this value must be above the greatest height achieved + * by any part of the tileset. + */ + UPROPERTY( + EditAnywhere, + BlueprintReadWrite, + meta = (EditCondition = "UpdateAtmosphereAtRuntime"), + Category = "Cesium|Atmosphere") + double CircumscribedGroundHeight = 0.0; + /** * The height of the atmosphere layer above the ground, in kilometers. This * value is automatically scaled according to the CesiumGeoreference Scale and @@ -429,6 +444,22 @@ class CESIUMRUNTIME_API ACesiumSunSky : public AActor { UFUNCTION(CallInEditor, BlueprintCallable, Category = "Cesium") void UpdateAtmosphereRadius(); + /** + * Adjusts the time zone of this CesiumSunSky to an estimate based on the + * given longitude. + * + * The time zone is naively calculated from the longitude, where every + * 15 degrees equals 1 hour. This may not necessarily match the official + * time zone at a given location within that longitude. + * + * This method will call @ref UpdateSun automatically. + * + * @param InLongitude The longitude that the calculated time zone will be + * based on in degrees in the range [-180, 180]. + */ + UFUNCTION(CallInEditor, BlueprintCallable, Category = "Cesium") + void EstimateTimeZoneForLongitude(double InLongitude); + /** * Convert solar time to Hours:Minutes:Seconds. Copied the implementation * from the engine SunSkyBP class. diff --git a/Source/CesiumRuntime/Public/CesiumTileMapServiceRasterOverlay.h b/Source/CesiumRuntime/Public/CesiumTileMapServiceRasterOverlay.h index db64a15e1..dca53363a 100644 --- a/Source/CesiumRuntime/Public/CesiumTileMapServiceRasterOverlay.h +++ b/Source/CesiumRuntime/Public/CesiumTileMapServiceRasterOverlay.h @@ -12,7 +12,7 @@ * you're using a Tile Map Service via Cesium ion, use the "Cesium ion Raster * Overlay" component instead. */ -UCLASS(ClassGroup = (Cesium), meta = (BlueprintSpawnableComponent)) +UCLASS(ClassGroup = Cesium, meta = (BlueprintSpawnableComponent)) class CESIUMRUNTIME_API UCesiumTileMapServiceRasterOverlay : public UCesiumRasterOverlay { GENERATED_BODY() @@ -52,6 +52,12 @@ class CESIUMRUNTIME_API UCesiumTileMapServiceRasterOverlay meta = (EditCondition = "bSpecifyZoomLevels", ClampMin = 0)) int32 MaximumLevel = 10; + /** + * HTTP headers to be attached to each request made for this raster overlay. + */ + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Cesium") + TMap RequestHeaders; + protected: virtual std::unique_ptr CreateOverlay( const CesiumRasterOverlays::RasterOverlayOptions& options = {}) override; diff --git a/Source/CesiumRuntime/Public/CesiumUrlTemplateRasterOverlay.h b/Source/CesiumRuntime/Public/CesiumUrlTemplateRasterOverlay.h new file mode 100644 index 000000000..5fb429a90 --- /dev/null +++ b/Source/CesiumRuntime/Public/CesiumUrlTemplateRasterOverlay.h @@ -0,0 +1,232 @@ +// Copyright 2020-2024 CesiumGS, Inc. and Contributors + +#pragma once + +#include "CesiumRasterOverlay.h" +#include "Components/ActorComponent.h" +#include "CoreMinimal.h" +#include "CesiumUrlTemplateRasterOverlay.generated.h" + +/** + * Specifies the type of projection used for projecting a URL template + * raster overlay. + */ +UENUM(BlueprintType) +enum class ECesiumUrlTemplateRasterOverlayProjection : uint8 { + /** + * The raster overlay is projected using Web Mercator. + */ + WebMercator, + + /** + * The raster overlay is projected using a geographic projection. + */ + Geographic +}; + +/** + * A raster overlay that loads tiles from a templated URL. + */ +UCLASS(ClassGroup = Cesium, meta = (BlueprintSpawnableComponent)) +class CESIUMRUNTIME_API UCesiumUrlTemplateRasterOverlay + : public UCesiumRasterOverlay { + GENERATED_BODY() + +public: + /** + * @brief The URL containing template parameters that will be substituted when + * loading tiles. + * + * The following template parameters are supported in `url`: + * - `{x}` - The tile X coordinate in the tiling scheme, where 0 is the + * westernmost tile. + * - `{y}` - The tile Y coordinate in the tiling scheme, where 0 is the + * nothernmost tile. + * - `{z}` - The level of the tile in the tiling scheme, where 0 is the root + * of the quadtree pyramid. + * - `{reverseX}` - The tile X coordinate in the tiling scheme, where 0 is the + * easternmost tile. + * - `{reverseY}` - The tile Y coordinate in the tiling scheme, where 0 is the + * southernmost tile. + * - `{reverseZ}` - The tile Z coordinate in the tiling scheme, where 0 is + * equivalent to `urlTemplateOptions.maximumLevel`. + * - `{westDegrees}` - The western edge of the tile in geodetic degrees. + * - `{southDegrees}` - The southern edge of the tile in geodetic degrees. + * - `{eastDegrees}` - The eastern edge of the tile in geodetic degrees. + * - `{northDegrees}` - The northern edge of the tile in geodetic degrees. + * - `{minimumX}` - The minimum X coordinate of the tile's projected + * coordinates. + * - `{minimumY}` - The minimum Y coordinate of the tile's projected + * coordinates. + * - `{maximumX}` - The maximum X coordinate of the tile's projected + * coordinates. + * - `{maximumY}` - The maximum Y coordinate of the tile's projected + * coordinates. + * - `{width}` - The width of each tile in pixels. + * - `{height}` - The height of each tile in pixels. + */ + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Cesium") + FString TemplateUrl; + + /** + * The type of projection used to project the imagery onto the globe. + * For instance, EPSG:4326 uses geographic projection and EPSG:3857 uses Web + * Mercator. + */ + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Cesium") + ECesiumUrlTemplateRasterOverlayProjection Projection = + ECesiumUrlTemplateRasterOverlayProjection::WebMercator; + + /** + * Set this to true to specify the quadtree tiling scheme according to the + * specified root tile numbers and projected bounding rectangle. If false, the + * tiling scheme will be deduced from the projection. + */ + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Cesium") + bool bSpecifyTilingScheme = false; + + /** + * If specified, this determines the number of tiles at the + * root of the quadtree tiling scheme in the X direction. + * + * Only applicable if "Specify Tiling Scheme" is set to true. + */ + UPROPERTY( + EditAnywhere, + BlueprintReadWrite, + Category = "Cesium", + meta = (EditCondition = "bSpecifyTilingScheme", ClampMin = 1)) + int32 RootTilesX = 1; + + /** + * If specified, this determines the number of tiles at the + * root of the quadtree tiling scheme in the Y direction. + * + * Only applicable if "Specify Tiling Scheme" is set to true. + */ + UPROPERTY( + EditAnywhere, + BlueprintReadWrite, + Category = "Cesium", + meta = (EditCondition = "bSpecifyTilingScheme", ClampMin = 1)) + int32 RootTilesY = 1; + + /** + * The west boundary of the bounding rectangle used for the quadtree tiling + * scheme. Specified in longitude degrees in the range [-180, 180]. + * + * Only applicable if "Specify Tiling Scheme" is set to true. + */ + UPROPERTY( + Category = "Cesium", + EditAnywhere, + BlueprintReadWrite, + meta = + (EditCondition = "bSpecifyTilingScheme", + ClampMin = -180.0, + ClampMax = 180.0)) + double RectangleWest = -180; + + /** + * The south boundary of the bounding rectangle used for the quadtree tiling + * scheme. Specified in latitude degrees in the range [-90, 90]. + * + * Only applicable if "Specify Tiling Scheme" is set to true. + */ + UPROPERTY( + Category = "Cesium", + Category = "Cesium", + EditAnywhere, + BlueprintReadWrite, + meta = + (EditCondition = "bSpecifyTilingScheme", + ClampMin = -90.0, + ClampMax = 90.0)) + double RectangleSouth = -90; + + /** + * The east boundary of the bounding rectangle used for the quadtree tiling + * scheme. Specified in longitude degrees in the range [-180, 180]. + * + * Only applicable if "Specify Tiling Scheme" is set to true. + */ + UPROPERTY( + Category = "Cesium", + EditAnywhere, + BlueprintReadWrite, + meta = + (EditCondition = "bSpecifyTilingScheme", + ClampMin = -180.0, + ClampMax = 180.0)) + double RectangleEast = 180; + + /** + * The north boundary of the bounding rectangle used for the quadtree tiling + * scheme. Specified in latitude degrees in the range [-90, 90]. + * + * Only applicable if "Specify Tiling Scheme" is set to true. + */ + UPROPERTY( + Category = "Cesium", + EditAnywhere, + BlueprintReadWrite, + meta = + (EditCondition = "bSpecifyTilingScheme", + ClampMin = -90.0, + ClampMax = 90.0)) + double RectangleNorth = 90; + + /** + * Minimum zoom level. + * + * Take care when specifying this that the number of tiles at the minimum + * level is small, such as four or less. A larger number is likely to result + * in rendering problems. + */ + UPROPERTY( + EditAnywhere, + BlueprintReadWrite, + Category = "Cesium", + meta = (ClampMin = 0)) + int32 MinimumLevel = 0; + + /** + * Maximum zoom level. + */ + UPROPERTY( + EditAnywhere, + BlueprintReadWrite, + Category = "Cesium", + meta = (ClampMin = 0)) + int32 MaximumLevel = 25; + + /** + * The pixel width of the image tiles. + */ + UPROPERTY( + EditAnywhere, + BlueprintReadWrite, + Category = "Cesium", + meta = (ClampMin = 64, ClampMax = 2048)) + int32 TileWidth = 256; + + /** + * The pixel height of the image tiles. + */ + UPROPERTY( + EditAnywhere, + BlueprintReadWrite, + Category = "Cesium", + meta = (ClampMin = 64, ClampMax = 2048)) + int32 TileHeight = 256; + + /** + * HTTP headers to be attached to each request made for this raster overlay. + */ + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Cesium") + TMap RequestHeaders; + +protected: + virtual std::unique_ptr CreateOverlay( + const CesiumRasterOverlays::RasterOverlayOptions& options = {}) override; +}; diff --git a/Source/CesiumRuntime/Public/CesiumWebMapServiceRasterOverlay.h b/Source/CesiumRuntime/Public/CesiumWebMapServiceRasterOverlay.h index 1b2f284b1..2d2658228 100644 --- a/Source/CesiumRuntime/Public/CesiumWebMapServiceRasterOverlay.h +++ b/Source/CesiumRuntime/Public/CesiumWebMapServiceRasterOverlay.h @@ -11,7 +11,7 @@ * A raster overlay that directly accesses a Web Map Service (WMS) server. * https://www.ogc.org/standards/wms */ -UCLASS(ClassGroup = (Cesium), meta = (BlueprintSpawnableComponent)) +UCLASS(ClassGroup = Cesium, meta = (BlueprintSpawnableComponent)) class CESIUMRUNTIME_API UCesiumWebMapServiceRasterOverlay : public UCesiumRasterOverlay { GENERATED_BODY() @@ -75,6 +75,12 @@ class CESIUMRUNTIME_API UCesiumWebMapServiceRasterOverlay meta = (ClampMin = 0)) int32 MaximumLevel = 14; + /** + * HTTP headers to be attached to each request made for this raster overlay. + */ + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Cesium") + TMap RequestHeaders; + protected: virtual std::unique_ptr CreateOverlay( const CesiumRasterOverlays::RasterOverlayOptions& options = {}) override; diff --git a/Source/CesiumRuntime/Public/CesiumWebMapTileServiceRasterOverlay.h b/Source/CesiumRuntime/Public/CesiumWebMapTileServiceRasterOverlay.h index 0a305dfc7..c0de5947f 100644 --- a/Source/CesiumRuntime/Public/CesiumWebMapTileServiceRasterOverlay.h +++ b/Source/CesiumRuntime/Public/CesiumWebMapTileServiceRasterOverlay.h @@ -29,7 +29,7 @@ enum class ECesiumWebMapTileServiceRasterOverlayProjection : uint8 { * If you're using a Web Map Tile Service via Cesium ion, use the "Cesium ion * Raster Overlay" component instead. */ -UCLASS(ClassGroup = (Cesium), meta = (BlueprintSpawnableComponent)) +UCLASS(ClassGroup = Cesium, meta = (BlueprintSpawnableComponent)) class CESIUMRUNTIME_API UCesiumWebMapTileServiceRasterOverlay : public UCesiumRasterOverlay { GENERATED_BODY() @@ -267,6 +267,12 @@ class CESIUMRUNTIME_API UCesiumWebMapTileServiceRasterOverlay meta = (ClampMin = 64, ClampMax = 2048)) int32 TileHeight = 256; + /** + * HTTP headers to be attached to each request made for this raster overlay. + */ + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Cesium") + TMap RequestHeaders; + virtual void Serialize(FArchive& Ar) override; protected: diff --git a/Source/CesiumRuntime/Public/CesiumWgs84Ellipsoid.h b/Source/CesiumRuntime/Public/CesiumWgs84Ellipsoid.h index c3e8aabcf..a2cc3e421 100644 --- a/Source/CesiumRuntime/Public/CesiumWgs84Ellipsoid.h +++ b/Source/CesiumRuntime/Public/CesiumWgs84Ellipsoid.h @@ -17,20 +17,20 @@ class CESIUMRUNTIME_API UCesiumWgs84Ellipsoid * Gets the radii of the WGS84 ellipsoid in its x-, y-, and z-directions in * meters. */ - UFUNCTION(BlueprintPure, Category = "Cesium|WGS84 Ellipsoid") + UFUNCTION(BlueprintPure, Category = "Cesium|Ellipsoid|WGS84") static FVector GetRadii(); /** * Gets the maximum radius of the WGS84 ellipsoid in any dimension, in meters. */ - UFUNCTION(BlueprintPure, Category = "Cesium|WGS84 Ellipsoid") + UFUNCTION(BlueprintPure, Category = "Cesium|Ellipsoid|WGS84") static double GetMaximumRadius(); /** * Gets the minimum radius of the WGS854 ellipsoid in any dimension, in * meters. */ - UFUNCTION(BlueprintPure, Category = "Cesium|WGS84 Ellipsoid") + UFUNCTION(BlueprintPure, Category = "Cesium|Ellipsoid|WGS84") static double GetMinimumRadius(); /** @@ -41,7 +41,7 @@ class CESIUMRUNTIME_API UCesiumWgs84Ellipsoid */ UFUNCTION( BlueprintPure, - Category = "Cesium|WGS84 Ellipsoid", + Category = "Cesium|Ellipsoid|WGS84", meta = (ReturnDisplayName = "SurfacePosition")) static FVector ScaleToGeodeticSurface(const FVector& EarthCenteredEarthFixedPosition); @@ -52,7 +52,7 @@ class CESIUMRUNTIME_API UCesiumWgs84Ellipsoid */ UFUNCTION( BlueprintPure, - Category = "Cesium|WGS84 Ellipsoid", + Category = "Cesium|Ellipsoid|WGS84", meta = (ReturnDisplayName = "SurfaceNormalVector")) static FVector GeodeticSurfaceNormal(const FVector& EarthCenteredEarthFixedPosition); @@ -64,7 +64,7 @@ class CESIUMRUNTIME_API UCesiumWgs84Ellipsoid */ UFUNCTION( BlueprintPure, - Category = "Cesium|WGS84 Ellipsoid", + Category = "Cesium|Ellipsoid|WGS84", meta = (ReturnDisplayName = "EarthCenteredEarthFixedPosition")) static FVector LongitudeLatitudeHeightToEarthCenteredEarthFixed( const FVector& LongitudeLatitudeHeight); @@ -78,7 +78,7 @@ class CESIUMRUNTIME_API UCesiumWgs84Ellipsoid */ UFUNCTION( BlueprintPure, - Category = "Cesium|WGS84 Ellipsoid", + Category = "Cesium|Ellipsoid|WGS84", meta = (ReturnDisplayName = "LongitudeLatitudeHeight")) static FVector EarthCenteredEarthFixedToLongitudeLatitudeHeight( const FVector& EarthCenteredEarthFixedPosition); diff --git a/Source/CesiumRuntime/Public/GeoTransforms.h b/Source/CesiumRuntime/Public/GeoTransforms.h index 9ab610640..6ab5ad8cb 100644 --- a/Source/CesiumRuntime/Public/GeoTransforms.h +++ b/Source/CesiumRuntime/Public/GeoTransforms.h @@ -5,6 +5,7 @@ #include "CesiumGeospatial/Ellipsoid.h" #include "CesiumGeospatial/LocalHorizontalCoordinateSystem.h" #include "HAL/Platform.h" +#include "Math/Matrix.h" #include #include diff --git a/Source/CesiumRuntime/Public/UnrealAssetAccessor.h b/Source/CesiumRuntime/Public/UnrealAssetAccessor.h index cb06d0892..01095bcf9 100644 --- a/Source/CesiumRuntime/Public/UnrealAssetAccessor.h +++ b/Source/CesiumRuntime/Public/UnrealAssetAccessor.h @@ -4,6 +4,7 @@ #include "CesiumAsync/AsyncSystem.h" #include "CesiumAsync/IAssetAccessor.h" +#include "Containers/Map.h" #include "Containers/UnrealString.h" #include "HAL/Platform.h" #include @@ -25,7 +26,7 @@ class CESIUMRUNTIME_API UnrealAssetAccessor const std::string& verb, const std::string& url, const std::vector& headers, - const gsl::span& contentPayload) override; + const std::span& contentPayload) override; virtual void tick() noexcept override; diff --git a/Source/CesiumRuntime/Public/UnrealMetadataConversions.h b/Source/CesiumRuntime/Public/UnrealMetadataConversions.h index 0c715b6a9..83e04babc 100644 --- a/Source/CesiumRuntime/Public/UnrealMetadataConversions.h +++ b/Source/CesiumRuntime/Public/UnrealMetadataConversions.h @@ -57,7 +57,7 @@ struct UnrealMetadataConversions { * written in the "X=... Y=... Z=..." format. If this function fails to parse * a FIntVector, the default value is returned. * - * @param from The std::string_view to be parsed. + * @param string The std::string_view to be parsed. * @param defaultValue The default value to be returned if conversion fails. */ static FIntVector @@ -83,7 +83,6 @@ struct UnrealMetadataConversions { * will return a string in the format "X=... Y=... Z=...". * * @param from The glm::vecN to be converted. - * @param defaultValue The default value to be returned if conversion fails. */ template static FString toString(const glm::vec& from) { @@ -105,10 +104,8 @@ struct UnrealMetadataConversions { * returned in square brackets, e.g. "[1 2 3 4]", with spaces in-between. * * @param from The glm::matN to be converted. - * @param defaultValue The default value to be returned if conversion fails. */ template - static FString toString(const glm::mat& from) { std::string result; // glm::matNs are column-major, but Unreal matrices are row-major and print diff --git a/TestsProject/Config/DefaultEngine.ini b/TestsProject/Config/DefaultEngine.ini index faad2eecf..379bfe0c4 100644 --- a/TestsProject/Config/DefaultEngine.ini +++ b/TestsProject/Config/DefaultEngine.ini @@ -14,7 +14,7 @@ AppliedDefaultGraphicsPerformance=Maximum DefaultGraphicsRHI=DefaultGraphicsRHI_DX12 [/Script/Engine.RendererSettings] -r.GenerateMeshDistanceFields=True +r.GenerateMeshDistanceFields=False r.DynamicGlobalIlluminationMethod=1 r.ReflectionMethod=1 r.Shadow.Virtual.Enable=1 diff --git a/TestsProject/TestsProject.uproject b/TestsProject/TestsProject.uproject index 19b8c7063..3cc48f266 100644 --- a/TestsProject/TestsProject.uproject +++ b/TestsProject/TestsProject.uproject @@ -1,6 +1,6 @@ { "FileVersion": 3, - "EngineAssociation": "5.0", + "EngineAssociation": "5.3", "Category": "", "Description": "", "Plugins": [ @@ -28,4 +28,4 @@ ] } ] -} \ No newline at end of file +} diff --git a/extern/CMakeLists.txt b/extern/CMakeLists.txt index c38c16a4d..6fb030a0a 100644 --- a/extern/CMakeLists.txt +++ b/extern/CMakeLists.txt @@ -6,6 +6,25 @@ project( LANGUAGES CXX C ) +if (DEFINED ENV{UNREAL_ENGINE_ROOT} AND NOT UNREAL_ENGINE_ROOT) + set(UNREAL_ENGINE_ROOT "$ENV{UNREAL_ENGINE_ROOT}") +endif() + +if (NOT UNREAL_ENGINE_ROOT) + # On Windows, try to use the default UE 5.3 location + set(WINDOWS_DEFAULT_UNREAL_INSTALLATION "C:/Program Files/Epic Games/UE_5.3") + if (WIN32 AND EXISTS "${WINDOWS_DEFAULT_UNREAL_INSTALLATION}") + set(UNREAL_ENGINE_ROOT "${WINDOWS_DEFAULT_UNREAL_INSTALLATION}") + else() + message(FATAL_ERROR "Please specify the root of your Unreal Engine installation, either by setting the UNREAL_ENGINE_ROOT environment variable or with -DUNREAL_ENGINE_ROOT=path on the cmake command-line.") + endif() +endif() + +message(STATUS "Using Unreal Engine installation at: ${UNREAL_ENGINE_ROOT}") + +# Set the UE environment variable so it's inherited by vcpkg builds. +set(ENV{UNREAL_ENGINE_ROOT} "${UNREAL_ENGINE_ROOT}") + if (${CMAKE_SYSTEM_NAME} STREQUAL "Android") set(CESIUM_ARCHITECTURE "aarch64") set(HTTPLIB_USE_OPENSSL_IF_AVAILABLE OFF) @@ -37,28 +56,21 @@ set(PRIVATE_CESIUM_SQLITE ON) set(CMAKE_MSVC_RUNTIME_LIBRARY MultiThreadedDLL) set(CMAKE_INSTALL_PREFIX ${CMAKE_CURRENT_LIST_DIR}/../Source/ThirdParty) -set(CMAKE_INSTALL_LIBDIR ${CMAKE_INSTALL_PREFIX}/lib/${CMAKE_SYSTEM_NAME}-x${CESIUM_ARCHITECTURE}) - -# Always define this, since Unreal does in debug anyway -# We don't want any mismatches, especially with class member ordering -add_compile_definitions(NDEBUG) +set(CMAKE_INSTALL_LIBDIR ${CMAKE_INSTALL_PREFIX}/lib/${CMAKE_SYSTEM_NAME}-${CMAKE_SYSTEM_PROCESSOR}-$,Debug,Release>) -set(CESIUM_DEBUG_POSTFIX "d") -set(CESIUM_RELEASE_POSTFIX "") - -set(CMAKE_DEBUG_POSTFIX ${CESIUM_DEBUG_POSTFIX}) -set(CMAKE_RELEASE_POSTFIX ${CESIUM_RELEASE_POSTFIX}) -set(CMAKE_MINSIZEREL_POSTFIX ${CESIUM_RELEASE_POSTFIX}) -set(CMAKE_RELWITHDEBINFO_POSTFIX ${CESIUM_RELEASE_POSTFIX}) +# Always define NDEBUG, since Unreal does in debug anyway. +# We don't want any mismatches, especially with class member ordering. +# But still let debug builds force assertions. +add_compile_definitions(NDEBUG $<$:CESIUM_FORCE_ASSERTIONS>) # On Mac and Linux, Unreal uses -fvisibility-ms-compat. # On Android, it uses -fvisibility=hidden if (${CMAKE_SYSTEM_NAME} STREQUAL "Linux" OR ${CMAKE_SYSTEM_NAME} STREQUAL "Darwin") - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fvisibility-ms-compat -fvisibility-inlines-hidden") + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fvisibility-ms-compat -fvisibility-inlines-hidden -fno-rtti") elseif (${CMAKE_SYSTEM_NAME} STREQUAL "Android") - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fvisibility=hidden -fvisibility-inlines-hidden") + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fvisibility=hidden -fvisibility-inlines-hidden -fno-rtti") elseif (${CMAKE_SYSTEM_NAME} STREQUAL "iOS") - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fvisibility=hidden") + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fvisibility=hidden -fno-rtti") elseif (${CMAKE_SYSTEM_NAME} STREQUAL "Windows") # Unreal Engine adds /Zp8 in 64-bit Windows builds to align structs to 8 bytes instead of the # default of 16 bytes. There's this nice note in the documentation for that option: @@ -93,14 +105,34 @@ if (CESIUM_USE_UNREAL_TRACING) list(APPEND CESIUM_EXTRA_INCLUDES "${CMAKE_CURRENT_SOURCE_DIR}/include") endif() +# vcpkg setup +set(ENV{VCPKG_OVERLAY_PORTS} "${CMAKE_CURRENT_LIST_DIR}/vcpkg-overlays") +set(ENV{VCPKG_OVERLAY_TRIPLETS} "${CMAKE_CURRENT_LIST_DIR}/vcpkg-overlays/triplets") + +include(${CMAKE_CURRENT_SOURCE_DIR}/cesium-native/cmake/detect-vcpkg-triplet.cmake) + +if (NOT VCPKG_TRIPLET) + if (DEFINED ENV{VCPKG_TRIPLET}) + set(VCPKG_TRIPLET "$ENV{VCPKG_TRIPLET}") + elseif(DETECTED_VCPKG_TRIPLET_ERROR) + message(FATAL_ERROR "${DETECTED_VCPKG_TRIPLET_ERROR}") + else() + set(VCPKG_TRIPLET "${DETECTED_VCPKG_TRIPLET}-unreal") + endif() +endif() + +# Our OpenSSL is part of Unreal Engine, so need to install it. +set(CESIUM_EXCLUDE_INSTALL_HEADERS openssl) +set(CESIUM_EXCLUDE_INSTALL_STATIC_LIBS openssl) + add_subdirectory(cesium-native) # cesium-native doesn't require this header to be public, but Cesium for Unreal wants to use it. -install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/cesium-native/extern/stb/stb_image_resize.h TYPE INCLUDE) +#install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/cesium-native/extern/stb/stb_image_resize.h TYPE INCLUDE) -# Unreal Engine doesn't include MikkTSpace on Android. -# So add our own. if (ANDROID OR IOS) + # Unreal Engine doesn't include MikkTSpace on Android or iOS. + # So add our own. add_library(MikkTSpace MikkTSpace/mikktspace.c) set_target_properties(MikkTSpace PROPERTIES PUBLIC_HEADER "${CMAKE_CURRENT_SOURCE_DIR}/MikkTSpace/mikktspace.h") target_include_directories(MikkTSpace PUBLIC MikkTSpace) @@ -108,17 +140,15 @@ if (ANDROID OR IOS) LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} PUBLIC_HEADER DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/mikktspace ) - - if (IOS) - # ktx tags itself as a FRAMEWORK on iOS, which causes linker errors. Undo that. - set_target_properties(ktx PROPERTIES FRAMEWORK FALSE) - endif() endif() option(BUILD_SHARED_LIB OFF) -option( SUPPORT_CONSOLE_APP OFF) +option(SUPPORT_CONSOLE_APP OFF) set(LIB_INSTALL_DIR ${CMAKE_INSTALL_LIBDIR}) add_subdirectory(tidy-html5) # Don't build the cesium-native tests by default set_target_properties(cesium-native-tests PROPERTIES EXCLUDE_FROM_ALL 1 EXCLUDE_FROM_DEFAULT_BUILD 1) + +add_subdirectory(swl-variant) +install(DIRECTORY "${CMAKE_CURRENT_LIST_DIR}/swl-variant/include/" DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}) diff --git a/extern/cesium-native b/extern/cesium-native index 43187540a..21c03e2e7 160000 --- a/extern/cesium-native +++ b/extern/cesium-native @@ -1 +1 @@ -Subproject commit 43187540a5199d3b5fa8693fca90a1b81bf73c80 +Subproject commit 21c03e2e74f7970a9d06e75346e7d7012bf05cd7 diff --git a/extern/swl-variant b/extern/swl-variant new file mode 160000 index 000000000..8af20f431 --- /dev/null +++ b/extern/swl-variant @@ -0,0 +1 @@ +Subproject commit 8af20f43129ec66159eecd62a48eafdb7a2f74ca diff --git a/extern/unreal-android-toolchain.cmake b/extern/unreal-android-toolchain.cmake index bcb07302c..d798059d8 100644 --- a/extern/unreal-android-toolchain.cmake +++ b/extern/unreal-android-toolchain.cmake @@ -8,9 +8,9 @@ SET(CMAKE_ANDROID_STL_TYPE c++_shared) # search for programs in the build host directories SET(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) # for libraries and headers in the target directories -SET(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) -SET(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) -SET(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY) +SET(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY BOTH) +SET(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE BOTH) +SET(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE BOTH) SET(HTTPLIB_USE_OPENSSL_IF_AVAILABLE OFF) diff --git a/extern/unreal-ios-toolchain.cmake b/extern/unreal-ios-toolchain.cmake index 524c89e17..dc9120b7f 100644 --- a/extern/unreal-ios-toolchain.cmake +++ b/extern/unreal-ios-toolchain.cmake @@ -1,4 +1,9 @@ set(GENERATOR Xcode) set(CMAKE_SYSTEM_NAME iOS) set(CMAKE_OSX_ARCHITECTURES arm64) -set(CMAKE_POSITION_INDEPENDENT_CODE ON) \ No newline at end of file +set(CMAKE_SYSTEM_PROCESSOR arm64) +set(CMAKE_OSX_DEPLOYMENT_TARGET 15) +set(CMAKE_POSITION_INDEPENDENT_CODE ON) +SET(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY BOTH) +SET(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE BOTH) +SET(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE BOTH) diff --git a/extern/unreal-linux-toolchain.cmake b/extern/unreal-linux-toolchain.cmake index ef7c02796..b52fd39af 100644 --- a/extern/unreal-linux-toolchain.cmake +++ b/extern/unreal-linux-toolchain.cmake @@ -1,19 +1,22 @@ SET(CMAKE_SYSTEM_NAME Linux) SET(CMAKE_SYSTEM_PROCESSOR x86_64) -SET(CMAKE_SYSROOT $ENV{UNREAL_ENGINE_COMPILER_DIR}) +SET(CMAKE_SYSROOT "$ENV{UNREAL_ENGINE_COMPILER_DIR}") SET(CMAKE_C_COMPILER $ENV{UNREAL_ENGINE_COMPILER_DIR}/bin/clang) SET(CMAKE_CXX_COMPILER $ENV{UNREAL_ENGINE_COMPILER_DIR}/bin/clang++) +SET(CMAKE_AR $ENV{UNREAL_ENGINE_COMPILER_DIR}/bin/llvm-ar) SET(CMAKE_BUILD_WITH_INSTALL_RPATH on) SET(CMAKE_POSITION_INDEPENDENT_CODE on) -SET(CMAKE_CXX_FLAGS "-nostdinc++ -I$ENV{UNREAL_ENGINE_LIBCXX_DIR}/include -I$ENV{UNREAL_ENGINE_LIBCXX_DIR}/include/c++/v1 -I$ENV{UNREAL_ENGINE_LIBCXX_DIR}/include/c++/v1") +# These were deduced by scouring Unreal's LinuxToolChain.cs. +SET(CMAKE_C_FLAGS "-fvisibility-ms-compat -fvisibility-inlines-hidden") +SET(CMAKE_CXX_FLAGS "${CMAKE_C_FLAGS} -nostdinc++ -I$ENV{UNREAL_ENGINE_LIBCXX_DIR}/include -I$ENV{UNREAL_ENGINE_LIBCXX_DIR}/include/c++/v1 -target x86_64-unknown-linux-gnu") +SET(CMAKE_EXE_LINKER_FLAGS "-fuse-ld=lld -target x86_64-unknown-linux-gnu --sysroot=$ENV{UNREAL_ENGINE_COMPILER_DIR} -B$ENV{UNREAL_ENGINE_COMPILER_DIR}/usr/lib -B$ENV{UNREAL_ENGINE_COMPILER_DIR}/usr/lib64 -L$ENV{UNREAL_ENGINE_COMPILER_DIR}/usr/lib -L$ENV{UNREAL_ENGINE_COMPILER_DIR}/usr/lib64 -nodefaultlibs -L$ENV{UNREAL_ENGINE_LIBCXX_DIR}/lib/Unix/x86_64-unknown-linux-gnu/ $ENV{UNREAL_ENGINE_LIBCXX_DIR}/lib/Unix/x86_64-unknown-linux-gnu/libc++.a $ENV{UNREAL_ENGINE_LIBCXX_DIR}/lib/Unix/x86_64-unknown-linux-gnu/libc++abi.a -lm -lc -lpthread -lgcc_s -lgcc") # search for programs in the build host directories SET(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) # for libraries and headers in the target directories -SET(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) -SET(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) -SET(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY) - +SET(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY BOTH) +SET(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE BOTH) +SET(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE BOTH) diff --git a/extern/vcpkg-overlays/abseil/portfile.cmake b/extern/vcpkg-overlays/abseil/portfile.cmake new file mode 100644 index 000000000..69ec1f7bb --- /dev/null +++ b/extern/vcpkg-overlays/abseil/portfile.cmake @@ -0,0 +1,72 @@ +if(NOT VCPKG_TARGET_IS_WINDOWS) + vcpkg_check_linkage(ONLY_STATIC_LIBRARY) +endif() + +vcpkg_from_github( + OUT_SOURCE_PATH SOURCE_PATH + REPO abseil/abseil-cpp + REF "20240722.0" + SHA512 bd2cca8f007f2eee66f51c95a979371622b850ceb2ce3608d00ba826f7c494a1da0fba3c1427728f2c173fe50d59b701da35c2c9fdad2752a5a49746b1c8ef31 + HEAD_REF master +) + +# With ABSL_PROPAGATE_CXX_STD=ON abseil automatically detect if it is being +# compiled with C++14 or C++17, and modifies the installed `absl/base/options.h` +# header accordingly. This works even if CMAKE_CXX_STANDARD is not set. Abseil +# uses the compiler default behavior to update `absl/base/options.h` as needed. +set(ABSL_USE_CXX17_OPTION "") +if("cxx17" IN_LIST FEATURES) + set(ABSL_USE_CXX17_OPTION "-DCMAKE_CXX_STANDARD=17") +endif() + +set(ABSL_STATIC_RUNTIME_OPTION "") +if(VCPKG_TARGET_IS_WINDOWS AND VCPKG_CRT_LINKAGE STREQUAL "static") + set(ABSL_STATIC_RUNTIME_OPTION "-DABSL_MSVC_STATIC_RUNTIME=ON") +endif() + +# Don't let Abseil clobber our CMAKE_MSVC_RUNTIME_LIBRARY choice. +vcpkg_replace_string("${SOURCE_PATH}/CMakeLists.txt" "set(CMAKE_MSVC_RUNTIME_LIBRARY \"MultiThreaded$<$:Debug>DLL\")" "#set(CMAKE_MSVC_RUNTIME_LIBRARY \"MultiThreaded$<$:Debug>DLL\")") + +# Don't let our customized version of Abseil pose as the real thing. +vcpkg_replace_string("${SOURCE_PATH}/absl/base/options.h" "ABSL_OPTION_INLINE_NAMESPACE_NAME lts_20240722" "ABSL_OPTION_INLINE_NAMESPACE_NAME lts_20240722_cesium_for_unreal") +vcpkg_replace_string("${SOURCE_PATH}/absl/base/options.h" "ABSL_OPTION_USE_STD_ANY 2" "ABSL_OPTION_USE_STD_ANY 0") +vcpkg_replace_string("${SOURCE_PATH}/absl/base/options.h" "ABSL_OPTION_USE_STD_OPTIONAL 2" "ABSL_OPTION_USE_STD_OPTIONAL 0") +vcpkg_replace_string("${SOURCE_PATH}/absl/base/options.h" "ABSL_OPTION_USE_STD_STRING_VIEW 2" "ABSL_OPTION_USE_STD_STRING_VIEW 0") +vcpkg_replace_string("${SOURCE_PATH}/absl/base/options.h" "ABSL_OPTION_USE_STD_VARIANT 2" "ABSL_OPTION_USE_STD_VARIANT 0") +vcpkg_replace_string("${SOURCE_PATH}/absl/base/options.h" "ABSL_OPTION_USE_STD_ORDERING 2" "ABSL_OPTION_USE_STD_ORDERING 0") +vcpkg_replace_string("${SOURCE_PATH}/absl/base/config.h" "#define ABSL_LTS_RELEASE_VERSION 20240722" "//#define ABSL_LTS_RELEASE_VERSION 20240722") +vcpkg_replace_string("${SOURCE_PATH}/absl/base/config.h" "#define ABSL_LTS_RELEASE_PATCH_LEVEL 0" "//#define ABSL_LTS_RELEASE_PATCH_LEVEL 0") + +# Apply this patch to fix C++20 build with Android NDK r25 +# https://github.com/abseil/abseil-cpp/pull/1728 +vcpkg_replace_string("${SOURCE_PATH}/absl/time/time.h" "__cpp_impl_three_way_comparison" "__cpp_lib_three_way_comparison") +vcpkg_replace_string("${SOURCE_PATH}/absl/strings/cord.h" "__cpp_impl_three_way_comparison" "__cpp_lib_three_way_comparison") + +vcpkg_cmake_configure( + SOURCE_PATH "${SOURCE_PATH}" + DISABLE_PARALLEL_CONFIGURE + OPTIONS + -DABSL_PROPAGATE_CXX_STD=OFF + -DCMAKE_CXX_STANDARD=14 + ${ABSL_USE_CXX17_OPTION} + ${ABSL_STATIC_RUNTIME_OPTION} +) + +vcpkg_cmake_install() +vcpkg_cmake_config_fixup(PACKAGE_NAME absl CONFIG_PATH lib/cmake/absl) +vcpkg_fixup_pkgconfig() + +vcpkg_copy_pdbs() +file(REMOVE_RECURSE "${CURRENT_PACKAGES_DIR}/debug/share" + "${CURRENT_PACKAGES_DIR}/debug/include" + "${CURRENT_PACKAGES_DIR}/include/absl/copts" + "${CURRENT_PACKAGES_DIR}/include/absl/strings/testdata" + "${CURRENT_PACKAGES_DIR}/include/absl/time/internal/cctz/testdata" +) + +if(VCPKG_TARGET_IS_WINDOWS AND VCPKG_LIBRARY_LINKAGE STREQUAL "dynamic") + vcpkg_replace_string("${CURRENT_PACKAGES_DIR}/include/absl/base/config.h" "defined(ABSL_CONSUME_DLL)" "1") + vcpkg_replace_string("${CURRENT_PACKAGES_DIR}/include/absl/base/internal/thread_identity.h" "defined(ABSL_CONSUME_DLL)" "1") +endif() + +vcpkg_install_copyright(FILE_LIST "${SOURCE_PATH}/LICENSE") diff --git a/extern/vcpkg-overlays/abseil/vcpkg.json b/extern/vcpkg-overlays/abseil/vcpkg.json new file mode 100644 index 000000000..93c750579 --- /dev/null +++ b/extern/vcpkg-overlays/abseil/vcpkg.json @@ -0,0 +1,26 @@ +{ + "name": "abseil", + "version": "20240722.0-cesium-for-unreal", + "description": [ + "Abseil is an open-source collection of C++ library code designed to augment the C++ standard library. The Abseil library code is collected from Google's own C++ code base, has been extensively tested and used in production, and is the same code we depend on in our daily coding lives.", + "In some cases, Abseil provides pieces missing from the C++ standard; in others, Abseil provides alternatives to the standard for special needs we've found through usage in the Google code base. We denote those cases clearly within the library code we provide you.", + "Abseil is not meant to be a competitor to the standard library; we've just found that many of these utilities serve a purpose within our code base, and we now want to provide those resources to the C++ community as a whole." + ], + "homepage": "https://github.com/abseil/abseil-cpp", + "license": "Apache-2.0", + "dependencies": [ + { + "name": "vcpkg-cmake", + "host": true + }, + { + "name": "vcpkg-cmake-config", + "host": true + } + ], + "features": { + "cxx17": { + "description": "Enable compiler C++17." + } + } +} diff --git a/extern/vcpkg-overlays/asyncplusplus/portfile.cmake b/extern/vcpkg-overlays/asyncplusplus/portfile.cmake new file mode 100644 index 000000000..54b343b25 --- /dev/null +++ b/extern/vcpkg-overlays/asyncplusplus/portfile.cmake @@ -0,0 +1,21 @@ +vcpkg_check_linkage(ONLY_STATIC_LIBRARY) + +vcpkg_from_github( + OUT_SOURCE_PATH SOURCE_PATH + REPO Amanieu/asyncplusplus + REF 4159da79e20ad6d0eb1f13baa0f10e989edd9fba + SHA512 a7b099ce24184aa56e843d4858228196f8220374585a375a9c0d944832bd68c8aabd6b2efde5aacbb9c73f9dd8e942e97262be04550205b3fbea44d8b972d78e + HEAD_REF master +) + +vcpkg_cmake_configure( + SOURCE_PATH "${SOURCE_PATH}" +) + +vcpkg_cmake_install() + +vcpkg_cmake_config_fixup(CONFIG_PATH cmake PACKAGE_NAME async++) + +file(REMOVE_RECURSE "${CURRENT_PACKAGES_DIR}/debug/include" "${CURRENT_PACKAGES_DIR}/debug/share") + +file(INSTALL "${SOURCE_PATH}/LICENSE" DESTINATION "${CURRENT_PACKAGES_DIR}/share/${PORT}" RENAME copyright) diff --git a/extern/vcpkg-overlays/asyncplusplus/vcpkg.json b/extern/vcpkg-overlays/asyncplusplus/vcpkg.json new file mode 100644 index 000000000..6b5977655 --- /dev/null +++ b/extern/vcpkg-overlays/asyncplusplus/vcpkg.json @@ -0,0 +1,18 @@ +{ + "name": "asyncplusplus", + "version": "1.1", + "port-version": 2, + "description": "Async++ is a lightweight concurrency framework for C++11", + "license": "MIT", + "supports": "!uwp", + "dependencies": [ + { + "name": "vcpkg-cmake", + "host": true + }, + { + "name": "vcpkg-cmake-config", + "host": true + } + ] +} diff --git a/extern/vcpkg-overlays/ktx/0001-Use-vcpkg-zstd.patch b/extern/vcpkg-overlays/ktx/0001-Use-vcpkg-zstd.patch new file mode 100644 index 000000000..71a587bd6 --- /dev/null +++ b/extern/vcpkg-overlays/ktx/0001-Use-vcpkg-zstd.patch @@ -0,0 +1,122 @@ +diff --git a/CMakeLists.txt b/CMakeLists.txt +index 9a56491..d7ca937 100644 +--- a/CMakeLists.txt ++++ b/CMakeLists.txt +@@ -345,7 +345,6 @@ set(KTX_MAIN_SRC + lib/basisu/transcoder/basisu_transcoder.cpp + lib/basisu/transcoder/basisu_transcoder.h + lib/basisu/transcoder/basisu.h +- lib/basisu/zstd/zstd.c + lib/checkheader.c + lib/dfdutils/createdfd.c + lib/dfdutils/colourspaces.c +@@ -532,7 +531,6 @@ macro(common_libktx_settings target enable_write library_type) + $ + + $ +- $ + + $ + $ +@@ -627,6 +625,11 @@ macro(common_libktx_settings target enable_write library_type) + target_compile_definitions(${target} PUBLIC KTX_FEATURE_KTX2) + endif() + ++ # Use vcpkg zstd ++ find_package(zstd CONFIG REQUIRED) ++ set(ZSTD_LIBRARIES "$,zstd::libzstd_shared,zstd::libzstd_static>") ++ target_link_libraries(${target} PRIVATE ${ZSTD_LIBRARIES}) ++ + if(WIN32) + if(MINGW) + # Check if the Threads package is provided; if using Mingw it MIGHT be +diff --git a/cmake/KtxConfig.cmake b/cmake/KtxConfig.cmake +index 6386ba2..537bf4f 100644 +--- a/cmake/KtxConfig.cmake ++++ b/cmake/KtxConfig.cmake +@@ -1,7 +1,8 @@ + # Copyright 2015-2020 The Khronos Group Inc. + # SPDX-License-Identifier: Apache-2.0 + +-# include(CMakeFindDependencyMacro) +-# find_dependency() ++include(CMakeFindDependencyMacro) ++find_dependency(Threads) ++find_dependency(zstd CONFIG) + + include("${CMAKE_CURRENT_LIST_DIR}/KtxTargets.cmake") +diff --git a/lib/basisu/CMakeLists.txt b/lib/basisu/CMakeLists.txt +index 492233a..152ceb5 100644 +--- a/lib/basisu/CMakeLists.txt ++++ b/lib/basisu/CMakeLists.txt +@@ -145,9 +145,6 @@ set(BASISU_SRC_LIST ${COMMON_SRC_LIST} + transcoder/basisu_transcoder.cpp + ) + +-if (ZSTD) +- set(BASISU_SRC_LIST ${BASISU_SRC_LIST} zstd/zstd.c) +-endif() + + if (APPLE) + set(BIN_DIRECTORY "bin_osx") +@@ -165,6 +162,10 @@ else() + target_compile_definitions(basisu PRIVATE BASISD_SUPPORT_KTX2_ZSTD=0) + endif() + ++if(ZSTD_LIBRARIES) ++ target_link_libraries(basisu ${ZSTD_LIBRARIES}) ++endif() ++ + if (NOT MSVC) + # For Non-Windows builds, let cmake try and find the system OpenCL headers/libs for us. + if (OPENCL_FOUND) +diff --git a/lib/basisu/webgl/encoder/CMakeLists.txt b/lib/basisu/webgl/encoder/CMakeLists.txt +index 588d91b..a337b13 100644 +--- a/lib/basisu/webgl/encoder/CMakeLists.txt ++++ b/lib/basisu/webgl/encoder/CMakeLists.txt +@@ -34,9 +34,6 @@ if (EMSCRIPTEN) + ) + + if (KTX2_ZSTANDARD) +- set(SRC_LIST ${SRC_LIST} +- ../../zstd/zstd.c +- ) + set(ZSTD_DEFINITION BASISD_SUPPORT_KTX2_ZSTD=1) + else() + set(ZSTD_DEFINITION BASISD_SUPPORT_KTX2_ZSTD=0) +@@ -55,6 +52,10 @@ if (EMSCRIPTEN) + target_compile_options(basis_encoder.js PRIVATE -fno-strict-aliasing -O3) + + target_include_directories(basis_encoder.js PRIVATE ../../transcoder) ++ ++ if(ZSTD_LIBRARIES) ++ target_link_libraries(basis_encoder.js ${ZSTD_LIBRARIES}) ++ endif() + + set_target_properties(basis_encoder.js PROPERTIES + OUTPUT_NAME "basis_encoder" +diff --git a/lib/basisu/webgl/transcoder/CMakeLists.txt b/lib/basisu/webgl/transcoder/CMakeLists.txt +index 372653d..5ebc3cf 100644 +--- a/lib/basisu/webgl/transcoder/CMakeLists.txt ++++ b/lib/basisu/webgl/transcoder/CMakeLists.txt +@@ -28,9 +28,6 @@ if (EMSCRIPTEN) + endif() + + if (KTX2_ZSTANDARD) +- set(SRC_LIST ${SRC_LIST} +- ../../zstd/zstddeclib.c +- ) + set(ZSTD_DEFINITION BASISD_SUPPORT_KTX2_ZSTD=1) + else() + set(ZSTD_DEFINITION BASISD_SUPPORT_KTX2_ZSTD=0) +@@ -44,6 +41,10 @@ if (EMSCRIPTEN) + target_compile_definitions(basis_transcoder.js PRIVATE NDEBUG BASISD_SUPPORT_UASTC=1 BASISD_SUPPORT_BC7=1 BASISD_SUPPORT_ATC=0 BASISD_SUPPORT_ASTC_HIGHER_OPAQUE_QUALITY=0 BASISD_SUPPORT_PVRTC2=0 BASISD_SUPPORT_FXT1=0 BASISD_SUPPORT_ETC2_EAC_RG11=0 BASISU_SUPPORT_ENCODING=0 ${KTX2_DEFINITION} ${ZSTD_DEFINITION} ) + target_compile_options(basis_transcoder.js PRIVATE -O3 -fno-strict-aliasing) + target_include_directories(basis_transcoder.js PRIVATE ../../transcoder) ++ ++ if(ZSTD_LIBRARIES) ++ target_link_libraries(basis_transcoder.js ${ZSTD_LIBRARIES}) ++ endif() + + set_target_properties(basis_transcoder.js PROPERTIES + OUTPUT_NAME "basis_transcoder" diff --git a/extern/vcpkg-overlays/ktx/0002-Fix-versioning.patch b/extern/vcpkg-overlays/ktx/0002-Fix-versioning.patch new file mode 100644 index 000000000..1e5098806 --- /dev/null +++ b/extern/vcpkg-overlays/ktx/0002-Fix-versioning.patch @@ -0,0 +1,17 @@ +diff --git a/cmake/version.cmake b/cmake/version.cmake +index 4094df1a..3b2af3bb 100644 +--- a/cmake/version.cmake ++++ b/cmake/version.cmake +@@ -108,8 +108,10 @@ function(generate_version _var ) + set(${_var} "${KTX_VERSION}" PARENT_SCOPE) + endfunction() + +-# Get latest tag +-git_describe_raw(KTX_VERSION_FULL --abbrev=0 --match v[0-9]*) ++if (!KTX_VERSION_FULL) ++ # Get latest tag ++ git_describe_raw(KTX_VERSION_FULL --abbrev=0 --match v[0-9]*) ++endif() + #message("KTX full version: ${KTX_VERSION_FULL}") + + # generate_version(TOKTX_VERSION tools/toktx) diff --git a/extern/vcpkg-overlays/ktx/0003-mkversion.patch b/extern/vcpkg-overlays/ktx/0003-mkversion.patch new file mode 100644 index 000000000..ee8b3c4af --- /dev/null +++ b/extern/vcpkg-overlays/ktx/0003-mkversion.patch @@ -0,0 +1,13 @@ +diff --git a/cmake/version.cmake b/cmake/version.cmake +index 9a90622..0fc3521 100644 +--- a/cmake/version.cmake ++++ b/cmake/version.cmake +@@ -176,7 +176,7 @@ function( create_version_header dest_path target ) + add_custom_command( + OUTPUT ${version_h_output} + # On Windows this command has to be invoked by a shell in order to work +- COMMAND ${BASH_EXECUTABLE} -c "\"./mkversion\" \"-o\" \"version.h\" \"${dest_path}\"" ++ COMMAND "${BASH_EXECUTABLE}" -- ./mkversion -o version.h "${dest_path}" + WORKING_DIRECTORY ${PROJECT_SOURCE_DIR} + COMMENT "Generate ${version_h_output}" + VERBATIM diff --git a/extern/vcpkg-overlays/ktx/0004-quirks.patch b/extern/vcpkg-overlays/ktx/0004-quirks.patch new file mode 100644 index 000000000..afc34236d --- /dev/null +++ b/extern/vcpkg-overlays/ktx/0004-quirks.patch @@ -0,0 +1,21 @@ +diff --git a/CMakeLists.txt b/CMakeLists.txt +index 1500844..810914e 100644 +--- a/CMakeLists.txt ++++ b/CMakeLists.txt +@@ -263,7 +263,7 @@ if(MSVC) + # ";" argument separator is problematic. Can't use a GenEx `$:/WX> ) +- add_compile_options( $,/Gz,/O2> ) ++ add_compile_options( $,,/O2> ) + # Enable UTF-8 support + add_compile_options( $<$:/utf-8> ) + add_compile_options( $<$:/utf-8> ) +@@ -946,6 +946,7 @@ if(EMSCRIPTEN) + endif() + + add_library( objUtil STATIC ++ EXCLUDE_FROM_ALL + utils/argparser.cpp + utils/argparser.h + utils/ktxapp.h diff --git a/extern/vcpkg-overlays/ktx/0005-no-vendored-libs.patch b/extern/vcpkg-overlays/ktx/0005-no-vendored-libs.patch new file mode 100644 index 000000000..4c900225f --- /dev/null +++ b/extern/vcpkg-overlays/ktx/0005-no-vendored-libs.patch @@ -0,0 +1,17 @@ +diff --git a/CMakeLists.txt b/CMakeLists.txt +index e99fb143..0f69adf7 100644 +--- a/CMakeLists.txt ++++ b/CMakeLists.txt +@@ -1071,10 +1071,10 @@ endif() + if((KTX_FEATURE_TOOLS OR KTX_FEATURE_TESTS) AND NOT TARGET fmt::fmt) + set(FMT_INSTALL OFF) + set(FMT_SYSTEM_HEADERS ON) +- add_subdirectory(other_projects/fmt) ++ find_package(fmt CONFIG REQUIRED) + endif() + if(KTX_FEATURE_TOOLS AND NOT TARGET cxxopts::cxxopts) +- add_subdirectory(other_projects/cxxopts) ++ find_package(cxxopts CONFIG REQUIRED) + endif() + + # Tools diff --git a/extern/vcpkg-overlays/ktx/0006-fix-ios-install.patch b/extern/vcpkg-overlays/ktx/0006-fix-ios-install.patch new file mode 100644 index 000000000..0af3fea68 --- /dev/null +++ b/extern/vcpkg-overlays/ktx/0006-fix-ios-install.patch @@ -0,0 +1,22 @@ +diff --git a/CMakeLists.txt b/CMakeLists.txt +index e99fb143..072ea889 100644 +--- a/CMakeLists.txt ++++ b/CMakeLists.txt +@@ -489,7 +489,7 @@ macro(common_libktx_settings target enable_write library_type) + CXX_STANDARD_REQUIRED YES + + ) +- if(IOS) ++ if(0) + set_target_properties(${target} PROPERTIES + FRAMEWORK TRUE + ) +@@ -1145,7 +1145,7 @@ endif() + # Use of this to install KHR/khr_df.h is due to CMake's failure to + # preserve the include source folder hierarchy. + # See https://gitlab.kitware.com/cmake/cmake/-/issues/16739. +-if (IOS) ++if (0) + set_source_files_properties( + include/KHR/khr_df.h + PROPERTIES MACOSX_PACKAGE_LOCATION Headers/KHR diff --git a/extern/vcpkg-overlays/ktx/CESIUM-0001-do-not-define-_DEBUG.patch b/extern/vcpkg-overlays/ktx/CESIUM-0001-do-not-define-_DEBUG.patch new file mode 100644 index 000000000..d3c382566 --- /dev/null +++ b/extern/vcpkg-overlays/ktx/CESIUM-0001-do-not-define-_DEBUG.patch @@ -0,0 +1,13 @@ +diff --git a/CMakeLists.txt b/CMakeLists.txt +index ffcbe95..7b13753 100644 +--- a/CMakeLists.txt ++++ b/CMakeLists.txt +@@ -490,7 +490,7 @@ macro(common_libktx_settings target enable_write library_type) + target_compile_definitions( + ${target} + PUBLIC +- "$<$:_DEBUG;DEBUG>" ++ #"$<$:_DEBUG;DEBUG>" + PRIVATE + LIBKTX + ) diff --git a/extern/vcpkg-overlays/ktx/portfile.cmake b/extern/vcpkg-overlays/ktx/portfile.cmake new file mode 100644 index 000000000..887362c8f --- /dev/null +++ b/extern/vcpkg-overlays/ktx/portfile.cmake @@ -0,0 +1,82 @@ +vcpkg_from_git( + OUT_SOURCE_PATH SOURCE_PATH + URL "https://github.com/KhronosGroup/KTX-Software.git" + REF 91ace88675ac59a97e55d0378a6602a9ae6b98bd + FETCH_REF "v${VERSION}" + HEAD_REF main + PATCHES + 0001-Use-vcpkg-zstd.patch + 0002-Fix-versioning.patch + 0003-mkversion.patch + 0004-quirks.patch + 0005-no-vendored-libs.patch + 0006-fix-ios-install.patch + CESIUM-0001-do-not-define-_DEBUG.patch +) +file(REMOVE "${SOURCE_PATH}/other_include/zstd_errors.h") + +vcpkg_list(SET OPTIONS) +# if(VCPKG_TARGET_IS_WINDOWS) +# vcpkg_acquire_msys(MSYS_ROOT +# PACKAGES +# bash +# DIRECT_PACKAGES +# # Required for "getopt" +# "https://repo.msys2.org/msys/x86_64/util-linux-2.35.2-3-x86_64.pkg.tar.zst" +# da26540881cd5734072717133307e5d1a27a60468d3656885507833b80f24088c5382eaa0234b30bdd9e8484a6638b4514623f5327f10b19eed36f12158e8edb +# # Required for "dos2unix" +# "https://mirror.msys2.org/msys/x86_64/dos2unix-7.5.1-1-x86_64.pkg.tar.zst" +# 83d85e6ccea746ef9e8153a0d605e774dbe7efc0ee952804acfee4ffd7e3b0386a353b45ff989dd99bc3ce75968209fea3d246ad2af88bbb5c4eca12fc5a8f92 +# ) +# vcpkg_add_to_path("${MSYS_ROOT}/usr/bin") +# vcpkg_list(APPEND OPTIONS "-DBASH_EXECUTABLE=${MSYS_ROOT}/usr/bin/bash.exe") +# endif() + +string(COMPARE EQUAL "${VCPKG_LIBRARY_LINKAGE}" "static" ENABLE_STATIC) + +vcpkg_check_features(OUT_FEATURE_OPTIONS FEATURE_OPTIONS + FEATURES + tools KTX_FEATURE_TOOLS + vulkan KTX_FEATURE_VK_UPLOAD +) + +vcpkg_cmake_configure( + SOURCE_PATH "${SOURCE_PATH}" + OPTIONS + -DKTX_VERSION_FULL=v${VERSION} + -DKTX_FEATURE_TESTS=OFF + -DKTX_FEATURE_LOADTEST_APPS=OFF + -DKTX_FEATURE_STATIC_LIBRARY=${ENABLE_STATIC} + ${FEATURE_OPTIONS} + ${OPTIONS} + DISABLE_PARALLEL_CONFIGURE +) + +vcpkg_cmake_install() + +if(tools IN_LIST FEATURES) + vcpkg_copy_tools( + TOOL_NAMES + ktx + toktx + ktxsc + ktxinfo + ktx2ktx2 + ktx2check + AUTO_CLEAN + ) +else() + vcpkg_copy_pdbs() +endif() + +vcpkg_cmake_config_fixup(CONFIG_PATH lib/cmake/ktx) + +file(REMOVE_RECURSE "${CURRENT_PACKAGES_DIR}/debug/include") + +if(VCPKG_LIBRARY_LINKAGE STREQUAL "static") + file(REMOVE_RECURSE "${CURRENT_PACKAGES_DIR}/bin" "${CURRENT_PACKAGES_DIR}/debug/bin") +endif() + +file(GLOB LICENSE_FILES "${SOURCE_PATH}/LICENSES/*") +file(COPY ${LICENSE_FILES} DESTINATION "${CURRENT_PACKAGES_DIR}/share/${PORT}/LICENSES") +vcpkg_install_copyright(FILE_LIST "${SOURCE_PATH}/LICENSE.md") diff --git a/extern/vcpkg-overlays/ktx/vcpkg.json b/extern/vcpkg-overlays/ktx/vcpkg.json new file mode 100644 index 000000000..94eea841c --- /dev/null +++ b/extern/vcpkg-overlays/ktx/vcpkg.json @@ -0,0 +1,36 @@ +{ + "name": "ktx", + "version-semver": "4.3.2", + "description": [ + "The Khronos KTX library and tools.", + "Functions for writing and reading KTX files, and instantiating OpenGL®, OpenGL ES™️ and Vulkan® textures from them." + ], + "homepage": "https://github.com/KhronosGroup/KTX-Software", + "license": null, + "supports": "arm64 | x64 | !windows", + "dependencies": [ + { + "name": "vcpkg-cmake", + "host": true + }, + { + "name": "vcpkg-cmake-config", + "host": true + }, + "zstd" + ], + "features": { + "tools": { + "description": "Build tools", + "supports": "!android & !uwp", + "dependencies": [ + "cxxopts", + "fmt" + ] + }, + "vulkan": { + "description": "Build Vulkan support", + "supports": "!emscripten" + } + } +} diff --git a/extern/vcpkg-overlays/openssl/libcrypto.pc.in b/extern/vcpkg-overlays/openssl/libcrypto.pc.in new file mode 100644 index 000000000..7fef482f6 --- /dev/null +++ b/extern/vcpkg-overlays/openssl/libcrypto.pc.in @@ -0,0 +1,11 @@ +prefix=${pcfiledir}/../.. +exec_prefix=${prefix} +libdir=${exec_prefix}/lib +includedir=${prefix}/include +Version: 3.2.1 +Name: OpenSSL-libcrypto +Description: OpenSSL cryptography library + + +Libs: "-L${libdir}" -llibcrypto +Cflags: -I"${includedir}" diff --git a/extern/vcpkg-overlays/openssl/libssl.pc.in b/extern/vcpkg-overlays/openssl/libssl.pc.in new file mode 100644 index 000000000..065fae7e1 --- /dev/null +++ b/extern/vcpkg-overlays/openssl/libssl.pc.in @@ -0,0 +1,12 @@ +prefix=${pcfiledir}/../.. +exec_prefix=${prefix} +libdir=${exec_prefix}/lib +includedir=${prefix}/include +Version: 3.2.1 +Name: OpenSSL-libssl +Description: Secure Sockets Layer and cryptography libraries + + +Libs: "-L${libdir}" -llibssl +Requires: libcrypto +Cflags: -I"${includedir}" diff --git a/extern/vcpkg-overlays/openssl/openssl.pc.in b/extern/vcpkg-overlays/openssl/openssl.pc.in new file mode 100644 index 000000000..d78cbb78f --- /dev/null +++ b/extern/vcpkg-overlays/openssl/openssl.pc.in @@ -0,0 +1,10 @@ +prefix=${pcfiledir}/../.. +exec_prefix=${prefix} +libdir=${exec_prefix}/lib +includedir=${prefix}/include +Version: 3.2.1 +Name: OpenSSL +Description: Secure Sockets Layer and cryptography libraries and tools + + +Requires: libssl libcrypto diff --git a/extern/vcpkg-overlays/openssl/portfile.cmake b/extern/vcpkg-overlays/openssl/portfile.cmake new file mode 100644 index 000000000..1b2e50300 --- /dev/null +++ b/extern/vcpkg-overlays/openssl/portfile.cmake @@ -0,0 +1,84 @@ +# This port uses OpenSSL from Unreal Engine, instead of the normal vcpkg version. +# This is important for avoiding linker errors (multiply defined symbols) when +# building and packaging Unreal Engine games that include cesium-native. +# +# The environment variable `UNREAL_ENGINE_ROOT` must be set to the root of the +# Unreal Engine installation to use. It should use forward slashes even on Windows +# and it should _not_ end with a slash. +# For example: `C:/Program Files/Epic Games/UE_5.3` + +set(VCPKG_POLICY_EMPTY_PACKAGE enabled) + +if (NOT DEFINED ENV{UNREAL_ENGINE_ROOT}) + message(FATAL_ERROR "The environment variable `UNREAL_ENGINE_ROOT` must be defined.") +endif() + +message(STATUS "Using Unreal Engine installation at $ENV{UNREAL_ENGINE_ROOT}") + +# Some old versions of UE used to have multiple versions of OpenSSL, with different versions used on different platforms. +# That is no longer the case in UE 5.3, 5.4, and 5.5, but the below logic may need to change if that ever happens again. +set(OPENSSL_VERSIONS_DIR "$ENV{UNREAL_ENGINE_ROOT}/Engine/Source/ThirdParty/OpenSSL") +file(GLOB OPENSSL_POSSIBLE_ROOT_DIRS LIST_DIRECTORIES true "${OPENSSL_VERSIONS_DIR}/*") + +# Find the subdirectories, each of which should represent an OpenSSL version. +set(OPENSSL_VERSION_DIRS "") +foreach(OPENSSL_POSSIBLE_ROOT_DIR IN LISTS OPENSSL_POSSIBLE_ROOT_DIRS) + if(IS_DIRECTORY "${OPENSSL_POSSIBLE_ROOT_DIR}") + list(APPEND OPENSSL_VERSION_DIRS "${OPENSSL_POSSIBLE_ROOT_DIR}") + endif() +endforeach() + +# There should be exactly one version, otherwise we don't know what to do. +list(LENGTH OPENSSL_VERSION_DIRS OPENSSL_VERSION_DIRS_LENGTH) +if(NOT OPENSSL_VERSION_DIRS_LENGTH EQUAL 1) + message(FATAL_ERROR "Could not deduce the OpenSSL root directory because there is not exactly one directory matching `${OPENSSL_VERSIONS_DIR}/*`.") +endif() + +list(GET OPENSSL_VERSION_DIRS 0 OPENSSL_ROOT_DIR) + +if (VCPKG_TARGET_IS_ANDROID) + set(OPENSSL_INCLUDE_PATH "${OPENSSL_ROOT_DIR}/include/Android") + if (VCPKG_TARGET_ARCHITECTURE STREQUAL "x64") + set(OPENSSL_LIB_PATH "${OPENSSL_ROOT_DIR}/lib/Android/x64") + elseif (VCPKG_TARGET_ARCHITECTURE STREQUAL "arm64") + set(OPENSSL_LIB_PATH "${OPENSSL_ROOT_DIR}/lib/Android/ARM64") + else() + message(FATAL_ERROR "Unknown Unreal / OpenSSL paths for Android platform with architecture ${VCPKG_TARGET_ARCHITECTURE}.") + endif() +elseif (VCPKG_TARGET_IS_IOS) + set(OPENSSL_LIB_PATH "${OPENSSL_ROOT_DIR}/lib/IOS") + set(OPENSSL_INCLUDE_PATH "${OPENSSL_ROOT_DIR}/include/IOS") +elseif (VCPKG_TARGET_IS_OSX) + set(OPENSSL_LIB_PATH "${OPENSSL_ROOT_DIR}/lib/Mac") + set(OPENSSL_INCLUDE_PATH "${OPENSSL_ROOT_DIR}/include/Mac") +elseif (VCPKG_TARGET_IS_WINDOWS) + set(OPENSSL_INCLUDE_PATH "${OPENSSL_ROOT_DIR}/include/Win64/VS2015") + set(OPENSSL_LIB_PATH "${OPENSSL_ROOT_DIR}/lib/Win64/VS2015/Release") +elseif (VCPKG_TARGET_IS_LINUX) + if (VCPKG_TARGET_ARCHITECTURE STREQUAL "x64") + set(OPENSSL_PLATFORM "x86_64-unknown-linux-gnu") + elseif (VCPKG_TARGET_ARCHITECTURE STREQUAL "arm64") + set(OPENSSL_PLATFORM "aarch64-unknown-linux-gnueabi") + else() + message(FATAL_ERROR "Unknown Unreal / OpenSSL paths for Linux platform with architecture ${VCPKG_TARGET_ARCHITECTURE}.") + endif() + + set(OPENSSL_LIB_PATH "${OPENSSL_ROOT_DIR}/lib/Unix/${OPENSSL_PLATFORM}") + set(OPENSSL_INCLUDE_PATH "${OPENSSL_ROOT_DIR}/include/Unix") + + # UE 5.2 has a platform subdirectory under the OPENSSL_INCLUDE_PATH. + # UE 5.3 and 5.4 do not. Rather than check the UE version, we check for the existence of the + # openssl directory. + if (NOT EXISTS "${OPENSSL_INCLUDE_PATH}/openssl") + set(OPENSSL_INCLUDE_PATH "${OPENSSL_INCLUDE_PATH}/${OPENSSL_PLATFORM}") + endif() +else() + message(FATAL_ERROR "Unknown Unreal / OpenSSL paths for VCPKG_CMAKE_SYSTEM_NAME ${VCPKG_CMAKE_SYSTEM_NAME}.") +endif() + +file(INSTALL "${OPENSSL_LIB_PATH}/" DESTINATION "${CURRENT_PACKAGES_DIR}/lib") +file(INSTALL "${OPENSSL_INCLUDE_PATH}/" DESTINATION "${CURRENT_PACKAGES_DIR}/include") + +configure_file("${CMAKE_CURRENT_LIST_DIR}/libcrypto.pc.in" "${CURRENT_PACKAGES_DIR}/lib/pkgconfig/libcrypto.pc" @ONLY) +configure_file("${CMAKE_CURRENT_LIST_DIR}/libssl.pc.in" "${CURRENT_PACKAGES_DIR}/lib/pkgconfig/libssl.pc" @ONLY) +configure_file("${CMAKE_CURRENT_LIST_DIR}/openssl.pc.in" "${CURRENT_PACKAGES_DIR}/lib/pkgconfig/openssl.pc" @ONLY) diff --git a/extern/vcpkg-overlays/openssl/vcpkg.json b/extern/vcpkg-overlays/openssl/vcpkg.json new file mode 100644 index 000000000..7801b9e41 --- /dev/null +++ b/extern/vcpkg-overlays/openssl/vcpkg.json @@ -0,0 +1,5 @@ +{ + "name": "openssl", + "version": "0.0.0", + "port-version": 0 +} diff --git a/extern/vcpkg-overlays/sqlite3/CMakeLists.txt b/extern/vcpkg-overlays/sqlite3/CMakeLists.txt new file mode 100644 index 000000000..d4257841d --- /dev/null +++ b/extern/vcpkg-overlays/sqlite3/CMakeLists.txt @@ -0,0 +1,81 @@ +cmake_minimum_required(VERSION 3.10) + +project(sqlite3 C) + +option(WITH_ZLIB "Build sqlite3 with zlib support" OFF) +option(SQLITE3_SKIP_TOOLS "Disable build sqlite3 executable" OFF) + +set(PKGCONFIG_LIBS_PRIVATE "") + +add_library(sqlite3 sqlite3.c sqlite3.rc) + +target_include_directories(sqlite3 PUBLIC $ $) + +target_compile_definitions( + sqlite3 + PRIVATE + $<$:SQLITE_DEBUG=1> + $<$:SQLITE_ENABLE_SELECTTRACE> + $<$:SQLITE_ENABLE_WHERETRACE> + $<$:RC_VERONLY> +) + +if (BUILD_SHARED_LIBS) + if (WIN32) + target_compile_definitions(sqlite3 PRIVATE "SQLITE_API=__declspec(dllexport)") + else() + target_compile_definitions(sqlite3 PRIVATE "SQLITE_API=__attribute__((visibility(\"default\")))") + endif() +endif() + +if (NOT WIN32) + find_package(Threads REQUIRED) + target_link_libraries(sqlite3 PRIVATE Threads::Threads ${CMAKE_DL_LIBS}) + string(APPEND PKGCONFIG_LIBS_PRIVATE " -pthread") + foreach(LIB IN LISTS CMAKE_DL_LIBS) + string(APPEND PKGCONFIG_LIBS_PRIVATE " -l${LIB}") + endforeach() + + if(SQLITE_ENABLE_FTS5 OR SQLITE_ENABLE_MATH_FUNCTIONS) + find_library(HAVE_LIBM m) + if(HAVE_LIBM) + target_link_libraries(sqlite3 PRIVATE m) + string(APPEND PKGCONFIG_LIBS_PRIVATE " -lm") + endif() + endif() +endif() + +if(NOT SQLITE3_SKIP_TOOLS) + add_executable(sqlite3-bin shell.c) + set_target_properties(sqlite3-bin PROPERTIES + OUTPUT_NAME sqlite3 + PDB_NAME "sqlite3${CMAKE_EXECUTABLE_SUFFIX}.pdb" + ) + + target_link_libraries(sqlite3-bin PRIVATE sqlite3) + if (WITH_ZLIB) + find_package(ZLIB REQUIRED) + target_link_libraries(sqlite3-bin PRIVATE ZLIB::ZLIB) + target_compile_definitions(sqlite3-bin PRIVATE SQLITE_HAVE_ZLIB) + endif() + + install(TARGETS sqlite3-bin sqlite3 + RUNTIME DESTINATION bin + LIBRARY DESTINATION lib + ARCHIVE DESTINATION lib + ) +endif() + +install( + TARGETS sqlite3 + EXPORT unofficial-sqlite3-targets + RUNTIME DESTINATION bin + LIBRARY DESTINATION lib + ARCHIVE DESTINATION lib +) + +install(FILES sqlite3.h sqlite3ext.h cesium_sqlite3-vcpkg-config.h DESTINATION include CONFIGURATIONS Release) +install(EXPORT unofficial-sqlite3-targets NAMESPACE unofficial::sqlite3:: FILE unofficial-sqlite3-targets.cmake DESTINATION share/unofficial-sqlite3) + +configure_file(sqlite3.pc.in sqlite3.pc @ONLY) +install(FILES "${CMAKE_CURRENT_BINARY_DIR}/sqlite3.pc" DESTINATION "${CMAKE_INSTALL_PREFIX}/lib/pkgconfig") diff --git a/extern/vcpkg-overlays/sqlite3/add-config-include.patch b/extern/vcpkg-overlays/sqlite3/add-config-include.patch new file mode 100644 index 000000000..7942c9cf3 --- /dev/null +++ b/extern/vcpkg-overlays/sqlite3/add-config-include.patch @@ -0,0 +1,24 @@ +diff --git a/sqlite3.c b/sqlite3.c +index a1fbd60..68a4e21 100644 +--- a/sqlite3.c ++++ b/sqlite3.c +@@ -22,6 +22,7 @@ + */ + #define SQLITE_CORE 1 + #define SQLITE_AMALGAMATION 1 ++#include "sqlite3-vcpkg-config.h" + #ifndef SQLITE_PRIVATE + # define SQLITE_PRIVATE static + #endif +diff --git a/sqlite3.h b/sqlite3.h +index 0376113..271cf53 100644 +--- a/sqlite3.h ++++ b/sqlite3.h +@@ -32,6 +32,7 @@ + */ + #ifndef SQLITE3_H + #define SQLITE3_H ++#include "sqlite3-vcpkg-config.h" + #include /* Needed for the definition of va_list */ + + /* diff --git a/extern/vcpkg-overlays/sqlite3/fix-arm-uwp.patch b/extern/vcpkg-overlays/sqlite3/fix-arm-uwp.patch new file mode 100644 index 000000000..03e092965 --- /dev/null +++ b/extern/vcpkg-overlays/sqlite3/fix-arm-uwp.patch @@ -0,0 +1,33 @@ +diff --git a/shell.c b/shell.c +index 10d8cc1..99f37a5 100644 +--- a/shell.c ++++ b/shell.c +@@ -316,7 +316,11 @@ static int hasTimer(void){ + */ + hProcess = GetCurrentProcess(); + if( hProcess ){ ++#if !defined(WINAPI_FAMILY) || (WINAPI_FAMILY == WINAPI_FAMILY_DESKTOP_APP) + HINSTANCE hinstLib = LoadLibrary(TEXT("Kernel32.dll")); ++#else ++ HINSTANCE hinstLib = LoadPackagedLibrary(TEXT("Kernel32.dll"), 0); ++#endif + if( NULL != hinstLib ){ + getProcessTimesAddr = + (GETPROCTIMES) GetProcAddress(hinstLib, "GetProcessTimes"); +@@ -2437,10 +2441,16 @@ static int writeFile( + if( zUnicodeName==0 ){ + return 1; + } ++#if !defined(WINAPI_FAMILY) || (WINAPI_FAMILY == WINAPI_FAMILY_DESKTOP_APP) + hFile = CreateFileW( + zUnicodeName, FILE_WRITE_ATTRIBUTES, 0, NULL, OPEN_EXISTING, + FILE_FLAG_BACKUP_SEMANTICS, NULL + ); ++#else ++ hFile = CreateFile2( ++ zUnicodeName, FILE_WRITE_ATTRIBUTES, 0, OPEN_EXISTING, NULL ++ ); ++#endif + sqlite3_free(zUnicodeName); + if( hFile!=INVALID_HANDLE_VALUE ){ + BOOL bResult = SetFileTime(hFile, NULL, &lastAccess, &lastWrite); diff --git a/extern/vcpkg-overlays/sqlite3/portfile.cmake b/extern/vcpkg-overlays/sqlite3/portfile.cmake new file mode 100644 index 000000000..f58848155 --- /dev/null +++ b/extern/vcpkg-overlays/sqlite3/portfile.cmake @@ -0,0 +1,104 @@ +string(REGEX REPLACE "^([0-9]+)[.]([0-9]+)[.]([0-9]+)[.]([0-9]+)" "\\1,0\\2,0\\3,0\\4," SQLITE_VERSION "${VERSION}.0") +string(REGEX REPLACE "^([0-9]+),0*([0-9][0-9]),0*([0-9][0-9]),0*([0-9][0-9])," "\\1\\2\\3\\4" SQLITE_VERSION "${SQLITE_VERSION}") + +vcpkg_download_distfile(ARCHIVE + URLS "https://sqlite.org/2024/sqlite-autoconf-${SQLITE_VERSION}.tar.gz" + FILENAME "sqlite-autoconf-${SQLITE_VERSION}.zip" + SHA512 40ae9ba1dea234aacfecf44a6b1c0713c24348d8d475503c11f1d92ed2fffb54a765bbd0669f39aa09d20f42cbcfac4dedcf7e64f4421b8762eebfc66399aa9a +) + +vcpkg_extract_source_archive( + SOURCE_PATH + ARCHIVE "${ARCHIVE}" + PATCHES + fix-arm-uwp.patch + add-config-include.patch +) + +if(VCPKG_LIBRARY_LINKAGE STREQUAL "dynamic") + if(VCPKG_TARGET_IS_WINDOWS) + set(SQLITE_API "__declspec(dllimport)") + else() + set(SQLITE_API "__attribute__((visibility(\"default\")))") + endif() +else() + set(SQLITE_API "") +endif() + +vcpkg_check_features(OUT_FEATURE_OPTIONS FEATURE_OPTIONS + FEATURES + fts5 SQLITE_ENABLE_FTS5 + math SQLITE_ENABLE_MATH_FUNCTIONS + zlib WITH_ZLIB + INVERTED_FEATURES + tool SQLITE3_SKIP_TOOLS +) +vcpkg_check_features(OUT_FEATURE_OPTIONS none # only using the script-mode side-effects + FEATURES + dbstat SQLITE_ENABLE_DBSTAT_VTAB + fts3 SQLITE_ENABLE_FTS3 + fts4 SQLITE_ENABLE_FTS4 + memsys3 SQLITE_ENABLE_MEMSYS3 + memsys5 SQLITE_ENABLE_MEMSYS5 + limit SQLITE_ENABLE_UPDATE_DELETE_LIMIT + rtree SQLITE_ENABLE_RTREE + session SQLITE_ENABLE_SESSION + session SQLITE_ENABLE_PREUPDATE_HOOK + omit-load-extension SQLITE_OMIT_LOAD_EXTENSION + geopoly SQLITE_ENABLE_GEOPOLY + soundex SQLITE_SOUNDEX + INVERTED_FEATURES + json1 SQLITE_OMIT_JSON +) + +if(VCPKG_TARGET_IS_WINDOWS) + set(SQLITE_OS_WIN "1") + if(VCPKG_TARGET_IS_UWP) + set(SQLITE_OS_WINRT "1") + endif() +else() + set(SQLITE_OS_UNIX "1") +endif() + +file(COPY "${CMAKE_CURRENT_LIST_DIR}/CMakeLists.txt" DESTINATION "${SOURCE_PATH}") +file(COPY "${CMAKE_CURRENT_LIST_DIR}/sqlite3.pc.in" DESTINATION "${SOURCE_PATH}") +configure_file("${CMAKE_CURRENT_LIST_DIR}/sqlite3-vcpkg-config.h.in" "${SOURCE_PATH}/cesium_sqlite3-vcpkg-config.h" @ONLY) + +vcpkg_replace_string("${SOURCE_PATH}/sqlite3.c" "sqlite3" "cesium_sqlite3") +vcpkg_replace_string("${SOURCE_PATH}/shell.c" "sqlite3" "cesium_sqlite3") +vcpkg_replace_string("${SOURCE_PATH}/sqlite3.h" "sqlite3" "cesium_sqlite3") +vcpkg_replace_string("${SOURCE_PATH}/sqlite3ext.h" "sqlite3" "cesium_sqlite3") +vcpkg_replace_string("${SOURCE_PATH}/sqlite3rc.h" "sqlite3" "cesium_sqlite3") + +vcpkg_cmake_configure( + SOURCE_PATH "${SOURCE_PATH}" + OPTIONS + ${FEATURE_OPTIONS} + -DPKGCONFIG_VERSION=${VERSION} + OPTIONS_DEBUG + -DSQLITE3_SKIP_TOOLS=ON + MAYBE_UNUSED_VARIABLES + SQLITE_ENABLE_FTS5 + SQLITE_ENABLE_MATH_FUNCTIONS +) + +vcpkg_cmake_install() +vcpkg_cmake_config_fixup(PACKAGE_NAME unofficial-${PORT} CONFIG_PATH share/unofficial-${PORT}) + +file(REMOVE_RECURSE "${CURRENT_PACKAGES_DIR}/debug/share") + +if("tool" IN_LIST FEATURES) + vcpkg_copy_tools(TOOL_NAMES sqlite3 DESTINATION "${CURRENT_PACKAGES_DIR}/tools" AUTO_CLEAN) +endif() + +configure_file( + "${CMAKE_CURRENT_LIST_DIR}/sqlite3-config.in.cmake" + "${CURRENT_PACKAGES_DIR}/share/unofficial-${PORT}/unofficial-sqlite3-config.cmake" + @ONLY +) + +vcpkg_fixup_pkgconfig() +vcpkg_copy_pdbs() + +file(WRITE "${CURRENT_PACKAGES_DIR}/share/${PORT}/copyright" "SQLite is in the Public Domain.\nhttp://www.sqlite.org/copyright.html\n") +file(INSTALL "${CMAKE_CURRENT_LIST_DIR}/usage" DESTINATION "${CURRENT_PACKAGES_DIR}/share/${PORT}") diff --git a/extern/vcpkg-overlays/sqlite3/sqlite3-config.in.cmake b/extern/vcpkg-overlays/sqlite3/sqlite3-config.in.cmake new file mode 100644 index 000000000..c98d03082 --- /dev/null +++ b/extern/vcpkg-overlays/sqlite3/sqlite3-config.in.cmake @@ -0,0 +1,7 @@ + +if(NOT WIN32) + include(CMakeFindDependencyMacro) + find_dependency(Threads) +endif() + +include(${CMAKE_CURRENT_LIST_DIR}/unofficial-sqlite3-targets.cmake) diff --git a/extern/vcpkg-overlays/sqlite3/sqlite3-vcpkg-config.h.in b/extern/vcpkg-overlays/sqlite3/sqlite3-vcpkg-config.h.in new file mode 100644 index 000000000..f3705bf50 --- /dev/null +++ b/extern/vcpkg-overlays/sqlite3/sqlite3-vcpkg-config.h.in @@ -0,0 +1,29 @@ +/* + * This file was generated to inject vcpkg feature selections into the installed copy of + * sqlite so that consumers need not get the values from pkgconfig or CMake configs. + * + * No include guard: intentionally reuses the include guard from sqlite3.h. + */ + +#ifndef SQLITE_API +#cmakedefine SQLITE_API @SQLITE_API@ +#endif + +#define SQLITE_ENABLE_UNLOCK_NOTIFY 1 +#cmakedefine SQLITE_ENABLE_FTS3 +#cmakedefine SQLITE_ENABLE_FTS4 +#cmakedefine SQLITE_ENABLE_FTS5 +#cmakedefine SQLITE_ENABLE_MEMSYS3 +#cmakedefine SQLITE_ENABLE_MEMSYS5 +#cmakedefine SQLITE_ENABLE_MATH_FUNCTIONS +#cmakedefine SQLITE_ENABLE_UPDATE_DELETE_LIMIT +#cmakedefine SQLITE_ENABLE_RTREE +#cmakedefine SQLITE_ENABLE_SESSION +#cmakedefine SQLITE_ENABLE_PREUPDATE_HOOK +#cmakedefine SQLITE_OMIT_LOAD_EXTENSION +#cmakedefine SQLITE_ENABLE_GEOPOLY +#cmakedefine SQLITE_OMIT_JSON +#cmakedefine SQLITE_OS_WIN @SQLITE_OS_WIN@ +#cmakedefine SQLITE_OS_WINRT @SQLITE_OS_WINRT@ +#define SQLITE_ENABLE_COLUMN_METADATA 1 +#cmakedefine SQLITE_OS_UNIX @SQLITE_OS_UNIX@ diff --git a/extern/vcpkg-overlays/sqlite3/sqlite3.pc.in b/extern/vcpkg-overlays/sqlite3/sqlite3.pc.in new file mode 100644 index 000000000..d265632d1 --- /dev/null +++ b/extern/vcpkg-overlays/sqlite3/sqlite3.pc.in @@ -0,0 +1,11 @@ +prefix=@CMAKE_INSTALL_PREFIX@ +exec_prefix=${prefix} +libdir=${prefix}/lib +includedir=${prefix}/include + +Name: SQLite +Description: SQL database engine +Version: @PKGCONFIG_VERSION@ +Libs: -L${libdir} -lsqlite3 +Libs.private: @PKGCONFIG_LIBS_PRIVATE@ +Cflags: -I${includedir} diff --git a/extern/vcpkg-overlays/sqlite3/usage b/extern/vcpkg-overlays/sqlite3/usage new file mode 100644 index 000000000..7f79c6d46 --- /dev/null +++ b/extern/vcpkg-overlays/sqlite3/usage @@ -0,0 +1,5 @@ +sqlite3 provides pkgconfig bindings. +sqlite3 provides CMake targets: + + find_package(unofficial-sqlite3 CONFIG REQUIRED) + target_link_libraries(main PRIVATE unofficial::sqlite3::sqlite3) diff --git a/extern/vcpkg-overlays/sqlite3/vcpkg.json b/extern/vcpkg-overlays/sqlite3/vcpkg.json new file mode 100644 index 000000000..fe6ec5256 --- /dev/null +++ b/extern/vcpkg-overlays/sqlite3/vcpkg.json @@ -0,0 +1,74 @@ +{ + "name": "sqlite3", + "version": "3.45.0", + "description": "SQLite is a software library that implements a self-contained, serverless, zero-configuration, transactional SQL database engine.", + "homepage": "https://sqlite.org/", + "license": "blessing", + "dependencies": [ + { + "name": "vcpkg-cmake", + "host": true + }, + { + "name": "vcpkg-cmake-config", + "host": true + } + ], + "default-features": [ + "json1" + ], + "features": { + "dbstat": { + "description": "Enable the DBSTAT virtual table" + }, + "fts3": { + "description": "Enable the FTS3 extension" + }, + "fts4": { + "description": "Enable the FTS4 extension" + }, + "fts5": { + "description": "Enable the FTS5 extension" + }, + "geopoly": { + "description": "Enable geopoly functionality for sqlite3" + }, + "json1": { + "description": "Enable JSON functionality for sqlite3" + }, + "limit": { + "description": "Enable the UPDATE/DELETE LIMIT clause" + }, + "math": { + "description": "Enable math functions" + }, + "memsys3": { + "description": "Enable MEMSYS3" + }, + "memsys5": { + "description": "Enable MEMSYS5" + }, + "omit-load-extension": { + "description": "Enable loading of external extensions" + }, + "rtree": { + "description": "Enable the RTREE extension" + }, + "session": { + "description": "Enable the SESSION extension" + }, + "soundex": { + "description": "Enable the SOUNDEX scalar function" + }, + "tool": { + "description": "Build sqlite3 executable", + "supports": "!uwp" + }, + "zlib": { + "description": "Build sqlite3 command line tool with zlib support; has no effect on the library itself", + "dependencies": [ + "zlib" + ] + } + } +} diff --git a/extern/vcpkg-overlays/stb/FindStb.cmake b/extern/vcpkg-overlays/stb/FindStb.cmake new file mode 100644 index 000000000..4ffa8b1ff --- /dev/null +++ b/extern/vcpkg-overlays/stb/FindStb.cmake @@ -0,0 +1,29 @@ +# Distributed under the OSI-approved BSD 3-Clause License. + +#.rst: +# FindStb +# ------------ +# +# Find the Stb include headers. +# +# Result Variables +# ^^^^^^^^^^^^^^^^ +# +# This module defines the following variables: +# +# ``Stb_FOUND`` +# True if Stb library found +# +# ``Stb_INCLUDE_DIR`` +# Location of Stb headers +# + +include(${CMAKE_ROOT}/Modules/FindPackageHandleStandardArgs.cmake) +include(${CMAKE_ROOT}/Modules/SelectLibraryConfigurations.cmake) + +if(NOT Stb_INCLUDE_DIR) + find_path(Stb_INCLUDE_DIR NAMES stb_image.h PATHS ${Stb_DIR} PATH_SUFFIXES include) +endif() + +find_package_handle_standard_args(Stb DEFAULT_MSG Stb_INCLUDE_DIR) +mark_as_advanced(Stb_INCLUDE_DIR) diff --git a/extern/vcpkg-overlays/stb/portfile.cmake b/extern/vcpkg-overlays/stb/portfile.cmake new file mode 100644 index 000000000..5f3935029 --- /dev/null +++ b/extern/vcpkg-overlays/stb/portfile.cmake @@ -0,0 +1,19 @@ +vcpkg_from_github( + OUT_SOURCE_PATH SOURCE_PATH + REPO nothings/stb + REF f75e8d1cad7d90d72ef7a4661f1b994ef78b4e31 # committed on 2024-07-29 + SHA512 4a733aefb816a366c999663e3d482144616721b26c321ee5dd0dce611a34050b6aef97d46bd2c4f8a9631d83b097491a7ce88607fd9493d880aaa94567a68cce + HEAD_REF master +) + +file(GLOB HEADER_FILES "${SOURCE_PATH}/*.h" "${SOURCE_PATH}/stb_vorbis.c") +file(COPY ${HEADER_FILES} DESTINATION "${CURRENT_PACKAGES_DIR}/include") + +file(INSTALL "${CMAKE_CURRENT_LIST_DIR}/FindStb.cmake" DESTINATION "${CURRENT_PACKAGES_DIR}/share/${PORT}") +file(INSTALL "${CMAKE_CURRENT_LIST_DIR}/vcpkg-cmake-wrapper.cmake" DESTINATION "${CURRENT_PACKAGES_DIR}/share/${PORT}") +file(INSTALL "${CMAKE_CURRENT_LIST_DIR}/usage" DESTINATION "${CURRENT_PACKAGES_DIR}/share/${PORT}") + +vcpkg_install_copyright(FILE_LIST "${SOURCE_PATH}/LICENSE") + +# Even when told to create static symbols, STB creates two symbols globally, which breaks packaging in UE 5.4. Fix that. +vcpkg_replace_string("${CURRENT_PACKAGES_DIR}/include/stb_image_resize2.h" "STBIR__SIMDI_CONST(stbir__s" "STBIRDEF STBIR__SIMDI_CONST(stbir__s") diff --git a/extern/vcpkg-overlays/stb/usage b/extern/vcpkg-overlays/stb/usage new file mode 100644 index 000000000..ac75766bf --- /dev/null +++ b/extern/vcpkg-overlays/stb/usage @@ -0,0 +1,4 @@ +The package stb provides CMake targets: + + find_package(Stb REQUIRED) + target_include_directories(main PRIVATE ${Stb_INCLUDE_DIR}) \ No newline at end of file diff --git a/extern/vcpkg-overlays/stb/vcpkg-cmake-wrapper.cmake b/extern/vcpkg-overlays/stb/vcpkg-cmake-wrapper.cmake new file mode 100644 index 000000000..e787d29f0 --- /dev/null +++ b/extern/vcpkg-overlays/stb/vcpkg-cmake-wrapper.cmake @@ -0,0 +1,6 @@ +set(STB_PREV_MODULE_PATH ${CMAKE_MODULE_PATH}) +list(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_LIST_DIR}) + +_find_package(${ARGS}) + +set(CMAKE_MODULE_PATH ${STB_PREV_MODULE_PATH}) diff --git a/extern/vcpkg-overlays/stb/vcpkg.json b/extern/vcpkg-overlays/stb/vcpkg.json new file mode 100644 index 000000000..07b7d65b1 --- /dev/null +++ b/extern/vcpkg-overlays/stb/vcpkg.json @@ -0,0 +1,8 @@ +{ + "name": "stb", + "version-date": "2024-07-29", + "port-version": 1, + "description": "public domain header-only libraries", + "homepage": "https://github.com/nothings/stb", + "license": "MIT OR CC-PDDC" +} diff --git a/extern/vcpkg-overlays/triplets/arm64-android-unreal.cmake b/extern/vcpkg-overlays/triplets/arm64-android-unreal.cmake new file mode 100644 index 000000000..b524359ac --- /dev/null +++ b/extern/vcpkg-overlays/triplets/arm64-android-unreal.cmake @@ -0,0 +1,14 @@ +include("${CMAKE_CURRENT_LIST_DIR}/shared/common.cmake") + +set(VCPKG_TARGET_ARCHITECTURE arm64) +set(VCPKG_CRT_LINKAGE dynamic) +set(VCPKG_LIBRARY_LINKAGE static) +set(VCPKG_CMAKE_SYSTEM_NAME Android) +set(VCPKG_MAKE_BUILD_TRIPLET "--host=aarch64-linux-android") +set(VCPKG_CMAKE_CONFIGURE_OPTIONS -DANDROID_ABI=arm64-v8a) +set(VCPKG_CMAKE_SYSTEM_VERSION 21) + +# From Unreal Build Tool: +# https://github.com/EpicGames/UnrealEngine/blob/5.3.2-release/Engine/Source/Programs/UnrealBuildTool/Platform/Android/AndroidToolChain.cs +set(VCPKG_CXX_FLAGS "-fvisibility=hidden -fvisibility-inlines-hidden") +set(VCPKG_C_FLAGS "${VCPKG_CXX_FLAGS}") diff --git a/extern/vcpkg-overlays/triplets/arm64-ios-unreal.cmake b/extern/vcpkg-overlays/triplets/arm64-ios-unreal.cmake new file mode 100644 index 000000000..b9b971070 --- /dev/null +++ b/extern/vcpkg-overlays/triplets/arm64-ios-unreal.cmake @@ -0,0 +1,12 @@ +include("${CMAKE_CURRENT_LIST_DIR}/shared/common.cmake") + +set(VCPKG_TARGET_ARCHITECTURE arm64) +set(VCPKG_CRT_LINKAGE dynamic) +set(VCPKG_LIBRARY_LINKAGE static) +set(VCPKG_CMAKE_SYSTEM_NAME iOS) +set(VCPKG_OSX_DEPLOYMENT_TARGET 15) + +# From Unreal Build Tool: +# https://github.com/EpicGames/UnrealEngine/blob/5.3.2-release/Engine/Source/Programs/UnrealBuildTool/Platform/IOS/IOSToolChain.cs +set(VCPKG_CXX_FLAGS "-fvisibility=hidden") +set(VCPKG_C_FLAGS "${VCPKG_CXX_FLAGS}") diff --git a/extern/vcpkg-overlays/triplets/arm64-osx-unreal.cmake b/extern/vcpkg-overlays/triplets/arm64-osx-unreal.cmake new file mode 100644 index 000000000..8b28c5c70 --- /dev/null +++ b/extern/vcpkg-overlays/triplets/arm64-osx-unreal.cmake @@ -0,0 +1,3 @@ +include("${CMAKE_CURRENT_LIST_DIR}/shared/osx-common.cmake") +set(VCPKG_TARGET_ARCHITECTURE arm64) +set(VCPKG_OSX_ARCHITECTURES arm64) diff --git a/extern/vcpkg-overlays/triplets/shared/common.cmake b/extern/vcpkg-overlays/triplets/shared/common.cmake new file mode 100644 index 000000000..f9e550b77 --- /dev/null +++ b/extern/vcpkg-overlays/triplets/shared/common.cmake @@ -0,0 +1,5 @@ +set(VCPKG_ENV_PASSTHROUGH "UNREAL_ENGINE_ROOT") + +if(DEFINED ENV{CESIUM_VCPKG_RELEASE_ONLY} AND "$ENV{CESIUM_VCPKG_RELEASE_ONLY}") + set(VCPKG_BUILD_TYPE "release") +endif() diff --git a/extern/vcpkg-overlays/triplets/shared/osx-common.cmake b/extern/vcpkg-overlays/triplets/shared/osx-common.cmake new file mode 100644 index 000000000..8875156f3 --- /dev/null +++ b/extern/vcpkg-overlays/triplets/shared/osx-common.cmake @@ -0,0 +1,11 @@ +include("${CMAKE_CURRENT_LIST_DIR}/common.cmake") + +set(VCPKG_CMAKE_SYSTEM_NAME Darwin) +set(VCPKG_CRT_LINKAGE dynamic) +set(VCPKG_LIBRARY_LINKAGE static) +set(VCPKG_OSX_DEPLOYMENT_TARGET 10.15) + +# From Unreal Build Tool: +# https://github.com/EpicGames/UnrealEngine/blob/5.3.2-release/Engine/Source/Programs/UnrealBuildTool/Platform/Mac/MacToolChain.cs +set(VCPKG_CXX_FLAGS "-fvisibility-ms-compat -fvisibility-inlines-hidden") +set(VCPKG_C_FLAGS "${VCPKG_CXX_FLAGS}") diff --git a/extern/vcpkg-overlays/triplets/x64-linux-unreal.cmake b/extern/vcpkg-overlays/triplets/x64-linux-unreal.cmake new file mode 100644 index 000000000..052db2469 --- /dev/null +++ b/extern/vcpkg-overlays/triplets/x64-linux-unreal.cmake @@ -0,0 +1,8 @@ +include("${CMAKE_CURRENT_LIST_DIR}/shared/common.cmake") + +set(VCPKG_TARGET_ARCHITECTURE x64) +set(VCPKG_CRT_LINKAGE dynamic) +set(VCPKG_LIBRARY_LINKAGE static) + +set(VCPKG_CMAKE_SYSTEM_NAME Linux) +set(VCPKG_CHAINLOAD_TOOLCHAIN_FILE ${CMAKE_CURRENT_LIST_DIR}/../../unreal-linux-toolchain.cmake) diff --git a/extern/vcpkg-overlays/triplets/x64-osx-unreal.cmake b/extern/vcpkg-overlays/triplets/x64-osx-unreal.cmake new file mode 100644 index 000000000..2b1af43ff --- /dev/null +++ b/extern/vcpkg-overlays/triplets/x64-osx-unreal.cmake @@ -0,0 +1,3 @@ +include("${CMAKE_CURRENT_LIST_DIR}/shared/osx-common.cmake") +set(VCPKG_TARGET_ARCHITECTURE x64) +set(VCPKG_OSX_ARCHITECTURES x86_64) diff --git a/extern/vcpkg-overlays/triplets/x64-windows-unreal.cmake b/extern/vcpkg-overlays/triplets/x64-windows-unreal.cmake new file mode 100644 index 000000000..cb2a5b2b5 --- /dev/null +++ b/extern/vcpkg-overlays/triplets/x64-windows-unreal.cmake @@ -0,0 +1,46 @@ +include("${CMAKE_CURRENT_LIST_DIR}/shared/common.cmake") + +set(VCPKG_TARGET_ARCHITECTURE x64) +set(VCPKG_CRT_LINKAGE dynamic) +set(VCPKG_LIBRARY_LINKAGE static) +set(VCPKG_ENV_PASSTHROUGH "UNREAL_ENGINE_ROOT") +set(VCPKG_POLICY_ONLY_RELEASE_CRT enabled) + +# Unreal Engine adds /Zp8 in 64-bit Windows builds to align structs to 8 bytes instead of the +# default of 16 bytes. There's this nice note in the documentation for that option: +# Don't change the setting from the default when you include the Windows SDK headers, either +# by using /Zp on the command line or by using #pragma pack. Otherwise, your application may +# cause memory corruption at runtime. +# (https://docs.microsoft.com/en-us/cpp/build/reference/zp-struct-member-alignment?view=msvc-160) +# Yeah that's not just the Windows SDK, but anything that passes structs across the boundary +# between compilation units using different versions of that flag. We compile cesium-native +# with this same option to avoid super-dodgy and hard to debug issues. +# https://github.com/EpicGames/UnrealEngine/blob/5.3.2-release/Engine/Source/Programs/UnrealBuildTool/Platform/Windows/VCToolChain.cs +set(VCPKG_CXX_FLAGS "/Zp8") +set(VCPKG_C_FLAGS "${VCPKG_CXX_FLAGS}") + +# Use an unreasonable amount of force to replace /MDd (MultiThreadedDebugDLL) with /MD (MultiThreadedDLL) +# and ensure that `_DEBUG` is not defined, as required by Unreal Engine's use of the release runtime library. +# Only CMAKE_MSVC_RUNTIME_LIBRARY would be required if all our third-party libraries used CMake 3.15+, but alas. +set(VCPKG_CMAKE_CONFIGURE_OPTIONS "") +list(APPEND VCPKG_CMAKE_CONFIGURE_OPTIONS "-DCMAKE_MSVC_RUNTIME_LIBRARY:STRING=MultiThreadedDLL") +list(APPEND VCPKG_CMAKE_CONFIGURE_OPTIONS "-DCMAKE_CXX_FLAGS_DEBUG:STRING=/MD /Z7 /Ob0 /Od /RTC1") +list(APPEND VCPKG_CMAKE_CONFIGURE_OPTIONS "-DCMAKE_C_FLAGS_DEBUG:STRING=/MD /Z7 /Ob0 /Od /RTC1") + +# When building official binaries on CI, use a very specific MSVC toolset version (which must be installed). +# When building locally, use the default. +if(DEFINED ENV{CI}) + # Toolset version should be 14.38 on UE 5.5+, 14.34 on prior versions. + set(VCPKG_PLATFORM_TOOLSET_VERSION "14.34") + + set(UNREAL_ENGINE_BUILD_VERSION_FILENAME "$ENV{UNREAL_ENGINE_ROOT}/Engine/Build/Build.version") + if(EXISTS "${UNREAL_ENGINE_BUILD_VERSION_FILENAME}") + file(READ "${UNREAL_ENGINE_BUILD_VERSION_FILENAME}" UNREAL_ENGINE_BUILD_VERSION) + string(JSON UNREAL_MAJOR_VERSION GET "${UNREAL_ENGINE_BUILD_VERSION}" "MajorVersion") + string(JSON UNREAL_MINOR_VERSION GET "${UNREAL_ENGINE_BUILD_VERSION}" "MinorVersion") + if("${UNREAL_MAJOR_VERSION}" GREATER "5" OR "${UNREAL_MINOR_VERSION}" GREATER_EQUAL "5") + # This is UE 5.5+, so use MSVC 14.38. + set(VCPKG_PLATFORM_TOOLSET_VERSION "14.38") + endif() + endif() +endif() diff --git a/extern/vcpkg-overlays/zlib-ng/portfile.cmake b/extern/vcpkg-overlays/zlib-ng/portfile.cmake new file mode 100644 index 000000000..ec705c042 --- /dev/null +++ b/extern/vcpkg-overlays/zlib-ng/portfile.cmake @@ -0,0 +1,36 @@ +vcpkg_from_github( + OUT_SOURCE_PATH SOURCE_PATH + REPO zlib-ng/zlib-ng + REF "${VERSION}" + SHA512 59ef586c09b9a63788475abfd6dd59ed602316b38f543f801bea802ff8bec8b55a89bee90375b8bbffa3bdebc7d92a00903f4b7c94cdc1a53a36e2e1fd71d13a + HEAD_REF develop +) + +vcpkg_cmake_configure( + SOURCE_PATH "${SOURCE_PATH}" + OPTIONS + "-DZLIB_FULL_VERSION=${ZLIB_FULL_VERSION}" + -DZLIB_ENABLE_TESTS=OFF + -DWITH_NEW_STRATEGIES=ON + # Disable ARMv6 instructions. We don't need this because we only run on 64-bit ARM (v8), + # which has better instructions. zlib-ng has a bug that makes it try to use these v6 + # instructions even though they're not available. An attempt to fix it was made in this + # PR: https://github.com/zlib-ng/zlib-ng/pull/1617 + # But it doesn't work in our Android builds because the dependent option + # "NOT ARCH STREQUAL \"aarch64\"" that is meant to set `WITH_ARMV6` to FALSE is not + # triggered because our ARCH is `aarch64-none-linux-android21`. It's not clear if this + # is something quirky about our environment or if the fix is just not robust. + # Either way, forcing WITH_ARMV6=OFF here fixes the problem and should be reasonable + # on all platforms that Cesium for Unreal supports. + -DWITH_ARMV6=OFF + OPTIONS_RELEASE + -DWITH_OPTIM=ON +) +vcpkg_cmake_install() +vcpkg_copy_pdbs() +vcpkg_fixup_pkgconfig() + +file(REMOVE_RECURSE "${CURRENT_PACKAGES_DIR}/debug/share" + "${CURRENT_PACKAGES_DIR}/debug/include" +) +vcpkg_install_copyright(FILE_LIST "${SOURCE_PATH}/LICENSE.md") diff --git a/extern/vcpkg-overlays/zlib-ng/vcpkg.json b/extern/vcpkg-overlays/zlib-ng/vcpkg.json new file mode 100644 index 000000000..93df3a2d2 --- /dev/null +++ b/extern/vcpkg-overlays/zlib-ng/vcpkg.json @@ -0,0 +1,13 @@ +{ + "name": "zlib-ng", + "version": "2.1.6", + "description": "zlib replacement with optimizations for 'next generation' systems", + "homepage": "https://github.com/zlib-ng/zlib-ng", + "license": "Zlib", + "dependencies": [ + { + "name": "vcpkg-cmake", + "host": true + } + ] +} diff --git a/package-lock.json b/package-lock.json index d1873851a..236d77d73 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,27 +1,28 @@ { "name": "cesium-unreal", - "version": "2.4.0", + "version": "2.11.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "cesium-unreal", - "version": "2.4.0", + "version": "2.11.0", "license": "Apache-2.0", "devDependencies": { - "clang-format": "^1.5.0" + "clang-format": "^1.5.0", + "doxygen-awesome-css": "https://github.com/jothepro/doxygen-awesome-css#v2.3.4" } }, "node_modules/async": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", - "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=", + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.6.tgz", + "integrity": "sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==", "dev": true }, "node_modules/balanced-match": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", "dev": true }, "node_modules/brace-expansion": { @@ -35,12 +36,12 @@ } }, "node_modules/clang-format": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/clang-format/-/clang-format-1.5.0.tgz", - "integrity": "sha512-C1LucFX7E+ABVYcPEbBHM4PYQ2+WInXsqsLpFlQ9cmRfSbk7A7b1I06h/nE4bQ3MsyEkb31jY2gC0Dtc76b4IA==", + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/clang-format/-/clang-format-1.8.0.tgz", + "integrity": "sha512-pK8gzfu55/lHzIpQ1givIbWfn3eXnU7SfxqIwVgnn5jEM6j4ZJYjpFqFs4iSBPNedzRMmfjYjuQhu657WAXHXw==", "dev": true, "dependencies": { - "async": "^1.5.2", + "async": "^3.2.3", "glob": "^7.0.0", "resolve": "^1.1.6" }, @@ -53,31 +54,42 @@ "node_modules/concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", "dev": true }, + "node_modules/doxygen-awesome-css": { + "name": "@jothepro/doxygen-awesome-css", + "version": "2.3.4", + "resolved": "git+ssh://git@github.com/jothepro/doxygen-awesome-css.git#568f56cde6ac78b6dfcc14acd380b2e745c301ea", + "dev": true, + "license": "MIT" + }, "node_modules/fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", "dev": true }, "node_modules/function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "dev": true + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, "node_modules/glob": { - "version": "7.1.6", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", - "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", "dev": true, "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", "inherits": "2", - "minimatch": "^3.0.4", + "minimatch": "^3.1.1", "once": "^1.3.0", "path-is-absolute": "^1.0.0" }, @@ -88,22 +100,23 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", "dev": true, "dependencies": { - "function-bind": "^1.1.1" + "function-bind": "^1.1.2" }, "engines": { - "node": ">= 0.4.0" + "node": ">= 0.4" } }, "node_modules/inflight": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", "dev": true, "dependencies": { "once": "^1.3.0", @@ -117,12 +130,15 @@ "dev": true }, "node_modules/is-core-module": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.2.0.tgz", - "integrity": "sha512-XRAfAdyyY5F5cOXn7hYQDqh2Xmii+DEfIcQGxK/uNwMHhIkPWO0g8msXcbzLe+MpGoR951MlqM/2iIlU4vKDdQ==", + "version": "2.15.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.15.1.tgz", + "integrity": "sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ==", "dev": true, "dependencies": { - "has": "^1.0.3" + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -143,7 +159,7 @@ "node_modules/once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", "dev": true, "dependencies": { "wrappy": "1" @@ -152,26 +168,42 @@ "node_modules/path-is-absolute": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", "dev": true, "engines": { "node": ">=0.10.0" } }, "node_modules/path-parse": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", - "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", "dev": true }, "node_modules/resolve": { - "version": "1.20.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", - "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", + "version": "1.22.8", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", + "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", "dev": true, "dependencies": { - "is-core-module": "^2.2.0", - "path-parse": "^1.0.6" + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -180,7 +212,7 @@ "node_modules/wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", "dev": true } } diff --git a/package.json b/package.json index 148f4e8e4..c21a969ff 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "cesium-unreal", - "version": "2.6.0", + "version": "2.13.3", "description": "Cesium for Unreal", "main": "index.js", "directories": { @@ -26,6 +26,7 @@ }, "homepage": "https://github.com/CesiumGS/cesium-unreal#readme", "devDependencies": { - "clang-format": "^1.5.0" + "clang-format": "^1.5.0", + "doxygen-awesome-css": "https://github.com/jothepro/doxygen-awesome-css#v2.3.4" } }